AVR Timer Interrupts Calculator

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

Používateľov profilový obrázok
roboulbricht
Stály člen
Stály člen
Príspevky: 156
Dátum registrácie: 07 Jan 2015, 12:01
Bydlisko: Banská Bystrica
Vek: 54
Kontaktovať používateľa:

AVR Timer Interrupts Calculator

Príspevok od používateľa roboulbricht » 10 Mar 2017, 16:15

Toto je kalkulačka na výpočet AVR timerov v CTC režime. Výsledkom je zdrojový kód, ktorý si môžete upraviť podľa potreby. Treba si zadať požadovaní frekvenciu a timer. Generovaný kód obsahuje vzorové blikanie z prerušenia. Primárne je to pre ATmega328P, čo je mikrokontrolér v doske Arduino Uno.

Kalkulačka je na adrese http://www.arduinoslovakia.eu/applicati ... calculator

Napríklad takto to vyzerá pre Timer1 a frekvenciu 1 Hz.

Kód: Vybrať všetko

// AVR Timer CTC Interrupts Calculator
// v. 5
// http://www.arduinoslovakia.eu/application/timer-calculator
// Microcontroller: ATmega328P
// Created: 2017-03-10T14:58:38.698Z

#define ledPin 13

void setupTimer1() {
  noInterrupts();
  // Clear registers
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;

  // 1 Hz (16000000/((15624+1)*1024))
  OCR1A = 15624;
  // CTC
  TCCR1B |= (1 << WGM12);
  // Prescaler 1024
  TCCR1B |= (1 << CS12) | (1 << CS10);
  // Output Compare Match A Interrupt Enable
  TIMSK1 |= (1 << OCIE1A);
  interrupts();
}

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

void loop() {
}

ISR(TIMER1_COMPA_vect) {
  digitalWrite(ledPin, digitalRead(ledPin) ^ 1);
}
V kalkulačke je využitý kód z AVR Register Table, ktorý tu pred pár týždňami niektorým diskutérom nešiel do hlavy. Je dobrý presne na takéto výpočty. Kalkulačka si drží iba názvy bitov, vypočíta si tie, ktoré je treba nastaviť a ku nim si dohľadá zodpovedajúce registre a vytvorí zdrojový kód.

Niekoľko ukážok kódu, ktoré som pomocou toho generoval.
https://github.com/RoboUlbricht/arduino ... ster/timer
0

Používateľov profilový obrázok
roboulbricht
Stály člen
Stály člen
Príspevky: 156
Dátum registrácie: 07 Jan 2015, 12:01
Bydlisko: Banská Bystrica
Vek: 54
Kontaktovať používateľa:

Re: AVR Timer Interrupts Calculator

Príspevok od používateľa roboulbricht » 02 Apr 2017, 21: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/applicati ... calculator
https://github.com/RoboUlbricht/arduino ... ny85/timer
0

Používateľov profilový obrázok
roboulbricht
Stály člen
Stály člen
Príspevky: 156
Dátum registrácie: 07 Jan 2015, 12:01
Bydlisko: Banská Bystrica
Vek: 54
Kontaktovať používateľa:

Re: AVR Timer Interrupts Calculator

Príspevok od používateľa roboulbricht » 09 Sep 2017, 18:18

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/applicati ... calculator
https://github.com/RoboUlbricht/arduino ... atmega2560
0

Používateľov profilový obrázok
roboulbricht
Stály člen
Stály člen
Príspevky: 156
Dátum registrácie: 07 Jan 2015, 12:01
Bydlisko: Banská Bystrica
Vek: 54
Kontaktovať používateľa:

Re: AVR Timer Interrupts Calculator

Príspevok od používateľa roboulbricht » 08 Mar 2018, 22:47

Doplnil som mikrokontrolér ATtiny84 do CTC timer kalkulátora. Na GitHub sú príklady pre 1 MHz a 8 MHz pre oba timery. V podstate možno povedať, že timer0 je registrovo rovnaký ako na ATmega328P a timer1 tiež.

https://www.arduinoslovakia.eu/applicat ... calculator
https://github.com/RoboUlbricht/arduino ... ny84/timer
0

Napísať odpoveď