![Wink :wink:](./images/smilies/icon_wink.gif)
BASCOM...PWM 38 kHz
Moderátor: Moderátoři
BASCOM...PWM 38 kHz
Opět zdravím. Nevíte prosím někdo, jak dostat z ATmegy32 programované v BASCOMu PWM signál o 38 kHz pro IR senzor?...Mě se to pořád nedaří. Dík za radu ![Wink :wink:](./images/smilies/icon_wink.gif)
![Wink :wink:](./images/smilies/icon_wink.gif)
Zkus se dočíst tady..
http://www.mcselec.com/index2.php?optio ... ight=38khz
http://www.mcselec.com/index2.php?optio ... ight=38khz
Abys dostal frekvenci jinou než vychází "kulatým" dělením při přetečení čítače, musíš vhodně zkrátit vhodnou nižší frekvenci.
Můžeš použít timer1 v režimu pwm se zkráceným cyklem pomocí registru ICR1, kterým nastavíš vrchol čítače TCNT1.
Například: 16 MHz hodiny procesoru, předdělič 1, režim fázově/frekvenčně korigované pwm na timeru 1:
f PWM=f CLK/2 * n * TOP,
n=prescale, TOP je vrchol čítače zapsaný do registru ICR1.
zápis v Bascomu:
Můžeš použít timer1 v režimu pwm se zkráceným cyklem pomocí registru ICR1, kterým nastavíš vrchol čítače TCNT1.
Například: 16 MHz hodiny procesoru, předdělič 1, režim fázově/frekvenčně korigované pwm na timeru 1:
f PWM=f CLK/2 * n * TOP,
n=prescale, TOP je vrchol čítače zapsaný do registru ICR1.
zápis v Bascomu:
A nebo použít fázově korigovanou pwm s hodinama 20 MHz a dostaneš pwm frekvenci 39215 Hz, kdyby to nevadilo.$regfile = "m32def.dat"
$crystal = 16000000
Tccr1a = &B10000000
Tccr1b = &B00010001
Icr1 = 210 'pro f CLK=16 MHz, prescale 1, frekvence =16M/2*N*TOP, N=prescale, TOP=ICR1,=38095 Hz
Ddrd = &B00100000 'pin OC1a, D.5 jako vystupni (OC1A, vystup pwm)
Ocr1a= x '0 až 210 (ICR1)=šířka pwm
Představil jsem si místo lomítka zlomkovou čáru ale vyšlo mi to špatně.f PWM=f CLK/2 * n * TOP
Vnímavější čtenář si to lomítko jistě představí jako zlomkovou čáru.
- Přílohy
-
- vzorec.png
- (2.03 KiB) Staženo 110 x