ADC sul pierin pic18
Salve vorrei acquisire un segnale analogico con il pierin PIC 18, ho fatto qualche prova ma sempre con esito negativo. Vorrei chiedervi come posso fare e quali funzioni vanno utilizzate
La comunità del mondo elettrico: elettronica, elettrotecnica, impianti, pic, plc, automazione
https://www.electroyou.it/forum/
// File di definizione dei registri del micro.
#include "p18f47j53.h"
// File di configurazione dei fuses
#include "configurazione.h"
// Mappatura delle interrupt
#include "mappa_int.h"
// Header del main
#include "main.h"
//------------------------------------------------------------------------------
// Variabili globali
//------------------------------------------------------------------------------
#pragma udata
typedef long int int32_t;
//------------------------------------------------------------------------------
// Funzione di servizio delle interrupt ad ALTA priorità
//------------------------------------------------------------------------------
#pragma code
#pragma interrupt highPriorityInterrupt
void highPriorityInterrupt()
{
}
//------------------------------------------------------------------------------
// Funzione di servizio delle interrupt a BASSA priorità
//------------------------------------------------------------------------------
#pragma interruptlow lowPriorityInterrupt
void lowPriorityInterrupt()
{
}
//------------------------------------------------------------------------------
// Prototipi delle funzioni
//------------------------------------------------------------------------------
#pragma code
//------------------------------------------------------------------------------
// Funzioni
//------------------------------------------------------------------------------
#pragma code
void adc_deInit(void)
{
ADCON0 = 0;
ADCON1 = 0;
IPR1bits.ADIP = 0; // Bit di priorità interrupt ADC
PIE1bits.ADIE = 0; // Interrupt disabilitta
PIR1bits.ADIF = 0; // Flag interrupt azzerato
}
//------------------------------------------------------------------------------
// MAIN FUNCTION
//------------------------------------------------------------------------------
void main(void)
{
LATD=0;
TRISD=0;
// Inizializza tutti i pin come digitali
ANCON0 = 0xFF;
ANCON1 = 0x1F;
// Inizializza il pin AN7 (RE2) come ingresso analogico
ANCON0bits.PCFG7 = 0; // 12/08/2013 corretto BUG segnalato da c1b8
// De-inizializza l' ADC
adc_deInit();
// Seleziona Vref positiva Vdd
ADCON0bits.VCFG0 = 0;
// Seleziona Vref negatica Vss
ADCON0bits.VCFG1 = 0;
// Seleziona il tempo di conversione 20TAD
ADCON1bits.ACQT = 7;
// Clock di conversione FOSC/64
ADCON1bits.ADCS = 6;
// Formato del risultato allineato a destra
ADCON1bits.ADFM = 1;
for(;;)
{
int32_t valore;
// Calibrazione ADC
ADCON1bits.ADCAL = 1;
ADCON0bits.GO = 1;
while(ADCON0bits.GO);
ADCON1bits.ADCAL = 0;
// Seleziona l' ingresso da misurare
ADCON0bits.CHS = 7;
valore = 0;
// Fa partire la conversione 45 us.
ADCON0bits.GO = 1;
// Aspetta la fine della conversione
while(ADCON0bits.GO);
// Legge il valore convertito
valore = ADRES;
if(valore!=0)
{
LATDbits.LATD6 = 1;
LATDbits.LATD7 = 0;
}
else
{
LATDbits.LATD6 = 0;
LATDbits.LATD7 = 1;
}
}
}

