Arduino schéma - arduino.sk

Výpočet timera v režime CTC

Programovanie arduina
Príspevky: 74
Registrovaný: Štv 04. Dec 2014 22:15:58
Bydlisko: Banská Bystrica

Výpočet timera v režime CTC

Poslaťod Robo Ulbricht » Str 18. Jan 2017 22:52:12

Pre mikrokontroléry ATmega328P som napísal kalkulačku, ktorá vypočíta nastavenie registrov pre želanú frekvenciu. Generuje to rovno zdrojový kód. Niečo podobného robí napríklad knižnica Timer1. Výsledkom je kód, ktorý si už len dotvoríte.

Kalkulačka je na adrese http://www.arduinoslovakia.eu/application/timer-calculator

Napríklad takto to vyzerá pre Timer1 a frekvenciu 1 Hz.
Kód: Vybrať všetko
// AVR Timer CTC Interrupts Calculator
// v. 3
// http://www.arduinoslovakia.eu/application/timer-calculator
// Microcontroller: ATmega328P
// Created: 2017-01-18T20:50:25.493Z

#define ledPin 13

void setupTimer() {
  noInterrupts();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1  = 0;
 
  OCR1A = 15624; // 1 Hz
  TCCR1A |= 0;
  TCCR1B |= (1 << WGM12);
  TCCR1B |= (1 << CS12) | (0 << CS11) | (1 << CS10);
  TIMSK1 |= (1 << OCIE1A);
  interrupts();
}

void setup() {
  pinMode(ledPin, OUTPUT);
  setupTimer();
}

void loop() {
}

ISR(TIMER1_COMPA_vect) {
  digitalWrite(ledPin, digitalRead(ledPin) ^ 1);
}

Príspevky: 74
Registrovaný: Štv 04. Dec 2014 22:15:58
Bydlisko: Banská Bystrica

Re: Výpočet timera v režime CTC

Poslaťod Robo Ulbricht » Ned 02. Apr 2017 21:36:44

Verzia 6 online kalkulátora prináša podporu mikrokontroléra ATtiny85. Tento mikrokontrolér má dva timery. Oba sú 8-bitové. Timer0 sa v podstate nelíši od toho, čo je v ATmega328P. Timer1 je iný. Nastavuje sa inak, má obrovské množstvo preddeličiek a donútiť ho robiť CTC prerušenie je trochu výzva. Ale všetko sa podarilo a testovacie príklady fungovali pre 1 MHz, 8 MHz a 16 MHz.

http://www.arduinoslovakia.eu/application/timer-calculator

https://github.com/RoboUlbricht/arduinoslovakia/tree/master/ATtiny85/timer

Príspevky: 74
Registrovaný: Štv 04. Dec 2014 22:15:58
Bydlisko: Banská Bystrica

Re: Výpočet timera v režime CTC

Poslaťod Robo Ulbricht » Sob 09. Sep 2017 18:28:12

Doplnil som výpočet pre CTC timer ATmega2560. Podľa datasheetu je to rovnaké aj pre mikrokontroléry ATmega640, ATmega1280, ATmega1281, ATmega2561. ATmega2560 má 2 8-bitové timery a 4 16-bitové.

http://www.arduinoslovakia.eu/application/timer-calculator
https://github.com/RoboUlbricht/arduinoslovakia/tree/master/timer/atmega2560

Späť na Software