BluePink BluePink
XHost
Servere virtuale de la 20 eur / luna. Servere dedicate de la 100 eur / luna - servicii de administrare si monitorizare incluse. Colocare servere si echipamente de la 75 eur / luna. Pentru detalii accesati site-ul BluePink.

      


                 

                 

                 

                  Voltmetru cu afisaj pe display LCD. Top66 Statistici

               

Pentru scrierea softului am folosit Codevision. Am folosit 2 variabile de tip float volti si adc.

In registrul ADC stocam informatia citita pe pinul 40 al uC iar in variabila volti o prelucram dupa formula:

Vin[V]=(ADCW·Vref[V])/1024

Am folosit functia unsigned int read_adc(unsigned char adc_input) pentru a citi valoarea analogica de pe pinii convertorului. Pentru a activa ADC-ul se seteaza bitul ADEN din registrul ADCSRA. Implicit rezultatul va fi aliniat la dreapta (ADCL apoi ADCH). Pentru a incepe o conversie se seteaza ADSC.

 

 

Ultimii 3 biti din ADCSRA sunt destinati setarii frecventei de esantionare(pre-scale). Circuitul de aproximari succesive necesita o frecventa intre 50 kHz si 200 kHz iar introducerea unei frecvente mai mari duce la scaderea preciziei. In acest caz s-a ales un factor de pre-scale de 115 kHz.

Circuitul prezinta un multiplexor de selectie a canalului de intrare ce va fi setat in registrul ADMUX.

 

 

Primii 2 biti sunt destinati pentru alegerea tensiunii de referinta. In cazul nostru ambii biti sunt setati 1, pentru a folosi tensiunea de referinta interna. Ultimii 4 biti ai acestui registru sunt destinati alegerii pinilor de intrare. Pinii de intrare analogica sunt plasati pe PORTA al microcontrolerului. In cazul nostru ei sunt 0000, deoarece dorim citirea tensiuniii de pe pinul 0.Urmatorul bit (bitul 5 in ordine inversa) il setam 1 pentru left adjust.

Pentru a incepe o conversie se seteaza bitul ADSC din registrul ADCSRA ,iar pentru a citi valoarea din registru trebuie sa ne incadram intre 2 conversii successive.

Urmatorul pas in scrierea programului este setarea pinilor de intrare si de iesire.Am setat pinul A.5 cu rezistenta de pull up ,deorece va fi pin de intrare care ne ajuta la comutare scalei in program.Acest lucru se realizeaza prin setarea bitului corespunzator pinului 5 din registrul PORTA.Pentru a-l seta ca pin de intrare scriem in registrul DDRA valoarea 0.Pinul D.5 dorim sa il folosim ca pin de iesire si vom seta bitul din registrul DDRD cu valoarea 0. Pentru pornirea watchdogtimerului trebuie setate 2 valori consecutive in registrul WDTCR.

In esenta, watchdogul este un temporizator a carui expirare duce la generarea semnalului RESET pentru procesor.

WDTCR=0x1F;

WDTCR=0x0F;

Pentru depasirea scalei am citit valoarea din ADCW, si cu ajutorul functiei if depasirea scalei este semnalizata atat de un mesaj pe display cat si de pornirea unui led.

Pentru comutarea scalei din soft citim valoarea pinului A.5

if(PINA.5 ==1) {

                  volti = ((adc *2.56)/1024); }

               else

                   volti = ((adc *2.56)/1024)*10;

iar pentru afisarea pe diplay am folosit functia : sprintf(lcd_buffer," Volti = %3.3fV ",volti)

Probleme:

1. Nu am setat frecventa clockului.

2. Nu am setat suportul pentru reprezentarea float a softului.

 



Copyright © 2009 Faculatea de Electronica,Telecomunicatii si Tehnologia Informatiei, Bucuresti. Toate drepturile rezervate.