Atmega8 Timer probleme

Gast #3288401
Lesenswert?

Guten abend zusammen ich hab ein Problem ich möchte eine Soft-PWM machen 
bei dem der Takt von einem HW-Timer generiert wird.

Also dachte ich nehm ich einen 8 -Bit Timer  lass den zykisch bis 100 
zählen und  packe den in eine globale Variable mit der die einzelen 
Kanäle verglichen wird. Aber irgendwie bin ich zu blöd das zu 
relaisieren denn  wenn ich statt Zeile 10 und 14 zeile 11 und 15 
einkommentiere geht es
Angehängte Dateien:
Gast #3288402
Lesenswert?

Tobi88 schrieb:
> Guten abend zusammen ich hab ein Problem ich möchte eine Soft-PWM
> machen
> bei dem der Takt von einem HW-Timer generiert wird.
>
> Also dachte ich nehm ich einen 8 -Bit Timer  lass den zykisch bis 100
> zählen und  packe den in eine globale Variable mit der die einzelen
> Kanäle verglichen wird. Aber irgendwie bin ich zu blöd das zu
> relaisieren denn  wenn ich statt Zeile 10 und 14 zeile 11 und 15
> einkommentiere geht es
Angehängte Dateien:
#3288417
Lesenswert?

Dein Timer läuft mit F_CPU. Der rennt dir glatt weg. Ehe das Programm 
sich durch die drei ifs gewurstelt hat, ist TCNT0 schon fast wieder bei 
100 angelangt. Oder sogar schon drüber. Setz den Prescaler auf 256. Das 
sollte für Leds reichen.

Nächstes mal den Code bitte als *.c posten, nicht als *.txt.

mfg.
Gast #3288421
Lesenswert?

Thomas Eckmann schrieb:
> Dein Timer läuft mit F_CPU. Der rennt dir glatt weg. Ehe das
> Programm
> sich durch die drei ifs gewurstelt hat, ist TCNT0 schon fast wieder bei
> 100 angelangt. Oder sogar schon drüber. Setz den Prescaler auf 256. Das
> sollte für Leds reichen.
>
> mfg.

Danke für den Tipp......aber ich dachte das der Mikrocontroller für 3 
IFs nicht so lange braucht... ok zugegeben ich habe dahinter auch noch 2 
Stakemaschinen aber trotzdem das sind nur 2 switches wo nichts gemacht 
wird....also ist in dem fall dein Tipp den Prescaler rauf zu setzen? 
hätte gedacht dass  es eig gut is wenn der Presclaer klein is
#3288434
Lesenswert?

Tobi88 schrieb:
> Danke für den Tipp......aber ich dachte das der Mikrocontroller für 3
> IFs nicht so lange braucht... ok zugegeben ich habe dahinter auch noch 2
> Stakemaschinen aber trotzdem das sind nur 2 switches wo nichts gemacht
> wird....also ist in dem fall dein Tipp den Prescaler rauf zu setzen?
> hätte gedacht dass  es eig gut is wenn der Presclaer klein is
100 Takte sind gar nichts. Guck dir mal im *.lss an, was der Compiler 
daraus gemacht hat. Jeder Befehl braucht min. 1 Takt.

Aber deine Lösung taugt nichts.
Schalt den Timer Interrupt ein.
1
ISR(Timer0_OVF_vect)
2
{
3
  counter++;
4
  if(counter == 101) Counter = 0;
5
}
6
.
7
.
8
while(1)
9
{
10
  if (counter >= PWM1) PORTB |= (1 << PB1); else PORTB &= ~(1 << PB1);
11
  //Das darf auch in der ISR stehen.
12
.
13
.
14
}

Dann kannst du den Timer auf Prescaler = 1 lassen. Ich würde aber soweit 
runter gehen, daß es gerade nicht flackert. Wenn es Leds sind.
Und der sei() bleibt dann auch stehen.

mfg.

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