Hallo alle zusammen, ich hab nun schon so einiges probiert zu programmieren und hat bis jetzt auch alles ganz gut geklappt (das normale Tutorial und das avr-gcc Tutorial). Jetzt hab ich bei mir noch ne RGB LED gefunden gehabt und wollte die auch ansteuern. Klappt eigentlich auch, aber irgendwie funzt das Umschalten mit den Tastern nicht bzw nur sporadisch wie es lustig ist. Ich habe an PB0 und PB1 jeweils einen Taster auf GND (nutze die internen PullUps; so wie im Tutorial). An PB2, PB3, PB4 hängen dann jeweils das rote, grüne, blaue Beinchen der LED (mit 330 Ohm Widerständen), das 4te Beinchen der LED geht an VCC. Stelle ich oben im Programm andere Startwerte ein (zB red = 255 anstatt red = 0), so bekomme ich auch ne leuchtende LED in der richtigen Farbe. Nur wenn ich die Taster drücke tut sich nix und so vielleicht beim 10ten Druck (variiert) wird die LED lila. Mehr tut sich leider nicht. Sollte vielleicht noch dazu sagen: Ich hab nen Atmega8 mit nem 16Mhz Quarz dranhängen. Möglicherweise stehe ich auch einfach nur aufm Schlauch beim Programm (geh ich mal von aus ;-)). Wäre super lieb wenn ihr mir helfen könntet. Grüße
Ich seh keinen Fehler. Natürlich wäre es sinnvoll, den static unsigned char zustand; in den int tasterPBx(void) explizit auf 0 zu initialisieren, aber das sind sie auch implizit. Ich sehe auch nicht, daß du aus Versehen an PORTB die PullUps wieder abschaltest, dennnoch würde ich mal externe 10k PullUps probieren.
Hey, danke schonmal für deine Antwort. Was ich allerdings festgestellt habe: Wenn ich TCNT0 bei jedem Interrupt auf 0 anstatt auf 250 setze oder einen Vorteiler von 1024 wähle, so klappt das umschalten mit den Tastern super. Allerdings flackert dann die LED bzw man sieht die Mischfarben aufleuchten. Wenn ich doch ein 16Mhz Quarz habe und Timer0 ein 8-bit Timer ist, so sollte ich doch auch mit TCNT0 = 0 und einem Vorteiler von 0 insgesamt 62500 Interrupts pro Sekunde haben? Wieso flackert dann die LED? (Sollte doch eigentlich ~244 mal pro Sekunde komplett durchmischen) Es wirkt einfach so, als wäre der AVR so mit seinen Timer-Interrupts beschäftigt, dass er die Taster gar nicht mehr abfragt?
Mhm, jetzt habe ich das "_delay_ms(20)" in der while-Schleife rausgenommen und jetzt läuft das ganze auch gut mit TCNT0 = 250 und einem Vorteiler von 0 (also die Taster reagieren). Ist zwar schön und gut. Aber da ich das Ganze ja nur gebaut und programmiert habe um dabei was zu lernen wäre es super, wenn mir da jemand mal ne Erklärung für geben könnte. Auch warum die LED flackert obwohl sie eigentlich super oft aktualisiert wird. Oder ist das ganze schon zu oft oder der Code zu "schwer" (im Bezug auf Rechenzeit) ? Grüße Cyrill
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.