PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kleines I/O-Problem



RCO
08.11.2004, 20:43
Ich habe ein kleines I/O-Problem mit meinen AT90S2313. Ich habe auf dem AVR das unten stehende Programm, aber wie ich den PD5 auch verschalte, er liefert mir entweder keine Werte, oder die die ich durch Reset oder Set setze. Daher einige Fragen:

DDRD = 11111111 würde doch alle PDs als Eingänge setzen, oder?
Set/Reset damit können Pullups/downs eingestellt werde.
Was ist am Code Falsch?



' LCD-KRAM steht hier
ddrd = 00111100 'portd.5 fällt noch unter eingänge
Rein Alias Portd.5


Do
Home

If Rein = 1 Then
Lcd "Ein"
End If

If Rein = 0 Then
Lcd "Aus"
End If

Waitms 200 'kleine Pause, sonst erkennt man aufm LCd nix
Loop

MFG Moritz

Michael
08.11.2004, 21:00
Hallo RCO,


DDRD = 11111111 würde doch alle PDs als Eingänge setzen, oder?

nein, DDRD = &B00000000 setzt alle Ports als Eingänge.
DDRD = &B00100000 setzt z.B. PortD.5 als Ausgang.
Gruß, Michael

RCO
08.11.2004, 21:04
OK, das hab ich jetzt auch ruasgefunden, neues Script:


Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portb.0 , Db6 = Portb.1 , Db7 = Portb.2 , E = Portb.3 , Rs = Portb.4 ' Natürlich so wie es wirklich angeschlossen ist (4-Bit-Modus)
Config Lcd = 16 * 2
Initlcd
Display On
Cursor Off
Cls '0 = Eingang
Ddrd = &B01000000 '&B D7.......D0
Rein Alias Portd.2
Do
Home
If Rein = 1 Then
Lcd "Ein"
End If
If Rein = 0 Then
Lcd "Aus"
End If
Waitms 200
Loop

Ich hab jetzt mal das Set weggelassen, es tut sich nix!
MFG Moritz

Michael
08.11.2004, 21:08
Hallo RCO,
erstens muß es heißen:
Rein Alias Pind.2
und dann solltest du den Pullup einschalten:
Portd.2 = 1
und dann mit
Do
weiter.
Gruß, Michael

RCO
08.11.2004, 21:18
Ich verzweifel, nicht mal das klappt:


Ddrd = 00100000
Portd.5 = 0
Do
Portd.5 = Portd.4
loop

MFG Moritz

LuK-AS
08.11.2004, 21:21
Ich schliesse mich Michael an, es muss zuerst mal der Pullup eingeschaltet werden mit Portd.5=1 dann grundsätzlich bei Eingängen an einzelnen Ports mit "Pind.5" abfragen:

Config Portd = Output
Config Pind.5 = Input

if pind.5=0 then
LCD "Ein"
end if

Also Eingang immer mit "PINx.y"

Gruss Clemens

RCO
08.11.2004, 21:30
OK habs jetzt so gemacht:


Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portb.0 , Db6 = Portb.1 , Db7 = Portb.2 , E = Portb.3 , Rs = Portb.4
Config Lcd = 16 * 2
Initlcd
Display On
Cursor Off
Cls
Config Portd = Output
Config Pind.5 = Input
Portd.5 = 1

'#######
'Loop
'#######
Do
Home
If Portd.5 = 1 Then
Lcd "Ein"
Else
Lcd "Aus"
End If
Waitms 200
Loop
End

Es muss irgendwas grundsetzliches sein, ich denke nicht, dass es sonst nie klappen würde, aber es muss och ausreichen, wenn ich den Pin über ein Kabel an +5V bzw. GND lege, oder?

MFG Moritz

LuK-AS
08.11.2004, 21:35
Do
Home
If Pind.5 = 0 Then ' ganz wichtig PIN nicht PORT !!!
Lcd "Ein"
Else
Lcd "Aus"
End If
Waitms 200
Loop

EDIT: es muss ja Pind.5=0 heissen du schaltest ja gegen gnd

RCO
08.11.2004, 21:39
NNNNNNNNNNEEEEEEEEEEEIIIIIIIIIIIINNNNNNNNN


If Pind.5 = 0 Then ' ganz wichtig PIN nicht PORT !!!


Danke [-o<

MFG Moritz

LuK-AS
08.11.2004, 21:43
:) :) :) :) :D