-         

Ergebnis 1 bis 8 von 8

Thema: Eingänge funktionieren nicht

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    01.07.2005
    Beiträge
    64

    Eingänge funktionieren nicht

    Anzeige

    Hallo,

    ich hab ein Problem mit den Eingängen meines Atmega8. Immer wenn ich meine, dass ich den Zustand des Eingangs prüfe, scheint er nicht den richtigen Zustand zu erkennen. Das ganze hab ich dann nochmal in einem einfachen Taster-Programm geprüft:

    Code:
    #include <avr/io.h>
    
    int main()
    {
    DDRD&=~(1<<PD2);	//PD2 -> Eingang (Taster 1)
    PORTD|=(1<<PD2);	//Pullups an PD2 aktivieren
    
    DDRD|=(1<<PD5);		//PD5 -> Ausgang (LED 1)
    
    while(1)
    {
    
    if(PIND & (1<<PD2))	//Taster 1 betätigt
    PORTD|=(1<<PD5);	//LED 1 aktivieren
    
    }
    
    return 0;
    }
    Ich benutze übrigens das Pollinboard. Wenn ich jetzt also auf Taster1 drücke, passiert gar nichts. Der Code ist meiner Meinung nach richtig, da ich aber nur wenig Ahnung vom Programmieren eines Mikrocontrollers habe, kann ich mich da auch irren. Also woran könnte das Problem liegen?

    Gruß
    cesupa

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    32
    Beiträge
    246
    Hi,

    also meistens (zumindest oft) ist das alles so angeschlossen, dass wenn man den Taster drückt, der Pin auf LOW gezogen wird. (Darum verwendet man dann ja auch Pullups).

    Wenn es doch anders herum ist, kein dein Programm trotzdem nicht funktionieren.. Wenn der Button dann gedrückt ist, liefert er HIGH, ist er nicht gedrückt, hast du trotzdem HIGH, wegen dem Pullup!!

    Ähnlich ist es auch bei den LEDs, die leuchten dann, wenn der Ausgang 0 ist.

    Diese Dinge musst du also erstmal prüfen. Hast du vielleicht grad den Schaltplan mal da?

    Vielleicht solltest du auch noch eine else-Anweisung einfügen, damit die LED auch wieder ausgeht, wenn der Button nicht gedrückt wird (zum Testen).

    mfg
    zerush

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    01.07.2005
    Beiträge
    64
    Hallo,

    also ich werds dann mal ohne Pullup ausprobieren. Hier ist nochmal das Datenblatt samt Schaltplan vom Pollin-Board:

    http://www.pollin.de/shop/downloads/D810038B.PDF

    Gruß
    cesupa

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    32
    Beiträge
    246
    Ok, wenn du den Butto drückst, liegt ne logische 1 an und die LEDs brauchen eine 1 zum leuchten.

    Das heißt der Pullup muss auf jeden Fall deaktiviert sein.
    Hast du die Jumper auf dem Board auch gesetzt? (JP6 und JP3)

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.183
    Es werden wahrscheinlich die PullUp sein, die habe laut Datenblatt 20k bis 50k und die PullDown der Tasten 33k. Damit kommt nie ein low zustande. Es sollte die LED immer leuchten.
    Die Jumper auf dem Board sind gesteckt?
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    01.07.2005
    Beiträge
    64
    Hallo, also das Problem hatte zwei Ursachen:

    1. Mit Pullup funktioniert das ganze nicht
    2. Ich hatte am extension Port J4 noch ein DCF-Empfänger und ein LCD dran, welches die Ports für taster und LED belegt haben, deswegen leuchtete die LED ständig.

    Kann ich beim Pollinboard irgendwie zw. dem extension Ports und den Tastern/LEDs umschalten(Jumper setzen?).

    Gruß
    cesupa

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.183
    Du kannst mit den Jumper JP1 bis JP8 nur die Tasten, LEDs und Buzzer abschalten. Die Verbindung von den Kontroller-Ports zu J4 kann man nicht unterbrechen.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    01.07.2005
    Beiträge
    64
    Hallo,
    danke erstmal für die Antworten. Hab jetzt mal versucht, da ich nun endlich mal das DCF-Signal meines DCF-Empfängers von Conrad auswerten möchte, mir die Signalfolge über eine LED am Atmega8 ausgeben zu lassen, leider leuchtet LED2 wieder ständig

    Code:
    #include <avr/io.h>
    
    int main(void)
    {
    
    DDRD|=(1<<PD6);	//LED->Augang
    
    DDRC&=~(1<<PC0);	//DCF-Signal (nicht invertiert)->Eingang
    PORTC|=(1<<PC0);	//Pullups aktivieren
    
    while(1)
    {
    
    if(PINC & (1<<PC0))		//wenn Signal high
    PORTD|=(1<<PD6);		//LED anschalten
    else
    PORTD&=~(1<<PD6);		//ansonsten LED aus
    
    }
    
    return 0;
    }
    Liegts hier wieder am Pullup? Wenn ich mich recht erinnere muss der hier aber gesetzt sein oder?

    Gruß
    cesupa

Berechtigungen

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