sunnuntai 29. syyskuuta 2019

MUUTAMIA TESTEJÄ

Kun näiden mikrokontrollerilevyjen parissa puuhailee ja kokeilee, niin silloin tällöin sattuu vahinkoja (puhun omasta kokemuksestani). Tämän jakson ideana on muutama pieni ja yksinkertainen ohjelma, joilla voi testata, onko Arduino kunnossa, ja miltä osin. Jos piirilevy ei vastaa työkaluohjelman lataustoimintaan, tulee ko. piiristä harmi. Toki siitä on hyvä käyttää joitakin toimivia osia, kuten liittimiä, LEDejä, 5 V-regulaattoria ja mahdollisesti joitain muitakin komponentteja.

 On toki mahdollista, että on onnistunut tuhoamaan ainoastaan jonkun I/O:n. Tämänkertainen jakso tähtää nimenomaan liityntöjen testaukseen. Enin osa testeistä on tehty Arduino UNO:lla. Joitakin myös Arduino LEONARDOLLA, mutta muut kuvassa näkyvät piirit eivät osallistuneet näiden ohjelmien kehitykseen.

 
HUOM! Noissa kaikissa kolmessa ohjelman määrittelyosiossa on mukana myös sarjaliikenne ohjelmointityökalulle (Serial.begin(9600);). Se ei ole tarpeen näiden testiohjelmien kannalta, mutta hyvähän sen on siellä olla, jos tekee muutoksia ohjelmaan ja haluaa ajankohtaista dataa näytölle.


DIGITAALILÄHDÖT
Ensimmäisenä on lähtöpinnien testaus. Niitähän on 12 kpl (D/I 2 .. 13). Mutta sen lisäksi analogiatulot (A0 .. A5) voidaan määritellä (14 .. 19) ja käyttää myös digitaalisena (paitsi LEONARDO, jossa täten toimivat vain A0 ja A1). Kokemukseni mukaan aiemmin myös D/I-pinnit D0 ja D1 olivat määriteltävissä tuloiksi ja lähdöiksi, mutta näissä testeissäni se ei onnistunut. Ne on nähtävästi täysin ”pyhitetty” sarjaliikenteelle. DIO0 on RX (sarjadatan tulo) ja DIO1 on TX (sarjadatan lähtö).

Indikaationa (ei kaivanne kytkentäkaaviota) voi olla esim. 1 kohm (sopiva valinta, sillä se etuvastuksena ei kuormita lähtöpinniä liikaa) vastus sarjassa LEDin kanssa. Eli: lähtöpinni, vastus, LED ja maa. (LEDin pitää olla oikein päin kytkettynä). Kun vastus vaihdetaan eri pinneihin, vilkahtaa myös levyllä oleva (OUT13 LED) säännöllisin välein
. Aika koostuu LOOPista 50 + 50 ms, sekä siitä, että luuppi käy läpi kaikki 17 lähtöä. Kun ulkoinen LED välähtää, toimii kyseinen lähtö oikein.

/***************************************
* OUT_Test_1
* 26.09.2019
* I/O-pinnien OUTput - testaus
**************************************/

// ASETUKSET:
void setup(){
Serial.begin(9600);
// Asetetaan DIGI ja ANA I/O-pinnit lähdöiksi
for(int i = 2;i <= 19; i ++){
   pinMode(i, OUTPUT);}
}// Asetuksen loppu

// PÄÄLOOPPI
void loop(){
for(int j = 2; j <= 19; j++){
   digitalWrite(j, HIGH);
   delay(50);
   digitalWrite(j, LOW);
   delay(50);
}
delay(1);
} // Pääohjelma LOPPU


DIGITAALITULOT
Tässä toisessa ohjelmassa käydään läpi kaikki digitaalitulot paitsi DIO-13, minkä LEDiä käytetään indikaattorina. Sen vuoksi se määritellään erikseen OUT-bitiksi. Muut määritellään kahdella eri luupilla tuloiksi, joissa on sisäinen ylös veto vastus (INPUT_PULLUP). Myös pääohjelma jakaantuu tämän vuoksi kahdeksi FOR-luupiksi. Kun jonkin tuloista kytkee maahan, suorittaa ohjelma aliohjelmakutsun. Tällöin piirilevyllä oleva LED (DIO-13) vilkkuu. Kyseinen tulopinni toimii siis oikein.

/***************************************
* IN_Test_1
* 26.09.2019
* I/O-pinnien INput - testaus
**************************************/
// Määrittlyt
int LEDout = 13;
boolean tila = false;

// LEDin aliohjelma
void Fun_LED(){
   digitalWrite(LEDout, HIGH);
   delay(150);
   digitalWrite(LEDout, LOW);
   delay(150);
}

// ASETUKSET:
void setup(){
Serial.begin(9600);
// Asetetaan pinnin 13 LED lähdöksi
pinMode(LEDout, OUTPUT);
// Asetetaan varsinaiset I/O-pinnit tuloiksi
for(int i = 2;i <= 12; i ++){
   pinMode(i, INPUT_PULLUP);}
// Asetetaan ANAlogia pinnit tuloiksi
for(int i = 14;i <= 19; i ++){
   pinMode(i, INPUT_PULLUP);}
}// Asetuksen loppu

// PÄÄLOOPPI
void loop(){
for(int j = 2; j <= 12; j++){
   tila = !digitalRead(j);
   if(tila == true){Fun_LED();}
} // for loppu
for(int j = 14; j <= 19; j++){
   tila = !digitalRead(j);
   if(tila == true){Fun_LED();}
} // for loppu
delay(1);
} // Pääohjelma LOPPU


ANALOGIATULOT
Tässä kolmannessa testiohjelmassa tutkitaan analogiatulojen toiminta. UNOssa ja LEONARDOssa niitä on kuusi (A0 .. A5) kappaletta. Niiden tulojännitealue on 0 .. 5 V. Tämä voidaan syöttää ulkopuolelta tai tehdä niin, että potentiometrin äärinavat kytketään Arduinon maan (GND) ja 5 V:n lähdön väliin ja potentiometrin liu'ulta viedään jännite mitattavaan analogiatuloon. Indikaattoriksi tähän testiin voidaan käyttää ensimmäisen testin LED / vastusyhdistelmää, kytkettynä johonkin analogialähtöön (PWM, pulssinleveysmodulaatio). Tässä ohjelmassa on käytetty lähtöä DO3. Lähdön jännite vaihtelee noin 1 kHz taajuudella nollan (0 V) ja viiden (5 V) voltin välillä, mutta näiden jännitteiden aikasuhde muuttuu ohjauksen mukaan. Analogiatulon muunnos on 10 bittinen, eli lukualue on 0 .. 1023 ja lähdön lukualue kahdeksan (8) bittinen, eli 0 .. 255, joten tuloarvo pitää jakaa neljällä. Kun potentiometria, säätää, vaihtuu tulojännite, minkä muutos ilmenee LEDin kirkkauden vaihteluna. Vaihtamalla potikan johtoa eri tuloihin voi tarkastaa jokaisen tulon toimivuus.


/***************************************
* ANA_Test_3
* 27.09.2019
* Muutetaan analogia-arvojen tuloarvo
* LEDin kirkkaudeksi
**************************************/

// MÄÄRITTELYT:
int Ana_Raaka = 0;
int Ana_Out = 0;
int PWM_LED = 3;

// ASETUKSET:
void setup(){
Serial.begin(9600);
}// Asetuksen loppu

// PÄÄLOOPPI
void loop(){
for(int i = 0; i <= 5; i++){
   Ana_Raaka = analogRead(i);
   Ana_Out = Ana_Raaka / 4;
   Ana_Out = constrain(Ana_Out, 0, 255);
}
analogWrite(PWM_LED, Ana_Out);
delay(1);
} // Pääohjelma LOPPU