Re: Kvíz na víkend
Martin Záruba
swz na volny.cz
Sobota Březen 15 20:24:05 CET 2025
Bingo. Oba timery jsou nastavené stejně. Na jednom výstupu je generován
pwm obvyklým způsobem, druhý výstup se překlápí v okamžiku
"délka_periody - doba_sepnutí_prvního_výstupu", ale tento výstup je
současně invertován. Výsledkem je stejně dlouhý impulz, ale posunutý o
půl periody. Druhý timer začíná na hodnotě odpovídající polovině
poloviny periody. Proto je časově posunut o čtvrtinu periody a jeho
druhý výstup o 3/4 periody. Protože oba timery nelze spustit současně,
je tam ještě malá korekce o dobu provedení spuštění časovače. Zde je
program:
uint16_t
ICRValue = 320; // Nastavení TOP hodnoty pro Timer, v tomto případě
25kHz
voidsetup(){
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
// Nastavení Timer4 pro Fast PWM
TCCR4A = (1<< COM4B1)| (1<< COM4B0)| (1<< COM4C1); // 7 inverted, 8
Non-inverted
TCCR4B = (1<< WGM43); // Fast PWM,
TOP = ICR4, no prescaler
ICR4 = ICRValue; // Nastavení
TOP délky periody PWM
OCR4C = 0; // Pin 8 na 0
OCR4B = ICR4; // Pin 7
(invertovaný) na 0
// Nastavení Timer1 pro Fast PWM
TCCR1A = (1<< COM1B1)| (1<< COM1B0)| (1<< COM1A1); // 11 inverted, 12
Non-inverted
TCCR1B = (1<< WGM13); // Fast PWM,
TOP = ICR1, no prescaler
ICR1 = ICRValue; // Nastavení
TOP délky periody PWM
OCR1A = 0; // Pin 11 na 0
OCR1B = ICR1; // Pin 12
(invertovaný) na 0
TCNT1 = ICR1 / 2 + 6; // časovač
začne o čtvrt periody později
// Současné spuštění obou časovačů
TCCR4B |= (1<< CS10); // Start Timer4
TCCR1B |= (1<< CS10); // Start Timer1
}
voidpwm(uint16_t pwm){
OCR4C = pwm;
OCR4B = ICRvalue - OCR4C;
OCR1A = OCR4C;
OCR1B = OCR4B;
}
voidloop(){
}
Martin Záruba
Dne 15.3.2025 v 17:48 Petr Zapadlo napsal(a):
>
> Použil bych dva timery a vhodným dosáhl téhož anebo máte jiný nápad?
>
> Petr
>
> Dne 15. 03. 25 v 12:56 Martin Záruba napsal(a):
>
>> V podstatě ano. Já potřebuji získat pulzy na 4 pinech. Při střídě 0%
>> jsou pochopitelně všechny piny na 0. Při 25% se postupně střídají,
>> jak jsem to napsal hned v zadání. Při 50% jsou vždy sepnuté 2 a
>> dokola se střídá které. Při 75% tři a jeden je vynechaný.
>>
>> Ten princip je samozřejmě shodný, ale jak jsem dosáhl, že piny
>> označené B a D jsou v rámci periody posunuté o čtvrtinu a třičtvrtiny?
>>
>> Martin Záruba
>> Dne 15.3.2025 v 12:47 Petr Zapadlo napsal(a):
>>>
>>> Teď se dívám, že máte na osciloskopu některé průběhy malinko jinak
>>> - mě se nikdy nepřekrývají, ale předpokládám, že vaší situace pujde
>>> dosáhnout trochu jiném nastavení časovače.
>>>
>>> Petr
>>>
>>> Dne 15. 03. 25 v 12:41 Petr Zapadlo napsal(a):
>>>>
>>>> Ono to je poměrně jednoduché - minimálně na atmega v mém případě
>>>> atmega 328:
>>>>
>>>> voidset_timer1(){
>>>> #ifdefOBDELNIK
>>>> //
>>>> TCCR1A=0;
>>>> TCCR1B=0;
>>>> //režím 8 Phase & frequency correct
>>>> TCCR1A=(1<<COM1A1) |(0<<COM1A0) |(1<<COM1B1) |(1<<COM1B0)
>>>> |(0<<WGM11) |(0<<WGM10);
>>>> TCCR1B=(0<<ICNC1) |(0<<ICES1) |(1<<WGM13) |(0<<WGM12) |(0<<CS12)
>>>> |(1<<CS11) |(1<<CS10);
>>>> TCNT1H=0x00;
>>>> TCNT1L=0x00;
>>>> ICR1=ICR1_TOP;
>>>> //OCR1A=100;
>>>> //OCR1B=240;
>>>> #endif
>>>> A ejhle, už to jede samo, důležitý je zvolený režim časovače 8.
>>>> A pak už jen nastavujeme registry pro plnění:
>>>> ///OCR1A 1-127 (127 je úplné plnění)
>>>> //OCR1B 127-255 (127 je úplné plnění)
>>>>
>>>> Použil jsem to, když jsem dělal měnič "modifikovaný sinus" na
>>>> napájení bojleru z PV panelů.
>>>>
>>>> Petr
>>>>
>>>>
>>>>
>>>> Dne 15. 03. 25 v 12:02 Martin Záruba napsal(a):
>>>>>
>>>>> Podělím se. Když nikoho nenapadne, jak jsem to udělal, dám sem
>>>>> výpis programu (je kraťoučký). Ale nechám vás ještě chvilku
>>>>> přemýšlet. Vzhledem k tomu, jak je ten procesor starý, mě
>>>>> fascinuje, co dovede a myslím, že zdaleka neumím všechno, co na
>>>>> něm jde udělat.
>>>>>
>>>>> Martin Záruba
>>>>> Dne 15.3.2025 v 11:55 Jirka Mww napsal(a):
>>>>>> Ne že bych to potřeboval hned zítra, ale Mega2560 je můj oblíbený
>>>>>> systém, takže pokud byste se podělil, zajímalo by mě to
>>>>>>
>>>>>> Dne so 15. 3. 2025 11:50 uživatel Martin Záruba <swz na volny.cz>
>>>>>> napsal:
>>>>>>
>>>>>> Že to jde, posílám ještě obrázky z osciloskopu. Nemám
>>>>>> čtyřkanál, takže červená čára je A a žlutá je ten druhý, tedy
>>>>>> B25 je výstup B se střídou 25%.
>>>>>>
>>>>>> B25.png (908×585) <http://www.ekovy.eu/B25.png> C25.png
>>>>>> (909×586) <http://www.ekovy.eu/C25.png> D25.png (908×580)
>>>>>> <http://www.ekovy.eu/D25.png>
>>>>>>
>>>>>> B50.png (906×582) <http://www.ekovy.eu/B50.png> C50.png
>>>>>> (906×583) <http://www.ekovy.eu/C50.png> D50.png (909×590)
>>>>>> <http://www.ekovy.eu/D50.png>
>>>>>>
>>>>>> běží to na Arduino Mega2560 rev3, originál | LaskaKit
>>>>>> <https://www.laskakit.cz/arduino-mega2560-rev3--original/>
>>>>>>
>>>>>> Martin Záruba
>>>>>>
>>>>>> Dne 15.3.2025 v 10:52 Martin Záruba napsal(a):
>>>>>>>
>>>>>>> Frekvence cca 25kHz, ale není problém, aby to chodilo i na
>>>>>>> 200kHz, jen bude podstatně méně kroků.
>>>>>>>
>>>>>>> Nic dalšího kritického tam nebude, ale (nápověda) to není
>>>>>>> důležité, ku podivu zbývá 100% času procesoru.
>>>>>>>
>>>>>>> Vzhledem k požadované frekvenci by posíláním dat na port
>>>>>>> procesor zoufale nestíhal.
>>>>>>>
>>>>>>> Asi by šlo něco novějšího, ale i na tomto (a pak jsem jej
>>>>>>> měl a snad ho i trochu umím) to jde..
>>>>>>>
>>>>>>> Martin Záruba
>>>>>>> Dne 15.3.2025 v 10:12 Pavel Hudeček napsal(a):
>>>>>>>> K tomu je potřeba vědět, jaký jsou další okolnosti, tedy
>>>>>>>> např. o jakých frekvencích se bavíme a zda se tam bude dít
>>>>>>>> něco dalšího časově kritickýho.
>>>>>>>>
>>>>>>>> U menší frekvence stačí třeba přerušení, který dokola
>>>>>>>> posílá data z paměti na port.
>>>>>>>>
>>>>>>>> A nakonec, pokud budou okolnosti nedobrý, jestli je nutná
>>>>>>>> mega a ne něco novějšího, kde je víc možností.
>>>>>>>>
>>>>>>>> PH
>>>>>>>>
>>>>>>>> Dne 15.03.2025 v 9:43 Martin Záruba napsal(a):
>>>>>>>>> Jak byste udělali na ATMega čtyři pwm signály, které budou
>>>>>>>>> proti sobě posunuté o čtvrt periody? Tedy takto:
>>>>>>>>>
>>>>>>>>> pwm 25%
>>>>>>>>>
>>>>>>>>> A: 1000
>>>>>>>>>
>>>>>>>>> B: 0100
>>>>>>>>>
>>>>>>>>> C: 0010
>>>>>>>>>
>>>>>>>>> D: 0001
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> pwm 50%
>>>>>>>>>
>>>>>>>>> A: 1100
>>>>>>>>>
>>>>>>>>> B: 0110
>>>>>>>>>
>>>>>>>>> C: 0011
>>>>>>>>>
>>>>>>>>> D: 1001
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> pwm 75%
>>>>>>>>>
>>>>>>>>> A: 1110
>>>>>>>>>
>>>>>>>>> B: 0111
>>>>>>>>>
>>>>>>>>> C: 1011
>>>>>>>>>
>>>>>>>>> D: 1101
>>>>>>>>>
>>>>>>>>> Samozřejmě i plynulejší přechody pwm, ne jen 25,50,75,
>>>>>>>>> cokoli (v rámci možností časovače) od 0 do 100%. Trápil
>>>>>>>>> jsem se s tím dva dny a je to docela jednoduché.
>>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> HW-list mailing list - sponsored by www.HW.cz
>>>>>>>> <http://www.HW.cz>
>>>>>>>> Hw-list na list.hw.cz
>>>>>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> HW-list mailing list - sponsored bywww.HW.cz <http://www.HW.cz>
>>>>>>> Hw-list na list.hw.cz
>>>>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>>>> _______________________________________________
>>>>>> HW-list mailing list - sponsored by www.HW.cz
>>>>>> <http://www.HW.cz>
>>>>>> Hw-list na list.hw.cz
>>>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> HW-list mailing list - sponsored bywww.HW.cz
>>>>>> Hw-list na list.hw.cz
>>>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>>>
>>>>> _______________________________________________
>>>>> HW-list mailing list - sponsored bywww.HW.cz
>>>>> Hw-list na list.hw.cz
>>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>>
>>>> _______________________________________________
>>>> HW-list mailing list - sponsored bywww.HW.cz
>>>> Hw-list na list.hw.cz
>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>
>>> _______________________________________________
>>> HW-list mailing list - sponsored bywww.HW.cz
>>> Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>>
>> _______________________________________________
>> HW-list mailing list - sponsored bywww.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
> _______________________________________________
> HW-list mailing list - sponsored bywww.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20250315/2dec036b/attachment-0001.htm>
Další informace o konferenci Hw-list