MIKROC :Conversione AD non ottimale
-1- Non so come si usano i TAG
2- Premetto che la mia esperienza si basa sull' assembler con tante routine sviluppate per diversi progetti funzionanti da anni e una breve esperienza con il PIC Basic Professional per poi cercare di passare al C. Volendo rimanere sui PIC 16F876 e PIC16F876A (ne ho circa una sessantina di pezzi rimasti da progetti del passato) sto sperimentando il MKROC in quanto il C18 vale per PIC 18F.
Mi servono 3 canali AD (dalla config di ADCCON1 imposto ADC RA,R1 e R3 e su display visualizzo i tre valori in punti digitali. Premetto che a lavorare in MIkroC mi sento ancora un cane in quanto sto annaspando da 5 o 6 giorni nel tempo libero.
Succede questo:
Se vario con potenziometro AN0 o AN1 tutto OK, Se vario AN3 varia anche AN0 e AN1
In assembler avevo risolto riportando i canali ADC al valore forzato 0 dopo una lettura
e comunque sincronizzavo con GONE e DONE
qui ho scritto questo
E' come se prendesse il canale 3 come Vref per la conversione ma ADCON1 parla chiaro.
Tra l'altro non devo usare ADCON0 ? La selezione del canale la fa in automatico MIKROC ?
Grazie per l'attenzione
2- Premetto che la mia esperienza si basa sull' assembler con tante routine sviluppate per diversi progetti funzionanti da anni e una breve esperienza con il PIC Basic Professional per poi cercare di passare al C. Volendo rimanere sui PIC 16F876 e PIC16F876A (ne ho circa una sessantina di pezzi rimasti da progetti del passato) sto sperimentando il MKROC in quanto il C18 vale per PIC 18F.
Mi servono 3 canali AD (dalla config di ADCCON1 imposto ADC RA,R1 e R3 e su display visualizzo i tre valori in punti digitali. Premetto che a lavorare in MIkroC mi sento ancora un cane in quanto sto annaspando da 5 o 6 giorni nel tempo libero.
Succede questo:
Se vario con potenziometro AN0 o AN1 tutto OK, Se vario AN3 varia anche AN0 e AN1
In assembler avevo risolto riportando i canali ADC al valore forzato 0 dopo una lettura
e comunque sincronizzavo con GONE e DONE
qui ho scritto questo
- Codice: Seleziona tutto
void main() {
ADCON1=0b00000100;
TRISA0_bit= 1;
TRISA1_bit= 1;
TRISA3_bit= 1;
//GliI altri PIN porta A vorrei fossero degli OUTPUT
while (1) {
potSX = ADC_Read(0); // canale AN0
Delay_ms(10);
potDX = ADC_Read(1); //canale AN1
Delay_ms(10);
vbat = ADC_Read(3); // canale AN3
Delay_ms(10);
//ho messo un ritardo sperando che migliorasse ma non mi sembra
IntToStr(potSX ,testo1);
IntToStr(potDX ,testo2);
IntToStr(vbat ,testo3);
/*ho convertito in stringa (idea copiata da internet)
per evitare sfarfallio lcd e evidente lentezza nella lettura, visualizzo ogni tanto*/
conta=conta+1;
if (conta>=500)
{
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,1,"P");
Lcd_Out_Cp("=");
Lcd_Out_Cp(rtrim(ltrim(testo1)));
Lcd_Out_Cp("-");
Lcd_Out_Cp(rtrim(ltrim(testo2)));
Lcd_Out_Cp("-");
Lcd_Out_Cp(rtrim(ltrim(testo3)));
Delay_ms(200);
conta=0;
}
}
E' come se prendesse il canale 3 come Vref per la conversione ma ADCON1 parla chiaro.
Tra l'altro non devo usare ADCON0 ? La selezione del canale la fa in automatico MIKROC ?
Grazie per l'attenzione