LED programmieren mit ATmega8

OP #1158730
Hallo zusammen,
habe erst vor kurzem mich mit dem Thema Mikrocontroller und 
Programmieren befasst, bin also noch blutiger Anfänger;)
Ich hab mich soweit durch das AVR-Tutorial durchgearbeitet und wollte 
jetzt selber mal etwas programmieren und dachte dabei an eine recht 
simple Konstruktion mit einem Taster und einer LED. Die LED soll beim 
drücken des Tasters blinken und beim wiederhotem drücken wieder aus 
sein.
Ich hab mir da so ein paar Gedanken gemacht, wie das ganze aussehen 
könnte:
Ich schreibe ins "main", dass, wenn beim Taster eine fallende Flanke 
vorliegt, also das bit auf 0 gesetzt wird, ein Unterprogramm geöffnet 
wird, also ein interrupt.
In diesem Unterprogramm ist dann das Timer interrupt aufgeführt, dass 
die LED blinken lässt und ein weiteres interrupt, das beim wiederholten 
drücken des Tasters (steigende Flanke) die LED wieder ausschaltet, also 
den port auf 0b11111111 stellt. Doch wenn ich das so programmiere läuft 
doch das timer interrupt weiter und die LED blinkt immernoch oder???
gibt es da einen Befehl wie das interrupt wieder deaktiviert werden 
kann?
Und funktiert mein Programm in dieser Weise überhaupt oder habt ihr 
Vorschläge wie ich das besser programmieren könnte?
Bin für jede Hilfe dankbar:)

Gruß David
Gast
Du müsstest in der main() den Taster pollen, also ständig abfragen ob er 
z.B. auf 0 gezogen wurde. Am besten debouncen, so dass der Taster ein 
paar ms gedruckt sein muss damit die Aktion ausgeführt wird.
Mit dem Taster wählst du dann Blinken oder NichtBlinken aus.
Das Blinken kann man z.B. so machen, dass man einen Timer verwendet und 
den Overflow Interrupt zum Umschalten der Led benutzt. Soll die Led 
nicht blinken, würde ich einfach den Timer ausschalten und das Bit in 
dem entsprechenden Port der Led auf 0 stellen, damit sie auch aus ist.
Beim Anschalten, entsprechend umgekehrt.

Dein Controller führt den Code in der main() die ganze Zeit aus. Kommt 
es zum Overflow des Timers springt er in den Interrupt, schaltet die Led 
um und spring wieder zurück an die Stelle in der main(), von der er kam.
Gast
Aktuelles Atmgea8 Datenblatt S.72:

Bit 2:0 – CS02:0: Clock Select in TCCR0:

CS02 CS01 CS00 Description
0 0 0 No clock source (Timer/Counter stopped).
Gast
Wichtig ist aber ganz besonders Folgendes:
Du schreibst:

> Die LED soll beim drücken des Tasters blinken und beim wiederhotem drücken 
wieder aus sein.

Das heisst also dass die LED solange blinkt, wie der Taster gedrueckt 
wird "beim Druecken". Wie Du da das zweite Druecken verwenden willst, 
ist mir nicht klar.

Gast3
OP
Ich hab das jetzt so programmiert, dass beim ersten drücken ein 
Unterprogramm aufgerufen wird, in dem der Timer aufgeführt ist und die 
LED somit blinkt. Wenn der Taster dann nochmal gedrückt wird, verweist 
dieses Unterprogramm auf ein weiteres Unterprogramm, wo der Timer 
deaktiviert und die LED ausgeschaltet wird und wieder zurück ins main 
springt.
Gast
Was ich damit sagen wolte ist, dass die Aufgabenstellung schon nicht 
klar und eindeutig formuliert war. Wenn das aber geschafft ist, ist die 
Loesung auch nicht mehr weit.

Gast3

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.