- LiTime Speicher und Akkus         
Ergebnis 1 bis 10 von 10

Thema: Kleines I/O-Problem

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674

    Kleines I/O-Problem

    Anzeige

    Praxistest und DIY Projekte
    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?

    Code:
    ' 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

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    54
    Beiträge
    1.258
    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

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    OK, das hab ich jetzt auch ruasgefunden, neues Script:

    Code:
    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

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    54
    Beiträge
    1.258
    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

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Ich verzweifel, nicht mal das klappt:

    Code:
    Ddrd = 00100000
    Portd.5 = 0
    Do
    Portd.5 = Portd.4
    loop
    MFG Moritz

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.11.2003
    Ort
    Langen / Hessen
    Alter
    58
    Beiträge
    393
    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

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    OK habs jetzt so gemacht:

    Code:
    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

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.11.2003
    Ort
    Langen / Hessen
    Alter
    58
    Beiträge
    393
    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

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    NNNNNNNNNNEEEEEEEEEEEIIIIIIIIIIIINNNNNNNNN
    If Pind.5 = 0 Then ' ganz wichtig PIN nicht PORT !!!
    Danke [-o<

    MFG Moritz

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.11.2003
    Ort
    Langen / Hessen
    Alter
    58
    Beiträge
    393

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus