PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Inputs vom Mega16; ich kann sie nicht auslesen



x8r
25.05.2008, 23:20
Hi,
ich habe ein komisches Problem mit dem Mega16. Ich möchte



$regfile = "m16def.dat"
$crystal = 8000000
...
Config Porta.4 = Input
...
Config Portb.4 = Input
Config Portb.6 = Input
...
Config Adc = Single , Prescaler = Auto , Reference = Avcc
...
Enter Alias Porta.4
Plus Alias Portb.4
Minus Alias Portb.6


Do
Cls
If Enter = 0 Then
Locate 1 , 1
Lcd "Enter"
End If
If Plus = 0 Then
Locate 1 , 8
Lcd "plus"
endif
If Minus = 0 Then
Locate 2 , 1
Lcd "minus"
endif
Waitms 100
Loop



Die dre Eingänge, die von Pull-Up-Widerständen auf 5V hoch gezogen werden, sind mit Taster nach GND verbunden. Allerdings reagiert das Programm darauf nicht, es liest nur dauerhaft 0 ein.
Wenn ich die Spannung am Pin messe, ist diese auch Null, auch wenn die Taster nicht gedrückt sind. Daher gehe ich davon aus, dass irgendweswegen eine Null am Pin ausgegeben wird.

Kann es an den ConfigBits liegen? Wenn ja, an welchen?
Oder leigt es daran, dass ich den ADC des PortA verwende?

Schonmal Danke für eure Hilfe!
Gruß
Jan

for_ro
26.05.2008, 00:38
Config Porta.4 = Input
Enter Alias Porta.4

If Enter = 0 Then


Einlesen musst du die Anschlüsse mit Pinx.y, also schreib mal

Enter Alias Pina.4

Dann klappt's.

Gruß

Rolf

linux_80
26.05.2008, 00:39
Hallo,

bevor ich mir alles durchlese,
Eingägen liest man mit PinA.4 ein, nicht mit PortA.4 !

x8r
26.05.2008, 14:49
Hi,
ihr habt mich schon ein riesen Stück weiter gebracht! Jetzt funktioniert es bei fast allen Inputs. Nur PinB.4 funktioniert noch nicht, hier wird dauerhaft eine 0 eingelesen. Laut Datenblatt kann dieser Pin auch als Slave Select Input(SS) verwendet werden.
Auszug aus dem Datenblatt:


• SS – Port B, Bit 4
SS: Slave Select input. When the SPI is enabled as a Slave, this pin is configured as an
input regardless of the setting of DDB4. As a Slave, the SPI is activated when this pin is
driven low. When the SPI is enabled as a Master, the data direction of this pin is controlled
by DDB4. When the pin is forced by the SPI to be an input, the pull-up can still be
controlled by the PORTB4 bit.

Da ich den SPI nicht verwende, müsste ich ihn dann doch ganz normal als Input/Output benutzen können?! Oder muss der SPI vielleicht disabled weren? Aber selbst wenn der SPI irgendweswegen enabled ist, sollte PinB.4 als Input definiert sein, denn : "When the SPI is enabled as a Slave, this pin is configured as an
input regardless of the setting of DDB4."

Habt ihr eine Idee?

Gruß
Jan

x8r
26.05.2008, 18:22
Hat keiner eine Idee woran es liegen kann?

Gruß
Jan

PicNick
26.05.2008, 19:08
Wenn du SPI nicht ausdrücklich einschaltest, ist PinB.4 genauso normal wie alle anderen.
Schau mal mit dem Multimeter (am Atmega), ob das Pull-uppen auch funktioniert. Vielleicht ist ja irgendwo ein Kontaktfehler

x8r
26.05.2008, 19:13
Hi,
hier nochmal der Code, mit dem es immernoch nicht funktioniert.
Alle Tasten, bis auf "plus", werden korrekt eingelesen und auf dem lcd ausgegeben.


Config Porta.4 = Input
Config Portb.4 = Input
Config Portb.6 = Input
Config Portd.4 = Input
Config Portd.5 = Input
Config Portb.7 = Input


Enter Alias Pina.4 'panel
Plus Alias Pinb.4
Minus Alias Pinb.6
Spritze1anschlag Alias Pind.5 'spritzen
Spritze2anschlag Alias Pind.4
Dampffertig Alias Pinb.7

Do
Cls
If Enter = 0 Then
Locate 1 , 1
Lcd "Enter"
End If

If Plus = 0 Then
Locate 1 , 7
Lcd "plus"
End If

If Minus = 0 Then
Locate 1 , 12
Lcd "minus"
End If

If Spritze1anschlag = 0 Then
Locate 2 , 1
Lcd "dru1"
End If

If Spritze2anschlag = 0 Then
Locate 2 , 6
Lcd "dru2"
End If

If Dampffertig = 0 Then
Locate 2 , 11
Lcd "dampf"
End If

Waitms 100
Loop


Danke für eure Hilfe!

Gruß
Jan

x8r
26.05.2008, 19:17
Hi Robert,
die Hardware habe ich mehrmals überprüft. Der Controller scheint, genauso wie auch vorher bei den anderen Pins, den PinB.4 auf GND zu ziehen. Ich habe immer eine Null anliegen, der Pull-up ist aber ganz sicher verbunden.
Irgendwesewegen scheint der Controller den Pin.4 als ausgang gesetzt zu haben und gibt eine null aus.

Gruß
Jan

x8r
26.05.2008, 19:50
So, habe endlich den "Fehler" gefunden, wobei mir überhaupt nicht klar ist, ob das nen fehler von mir oder nen Bug von Bascom ist.
Nachdem ich das DDRB beschrieben habe, geht es endlich:

"DDRb = &B00101011"

Danke für eure Hilfe!
Gruß
Jan