PWM -> 50Hz -> Änderung des Verhältnisses (bei 8 MHz)

#3171307
Lesenswert?

Hallo,

ich habe jetzt schon einige beispiele des PWM getestet, doch leider 
keine Lösung gefunden.
Wolle gerne ein Hardware PWM mit 50 Hz erzeugen in dem ich die 
Puls/Pausen Verhältnis
ändern kann.
Mit Soft PWM kein Thema, doch dann habe ich für nix anders mehr zeit ;-)
Der Contoller sollte mit 8Mhz laufen, da ich noch eine Anzeige mit 
steuere.
meine soft Lösung war: (xadc bekommt werte von 0 - 100, durch ADC read 
und Formel)
1
PORTB &= ~_BV(PB1);
2
_delay_ms(19);
3
PORTB |=_BV(PB1); 
4
_delay_ms(1);
oder
1
PORTB &= ~_BV(PB1);
2
_delay_ms(1);
3
PORTB |=_BV(PB1);  
4
_delay_ms(19);
oder
1
x=20/100*xadc;
2
PORTB &= ~_BV(PB1);
3
_delay_ms(x);
4
PORTB |=_BV(PB1); 
5
_delay_ms(20-x);
Gruß

Oliver
#3171354
Lesenswert?

Oliver R. schrieb:
> ich habe jetzt schon einige beispiele des PWM getestet, doch leider
> keine Lösung gefunden.
> Wolle gerne ein Hardware PWM mit 50 Hz erzeugen in dem ich die
> Puls/Pausen Verhältnis
> ändern kann.

Gibt es auch irgendeine konkrete Frage, oder soll das ein "macht ihr das 
mal für mich"-Post sein?

Ansonsten:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR
Gast #3171501
Lesenswert?

Du teilst mithilfe eines geeigneten Prescalers deinen "Haupttakt" 
herunter, überlegst dir dann, wie lange der µC für einen "Hochzähltakt" 
braucht und lässt den Timer solange hochzählen, bis du ingesamt auf eine 
Zeit von 1/50 Hz kommst.

Das sind wirklich die Basics! Arbeite das Tutorial durch!
#3171561
Lesenswert?

noch nee dumme frage,
wenn ich jetzt den timer auf pre 1024 stelle.
  TCCR1B = (1<<CS10) | (1<<CS12);

OCR1A = 78
sollte doch dann ca. 50ms (25an/25aus) sein?

Das ist dann 50er tastverhltnis,
doch muss ich jetzt in irq die verschiebung regen?

Oder habe ich da noch was nicht verstanden?
Wollte immer ca. 50Hz nur ...
on 10%, off 90% bis on 90% und off 10%
...das will noch nicht kick machen,
bin schon den ganzen tag am tudo...
#3172899
Lesenswert?

Oliver R. schrieb:
> ?? also, bei mir sind auch 8MHZ /1024 = 7,8125Khz -> 7812,5 Hz und sind
> doch 0,000128s -> 128 us und f=1/t -> 1/128us = 7,8125 kHz? oder nicht?

FAQ: Timer

> aber mir das das mit dem verschieben des Tastverhältnisses noch nicht
> klar und auch nicht in tutorial...?

Was genau ist dir da nicht klar?

Du hast ein Rechtecksignal (ok, du hast 2 Signale im Vergleich)



         +------+                   +------+                    +--...
         |      |                   |      |                    |
         |      |                   |      |                    |
         |      |                   |      |                    |
   ------+      +-------------------+      +--------------------+



         +----------------------+   +-----------------------+   +--...
         |                      |   |                       |   |
         |                      |   |                       |   |
         |                      |   |                       |   |
   ------+                      +---+                       +---+


beide haben die gleiche Frequenz, denn der Abstand von der steigenden 
Flanke bis zur nächsten steigenden Flanke ist in beiden Fällen derselbe.

Der einzige Unterschied: im 2. Signal dauert die High-Phase länger, 
dafür ist die Low-Phase dementsprechend kürzer. Das erste hat einen 
Tastgrad von (über den Däumen) 30%, das zweite hat einen Tastgrad von 
ca. 90%.

Wenn also der Timer für einen kompletten PWM Zyklus (von steigender 
Flanke bis zur nächsten steigenden Flanke) einmal von 0 bis 255 zählen 
muss, dann muss er für die 30% von 0 bis 0.3*255 = 76 zählen, während er 
zur Realisierung der 90% PWM bis 0.9*255 = 229 zählen muss, ehe er dann 
bei Hardware-PWM den Pin wieder auf Low ziehen soll.

Bei Hardware-PWM kann das die Hardware selber machen, bei Software-PWM 
muss man das dann eben in einem Programm nachbilden.
Gast #3173074
Lesenswert?

Oliver R. schrieb:
> ?? also, bei mir sind auch 8MHZ /1024 = 7,8125Khz -> 7812,5 Hz und sind
> doch 0,000128s -> 128 us und f=1/t -> 1/128us = 7,8125 kHz? oder nicht?
>
> aber mir das das mit dem verschieben des Tastverhältnisses noch nicht
> klar und auch nicht in tutorial...?

Du hast natürlich recht. 0.128 ms sind natürlich 128 us. Mein Fehler ;-)

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