Questo sito utilizza cookie, anche di terze parti, per migliorare la tua esperienza e offrire servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie. Se vuoi saperne di più o negare il consenso a tutti o ad alcuni cookie vai alla sezioneCookie Policy

Conversione ADC-Volt su LCD

Ultimo aggiornamento: 31/07/2015

convertitore adc voltUna delle piu' comuni attività è rappresentata dal mostrare su di un LCD un valore di tensione in base al valore fornito dal convertitore analogico-digitale del microcontrollore.

Qui segue un esempio di programma per mostrare valori di tensione su di un display lcd in seguito a conversione del valore letto con il convertitore analogico-digitale del picmicro. Nell'esempio si è fatto uso di un display LCD a 4 righe e di un picmicro 16F877, ma è facilmente modificabile per altri LCD.

Molto spesso per la realizzazione di voltmetri, amperometri, carica batterie etc, vi è la necessita' di mostrare a video un valore di tensione ricavato dalla lettura di uno o piu' canali del convertitore analogico digitale. Questo puo' essere fatto molto facilmente con un linguaggio di alto livello come il Mikroc:

 

 

 

 

// Definizione LCD
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB3_bit;
sbit LCD_D5 at RB2_bit;
sbit LCD_D6 at RB1_bit;
sbit LCD_D7 at RB0_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB3_bit;
sbit LCD_D5_Direction at TRISB2_bit;
sbit LCD_D6_Direction at TRISB1_bit;
sbit LCD_D7_Direction at TRISB0_bit;

unsigned int adcvalue,value;
unsigned char car,x,y;
char *voltage = "00.00";
long temp;

void ShowADC(int x, int y, unsigned int adcvalue)      // Routine: mostra il valore dell'ADC
{
car = adcvalue / 1000;
LCD_Chr(x,y,48+car);
adcvalue=adcvalue-1000*car;
car = (adcvalue / 100);
LCD_Chr_CP(48+car);
adcvalue=adcvalue-100*car;
car = (adcvalue / 10);
LCD_Chr_CP(48+car);
adcvalue=adcvalue-10*car;
car = adcvalue;
LCD_Chr_CP(48+car);
delay_ms(30);
}

void ShowVoltage (int x,int y, unsigned int value)     // Routine: mostra il valore di tensione
{
temp = (long)value* 5000;                      
temp = temp / 1023;
voltage[0] = temp/10000 + 48;
voltage[1] = (temp/1000)%10 + 48;
voltage[3] = (temp/100)%10 + 48;
voltage[4] = (temp/10)%10 + 48;
Lcd_Out (x,y,voltage);
delay_ms(30);
}

void main() {

ADCON1 = 0x80;                            // Tutto analogico
TRISA = 0xFF;                               // PORTA Input
TRISB = 0;                                    // PORTB Output
TRISD = 0;
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1, 1, " ADC Voltage");
do {
value = ADC_Read(1);                    // canale 1 (RA1)
adcvalue=value;
Lcd_Out(3,1,"Ch1:");
ShowADC (3,5,adcvalue);
ShowVoltage(3,11,value);
value = ADC_Read(2);                    // canale 2 (RA2)
adcvalue=value;
Lcd_Out(4,1,"Ch2:");
ShowADC (4,5,adcvalue);
ShowVoltage(4,11,value);
} while(1);
}

 

Naturalmente se si dovessero misurare tensioni superiori ai 5V, anche al fine di proteggere il picmicro, sara' opportuno utilizzare un partitore di tensione e modificare di conseguenza il valore di conversione (5000).

Diritti riservati Cuteminds.com 2008-2015. Tutti i marchi riportati sono detenuti dai legittimi proprietari. Tutto il materiale e` liberamente utilizzabile ma non per scopi commerciali. Non si assume alcuna responsabilita` sul materiale pubblicato per eventuali danni diretti o indiretti che possano derivare dall`utilizzo di schemi, progetti o altro materiale presente nel sito. Inviare una mail a: remove-admin@cuteminds.com (contenuti) remove-webmaster@cuteminds.com (webserver) per domande e/o suggerimenti.