BLOGas.lt
Sukurk savo BLOGą Kitas atsitiktinis BLOGas

Atmega8 ir potenciometras

Sveiki, man prireikė pasigaminti toki dalyką, jog keičiant potenciometro varžą užsidegtų skirtingas led, taigi šiam projektui reikėjo:

1. Atmega8 mikrovaldiklio,

2. 3 LED,

3. 100 kondensatorius,

4. Potenciometro.

žinoma mikrovaldikls nebūtinai atmega8 gali buti ir kitas, svarbu kad jis turėtu ADC (Analog-to-Digital Converter) lietuviškai: analoginis skaitmeninis konverteris.

potenciometrą naudojau 10k, tiksliau vairalazdę nuo PC, kurioje ir buvo tas potenciometras.

taigi schema yra tokia:

Tiesa, simuliujant Proteus programa neveikia, tačiau realybėje atvirkščiai.

Tai pat programa:

#include<avr\io.h>

#include<avr\interrupt.h>

ISR(SIG_ADC)

{
//pirmoji reiksme
if(ADCH>50 && ADCH<138) // nuo 1V iki 2.76V

{

PORTB&=~((1<<PB1)|(1<<PB2));

PORTB|=(1<<PB0);

}
//antroji reiksme
else if(ADCH>138 && ADCH<146) //nuo 2.76V iki 2.92V

{

PORTB&=~((1<<PB0)|(1<<PB2));

PORTB|=(1<<PB1);

}
//trecioji reiksme
else if(ADCH>146 && ADCH<200)// nuo 2.92V iki 4V

{

PORTB&=~((1<<PB0)|(1<<PB1));

PORTB|=(1<<PB2);

}

ADCSRA|=(1<<ADSC);

}

int main()

{

DDRB=(1<<DDB0)|(1<<DDB1)|(1<<DDB2);

ADMUX=(1<<REFS0)|(1<<ADLAR);

ADCSRA=(1<<ADEN)|(1<<ADFR)|(1<<ADIE)|(1<<ADPS2);

ADCSRA|=(1<<ADSC);

sei();

while(1);

return 1;

}

Viskas kompiliuota su AVR Studio 4

na dabar trumpai paaiškinsiu, kadangi reikalingos buvo 3 reikšmės tai tam reikia 3 skirtingų įtampų, jas gavau už potenciometro pastatęs įtampos stabilizatorių. Tagi minimali buvo 1V, maksimali 4V, na o vidurinę teko pasiskaičiuoti pagal įtampas, galvojat kodėl vietoj 2-jų 2.76 ir 2.92V? Todėl, kad ant pulto nebuvo maksimali varža 10k o jei gerai pamenu 6k , apatinė buvo 570r , o vidurinė gavosi maždaug apie 3k33 .

Na beabejo įtampos irgi nebuvo lygios, tačiau jas šiek tiek paapvalinau ir taip vidurinė gavosi 2.76 ir 2.92V .

Du intervalai reikalingi, nes jei butu viena, būtu neimanoma jos sugaudyti, jei tarkim potenciometras būtų kokiu 220k, čia labiau taikau vidurinei padėčiai, na jei jums reikia, kad paskutinis intervalas butų nuo pvz.: nuo 5V iki begalybes atitinkamai pakeičiame koda iš:

//trecioji reiksme
else if(ADCH>146 && ADCH<200)// nuo 2.92V iki 4V

i:

//trecioji reiksme
else if(ADCH>250)// nuo 5V iki begalybės

atitinkamai ir su pirmąją reikšme.

na, o jei kas nesupratote kaip sužinoti tinkama įtampa programoje, taigi aiškinu, pvz.:

viskas skaičiuojasi taip

250×2/100=5V

34×2/100= 0.68V

323×2/100= 6.46V

ir t.t.

Na beliko pažiūrėti kaip viskas atrodo realybėje:

beje viena pastaba reikėjo man vidurinės maksimalią reikšmę padidinti iki 2.98V , jei įdėmiai žiūrėsite video suprasit, kodėl, na o jei ir taip nepastebėjote tai aš jums pasakysiu: vairalazdės laisvumas i dešinę, kadangi buvo nustatyta per maža reikšmė, staigiai ją atleidus ji nulėkdavo ir ją staigiai spiruoklė atitraukdavo iki tos padėties kai įtampa budavo 2.96V ir todėl šviesdavo ne vidurinysis o dešinysis led. Šiuo metu klaidos ištaisytos, tačiau kaip minėjau šiame video jos dar buvo, bet visa esmę galite pamatyti

Rodyk draugams

Komentarai (10)

  1. [...] Atmega8 ir potenciometras [...]

  2. saunu! gal galetum ideti i skyreli elektronikos pamokos apie Amperus Ah mAh nes nelabai suprantu kaip juos apskaiciuot ir ju reiksmes

  3. Gerai Rokai, tik pradziai siek tiek tau paaiskinsiu Ah ir mAh yra ampervalandes(Ah) ir mili ampervalandes(mAh)tai yra lygiai tas pats. Amperai zymisi raide A tai sroves stipris, na o skyreli tuoj idesiu

  4. Andrej:

    o del ko su proteus neveikia?

  5. net neisivaizduoju kodel

  6. dolphin:

    sveikas. neblogai paaiskinai. Beje, iseina pamatuoti ir be itampos stabilizatoriaus :) o gal gali man parasyti i emaila nuoroda, arba pasiusti pati Proteus softa? ;) buciau dekingas. email : dolphinltu@gmail.com

  7. na is kur siunciausi nepamenu, taciau radau per google irasyk proteus isis sp2 download turetu rasti

  8. Karolis:

    per proteus veikia tik reikia dajugti AREF ir veiks :)

  9. gali but, cia buvo tik eilinis nerimtas pasizaidimas:D

Rašyti komentarą