mikrocontroller.net

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


Autor: putzer philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: putzer philipp (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
verdammt! Die Vorschau hat meine Anhang gekillt!
Also hier noch mal

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> else if (takt==wert)      //Blinken, LED ein

mach da mal ein

  else if( takt >= wert )

draus.

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Wilfried Nesensohn (zoice)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: putzer philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: a. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das die Leute immer so in Eile sind......

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.