ASK Analoginis-Skaitmeninis Keitiklis, pasižaidimas

24/03/2013 15:57

    Baiginėju čia aprašyto robotuko "akis", tad šiandien nutariau pažaisti su ASK. Analoginiu - skaitmeniniu keitikliu, kuris bus skirtas robotuko akių signalams paversti į jo elektroninėms "smegenims" suprantamą formatą - dvejetainį kodą. 

    Kaip ir dauguma mikrovaldiklių ATMEGA 8 turi kelis ASK įėjimus. Šiam bandymui nuadosiu tik vieną, tačiau robotukas turės naudoti po vieną ASK įėjimą kiekvienai "akiai", taip pagal iš IR fotodiodo (akies) įeinančios įtampos dydį robotukas galės "matyti" atstumą iki kliūties, kliūties spalvą ar iš kurios pusės yra kliūtis, jei bus naudojama daugiau nei vienas sensorius. 

    Kaip suprasti skaitmeninį ir analoginį signalus? Skaitmeninis signalas yra tik 2 galimos reikšmės 0 V ir Umax V. Umax yra maksimali mikrovaldiklio maitinimo įtampa, mano atveju 5 V (4,93 V). Taigi signalas bus stačiakampis. Maksimali įtampa atitinka loginį 1, o nulinė įtampa atitinka loginį nulį. Vadinasi robotukas tokiu atveju galėtų suprasti tik dvi galimas situacijas - kliūtis yra, arba kelias laisvas. O analoginį signalą sudaro aibė nykstamai mažų įtampos dedamųjų. Vadiasi analoginis signalas gali būti 1V, 4,9V, 3,33V, 3,193V ir t.t. Naudojantis analoginiu signalu būtų galima ne tik nustatyti kliūties būvimą bet ir atstumą iki jos remiantis iš daviklio ateinančiu loginiu signalu ir jo stipriu.

    Taigi ASK analoginį signalą paverčia iš vienetukų ir nuliukų sudarytu dvejetainiu mikrovaldikliui prieinamu kodu esant tam tikrai skiriamajai gebai. Pvz. mano teste buvo naudojama 10 bitų skiriamoji geba, tai būtų 210, kas lygu 1024 skirtingų verčių. Vadinasi mano mikrovaldiklis galės išskirti įtampos pokyčius iki 5V / 1024 = 0,0049V arba ~5 mV. Kaip sudaroma dvejetainė skaičių sistema galite rasti internete. 

    Duomenų išvedimui pasinaudojau 8 bitų išėjimu, todėl gautą 10 bitų dvejetainį skaičių turėjau dalinti iš 4 (1024 / 255). Išėjime užsidega LED vaizduojantys dvejetainį kodą, LED atitinkančių bitų numeriai surašyti nuotraukoje. Gauname 1111 1001 dvejetainį skaičių kuris atitinka 249 dešimtainį. 28= 255. Norėdami gauti vaizduojamą įtampą turime 249 / 255 * 4,93 = 4,814 V (4,93 tikroji mikrovaldiklio maitinimo įtampa). Vadinasi į ASK paduodama įtampa lygi 4,814V, pagal multimetrą 4,79 V. Skirtumas atsirado dėl mikrovaldiklio arba multimetro matavimo paklaidos bei skaičiavimo sistemų neatitikimo verčiant 10 bit skaičių į 8 bit. Tokiu būdu galima ne tik leisti mikrovaldikliui interpretuoti roboto daviklių informaciją, bet ir pagaminti skaitmenius matavimo prietaisus.

Kodo pavyzdys:

#include //IO biblioteka
#define F_CPU 8000000UL //Darbinis uC daznis
#include //Uzlaikymo biblioteka
 
void InitADC()
{
ADMUX=(1<
ADCSRA=(1<
}
int skaitymas(int ch)
{
  ch &= 7;  // AND'inam su 7, palaiko, kad ch butu tarp 0 ir 7
  ADMUX = (ADMUX & 248)|ch; //Paruosiamas pasirinkti ADC kanalas (nunulinama ADC 8 reiksmes)
  ADCSRA |= (1<
  while(ADCSRA & (1<
  return (ADC); // Gražinama skaitmeninė reikšmė
}
 
void main()
{
   int rez;
   DDRD=255; //D portas aktyvuojamas
   InitADC(); //Iššaukiama ADC programavimo paprogramė
   while(1) //Amžinas ciklas
   {
      rez=skaitymas(0);//Skaitomas ADC0 kanalas
 PORTD=rez/4; //I porta D isvedama 8 bitu reiksme naudojant 10 bitu ADC reiksme
 _delay_ms(100); // Uzlaikymas pasalinti mirgsejimui
   }
}