Dzień Dobry,
Mam pytanie odnośnie programowania mikro kontrolerów.
Zajmuję się akurat ATTINY2313A.
Mam ustawiony wewnętrzny oscylator na częstotliwość 4 MHz bez wewnętrznego podziału zegara przez 8.
Poniżej mój krótki kod w 😄
#include <avr/io.h>
int main(void) {
DDRB = _BV(DDB0); // ustawienie pinu PB0 w stan wyjścia
TCCR0A = _BV(WGM01); // ustawienie generatora w tryb CTC
TCCR0B = _BV(CS00); // wybór zegara z skalowaniem przez 1
OCR0A = 1; // ustawienie górnej wartości licznika
while (1) {
if (TIFR & _BV(OCF0A)) { // sprawdzenie czy w rejestrze TIFR ustawiona została flaga OCF0A po przepełnieniu licznika OCR0A
TIFR |= _BV(OCF0A); // wyzerowanie flagi OCF0A poprzez ustawienie logicznej jedynki
PORTB ^= _BV(DDB0); // przełączenie bitu na pinie PB0
}
}
}
W moim przypadku według dokumentacji czyli wzoru poniżej:
fOC0A=fclk_I/O/(2·N·(1+OCR0A))
fOC0A=4000000/(2·1·(1+1))
fOC0A=1000000=1MHz
A teraz do meritum:) Co robię nie tak? Częstotliwość którą uzyskuję to --> 207.4KHz. W załączniku przesyłam zdjęcie z oscyloskopu z widocznym przebiegiem na pinie PB0.
Pozdrawiam,
Oskar Zaremba