Zdravím rottenkiwi,rottenkiwi píše: ↑úte lis 30, 2021 1:47 pm Ja viem ako sa to robi cez registre, ale aby som dosiahol napr. 4 MHz. spinanie,
tak to nepojde cez registre, lebo tam je prave ten problem,
ze loop musi by prazdny a musi v nom byt while / TRUE /.
musím ocenit Váš elán, ale nedá mi to abych nevaroval před slepou cestou.
Negenerujete konstantní frekvenci, ale PWM signál, kde se mění poměr zap/vyp. Ten poměr určuje výstupní napětí měniče a pro alespoň nějakou přesnost potřebujete rozlišit 128 úrovní. Teoretický příklad: při vstupu 100V a rozlišení 128 jste na kroku výstupního napětí cca. 0.8V. Pro nabíjení baterie příliš hrubé(profesionální řešení používají i 16b tj. 65535 úrovní), snad pro regulaci napájení osvětlení, ...
Pokud je potřeba generovat PWM, musí se do smyčky zařadit 128 kroků a po uběhnutí patřičného počtu kroků přehodit úroveň výstupního pinu. Z toho plyne jedná zásadní věc, výstupní frekvence PWM signálu je 128x nižší než konstantní frekvence. Při 4MHz a 128 úrovních vychází frekvence pwm cca. 31kHz.
Abyste generoval PWM softwarově, potřebujete ve smyčce počítat uběhly čas, ale jak zjistíte na kolik se má nastavit střída? Jakékoli odskočení z hlavní smyčky způsobí zařazení předem neznámého zpoždění, např. vyčtení A/D převodníku, načteni ser. portu, atd... V ten okamžik generujete delší periodu PWM, které způsobí rozkmit výstupní úrovně.
Sw generování PWM není cesta, spíše se podívejte na řadu ATtiny861, kde je pll běžící na 64MHz, dead time generátor. Toto je vhodný adept na jednoduchý měnič.
Vše důležité k HW jíž zmínil Kodl69. Jen podtrhnu potřebu správného buzení Gate spínače.
Kamil