Arduino Timer: ku ciyaar wakhtiga mashaariicdaada

saacad Arduino UNO

Muddo ka hor waxaan daabacnay macluumaad dheeraad ah oo ku saabsan millis() shaqada de ArduinoHadda waxaan si qoto dheer u sii wadi doonaa Arduino Timer, Si aad u bilawdo sifadan muuqaalka, faham sida guddigani u maareeyo wakhtiga MCU, iyo sidoo kale hawlo kale oo ka baxsan millis ().

Waa maxay saacada Arduino?

saacada arduino

El Saacadaha Arduino, ama saacadeeyaha, waa shaqo ay hirgelisay qalabka (microcontroller-ka, iyadoo la kaashanayo kristanta quartz ee soo saarta garaaca saacadda oo dejisa "laxanka", iyada oo aan loo baahnayn qalab dibadda ah ama ICs 555) taas oo u oggolaanaysa xakamaynta dhacdooyinka ku-meel-gaarka ah iyada oo ay ugu wacan tahay saacadaha gudaha. Tusaale ahaan, samaynta hawl u dhacdo waqtiyo kala duwan, samaynta cabbiraad sax ah, iwm, oo ka madax bannaan koodka sawir-gacmeedka.

Como Arduino UNO Waxay leedahay chip MCU ah oo ka shaqeeya 16 Mhz, 16.000.000 ayaa la dili karaa ilbiriqsi kasta. Tilmaamuhu waxay u baahan yihiin wareegyo X si ay u fuliyaan, dhammaantood ma fuliyaan wareegyo isku mid ah, tusaale ahaan, kuwa 16-bit ah waxay u baahan yihiin wareegyo badan oo ku jira dhismahan AVR.

Ka fikir inaad isticmaasho daahitaanka() shaqada, tani waxay xannibi doontaa fulinta Arduino MCU ilaa wakhtiga la cayimay uu dhaafo ka dibna sii wad barnaamijka, laakiin saacaduhu ma xannibi doono. Waxay noqon doontaa waqti marka MCU ay sii wado fulinta tilmaamaha kale isku mar. Taasi waa faa'iidada weyn.

Saacadaha ayaa la xidhiidha carqaladayn ee Arduino, maadaama lagu fulin doono iyaga si ay uga qaybgalaan hawl gaar ah. Si kale haddii loo dhigo, Arduino Timer waa shaqo kicisa waqti go'an, oo fulinaysa shaqo joojin. Taasi waa sababta ay sidoo kale muhiim u tahay in la ogaado carqaladahaas.

Hababka

Arduino Timer ayaa leh 2 qaababka hawlgalkaawood u leh inuu ku isticmaalo:

  • Calaamadaha PWM: Waad xakameyn kartaa biinanka Arduino (~).
  • CTC (Nadiifi saacadaha isbarbardhigga): waxa uu xisaabiyaa wakhtiga gudaha miiska marka uu gaadho qiimaha lagu sheegay diiwaanka saacadaha, hakadka ayaa la fulinayaa.

Immisa saacadood ayay leedahay? Noocyada Saacadaha

Arduino UNO hawlaha millis

Waxaa jira 3 saacadood on taarikada Arduino UNO, inkastoo laga yaabo inay wax badan ku jiraan taarikada kale ee sare:

  • Saacad 0: 8-bit, waxaa lagu tirin karaa 0 ilaa 255 (256 qiimaha suurtagalka ah). Loo isticmaalo hawlaha sida daahitaanka(), millis(), iyo micros(). Wax ka beddelkeeda laguma talinayo si aan loo beddelin barnaamijyada.
  • Saacad 1: waxay le'eg tahay saacada 0. Waxaa adeegsada maktabadda Servo ee UNO (Wakhtiga 5 ee MEGA).
  • Saacad 2: 16-bit, waxayna u dhaxayn kartaa 0 ilaa 65.525 (65.536 qiimayaasha suurtagalka ah). Loo isticmaalo codka () shaqada, haddii aan la isticmaalin, waxa loo isticmaali karaa si xor ah codsigaaga.
  • Saacadaha 3, 4, 5 (kaliya Arduino MEGA): dhammaan 16-bit.

Sidee buu Arduino Timer u shaqeeyaa?

saacadaha, saacadaha

Si aad u awooddo la shaqee Arduino Timer, waa muhiim in la ogaado sida waxaas oo dhami ay ugu shaqeeyaan si elektaroonig ah MCU ee guddiga horumarinta:

  • Soocelinta saacadda: waa tirada wareegyada ilbiriqsikii ee ay awood u leedahay in ay kor u kacdo, Arduino waa 16 Mhz, ama waxa la mid ah, saacaddu waxay ku wareegtaa 16.000.000 jeer ilbiriqsi (wareegyo).
  • Muddada: waxaa lagu matalaa T, waxaana lagu cabbiraa ilbiriqsiyo, waana rogaal celinta wareegyada. Tusaale ahaan, T=1/C, taas oo keeni karta 1/16000000 = 0.0000000625, wakhtiga ay qaadanayso in wareeg kasta la dhamaystiro. Inta jeerku waa rogaal celinta xilliga, markaa f = 1/T.
  • Wareeg: waa mid kasta oo ka mid ah ku celcelinta calaamada ku dhacda halbeeg kasta. Arduino waxay noqon doontaa 16M ilbiriqsi gudaheed. Ama maxaa la mid ah, kiiskan, marka 16 milyan oo wareeg ah, hal ilbiriqsi ayaa gudbay. Sidaa darteed, hal wareeg ayaa la odhan karaa wuxuu qaadanayaa 625 ns.
  • cidhifka calaamadCalaamadaha saacaddu waa afar gees, cidhifyadu waxay noqon karaan kuwo kor u kacaya ama soo dhacaya. Cidhifku waa xariiqda toosan ee calaamadda marka ay ka beddesho:
    • 0 (hoose) ilaa 1 (sare): gees kor u kacaysa.
    • 1 (sare) ilaa 0 (hoose): gees soo dhacaya.

Cidhifyadu waa muhiim sababtoo ah saacadaha Arduino waxay cabbiraan wareegyada cidhifyada calaamadaha. A) Haa kontadorka waxay kordhisaa wareeg kasta oo marka ay gaadho qiimaha diiwaanka, joojinta waa la fuliyay.

Sidaa darteed, marka aad tan ogaato, haddii aad leedahay 16Mhz ee Arduino MCU, iyo 8-bit Timer ayaa la isticmaalaa, waxaa la dhihi karaa hakadyadu waxay dhici doonaan 16 μs (256/16000000) ama 4 ms 16-bit (65536/16000000). Sidaa darteed, haddii aad dejiso diiwaanka counter 16-bit ugu badnaan, oo leh qiimaha 65535, ka dibna joojinta waxay ku dhici doontaa 4 ms si loo fuliyo hawl kasta oo ay tahay.

Marka miiska miiska uu gaaro qiimaha ugu badan ee suurtogalka ah, waxay ku noqon doontaa 0 mar kale. Taasi waa, qulqulitaan ayaa dhacaya oo dib ayay u tirin doontaa bilowga hore.

Si aad u xakamayso heerka korodhka saacada waxa kale oo aad isticmaali kartaa prescaler, kaas oo qaadata qiyamka 1, 8, 64, 256 iyo 1024 oo bedelaya wakhtiga sidan oo kale:

Xawaaraha saacada (Hz) = Inta jeer ee saacada Arduino / Prescaler

Haddii ay tahay 1 prescaler-ka koontarooluhu wuxuu kordhin doonaa ilaa 16 Mhz, haddii ay tahay 8 ilaa 2 Mhz, haddii ay tahay 64 ilaa 250 kHz, iyo wixii la mid ah. Xasuusnoow in uu jiri doono saacadeeyaha counter state comparator si loo isbarbar dhigo qiimaha miiska iyo kan hore ilaa ay ka siman yihiin kadibna ay fuliyaan ficil. Haddaba, joojinta inta jeer waxaa lagu bixiyaa qaacidada:

+1 waa sababta oo ah diiwaanka counter-ta waxaa lagu tilmaamay 0, tusaale ahaan, kuma bilaabmayo tirinta 1, laakiin 0.

Xawaaraha kala go'a (Hz) = Inta jeer ee Arduino / Prescaler (qiimaha diiwaanka isbarbardhiga + 1)

Nasiib wanaag, waa inaan wax ka beddel xogta ee Arduino Timers, maadaama ay daryeeli doonaan maktabadaha aan ku isticmaalno koodhka. Laakiin haddii aan la isticmaalin, waa in la habeeyaa.

Tusaalooyinka ku jira Arduino IDE

Arduino IDE, noocyada xogta, barnaamijyada

Si aan waxaas oo dhan u yara yara fahmo, halkan waxaan ku tusayaa laba kood oo sawir-gacmeed oo Arduino IDE ah oo aad kula kulmi karto isticmaalka saacadaha. Midka koowaad waa koodka ilbiriqsi doona LED ku xiran Arduino pin 8 ilbiriqsi kasta:

#define ledPin 8
void setup()
{
  pinMode(ledPin, OUTPUT);
  // Configurar Timer1
  TCCR1A = 0;                        //Registro control A a 0, pines OC1A y OC1B deshabilitados
  TCCR1B = 0;                        //Limpia el registrador
  TCCR1B |= (1<<CS10)|(1 << CS12);   //Configura prescaler a 1024: CS12 = 1 y CS10 = 1
  TCNT1 = 0xC2F8;                    //Iniciar timer para desbordamiento a 1 segundo
                                     //65536-(16MHz/1024/1Hz - 1) = 49912 = 0xC2F8 en hexadecimal
  
  TIMSK1 |= (1 << TOIE1);           //Habilitar interrupción para Timer1
}
void loop()
{
}
ISR(TIMER1_OVF_vect)                              //Interrupción del TIMER1 
{
  TCNT1 = 0xC2F7;                                 // Reniciar Timer1
  digitalWrite(ledPin, digitalRead(ledPin) ^ 1); //Invierte el estado del LED
}

U diyaari biliglashada ama biliglashada LED-ka, sida kiiskii hore ilbiriqsi kasta, laakiin markan isticmaal CTC tusaale ahaan isbarbardhigga:

#define ledPin 8
void setup()
{
  pinMode(ledPin, OUTPUT);
  
  // Configuración Timer1
  TCCR1A = 0;                //Registro de control A a 0
  TCCR1B = 0;                //Limpiar registro
  TCNT1  = 0;                //Inicializar el temporizador
  OCR1A = 0x3D08;            //Carga el valor del registro de comparación: 16MHz/1024/1Hz -1 = 15624 = 0X3D08
  TCCR1B |= (1 << WGM12)|(1<<CS10)|(1 << CS12);   //Modo CTC, prescaler de 1024: CS12 = 1 y CS10 = 1  
  TIMSK1 |= (1 << OCIE1A);  //Habilita interrupción por igualdad de comparación
}
void loop()
{
}
ISR(TIMER1_COMPA_vect)          //Interrupción por igualdad de comparación en TIMER1
{
  digitalWrite(ledPin, digitalRead(ledPin) ^ 1);   //Invierte el estado del LED
}

Wax badan oo ku saabsan barnaamijka Arduino

soo iibso saxan Arduino UNO Nolosha 3

Noqo kuwa ugu horreeya ee faallo bixiya

Ka tag faalladaada

cinwaanka email aan la daabacin doonaa. Beeraha loo baahan yahay waxaa lagu calaamadeeyay la *

*

*

  1. Masuul ka ah xogta: Miguel Ángel Gatón
  2. Ujeedada xogta: Xakamaynta SPAM, maaraynta faallooyinka.
  3. Sharci: Oggolaanshahaaga
  4. Isgaarsiinta xogta: Xogta looma gudbin doono dhinacyada saddexaad marka laga reebo waajibaadka sharciga ah.
  5. Kaydinta xogta: Macluumaadka ay martigelisay Shabakadaha Occentus (EU)
  6. Xuquuqda: Waqti kasta oo aad xadidi karto, soo ceshan karto oo tirtiri karto macluumaadkaaga.