Witam!
Męczę się nad nadajnikiem IR 36kHz na AVR 2312. Do generowania nośnej wykorzystuję timer1 skonfigurowany w ten sposób, że generuje na pinie naprzemienne impulsy zbliżone do 36khz. Z grubsza jest OK choć dokładność siada, ale to m.in. kwestia złego doboru kwarcu. Interesuje inna kwestia, a mianowicie kluczowanie tego sygnału nośnego w programie. Wykorzystuję do tego coś takiego
gdzie tcca1 włącza/wyłącza nośną na czas trwania impulsu. Czasy X muszę dobrać tak, żeby zapewnić pożądany czas trwania impulsu, ale pytanie jest takie:
Czas trwania impulsu powinienem mierzyć od pierwszego ustawienia Tcca1 w stan ON do momentu przed drugim ustawieniem Tcca1 w stan ON.
Po wyzerowaniu Timer1 przed wykonaniem tcca1 = &B01000000 ma już wartość zwiększoną o 1, czyli czas sobie już leci, czyli nośna już się generuje. Kiedy na port wystawiany jest impuls? Po komendzie tcca1 = &B01000000? Czyli po czasie 1+czas wykonania tej komendy? Czy najpierw jest wykonany rozkaz a potem zwiększa się czas lecącego "w tle" timera, czy odwrotnie? Nie wiem kiedy dokładnie zaczyna się impuls.
Przy założeniu że program wykonuje ciąg instrukcji (bez jakichś tam pętli, które też "zjadają" czas procesora):
pomierzyłem czasy przed i po wykonaniu rozkazów (cykle/czas)
0/0 Tccr1a = &B01000000 2/0,0005
2/0,0005 Waitus 560 2242/0,5605
2242/0,5605 Tccr1a = &B11000000 2244/0,561
2244/0561 Waitus 560 4484/1,121
4484/1,121 Tccr1a = ........ itd
Ile w takim układzie trwa impuls?? Kiedy się rozpoczyna (jest wystawiony na port) i kiedy się kończy (zaczyna następny) co wyznaczy mi okres i czas trwania całego bitu??
Męczę się nad nadajnikiem IR 36kHz na AVR 2312. Do generowania nośnej wykorzystuję timer1 skonfigurowany w ten sposób, że generuje na pinie naprzemienne impulsy zbliżone do 36khz. Z grubsza jest OK choć dokładność siada, ale to m.in. kwestia złego doboru kwarcu. Interesuje inna kwestia, a mianowicie kluczowanie tego sygnału nośnego w programie. Wykorzystuję do tego coś takiego
Code:
timer1=0
tcca1 = &B01000000 'on
waitus X
tcca1 = &B11000000 'off (albo odwrotnie...niewazne akurat)
waitus X
gdzie tcca1 włącza/wyłącza nośną na czas trwania impulsu. Czasy X muszę dobrać tak, żeby zapewnić pożądany czas trwania impulsu, ale pytanie jest takie:
Czas trwania impulsu powinienem mierzyć od pierwszego ustawienia Tcca1 w stan ON do momentu przed drugim ustawieniem Tcca1 w stan ON.
Po wyzerowaniu Timer1 przed wykonaniem tcca1 = &B01000000 ma już wartość zwiększoną o 1, czyli czas sobie już leci, czyli nośna już się generuje. Kiedy na port wystawiany jest impuls? Po komendzie tcca1 = &B01000000? Czyli po czasie 1+czas wykonania tej komendy? Czy najpierw jest wykonany rozkaz a potem zwiększa się czas lecącego "w tle" timera, czy odwrotnie? Nie wiem kiedy dokładnie zaczyna się impuls.
Przy założeniu że program wykonuje ciąg instrukcji (bez jakichś tam pętli, które też "zjadają" czas procesora):
Code:
tcca1 = &B01000000 'on
waitus X
tcca1 = &B11000000 'off (albo odwrotnie...niewazne akurat)
waitus X
pomierzyłem czasy przed i po wykonaniu rozkazów (cykle/czas)
0/0 Tccr1a = &B01000000 2/0,0005
2/0,0005 Waitus 560 2242/0,5605
2242/0,5605 Tccr1a = &B11000000 2244/0,561
2244/0561 Waitus 560 4484/1,121
4484/1,121 Tccr1a = ........ itd
Ile w takim układzie trwa impuls?? Kiedy się rozpoczyna (jest wystawiony na port) i kiedy się kończy (zaczyna następny) co wyznaczy mi okres i czas trwania całego bitu??