2017-02-24 2 views
1

Ich betreibe einen Mikrocontroller in Proteus mit integriertem ADC (10bit Ausgang) und einem LCD Display, aber wenn ein Signal von 5V eingegeben wird, zeigt es nur bis zu 4092mV, obwohl das LCD perfekt ist gut, weil ich versucht habe, andere Zeichen auszugeben.ADC_READ nicht ausgereizt

Hier ist der Code und ein Bild von Proteus.

int tension; 
int valeurnum; 
char valeurchar[10]; 

void main() { 
    ADCON1=14; 
    TRISA=1;TRISB=0; 
    Lcd_Init(); 
    while(1){ 
      tension=ADC_Read(0); 
      valeurnum=(5000/1023)*tension; 
      Lcd_Cmd(_LCD_CLEAR); 
      Lcd_Cmd(_LCD_CURSOR_OFF); 
      IntToStr(valeurnum,valeurchar); 
      Lcd_Out(1,1,valeurchar); 
      delay_ms(1000);; 
      } 
} 

Wenn Sie Jungs eine Ahnung über hav, was ich tun oder überprüfen können, oder wenn Sie weitere Infos benötigen, bitte sagen Sie mir, vielen Dank im Voraus und hat einen großen Tag!

Proteus Layout

+1

ist wahrscheinlich ein Problem mit Ihrer Elektronik, vielleicht die Referenzspannung für den ADC ist nicht gut genug – Ctx

+0

komisch, weil 5V im Potentiometer (und sorry für beeing einen Anfänger) geht –

+0

Sind Sie sicher, dass die Umrechnungsformel ist richtig ('valeurnum = (5000/1023) * Spannung;')? –

Antwort

2

Offenbar machte ich einen Fehler mit Formeln, ich war zu viel Genauigkeit, mit der Zahl selbst zu verlieren, wenn geteilt wird. Dieses

float valeurnum; 
char valeurchar[20]; 
void main() { 
    ADCON1=14; 
    TRISA=1;TRISB=0; 
    Lcd_Init(); 
    while(1){ 
      valeurnum=ADC_Read(0); 
      valeurnum=valeurnum*5000; 
      valeurnum=valeurnum/1024; 
      Lcd_Cmd(_LCD_CLEAR); 
      Lcd_Cmd(_LCD_CURSOR_OFF); 
      FloatToStr(valeurnum,valeurchar); 
      Lcd_Out(1,1,valeurchar); 
      delay_ms(1000);; 
      } 
} 
+2

Sie könnten dies in einer einzigen Zeile 'valeurnum = (ADC_Read (0) * 5000)/1024) schreiben;' –

Verwandte Themen