Nakong e fetileng re ile ra hatisa boitsebiso bo eketsehileng mabapi le millis () mosebetsi de ArduinoJoale re tla teba haholoanyane Arduino Timer, ho qala ka tšobotsi ena bakeng sa sebopeho, utloisisa hore na boto ena e laola nako joang le MCU, hammoho le mesebetsi e meng e fetang millis().
Index
Arduino Timer ke eng?
El Sebali sa nako ea Arduino, kapa sebali sa nako, ke ts'ebetso e sebelisoang ke hardware (ka microcontroller, ka thuso ea kristale ea quartz e hlahisang maqhubu a oache le e behang "rhythm", ntle le tlhokahalo ea hardware ea ka ntle kapa ICs 555) e lumellang ho laola liketsahalo tsa nakoana ka lebaka la lioache. ka hare. Mohlala, ho etsa hore mosebetsi o etsahale ka linako tse itseng, ho etsa litekanyo tse nepahetseng tsa nako, joalo-joalo, ntle le khoutu ea sekeche.
Ak'u nahane hore u sebelisa delay() tshebetso, sena se tla thibela ho bolaoa ho Arduino MCU ho fihlela nako e boletsoeng e feta ebe o tsoela pele ka lenaneo, empa nako e ke ke ea thibela. E tla be e le nako ha MCU e ntse e tsoela pele ho phethahatsa litaelo tse ling ka nako e le 'ngoe. Ke ona molemo o moholo.
Sebali sa nako se amana le tšitiso ea Arduino, kaha ba tla bolaoa ka tsona ho ea mosebetsing o itseng. Ka mantsoe a mang, Arduino Timer ke ts'ebetso e hlahisoang ka nako e itseng, e etsa mosebetsi o sitisang. Ke kahoo hape ho leng bohlokoa ho tseba ka litšitiso tsena.
Mekhoa
Arduino Timer e na le Mekhoa e 2 ea tšebetso, ho khona ho e sebelisa ho:
- Letšoao la PWM: U ka khona ho laola Arduino pins (~).
- CTC (Hlakola sebali sa nako mabapi le papali): e bala nako ka har'a k'haontareng 'me ha e fihla ho boleng bo boletsoeng bukeng ea li-timers, tšitiso e etsoa.
E na le linako tse kae? Mefuta ea Linako
Ho na le 3 linako lipoleiting Arduino UNO, le hoja ho ka ba le tse ling holim'a lipoleiti tse ling tse holimo:
- Selemo 0: 8-bit, e ka bala ho tloha ho 0 ho isa ho 255 (256 litekanyetso tse ka khonehang). E sebelisoa ke mesebetsi e kang delay(), millis(), le micros(). Phetoho ea eona ha e khothalletsoe e le hore e se ke ea fetola mananeo.
- Selemo 1: e lekana le Nako ea 0. E sebelisoa ke laebrari ea Servo e UNO (Timer 5 bakeng sa MEGA).
- Selemo 2: 16-bit, 'me e ka tloha ho 0 ho ea ho 65.525 (65.536 litekanyetso tse ka khonehang). E sebelisoa bakeng sa lentsoe () ts'ebetso, haeba e sa sebelisoe, e ka sebelisoa ka bolokolohi bakeng sa kopo ea hau.
- Nako ea 3, 4, 5 (ho Arduino MEGA feela): kaofela 16-bit.
Arduino Timer e sebetsa joang?
Ho ba khona sebetsa ka Arduino Timer, ho bohlokoa ho tseba hore na tsena tsohle li sebetsa joang ka mokhoa oa elektroniki ho MCU ea boto ena ea ntlafatso:
- Khafetsa Clock: ke palo ea lipotoloho ka motsotsoana eo e khonang ho e ntshetsa pele, tabeng ea Arduino ke 16 Mhz, kapa se tšoanang, pontšo ea oache e oscillates ka makhetlo a 16.000.000 ka motsotsoana (lipotoloho).
- Nako: e emeloa ke T, 'me e lekanngoa ka metsotsoana, 'me ke ho fapana ha lipotoloho. Ka mohlala, T=1/C, e neng e tla fella ka 1/16000000 = 0.0000000625, nako e neng e tla nka hore potoloho ka 'ngoe e phethe. 'Me khafetsa ke ho fapana ha nako, kahoo f = 1/T.
- Mokoloto: ke e 'ngoe le e 'ngoe ea ho ipheta-pheta ha lets'oao le hlahang yuniti ea nako. Ho Arduino e ka ba 16M ka motsotsoana. Kapa ke eng e tšoanang, tabeng ena, ha lipotoloho tse limilione tse 16 li fetile, motsotsoana o le mong o fetile. Ka hona, ho ka boleloa hore potoloho e le 'ngoe e nka 625 ns.
- pheletso ya sesupo: Matšoao a oache a na le lisekoere, 'me mathōko a ka phahama kapa a oa. Moeli ke mola o otlolohileng oa lets'oao ha le fetoha ho tloha ho:
- 0 (tlase) ho isa ho 1 (phahameng): nqa e phahameng.
- 1 (phahameng) ho isa ho 0 (tlase): ho oela holimo.
Methapo e bohlokoa hobane li-timers tsa Arduino li lekanya lipotoloho ho tloha mathōkong a matšoao. A) Ho joalo contador e eketseha ka potoloho e 'ngoe le e' ngoe 'me ha e fihla ho boleng ba ngoliso, ho sitisoa ho etsoa.
Ka hona, hang ha u tseba sena, haeba u na le 16Mhz ho Arduino MCU, 'me ho sebelisoa 8-bit Timer, ho ka boleloa hore litšitiso li tla etsahala ka 16 μs (256/16000000) kapa 4 ms bakeng sa 16-bit (65536/16000000). Ka hona, haeba u beha registara ea 16-bit ho ea holimo, ka boleng ba 65535, joale tšitiso e tla etsahala ho 4 ms ho phethahatsa mosebetsi ofe kapa ofe oo e leng oona.
Ha counter e fihla boleng bo phahameng ka ho fetisisa bo ka khonehang, e tla khutlela ho 0 hape. Ke hore, ho na le khaphatseho 'me e tla bala ho tloha qalong.
Ho laola sekhahla sa ho eketseha ha sebali sa nako u ka se sebelisa hape motho ea etellang pele, e nkang boleng 1, 8, 64, 256 le 1024 mme e fetola nako ka tsela ena:
Lebelo la Nako (Hz) = Lebelo la Oache ea Arduino / Prescaler
Haeba e le 1 prescaler molaoli o tla nyolohela ho 16 Mhz, haeba ke 8 ho isa ho 2 Mhz, haeba ke 64 ho 250 kHz, joalo-joalo. Hopola hore ho tla ba le comparator ea timer counter state ho bapisa boleng ba counter le prescaler ho fihlela li lekana ebe o etsa ketso. Kahoo, sitisa leqhutsu e fanoa ka foromo:
Khahlanong le lebelo (Hz) = Arduino / Prescaler Clock Frequency (boleng ba rejisetara ea bapisa + 1)
Ka lehlohonolo, ha rea lokela ho etsa joalo fetola direkoto ea Arduino Timers, kaha e tla hlokomeloa ke lilaebrari tseo re li sebelisang khoutu. Empa haeba li sa sebelisoe, li tlameha ho hlophisoa.
Mehlala ho Arduino IDE
E le hore u utloisise sena sohle betere, mona ke bonts'a likhoutu tse peli tsa sketch bakeng sa Arduino IDE eo u ka fumanang boiphihlelo ba tšebeliso ea nako. Ea pele ke khoutu e tla benya LED e hokahaneng le Arduino pin 8 motsotsoana o mong le o mong:
#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 }
Lenaneo la ho panya kapa ho benya ha LED, joalo ka ketsahalong e fetileng motsotsoana o mong le o mong, empa lekhetlong lena u sebelisa CTC ke hore papiso:
#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 }
Tse ling mabapi le mananeo a Arduino
reka poleiti Arduino UNO Tšen3
E-ba oa pele ho fana ka maikutlo