Hallo! Ich habe folgendes, mir total unverständliches Problem: Ich möchte eine einfache Blinkfunktion mit einem AVR (ATMEGA16) realiseren. Die Blink zeiten sollen gleich groß sein (50/50 also) und über einen Timer (Timer 0) in C (GCC) gemacht werden. So einfach sich das auch anhöhrt, es will einfach nicht hinhauen. Jedesmal wenn ich während der Laufzeit die Blinkfreuenz verändere, kommt es vor (nicht immer) dass die LED komplett aus oder komplet ein bleibt. Ich habe zwar bei eineigen Programmteilen (zb Tasterabfrage) den Interrupt ausgeschaltet, nutzte aber alles nichts. Unglaublich, seit fünf Stunden sitz ich nun bei diesem Problem, und habe keine Ahnung wo es fehlt! Ich hänge mein C-File an, auf dass ein anderer schlauer ist als ich. Wenn jemand vielleicht eine gute Idee oder einen Lösungsvorschlag parat hat, wäre ich ihm sehr dankbar. Vielen Dank und schöne Grüße puzter philipp
jup, z.B. takt ist 99, wert ist 100, MINUS-Taste gedrückt => takt ist 99, wert ist 90, takt würde weiterlaufen bis der Int überläuft und wieder bei 0 beginnt...
Hallo Philipp Ueberleg dir mal was passiert wenn: takt==45 wert==50 und nun drueckt jemand die Taste "minus". takt ist dann immer noch 45, wert aber 40, und die Bedingung ... else if (takt==wert) //Blinken, LED ein ... wird erst nach ueberlaufen von takt erfuellt werden. Versuchs mal mit ... else if (takt>=wert) ... MfG
> kommt es vor (nicht immer) dass die LED komplett aus oder > komplet ein bleibt. Stell dir vor, takt hat zufällig gerade den Wert 69 und wert sei 70. Jetzt kommt das störende Glied in jedem Computer, der Benutzer und verringert wert von 70 auf 60. takt wechselt mit dem nächsten Overflow von 69 auf 70, ist also schon größer als die (jetzt neue) Obergrenze von 60. Also setzt nichts und niemand den takt zurück und der gute Timer hat ne Menge zu tun, bis er ca. 65500 Overflows ausgelöst hat, bis takt (durch den den Überlauf des int) endlich wieder in den Bereich um die 60 zurückkommt. Daher: Nicht fordern, dass takt unbedingt exakt gleich wert sein muss. takt kann (durch Benutzermanipulation an wert) ganz leicht größer als wert werden.
BTW: Dein Betreff ist sehr irreführend. Ein "M16" ist ein Controller von Renesas, der mit dem ATMega16 nichts zu tun hat. Wenn Du wirklich hilfreiche Hilfe haben möchtest, solltest Du Dir die Zeit nehmen und im Betreff auch mindestens "Mega16" schreiben. Dann weiß auch jeder was gemeint ist.
Super! Danke! Hab es eben probiert, funkt nun tadellos! An das hatte ich nun wirklich nicht gedacht, aber klar, jetz nach dieser Erklärung. Nun hauts hin! Das mit dem Betreff tut mir leid, wusste nicht dass es etwas mit dem Namen M16 schon gibt. und in der eile gestern aben habe ich den MEGA16 halt einfach mit M16 abgekürzt. Schöne Grüße und vielen Dank! philipp
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.