Forum: Mikrocontroller und Digitale Elektronik LED blinken mit M16 in C


von putzer philipp (Gast)


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

von putzer philipp (Gast)


Angehängte Dateien:

Lesenswert?

verdammt! Die Vorschau hat meine Anhang gekillt!
Also hier noch mal

von Karl H. (kbuchegg)


Lesenswert?

> else if (takt==wert)      //Blinken, LED ein

mach da mal ein

  else if( takt >= wert )

draus.

von Εrnst B. (ernst)


Lesenswert?

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...

von Wilfried N. (zoice)


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

von Karl H. (kbuchegg)


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.

von johnny.m (Gast)


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.

von putzer philipp (Gast)


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

von a. (Gast)


Lesenswert?

das die Leute immer so in Eile sind......

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
Noch kein Account? Hier anmelden.