Isikhathi seArduino: dlala ngexesha kwiiprojekthi zakho

iiyure Arduino UNO

Ngexesha elidlulileyo sapapasha ulwazi oluninzi malunga ne millis () umsebenzi de ArduinoNgoku siza kuphanda nzulu Arduino Timer, ukuze uqalise ngolu phawu lwesici, qonda ukuba le bhodi ilawula njani ixesha kunye ne-MCU, kunye neminye imisebenzi engaphaya kwemillis ().

Yintoni iArduino Timer?

isibali-xesha searduino

El Isibali-xesha seArduino, okanye isibali-xesha, ngumsebenzi ophunyezwe yi-hardware (kwi-microcontroller, ngoncedo lwe-quartz crystal eyenza i-clock pulses kwaye ibeka "isigqi", ngaphandle kwesidingo se-hardware yangaphandle okanye i-ICs 555) evumela ukulawula iziganeko zexeshana ngokubonga kwiiwotshi. ngaphakathi. Umzekelo, ukwenza umsebenzi wenzeke ngamaxesha athile, ukwenza imilinganiselo yexesha elichanekileyo, njl., ngokuzimeleyo kwikhowudi yomzobo.

Como Arduino UNO Ine-chip ye-MCU esebenza kwi-16 Mhz, i-16.000.000 inokuphunyezwa rhoqo ngesekhondi. Imiyalelo idinga imijikelo ye-X ukuze iphunyezwe, ayizizo zonke ezisebenza kumjikelo wewotshi efanayo, umzekelo, i-16-bit idinga imijikelo engaphezulu kolu lwakhiwo lwe-AVR.

Khawucinge ukuba usebenzisa i ulibaziseko () umsebenzi, oku kuya kuvala ukuphunyezwa kwe Arduino MCU kude kube lixesha elichaziweyo kwaye liqhubeke neprogram, kodwa isibali-xesha asiyi kuvala. Iza kuba lixesha njengoko i-MCU iqhubeka nokwenza eminye imiyalelo ngaxeshanye. Nantso ke inzuzo enkulu.

Isibali-xesha sinxulumene ne iziphazamiso yeArduino, kuba baya kubulawa ngabo ukuya kumsebenzi othile. Ngamanye amagama, i-Timer yeArduino ngumsebenzi owenziwa ngexesha elithile, uqhuba umsebenzi wokuphazamiseka. Yiyo loo nto kubalulekile ukwazi ngezi ziphazamiso.

Iindlela

Isibali-xesha seArduino siye Iindlela ezine zokusebenza, ukukwazi ukuyisebenzisa kwi:

  • Uphawu lwePWM: Ungayilawula i Izikhonkwane zeArduino (~).
  • CTC (Cima isibali-xesha kumdlalo wokuthelekisa): ibala ixesha ngaphakathi kwekhawunta kwaye xa ifikelela kwixabiso elichazwe kwirejista yezibali-xesha, ukuphazamiseka kuyenziwa.

Ingaba inamaxesha amangaphi? Iindidi zezibali-xesha

Arduino UNO imisebenzi yemillis

Kukho Izibali-xesha ezi-3 kwiipleyiti Arduino UNO, nangona kunokubakho ngaphezulu kwezinye iipleyiti eziphezulu:

  • Isibali-xesha 0: I-8-bit, ingabala ukusuka kwi-0 ukuya kwi-255 (amaxabiso anokuba ngama-256). Isetyenziswa yimisebenzi efana nokulibaziseka (), millis(), kunye neemicro(). Ukuguqulwa kwayo akukhuthazwa ukwenzela ukuba ungatshintshi iinkqubo.
  • Isibali-xesha 1: ilingana ne-Timer 0. Isetyenziswa yilayibrari ye-Servo e-UNO (i-Timer 5 ye-MEGA).
  • Isibali-xesha 2: I-16-bit, kwaye inokusuka kwi-0 ukuya kwi-65.525 (i-65.536 amanani anokwenzeka). Isetyenziselwa ithowuni () umsebenzi, ukuba ayisetyenziswanga, ingasetyenziswa ngokukhululekileyo kwisicelo sakho.
  • Timer 3, 4, 5 (kuphela kwiArduino MEGA): yonke i-16-bit.

Isebenza njani iArduino Timer?

izibali-xesha, izibali-xesha

Ukuze ukwazi sebenza ngeArduino Timer, kubalulekile ukwazi ukuba konke oku kusebenza njani nge-elektroniki kwi-MCU yale bhodi yophuhliso:

  • Ukuhamba rhoqo kwewotshi: linani lemijikelezo ngesekhondi elikwazi ukuphuhlisa, kwimeko ye-Arduino yi-16 Mhz, okanye yintoni efanayo, isibonakaliso sewashi sijikeleza amaxesha angama-16.000.000 ngomzuzwana (imijikelezo).
  • Ixesha: imelwe yi-T, kwaye ilinganiswa ngemizuzwana, kwaye i-inverse of the cycles. Umzekelo, T=1/C, okuya kukhokelela ku-1/16000000 = 0.0000000625, ixesha eliya kulithabatha ukuze ugqitywe umjikelo ngamnye. Kwaye i-frequency yi-inverse yexesha, ngoko f = 1/T.
  • Umjikelo: luphindo ngalunye lomqondiso olwenzeka ngeyunithi yexesha. Kwi-Arduino iya kuba yi-16M ngomzuzwana. Okanye yintoni efanayo, kule meko, xa imijikelo yezigidi ezili-16 idlulile, isekhondi enye idlulile. Ngoko ke, umjikelo omnye unokuthiwa uthathe i-625 ns.
  • Ukuphela komqondiso: Iimpawu zewashi zisikwere, kwaye imiphetho inokunyuka okanye ukuwa. Umphetho ngumgca othe ngqo wophawu xa utshintsha ukusuka:
    • I-0 (ephantsi) ukuya ku-1 (phezulu): i-edge ekhuphukayo.
    • 1 (phezulu) ukuya ku-0 (phantsi): isiphelo esiwayo.

Imiphetho ibalulekile kuba iArduino timers ilinganisa imijikelo ukusuka kwincam yesignali. A) Ewe i-contador inyuka kunye nomjikelo ngamnye kwaye xa ifikelela kwixabiso lerejista, ukuphazamisa kuphunyezwa.

Ke ngoko, xa sele uyazi oku, ukuba unayo 16Mhz kwiArduino MCU, kunye ne-8-bit Timer isetyenzisiweyo, kunokuthiwa ukuphazamiseka kuya kwenzeka rhoqo nge-16 μs (256/16000000) okanye i-4 ms ye-16-bit (65536/16000000). Ngoko ke, ukuba ubeka irejista ye-16-bit kwinani eliphezulu, kunye nexabiso le-65535, ngoko ukuphazamiseka kuya kwenzeka kwi-4 ms ukwenza nawuphi na umsebenzi.

Xa ikhawuntara ifikelela kwelona xabiso liphezulu linokwenzeka, izakubuyela ku-0 kwakhona. Oko kukuthi, ukuphuphuma kuyenzeka kwaye kuya kubala umva kwasekuqaleni.

Ukulawula izinga lokunyuka kwesibali-xesha ungasebenzisa kwakhona iprescaler, ethatha amaxabiso 1, 8, 64, 256 kunye ne-1024 kwaye iguqule ixesha ngolu hlobo:

Isantya sexesha (Hz) = Ukuphindaphinda kwewotshi yeArduino / Prescaler

Ukuba i-1 i-prescaler umlawuli uya kunyuka ukuya kwi-16 Mhz, ukuba ngu-8 ukuya ku-2 Mhz, ukuba ngu-64 ukuya ku-250 kHz, njalo njalo. Khumbula ukuba kuya kubakho uthelekiso lwemeko yekhawunta yesibali ukuthelekisa ixabiso lekhawuntara kunye nesikali sangaphambili de zilingane kwaye emva koko wenze isenzo. Ngoko, phazamisa rhoqo inikwa ngefomula:

+1 kungenxa yokuba irejista yekhawunta ibhalwe ku-0, oko kukuthi ayiqali ukubala ku-1, kodwa ku-0.

Ukuphazamisa isantya (Hz) = Arduino / Prescaler Clock Frequency (ixabiso lerejista yokuthelekisa + 1)

Ngethamsanqa, akufuneki guqula iirekhodi yeArduino Timers, kuba iya kukhathalelwa ngamathala eencwadi esiwasebenzisayo kwikhowudi. Kodwa ukuba azisetyenziswanga, kufuneka ziqwalaselwe.

Imizekelo kwi-Arduino IDE

Arduino IDE, iintlobo zedatha, inkqubo

Ukuze ukuqonde konke oku ngcono kancinci, apha ndibonisa iikhowudi ezimbini zomzobo we-Arduino IDE onokufumana ngayo amava okusetyenziswa kwamaxesha. Eyokuqala yikhowudi eya kuqhwanyaza i-LED eqhagamshelwe kwi-Arduino pin 8 nganye yesibini:

#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
}

Cwangcisa ukudanyaza okanye ukudanyaza kwe-LED, njengakwimeko yangaphambili nganye yesibini, kodwa ngeli xesha usebenzisa CTC okt uthelekiso:

#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
}

Okungakumbi malunga nenkqubo yeArduino

thenga ipleyiti Arduino UNO ISityhi

Yiba ngowokuqala ukuphawula

Shiya uluvo lwakho

Idilesi yakho ye email aziyi kupapashwa. ezidingekayo ziphawulwe *

*

*

  1. Uxanduva lwedatha: UMiguel Ángel Gatón
  2. Injongo yedatha: Ulawulo lwe-SPAM, ulawulo lwezimvo.
  3. Umthetho: Imvume yakho
  4. Unxibelelwano lwedatha: Idatha ayizukuhanjiswa kubantu besithathu ngaphandle koxanduva lomthetho.
  5. Ukugcinwa kweenkcukacha
  6. Amalungelo: Ngalo naliphi na ixesha unganciphisa, uphinde uphinde ucime ulwazi lwakho.