aduri Inserito: 17 luglio 2007 Segnala Inserito: 17 luglio 2007 (modificato) Ho provato, per la prima volta, a vedere come funziona il convertitore A/D del pic16f877a ed ha funzionato alla prima ma ho provato ad apportare delle modifiche al codice MKB per avere la possibilita' di conversioni multiple ma non ha funzionato o per meglio dire funziona solo un canale e l'altro segue molto disturbato i valori del primo.Il mio dubbio e' anche capire MKB cosa fa con i registri intco1 e intcon0 quando usa la macro ADC_read(2).Qualcuno ha esperienze a proposito?Allego il listato: program adc2_lcd'(*' * Project name:' adconlcd' * Copyright:' © mikroElektronika, 2005 - 2006' * Revision History:' 20050312:' - initial release.' * Description:' This code demonstrates how to use library function ADC_read, and library' procedures and functions for LCD display (4 bit interface)' * Test configuration:' MCU: PIC16F877A' Dev.Board:' Oscillator: HS, 4.000 MHz' Ext. Modules: None' SW: mikroBasic v5.0 or higher' * NOTES:' - If you are using EasyPIC4, use provided jumper on top right to connect potentiometer to RA2' *)dim ch1 as byte ch2 as byte t1 as word t2 as word Text1 as char[17] Text2 as char[17] tlong1 as longint tlong2 as longintmain: PORTB =0 ' clear portb TRISB =0 ' designate portb as output (LCD is connected to portb) intcon =0 ' disable all interrupts Lcd_Init(PORTB) ' initialize (4-bit interface connection) Lcd_Cmd( LCD_CURSOR_OFF) ' send command to LCD (cursor off) Lcd_Cmd(LCD_CLEAR) ' send command to LCD (clear LCD) Text1 ="A/D Aduri" ' assign text to string a Lcd_Out(1,1, Text1) ' print string a on LCD, 1st row, 1st column Text2 ="Prova" ' assign text to string a Lcd_Out(2,1, Text2) ' print string a on LCD, 2nd row, 1st column OPTION_REG = $80 ADCON1 = $82 ' configure VDD as Vref, and analog channels TRISA = $FF ' designate porta as input Delay_ms(2000) Text1 = "voltage1:" ' assign text to string a Lcd_Out(1,1,Text1) ' print string a on LCD, 2nd row, 1st column Lcd_Chr(1,14,"V") Text2 = "voltage2:" ' assign text to string a Lcd_Out(2,1,Text2) ' print string a on LCD, 2nd row, 1st column Lcd_Chr(2,14,"V") while true t1 = ADC_read(1) ' get ADC value from 1st channel tlong1 = t1*5000 t1 = tlong1 >> 10 ch1 = t1 div 1000 ' prepare value for diplay Lcd_Chr(1,11,48+ch1) ' write ASCII at first row, 9th column Lcd_Chr(1,12,".") ch1 = (t1 div 100) mod 10 Lcd_Chr(1,13,48+ch1) ch1 = (t1 div 10) mod 10 Lcd_Chr(1,14,48+ch1) ch1 = t1 mod 10 Lcd_Chr(1,15,48+ch1) delay_ms(1) t2 = ADC_read(2) ' get ADC value from 2nd channel tlong2 = t2*5000 t2 = tlong2 >> 10 ch2 = t2 div 1000 ' prepare value for diplay Lcd_Chr(2,11,48+ch2) ' write ASCII at 2nd row, 9th column Lcd_Chr(2,12,".") ch2 = (t2 div 100) mod 10 Lcd_Chr(2,13,48+ch2) ch2 = (t2 div 10) mod 10 Lcd_Chr(2,14,48+ch2) ch2 = t2 mod 10 Lcd_Chr(2,15,48+ch2) delay_ms(1) wendend. Cordiali saluti Modificato: 17 luglio 2007 da aduri
aduri Inserita: 25 luglio 2007 Autore Segnala Inserita: 25 luglio 2007 Sono riuscito a risolvere e funziona.Non avevo letto bene il datasheet che limitava il valore dell'impedenza d'ingresso, ho sostituito i trimmer con valori piu' bassi ed ha funzionato perfettamente.Spero che questo post possa servire ad altri per non commettere il mio stesso errore.
rob10kg Inserita: 28 luglio 2007 Segnala Inserita: 28 luglio 2007 Ciao Aduri l'hai steso tu il codice oppure è un sample fornito dalla Microchip?Se l'hai steso tu complimenti.Mi piacerebbe imparare.Ciao.
aduri Inserita: 29 luglio 2007 Autore Segnala Inserita: 29 luglio 2007 Mi spiace deluderti ma e' un esempio di mikrobasic modificato per le mie esigenze. A/D su piu' canali l'originale era su un solo canale.Ciao
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora