Isikhathi se-Arduino: dlala ngesikhathi kumaphrojekthi akho

Isikhathi Arduino UNO

Esikhathini esedlule sashicilela ulwazi olwengeziwe mayelana ne- millis() umsebenzi de I-ArduinoManje sizojula kule ndaba Isikhathi se-Arduino, ukuze uqalise ngalesi sici sesici, qonda ukuthi leli bhodi lisiphatha kanjani isikhathi ne-MCU, kanye neminye imisebenzi engale kwe-millis().

Yini i-Arduino Timer?

isibali sikhathi se-arduino

El Isikhathi se-Arduino, noma isibali sikhathi, kuwumsebenzi osetshenziswa yi-hardware (ku-microcontroller, ngosizo lwekristalu ye-quartz ekhiqiza ama-pulses wewashi futhi ebeka "isigqi", ngaphandle kwesidingo se-hardware yangaphandle noma i-ICs 555) evumela ukulawula imicimbi yesikhashana ngenxa yamawashi. yangaphakathi. Isibonelo, ukwenza umsebenzi wenzeke ngezikhathi ezithile, ukwenza izilinganiso zesikhathi ezinembile, njll., ngaphandle kwekhodi yomdwebo.

Como Arduino UNO Ine-chip ye-MCU esebenza ku-16 Mhz, i-16.000.000 ingabulawa umzuzwana ngamunye. Imiyalo idinga imijikelezo engu-X ukuze isetshenziswe, akuyona yonke esebenza emijikelezweni yewashi efanayo, isibonelo, eyi-16-bit edinga imijikelezo eyengeziwe kulokhu kwakhiwa kwe-AVR.

Cabanga ukuthi usebenzisa i- delay() umsebenzi, lokhu kuzovimba ukusebenza ku-Arduino MCU kuze kudlule isikhathi esishiwo bese uqhubeka nohlelo, kodwa isibali sikhathi ngeke sivimbe. Kuzoba isikhathi njengoba i-MCU iqhubeka nokwenza eminye imiyalo kanye kanye. Yilokho inzuzo enkulu.

Isibali sikhathi sihlobene ne iziphazamiso ze-Arduino, njengoba zizobulawa ngazo ukuze zihambele umsebenzi othile. Ngamanye amazwi, i-Arduino Timer iwumsebenzi oqalwa ngesikhathi esithile, wenze umsebenzi ophazamisayo. Yingakho kubalulekile futhi ukwazi ngalezi ziphazamiso.

Amamodi

I-Arduino Timer ine 2 izindlela zokusebenza, ukwazi ukuyisebenzisa ku:

  • Isignali ye-PWM: Ungakwazi ukulawula Izikhonkwane ze-Arduino (~).
  • I-CTC (Sula isibali sikhathi ekuqhathaniseni okufanayo): ibala isikhathi ngaphakathi kwekhawunta futhi uma ifika kunani elishiwo kurejista yezibali-sikhathi, ukuphazamisa kuyenziwa.

Zingaki izikhathi ezinazo? Izinhlobo Zezibali-zikhathi

Arduino UNO imisebenzi yama-millis

Kukhona 3 izikhathi emapuletini Arduino UNO, nakuba kungase kube nokunye kwamanye amapuleti aphezulu:

  • Isikhathi 0: 8-bit, ingabala ukusuka ku-0 kuye ku-255 (amanani angenzeka angama-256). Kusetshenziswa imisebenzi efana nokulibaziseka(), millis(), kanye nama-micros(). Ukuguqulwa kwayo akunconywa ukuze kungashintshi izinhlelo.
  • Isikhathi 1: ilingana ne-Timer 0. Isetshenziswa ilabhulali ye-Servo eku-UNO (Isibali sikhathi 5 se-MEGA).
  • Isikhathi 2: 16-bit, futhi ingasukela ku-0 kuye ku-65.525 (amanani angaba ngu-65.536). Isetshenziselwa umsebenzi wethoni(), uma ingasetshenziswa, ingasetshenziswa ngokukhululeka kuhlelo lwakho lokusebenza.
  • Isikhathi 3, 4, 5 (ku-Arduino MEGA kuphela): yonke i-16-bit.

Sisebenza kanjani i-Arduino Timer?

izikhathi, izikhathi

Ukuze ukwazi sebenza nge-Arduino Timer, kubalulekile ukwazi ukuthi konke lokhu kusebenza kanjani ngekhompyutha ku-MCU yaleli bhodi lokuthuthukisa:

  • Imvamisa yewashi: inombolo yemijikelezo ngomzuzwana ekwazi ukuyithuthukisa, esimweni se-Arduino yi-16 Mhz, noma yini efanayo, isignali yewashi i-oscillates izikhathi ezingu-16.000.000 ngomzuzwana (imijikelezo).
  • Isikhathi: imelelwa u-T, futhi ikalwa ngamasekhondi, futhi iwukuphambene kwemijikelezo. Isibonelo, T=1/C, okungaholela ku-1/16000000 = 0.0000000625, isikhathi esingasithatha ukuze umjikelezo ngamunye uphele. Futhi i-frequency iwukuphambene nesikhathi, ngakho-ke f = 1/T.
  • Umjikelezo: ukuphindaphinda ngakunye kwesignali okwenzeka ngeyunithi yesikhathi. Ku-Arduino kungaba ngu-16M ngomzuzwana. Noma yini efanayo, kulokhu, lapho imijikelezo eyizigidi ezingu-16 isidlulile, umzuzwana owodwa usudlulile. Ngakho-ke, umjikelezo owodwa kungathiwa uthatha ama-625 ns.
  • emaphethelweni esignali: Izimpawu zewashi ziyisikwele, futhi imiphetho ingakhuphuka noma yehle. Unqenqema umugqa oqondile wesiginali uma ishintsha ukusuka ku-:
    • 0 (phansi) ukuya ku-1 (phezulu): unqenqema olukhuphukayo.
    • 1 (phezulu) kuya ku-0 (phansi): unqenqema oluwayo.

Imiphetho ibalulekile ngoba izibali sikhathi ze-Arduino zikala imijikelezo ukusuka emaphethelweni esignali. A) Yebo i-contador iyakhula ngomjikelezo ngamunye futhi lapho ifinyelela inani lerejista, ukuphazamisa kukhishwa.

Ngakho-ke, uma ukwazi lokhu, uma ukwazi 16Mhz ku-Arduino MCU, kanye nesibali-sikhathi esingu-8-bit sisetshenziswa, kungashiwo ukuthi ukuphazamiseka kuzokwenzeka njalo ngo-16 μs (256/16000000) noma u-4 ms ku-16-bit (65536/16000000). Ngakho-ke, uma usetha irejista yekhawunta ye-16-bit ibe phezulu, enenani elingu-65535, khona-ke ukuphazamiseka kuzokwenzeka ngo-4 ms ukwenza noma yimuphi umsebenzi okuwu.

Lapho ikhawunta ifinyelela inani eliphakeme kakhulu elingenzeka, izobuyela ku-0 futhi. Okusho ukuthi, ukuchichima kwenzeka futhi kuzobala emuva kusukela ekuqaleni.

Ukuze ulawule izinga lokunyuka kwesibali sikhathi ungasebenzisa futhi i-prescaler, ethatha amanani 1, 8, 64, 256 kanye no-1024 futhi iguqule isikhathi kanje:

Isivinini Sesikhathi (Hz) = Imvamisa yewashi le-Arduino / Prescaler

Uma kungu-1 i-prescaler isilawuli sizokhuphuka sibe ngu-16 Mhz, uma singu-8 kuya ku-2 Mhz, uma singama-64 kuya ku-250 kHz, njalonjalo. Khumbula ukuthi kuzoba khona isiqhathaniso sesimo sesibali sesikhathi sokuqhathanisa inani lekhawunta nesilinganisi sangaphambili kuze kube ziyalingana bese wenza isenzo. Ngakho, phazamisa imvamisa inikezwa ngefomula:

+1 kungenxa yokuthi irejista yekhawunta ikhonjwe kokuthi 0, okungukuthi ayiqali ukubala ku-1, kodwa ku-0.

Isivinini Sokuphazamisa (Hz) = I-Arduino / Prescaler Clock Frequency (inani lerejista yesiqhathanisi + 1)

Ngenhlanhla, akufanele guqula amarekhodi ye-Arduino Timers, njengoba izonakekelwa yimitapo yolwazi esiyisebenzisa kukhodi. Kodwa uma zingasetshenzisiwe, kufanele zilungiselelwe.

Izibonelo ku-Arduino IDE

I-Arduino IDE, izinhlobo zedatha, ukuhlela

Ukuze ukuqonde konke lokhu kangcono, lapha ngibonisa amakhodi amabili emidwebo we-Arduino IDE ongathola ngawo ukuzwa ukusetshenziswa kwezibali sikhathi. Eyokuqala ikhodi ezocwayiza i-LED exhunywe ku-Arduino pin 8 njalo ngomzuzwana:

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

Hlela ukucwayiza noma ukucwayiza kwe-LED, njengasekuqaleni njalo ngomzuzwana, kodwa kulokhu usebenzisa I-CTC i.e. ukuqhathanisa:

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

Okuningi mayelana nohlelo lwe-Arduino

ukuthenga ipuleti Arduino UNO Isambiso3

Yiba ngowokuqala ukuphawula

Shiya umbono wakho

Ikheli lakho le ngeke ishicilelwe. Ezidingekayo ibhalwe nge *

*

*

  1. Ubhekele imininingwane: Miguel Ángel Gatón
  2. Inhloso yedatha: Lawula Ugaxekile, ukuphathwa kwamazwana.
  3. Ukusemthethweni: Imvume yakho
  4. Ukuxhumana kwemininingwane: Imininingwane ngeke idluliselwe kubantu besithathu ngaphandle kwesibopho esisemthethweni.
  5. Isitoreji sedatha: Idatabase ebanjwe yi-Occentus Networks (EU)
  6. Amalungelo: Nganoma yisiphi isikhathi ungakhawulela, uthole futhi ususe imininingwane yakho.