PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eingänge funktionieren nicht



cesupa
01.03.2008, 10:16
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:



#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

zerush
01.03.2008, 10:35
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

cesupa
01.03.2008, 10:55
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

zerush
01.03.2008, 11:02
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)

Hubert.G
01.03.2008, 11:11
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?

cesupa
01.03.2008, 12:47
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

Hubert.G
01.03.2008, 13:10
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.

cesupa
01.03.2008, 13:53
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 :(



#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