Witam,
Mam problem, jestem w trakcie projektu (Mikroprocesorowy kontroler ładowania akumulatorów z użyciem ogniw fotowoltaicznych)wykorzystuje w nim zestaw uruchomieniowy ATB, do mojego buck converter'a używam trybu pwm korekcja fazy i częstotliwości dla Timer'a1 i otóż nie wiem co robię źle. Problem polega na tym, że nie potrafię uzyskać częstotliwości 50kHz. Używam kwarcu 12MHz, współczynnik preskalera równy 1, wartość top - ICR1, COM1A1 oraz COM1B1 ustawiam na jeden co powoduje, że kasuje OC1A/OC1B przy zrównaniu podczas zliczania w górę, ustawia przy zrównaniu podczas zliczania w dół.
Wartość ICR1 ustawiam na 115. I tu się pojawia problem. Według noty katalogowej Atmegi32 f=fclk/2*N*TOP gdzie n to współczynnik preskalera.
f = 12 000 000 / (2*1*115) = 52173 (w przybliżeniu). I otóż ku memu zdziwieniu na oscyloskopie wartość na wyjściu OC1A jest wystawiana
z częstotliwością 50Hz! Wstawiłbym kod ale jest on trochę skomplikowany i dopiero jutro coś na szybko prostego wyskrobię żeby pokazać jaką mam konfigurację w kodzie. Próbowałem również dla trybu fast pwm (wewnętrzny oscylator 1MHz) i tam otrzymywałem o połowę mniejszą częstotliwość. W czym tkwi problem? Proszę o pomoc. Może jakieś rady? Coś przeoczyłem?
Kod dla trybu fast pwm i dodaje obrazek z oscyloskopu(trochę nie wyraźnie) na oscyloskopie pokazuje 1.234kHz:
f=fclk/(N*TOP) => f=1 000 000/ (1*400) = 2500
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Listingi programów w C wklejamy przy pomocy syntax=c - Anty.Bardzo proszę o pomoc.