LED blinken mit M16 in C

Gast #445210
Lesenswert?

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
#445218
Lesenswert?

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
#445219
Lesenswert?

> 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.
Gast #445294
Lesenswert?

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.
Gast #445454
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren