-
-
Erfahrener Benutzer
Begeisterter Techniker
Ich bin eigentlich auch eher Einsteiger in C.
Ports werden allerdings allgemein "invertiert" abgefragt.
Dazu legt man, wie es hier auch gemacht wird zunächst die Ports im Datenrichtungsregister
auf 0, sprich Eingang. Damit werden die Eingänge hochohmig!
D.h. die reagieren evtl schon, wenn Du dich dem Eingangspin nur mit der Hand näherst.
Die kleinen Kapazitäten am Eingang sorgen dann dafür, daß der Eingang nach einer undefinierten
Zeit vielleicht wieder ausgeht.
Aus diesem Grund aktiviert man die Pullups und schaltet nach Null, also invertiert.
In Deinem Code sind die Pullups nicht aktiviert. Das macht man auch mit "PORTC ="
Also oben noch einfügen:
PORTC |= (1<< PC4) |(1<<PC5); //Aktivieren der Pullups
Dann mußt du natürlich die Pinabfrage auch invertieren:
Statt: if(PINC & (1 << PC5)) steht dann da: if (! (PINC & (1 << PC5)))
Dasgleiche in der anderen Bedingung. Dann werden Selbstverständlich noch die
Pins über den Taster nach Minus verbunden.
Ich hab auch noch nie mit sbi() und cbi() gearbeitet.
Normalerweise bemühe ich hier die üblichen Bitschiebereien.
Und wenn dann alles funktioniert, solltest Du Dir schnell abgewöhnen mit aktivem Warten zu arbeiten.
Blinken macht man eigentlich mit "Timer Overflow Interrupt"- ISRs.
Ich würde Dir das AVR- Tutorial von mikrocontroller.net empfehlen.
Das hat mir auch sehr geholfen.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen