LED blinken über timer (Atmega8)

Gast #4018347
Lesenswert?

hallo zusammen,

folgendes Problem...ich möchte über einen timer des Atmega8 eine LED 
blinken lassen...die Einrichtung des timers ist kein Problem...mir geht 
es um den Programmausschnitt welcher die LED blinken lässt (mit einer 
globalen Variablen) damit das Programm nebenbei weiterlaufen 
kann...danke schonmal im voraus
Gast #4018430
Lesenswert?

Andreas schrieb:
> bekommt man auch damit verschiedene Blinkfrequenzen hin??
Das eine ist das Bit manipulieren und das andere ist das Aufrufintervall 
fürs Bitmanipulieren.

wenn du schon umständlich machst, dann auch richtig.
1
ISR (1KHz)
2
{
3
 static unt16_t count = 0;
4
 count++;
5

6
 if (count == 500){
7
   count = 0;
8
   PORTx ^= (1<<Pxy);
9
 }
10

11
...
12
}

macht in diesem Fall 2x500ms Periodedauer => T=1s => f= 1Hz, Duty 50%.
#4018454
Lesenswert?

Andreas schrieb:
> noch ne Frage zur ISR...ich hab mal gelesen das in die ISR
> höchstens
> Variablen rein sollen zumm hochzählen z.B. ...wenn das stimmt sollte man
> dann diese if Bedingung nicht lieber ins Hauptprogramm legen??

Das brauchst Du doch nicht, wenn Du nur eine LED blinken lassen 
möchtest. Wofpr eine Variable inkremmentieren??.. Ach, ja es geht auch 
ganz ohne Code...Nimm einen NE555, damit kannst Du auch eine LED blinken 
lassen.
#4018467
Lesenswert?

Andreas schrieb:
> noch ne Frage zur ISR...ich hab mal gelesen das in die ISR höchstens
> Variablen rein sollen zumm hochzählen z.B. ...wenn das stimmt sollte man
> dann diese if Bedingung nicht lieber ins Hauptprogramm legen??

So wie alle Dogmen, ist auch dieses so nicht haltbar.

Du machst in einer ISR das, was es zu tun gibt. Das kann durchaus auch 
mehr sein, als nur eine Flagvariable auf einen Wert zu setzen.

Es macht wenig Sinn einen komplizierten Mechanismus aufzusetzen, wenn 
dadurch andere Funktionalität den Bach runter geht. Eine Portbit 
umzuseten dauert auch nicht länger als eine Variable auf 1 zu setzen. 
Also kannst du auch gleich das Portbit umsetzen, anstelle dir die Finger 
mit 78 Flags und 12 Zusatzvariablen abzubrechen.

Was du in einer ISR nicht machen solltest, das sind Aktionen die lange 
dauern! Insbesonders wenn diese Aktionen dann auch noch ein 'Warten auf 
...' beinhalten, kann das ein No-No sein. Aber nichts von dem ist hier 
der Fall.

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