Wert eines Knopfes lesen

OP #1754468
Hallo, Leute!

Nachdem mein ATMega8 wieder lebt, wollte ich endlich ein Programm 
schreiben, das alle Ein- und Ausgänge prüft.

Als Ausgänge habe ich nur 4 LEDs (verbunden an PORTC0-3), und die kann 
ich problemlos steuern (mit einem anderen Programm alle einzelnen 
geprüft).
Dazu habe ich zwei Eingänge (angeschloßen an PORTD2+3).

Als Testprogramm habe ich was in der Art geschrieben:
1
// PORTD2 und 3 als Eingang
2
DDRD &= ~(1<<2);
3
DDRD &= ~(1<<3);
4
// PORTC0-3 als Ausgang
5
DDRC |= (1<<0) | (1<<1) | (1<<2) | (1<<3);
6

7
while(1 == 1)
8
{
9
  if(bit_is_set(PIND_PIN, 2))
10
    PORTC &= ~2;
11
  else
12
    PORTC |= 2;
13
}

Nun bleibt das LED2 immer an, egal ob ich die Taste drucke oder nicht...
Die Taste habe ich zwischen +5V und PORTD2 angeschloßen.

Was mache ich jetzt falsches?

Danke
Luca Bertoncello
Luca Bertoncello schrieb:
> Die Taste habe ich zwischen +5V und PORTD2 angeschloßen.
>
> Was mache ich jetzt falsches?

Du legst nie 0V an und damit bleibt der Pin auf 5V geladen, bzw. holt 
sich 50Hz Störungen rein.

Besser daher, die Taste nach GND legen und den internen Pullup 
einschalten.

Taste gedrückt: 0V über die Taste
Taste losgelassen: 5V über den Pullup


Peter
Gast
Luca Bertoncello schrieb:
> Die Taste habe ich zwischen +5V und PORTD2 angeschloßen.

Neben dem schon angesprochen PIND_PIN schaltest du mit deinem Taster den 
Pin zwischen +5V und undefiniert.

Wenn du den Taster an die Versorgungsspannung hängst, brauchst du noch 
einen Pull-down-Widerstand. Oder verbinde den Schalter mit Taster, und 
aktiviere die Pull-Ups im AVR.

Oliver
OP
Oliver schrieb:

> Neben dem schon angesprochen PIND_PIN schaltest du mit deinem Taster den
> Pin zwischen +5V und undefiniert.

Es ist nicht PIND_PIN, sondern einfach PIND... falsch kopiert... In 
meinem Code habe ich viele #define benutzt...

> Wenn du den Taster an die Versorgungsspannung hängst, brauchst du noch
> einen Pull-down-Widerstand. Oder verbinde den Schalter mit Taster, und
> aktiviere die Pull-Ups im AVR.

Aha! Also, einfach gesagt, am Ende, dort, sollte keinen Taster geben, 
sondern ein optischer Encoder (mit einem LM339 um das Signal zu 
übersetzen).
Aber jetzt verstehe ich schon mein Fehler... Ich habe einfach nicht 
gedacht, daß ich ein "undefined" habe, wenn der Taster nicht gedruckt 
ist.

Nun zwei Fragen:
1) Werde ich das gleiche Problem haben mit dem LM339? Ich denke nein, 
denn es immer was gültiges schicken soll (siehe Schaltung im Anhang).
2) Was sind diese Pull-Ups im AVR? Ist es was internes am ATMega? Wenn 
ja, wäre es eine Idee zum testen, ob das Programm geht... Wie nutze ich 
die?

Danke
Luca Bertoncello
Angehängte Dateien:
Gast
Luca Bertoncello schrieb:
> 1) Werde ich das gleiche Problem haben mit dem LM339? Ich denke nein,
> denn es immer was gültiges schicken soll (siehe Schaltung im Anhang).

Ja, der "schickt" immer was gültiges.

Luca Bertoncello schrieb:
> 2) Was sind diese Pull-Ups im AVR? Ist es was internes am ATMega? Wenn
> ja, wäre es eine Idee zum testen, ob das Programm geht... Wie nutze ich
> die?

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Oliver
OP
Oliver schrieb:
> Luca Bertoncello schrieb:
>> 1) Werde ich das gleiche Problem haben mit dem LM339? Ich denke nein,
>> denn es immer was gültiges schicken soll (siehe Schaltung im Anhang).
>
> Ja, der "schickt" immer was gültiges.
>
> Luca Bertoncello schrieb:
>> 2) Was sind diese Pull-Ups im AVR? Ist es was internes am ATMega? Wenn
>> ja, wäre es eine Idee zum testen, ob das Programm geht... Wie nutze ich
>> die?
>
> http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Dieser habe kurz nach meiner Frage (ich blööööd!) gefunden... Besten 
Dank trotzdem...

Wegen der Frage, ob der LM339 immer was gültiges schickt.

Du sagst, daß es so macht, High Performer daß es OpenCollector ist.
Also, wen soll ich glauben? :D

Jedenfalls, mit oder ohne internen Pullup kriege ich keinen Wert vom 
LM339.
Es kann aber auch sein, daß das Problem dort liegt.

Ich werde in den nächsten Tagen ein Oszilloskop kriegen, mit dem ich 
messen werde, was der LM339 mir schickt.

Erstmal, besten Dank an allen!
Ich werde mich wahrscheinlich demnächst melden, wegen anderen 
Problemen... :D

Grüße
Luca Bertoncello

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.