PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kann Schalter nicht abfragen



Icon2k
29.07.2010, 20:30
Hallo, ich habe mir das Atmel Evaluation Board und einen ATmega32 gekauft und versuche meine ersten Schritte in der Elektronik.

http://www.akagisan.de/electronic/atmel/Atmel-Evaluations-Board.pdf hier ist auf Seite 6 der Schaltplan

Die Taster sind, wenn ich alles Richtig verstanden habe "Active High", d. h ich brauche keine Pull Up Widerstände im ATmega aktivieren (Die Pull Down Widerstände sind ja schon auf dem Board).

Die 2 LEDs sind im Register D auf Pin 5 und 6, die Taster sind ebenfalls an Register D aber auf Pin 2, 3 und 4.

Ich habe mir, folgenden Code geschrieben, der sollte LED 1 (Pin 5) leuchten lassen solange der Taster nicht gedrückt ist, sobald der Taster gedrückt ist, soll LED 1 aus und LED 2 (Pin 6) angehen. Der Taster soll Taster 1 auf Pin 2 sein.


#include <avr/io.h>

int main()
{
DDRD = 0xF8; // entsprich 1111 1000
PORTD = (0 << 2) & (0 << 3) & (0 << 4); // eig. unnötig, aber man weis ja nie

while(1){
if(PIND & 0x02){
PORTD |= (1 << 6);
PORTD &= ~(1 << 5);
}else{
PORTD |= (1 << 5);
PORTD &= ~(1 << 6);

}


}
}

Aber der Taster funktioniert nicht ... ich habe die Lötstellen kontrolliert und manchmal, ganz selten und unregelmäßig scheint der ATmega auf den Tastendruck zu reagieren, aber sehr sehr selten.

Ich hoffe ihr könnt mir sagen wo das Problem liegt.
MfG Icon

EDIT1 : Rechtschreibfehler ;-)

Jaecko
29.07.2010, 21:47
Pin 2 ist 0x04 bzw. (1 << 2), nicht 0x02.
Du fragst also den falschen Taster ab. Wenn der AVR doch mal scheinbar "reagiert", bist du vermutlich auf den Nachbartaster gekommen.

EDIT: Grad am Schaltplan gesehen: Du fragst ja PinD.1 ab, der lt. Schaltplan wohl zum UART gehört. Wenn da also irgendwas ankommt, wird der Schalter "gedrückt"

Hubert.G
29.07.2010, 21:49
Wenn es zuweilen funktioniert scheint es kein SW-Fehler zu sein.
Beim Tastendruck lädst du über die Taste den 330n Kondensator auf, da kann durch den kurzen Spannungseinbruch den Kontroller schon mal ein Reset machen. Das wird auch in diversen Threads kritisiert.
Ich habe bei meinem Board die Tasten geändert so das sie nach GND schalten und aktiviere bei bedarf die internen PullUp.

Icon2k
30.07.2010, 17:32
Ahh, danke .. der erste Fehler war das 0x04 jetzt klappts ein Paar mal. Aber nach ein Paar Tasterdrücken, die Zahl variiert stark, klappt es nicht mehr. Erst wenn der Microkontroller wieder über den Reset knopf zurückgesetzt wurde, funktioniert es wieder.
Könnte dieses Problem mit dem Spannungseinbruch zusammen hängen?

Hubert.G
30.07.2010, 17:51
Es muss nicht sein das der Kontroller immer einen Reset macht bei einem Spannungseinbruch, er kann sich auch im Programm verlaufen und nur mit einem Reset wieder herauskommen.