PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit ADC und digitalen Eingängen an Port B und D



Manuel1980
27.12.2007, 20:22
Hallo zusammen

Ich habe erst kürzlich angefangen in die Bascom Programierung für die Atmel Prozesoren einzusteigen.

Ich habe einen ATMega32, schreibe die Programme in Bascom und nutze Ponyprog2000 als Prommer-Tool.

Einfache digitale E/A Programme klappen soweit ganz gut.
Jetzt habe ich mich an die analogen Eingänge gewagt.
Ich habe einen Spannungsteiler mit 10k Poti an Pin PA0 angeschlossen und habe über den Befehl x=GETADC(0) auch schon Werte einlsesen können. Über Vergleiche von Constanten mit dem gelesenen Analogwert habe ich dann an Port C verschiedene LEDs angesprochen.Soweit so gut...

Jetzt wollte ich aber in disesm Programm auch digitale Eingänge nutzen.
Da Port D noch komplett frei ist wollte ich Pin PD7 nutzen um an PC7 eine LED anzusprechen. Aber der Pin PD7 reagiert nicht als Eingang.
Ich habe auch schon diverse andere Pins von Port D und B probiert....keiner geht.
Ohne den ADC gehen sie aber....könnt ihr mir weiterhelfen?

hier noch mein Code:



$regfile = "m32def.dat" ' we use the M32
$crystal = 8000000

Config Adc = Single , Prescaler = Auto , Reference = Internal
'Ausgangs/Eingangsport deklarieren
Config Portc = Output
Config PortD = Input
'Ausgangs/Eingangsport auf Pull-UP
Portc = 255
Portd = 255

'Now give power to the chip
Start Adc

'Variablendeklaration
Dim W As Word

'Programmschleife
Do
' Analogwert vom Channel PA0 einlesen
W = Getadc(0)

'Auswertung wie hoch der Pegel ist und anschließenden
'Aktivierung der dementsprechenen LEDs
If W > 100 Then
Portc.0 = 0
Else
Portc.0 = 1
End If

If W > 200 Then
Portc.1 = 0
Else
Portc.1 = 1
End If

If W > 300 Then
Portc.2 = 0
Else
Portc.2 = 1
End If

If W > 400 Then
Portc.3 = 0
Else
Portc.3 = 1
End If

If W > 500 Then
Portc.4 = 0
Else
Portc.4 = 1
End If

If W > 600 Then
Portc.5 = 0
Else
Portc.5 = 1
End If

If W > 700 Then
Portc.6 = 0
Else
Portc.6 = 1
End If

If portd.7 = 0 Then
Portc.7 = 0
Else
Portc.7 = 1
End If

Loop

End


Ich hoffe ich habe meinen ersten Beitrag ordentlich verfasst und ihr könnt mir weiterhelfen.

Gruß Manuel

linux_80
27.12.2007, 20:53
Hallo,

wie hast Du den Schalter am Eingang angeschlossen ?

So wie das Programm ausschaut, muss der Schalter auf Vcc sein (oder garkeine Verbindung) wenn nix gedrückt ist, und auf Masse ziehen, wenn er gedrückt ist.

Oder lass mal das PortD = 255 weg, wenn der Schalter anders angeschlossen ist, dann kanns aber sein das der Eingang zum flattern anfängt !

Ausserdem frägt man Eingänge mit PinX ab nicht mit PortX ;-)

Manuel1980
27.12.2007, 21:26
Der Schalter ist auf Masse angeschlossen. und wenn ich ihn betätige dann messe ich auch dass er auf masse liegt. Das problem ist ja schon das das der Befehl Portd = 255 gar keine wirkung zeigt...normal sollte dann ja Hi-Potential am Pin anliegen bis der Schalter gedrücket wird und den Pin gen Masse zieht.

Portd = 255 habe ich auch schon mal weggelassen.

Ich werds morgen aber mal mit VCC probieren und Pinx abfrage statt Portx.

Danke für den Tip. Werd das morgen nochmal gründlich ausprobieren.

Aber prinzipiell gehts....einen binären I/O abzufragen/zuzuweißen wenn der ADC aktieviert ist oder?

Ich meld mich morgen mit Ergebnissen...

Gruß Manuel

Manuel1980
28.12.2007, 21:09
Hallo

Jetzt funktioniert es, ich habe den falschen Befehl benutzt.
mit PINx funktioniert es...auch wenn der ADC aktiviert ist.

Ich hatte leider nicht viel Zeit weiterzutesten, aber am Wochenende gehts weiter, und dann probier ich auch mal die Komunikation mit RS232 über MAX232 aus.

Nochmals vielen Dank Linux_80 O:)