Aago Arduino: mu ṣiṣẹ pẹlu akoko ninu awọn iṣẹ akanṣe rẹ

Aago Arduino UNO

Diẹ ninu awọn akoko seyin a atejade alaye siwaju sii nipa awọn millis () iṣẹ de ArduinoBayi a yoo jinle sinu Arduino Aago, Lati bẹrẹ pẹlu ẹya yii fun ẹya naa, loye bi igbimọ yii ṣe n ṣakoso akoko pẹlu MCU, ati awọn iṣẹ miiran ti o kọja millis ().

Kini Aago Arduino?

aago arduino

El Arduino aago, tabi aago, jẹ iṣẹ ti a ṣe nipasẹ ohun elo (ni microcontroller, pẹlu iranlọwọ ti kristali kuotisi ti o nmu awọn iṣọn aago ati pe o ṣeto “arithm”, laisi iwulo fun ohun elo ita tabi ICs 555) ti o fun laaye laaye lati ṣakoso awọn iṣẹlẹ igba diẹ ọpẹ si awọn aago. ti abẹnu. Fun apẹẹrẹ, ṣiṣe iṣẹ-ṣiṣe kan ṣẹlẹ ni awọn aaye arin, ṣiṣe awọn wiwọn akoko deede, ati bẹbẹ lọ, ni ominira ti koodu afọwọya naa.

Como Arduino UNO O ni chirún MCU kan ti o ṣiṣẹ ni 16 Mhz, 16.000.000 le ṣee ṣe ni iṣẹju-aaya kọọkan. Awọn ilana nilo awọn iyipo X lati ṣiṣẹ, kii ṣe gbogbo wọn ṣiṣẹ ni awọn akoko aago kanna, fun apẹẹrẹ, awọn 16-bit nilo awọn iyipo diẹ sii ni faaji AVR yii.

Fojuinu pe o lo idaduro () iṣẹ, eyi yoo ṣe idiwọ ipaniyan lori Arduino MCU titi ti akoko ti a sọ pato yoo fi kọja ati lẹhinna tẹsiwaju pẹlu eto naa, ṣugbọn aago ko ni dina. Yoo jẹ akoko bi MCU ṣe tẹsiwaju lati ṣiṣẹ awọn ilana miiran ni nigbakannaa. Anfani nla niyen.

Aago naa ni ibatan si awọn idilọwọ ti Arduino, niwon wọn yoo ṣe nipasẹ wọn lati lọ si iṣẹ-ṣiṣe kan pato. Ni awọn ọrọ miiran, Aago Arduino jẹ iṣẹ kan ti o fa ni akoko kan, ṣiṣe iṣẹ idalọwọduro. Ti o ni idi ti o tun ṣe pataki lati mọ nipa awọn idilọwọ wọnyi.

Awọn ipo

Aago Arduino ni 2 awọn ọna ṣiṣeni anfani lati lo ninu:

  • PWM ifihan agbara: O le ṣakoso awọn Awọn pinni Arduino (~).
  • CTC (Pa aago kuro lori ibaamu afiwe): kika akoko inu counter kan ati nigbati o ba de iye ti a sọ pato ninu iforukọsilẹ ti awọn aago, idalọwọduro naa wa ni pipa.

Awọn aago melo ni o ni? Orisi ti Aago

Arduino UNO awọn iṣẹ millis

Nibẹ ni o wa 3 aago lori awọn awo Arduino UNO, botilẹjẹpe o le jẹ diẹ sii lori awọn awo oke miiran:

  • Aago 0: 8-bit, le ka lati 0 to 255 (256 ṣee ṣe iye). Ti a lo nipasẹ awọn iṣẹ bii idaduro (), millis() ati micros(). Iyipada rẹ ko ṣe iṣeduro ki o ma ṣe paarọ awọn eto naa.
  • Aago 1: dogba si Aago 0. Lo nipasẹ ile-ikawe Servo ni UNO (Aago 5 fun MEGA).
  • Aago 2: 16-bit, ati ki o le ibiti lati 0 to 65.525 (65.536 ṣee ṣe iye). Ti a lo fun iṣẹ ohun orin (), ti ko ba lo, o le ṣee lo larọwọto fun ohun elo rẹ.
  • Aago 3, 4, 5 (nikan lori Arduino MEGA): gbogbo 16-bit.

Bawo ni Arduino Aago ṣiṣẹ?

aago, aago

Lati le ni anfani ṣiṣẹ pẹlu Arduino Aago, o ṣe pataki lati mọ bi gbogbo eyi ṣe n ṣiṣẹ ni itanna ni MCU ti igbimọ idagbasoke yii:

  • Aago igbohunsafẹfẹ: ni awọn nọmba ti cycles fun keji ti o ni o lagbara ti a sese, ni ti Arduino o jẹ 16 Mhz, tabi ohun ti o jẹ kanna, aago ifihan agbara oscillates 16.000.000 igba ni a keji (cycles).
  • Akoko: ti wa ni ipoduduro nipasẹ awọn T, ati ki o ti wa ni won ni aaya, ati ki o jẹ onidakeji ti awọn iyika. Fun apẹẹrẹ, T = 1/C, eyi ti yoo mu 1/16000000 = 0.0000000625, akoko ti yoo gba fun kọọkan ọmọ lati pari. Ati awọn igbohunsafẹfẹ ni onidakeji ti awọn akoko, ki f = 1/T.
  • Ọmọ: jẹ ọkọọkan awọn atunwi ifihan agbara ti o waye fun ẹyọkan akoko. Lori Arduino yoo jẹ 16M ni iṣẹju kan. Tabi kini o jẹ kanna, ninu ọran yii, nigbati awọn iyipo miliọnu 16 ti kọja, iṣẹju-aaya kan ti kọja. Nitorinaa, a le sọ pe iyipo kan gba 625 ns.
  • eti ifihan agbara: Awọn ifihan agbara aago jẹ onigun mẹrin, ati awọn egbegbe le dide tabi ṣubu. Eti kan jẹ laini taara ti ifihan agbara nigbati o yipada lati:
    • 0 (kekere) si 1 (giga): dide eti.
    • 1 (ga) si 0 (kekere): eti ja bo.

Awọn egbegbe jẹ pataki nitori awọn aago Arduino ṣe iwọn awọn iyipo lati awọn egbegbe ifihan agbara. A) Bẹẹni Ohunka o pọ pẹlu kọọkan ọmọ ati nigbati o Gigun awọn Forukọsilẹ iye, awọn idalọwọduro ti wa ni ṣiṣẹ.

Nitorina, ni kete ti o mọ eyi, ti o ba ni 16Mhz lori Arduino MCU, ati Aago 8-bit kan ti lo, o le sọ pe awọn idilọwọ yoo waye ni gbogbo 16 μs (256/16000000) tabi 4 ms fun 16-bit (65536/16000000). Nitorinaa, ti o ba ṣeto iforukọsilẹ counter 16-bit si o pọju, pẹlu iye 65535, lẹhinna idalọwọduro yoo waye ni 4 ms lati ṣiṣẹ ohunkohun ti o jẹ.

Nigbati counter ba de iye ti o pọju ti o ṣeeṣe, yoo pada si 0 lẹẹkansi. Ìyẹn ni pé àkúnwọ́sílẹ̀ máa ń wáyé, yóò sì kà á sẹ́yìn láti ìbẹ̀rẹ̀.

Lati ṣakoso iwọn ilosoke ti aago o tun le lo a prescaler, eyiti o gba awọn iye 1, 8, 64, 256 ati 1024 ati pe o paarọ akoko bi eleyi:

Iyara Aago (Hz) = Igbohunsafẹfẹ Aago ti Arduino / Prescaler

Ti o ba jẹ 1 prescaler oluṣakoso yoo pọ si 16 Mhz, ti o ba jẹ 8 si 2 Mhz, ti o ba jẹ 64 si 250 kHz, ati bẹbẹ lọ. Ranti pe olupilẹṣẹ ipinlẹ aago aago kan yoo wa lati ṣe afiwe iye ti counter ati prescaler titi ti wọn yoo fi dọgba ati lẹhinna ṣe iṣe kan. Nitorina, da gbigbi igbohunsafẹfẹ ti wa ni fun nipasẹ awọn agbekalẹ:

+1 jẹ nitori pe iforukọsilẹ counter jẹ itọka ni 0, ie ko bẹrẹ kika ni 1, ṣugbọn ni 0.

Iyara Idilọwọ (Hz) = Arduino / Igbohunsafẹfẹ Aago Prescaler (iye iforukọsilẹ afiwera + 1)

O da, a ko gbọdọ yipada awọn igbasilẹ ti Arduino Aago, niwon o yoo wa ni ya itoju ti nipasẹ awọn ikawe ti a lo ninu awọn koodu. Ṣugbọn ti wọn ko ba lo, wọn yẹ ki o tunto.

Awọn apẹẹrẹ ni Arduino IDE

Arduino IDE, data orisi, siseto

Lati le loye gbogbo eyi dara diẹ sii, nibi Mo ṣafihan awọn koodu afọwọya meji fun Arduino IDE pẹlu eyiti o le ni iriri lilo awọn akoko. Ni igba akọkọ ti koodu ti yoo seju ohun LED ti a ti sopọ si Arduino pin 8 gbogbo iṣẹju:

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

Ṣe eto sisẹ tabi ikosan ti LED, bi ninu ọran ti tẹlẹ ni gbogbo iṣẹju-aaya, ṣugbọn ni akoko yii lilo CTC i.e. lafiwe:

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

Diẹ ẹ sii nipa Arduino siseto

ra awo Arduino UNO Ifi 3

Awọn akoonu ti nkan naa faramọ awọn ilana wa ti awọn ilana olootu. Lati jabo aṣiṣe kan tẹ nibi.

Jẹ akọkọ lati sọ ọrọ

Fi ọrọ rẹ silẹ

Adirẹsi imeeli rẹ yoo ko le ṣe atejade.

*

*

  1. Lodidi fun data naa: Miguel Ángel Gatón
  2. Idi ti data naa: SPAM Iṣakoso, iṣakoso ọrọ asọye.
  3. Ofin: Iyọọda rẹ
  4. Ibaraẹnisọrọ data: Awọn data kii yoo ni ifọrọhan si awọn ẹgbẹ kẹta ayafi nipasẹ ọranyan ofin.
  5. Ibi ipamọ data: Alaye data ti o gbalejo nipasẹ Awọn nẹtiwọọki Occentus (EU)
  6. Awọn ẹtọ: Ni eyikeyi akoko o le ni opin, gba pada ki o paarẹ alaye rẹ.

Idanwo GẹẹsiIdanwo CatalanSpanish adanwo