sunnuntai 10. huhtikuuta 2016

Analogia IO

Arduino UNOssa on kuusi analogiatuloa: A0 .. A5. Analogia lähtöjä on myös kuusi: DO3, DO5, DO6, DO9, DO10 ja DO11. Noihin kuuteen voidaan ohjata analogiakirjoitus. (analogWrite(pin, value); Analogialähtö on pulssinleveysmoduloitu (PWM) signaali. Toisin sanoen lähtöjännite vaihtelee nollan (0) ja viiden (5) voltin välillä hyvin nopeasti (noin 1kHz:in taajuudella). Analogisuus tulee siitä suhteesta, miten kauan lähtöjännite on viisi volttia ja miten kauan nolla volttia. Nolla prosenttia tarkoittaa jatkuvaa nollajännitettä ja 100% jatkuvaa viittä volttia. Muut arvot ovat kestosuhteeltaan siltä väliltä. Analogia lähdössä on 8 bitin muunnos, eli lukualue on 0 .. 255.
Analogiatulo toimii myös välillä 0 .. 5VDC (= tasavirtaa). Näissä tuloissa on 10 bitin muunnos, ts. lukualue on 0 .. 1023. Erottelutarkkuus on siis 5mV ( 5V = 5000mV / 1024 = 4,88mV).

Tässä ohjelmassa muuttuva jännite saadaan potentiometrin liu’ulta ja lukualuesovituksen kautta arvo kirjoitetaan lähtöön, missä on LED, jonka kirkkautta voidaan täten säätää. Ensin komponenttien kytkentä:



Tältä näyttää fyysinen kytkentä:

Ohjelma 7
/***************************************
 *  Ohjelma 7
 *  10.04.2016
 *  LEDin kirkkaussäätö
 **************************************/

// MÄÄRITTELYT:
// Kellon määrittely
unsigned long Ulo_MilliSek = 0;
unsigned long Ulo_UusiMilliSek = 0;
const long CoL_EroSekunti = 999;
int Int_Sekunti = 0;
boolean Bol_Tulosta = true; // Tulostusta ohjataan kellolla

const int Con_AnaTulo = 0;
int Int_Ana_Arvo = 0;
const int Con_LED = 3;
int Int_LED_Arvo = 0;

// ASETUKSET:
void setup(){                 
 Serial.begin(9600);         
// Analogiatuloa ei tarvitse määritellä tuloksi (INPUT)
// eikä analogia lähtöä lähdöksi (OUTPUT)
}// Asetuksen loppu

// PÄÄLOOPPI Varsinainen suoritusosa. Jatkuva suoritus
void loop(){
// Sisäisen kellon käyttö
Ulo_MilliSek = millis();
  if(Ulo_MilliSek - Ulo_UusiMilliSek > CoL_EroSekunti){
    Ulo_UusiMilliSek = Ulo_MilliSek;
    Int_Sekunti++;
    if (Bol_Tulosta == true){Fun_Tulostus();}
  }

// Analogiakäsittely
Int_Ana_Arvo = analogRead(Con_AnaTulo); // Luetaan tulo
Int_LED_Arvo = map(Int_Ana_Arvo, 0, 1023, 0, 255); // muunnos
analogWrite(Con_LED, Int_LED_Arvo); // Kirjoitus lähtöön

delay(1);
} // Pääohjelma LOPPU

// FUNKTIOT
void Fun_Tulostus(){
//Serial.print("Teksti :");  Serial.println(Muuttuja);
Serial.print("Analogiatulo :");  Serial.println(Int_Ana_Arvo);
Serial.print("Lahtoarvo :");  Serial.println(Int_LED_Arvo);


}

Ei kommentteja:

Lähetä kommentti