Pagina 1 di 1

ADC sul pierin pic18

MessaggioInviato: 8 set 2013, 13:20
da mangiare
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

Re: ADC sul pierin pic18

MessaggioInviato: 8 set 2013, 15:12
da TardoFreak
Puoi leggere QUESTO.

Re: ADC sul pierin pic18

MessaggioInviato: 10 set 2013, 12:14
da mangiare
Grazie TardoFreak ho scritto un programma molto semplice che mi dovrebbe permettere di acquisire un segnale analogico e se questo è uguale a zero mi dovrebbe accendere il led2 , se invece è diverso da zero mi dovrebbe accendere il led1. Il fatto è che mi rimane sempre acceso il led2 cioè quello che indica che il valore acquisito è uguale a zero, nonostante cambi il valore analogico con un trimmer. Dov'è che sbaglio? grazie
Codice: Seleziona tutto
// 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;
      }
  } 

  }



Re: ADC sul pierin pic18

MessaggioInviato: 10 set 2013, 13:03
da TardoFreak
Non vedo l' inizializzazione di RD6 e RD7 come output.

Re: ADC sul pierin pic18

MessaggioInviato: 10 set 2013, 13:44
da mangiare
E' all'inizio del main TRISD=0 :-)

Re: ADC sul pierin pic18

MessaggioInviato: 10 set 2013, 13:47
da TardoFreak
Vero #-o

Se ho tempo questa sera lo guarderò per bene. Oggi sono nella m... ehm, sono impegnatissimo. :(

Re: ADC sul pierin pic18

MessaggioInviato: 10 set 2013, 14:28
da c1b8
Se posso permettermi di aiutare Foto UtenteTardoFreak a spalare... ehm, a non distrarsi... mi sembra di vedere che manchi l'abilitazione del modulo ADC: bisogna settare a 1 il bit 0 di ADCON0.

Re: ADC sul pierin pic18

MessaggioInviato: 10 set 2013, 14:49
da mangiare
yesssss! grazie c1b8 mancava proprio quello ora funziona! :D
Vi vorrei chiedere se mi sapete orientare su qualche libro o guida online per imparare passo passo con ordine la programmazione delle PIC

Re: ADC sul pierin pic18

MessaggioInviato: 10 set 2013, 15:04
da TardoFreak
Nel sito del PIERIN PIC18 ci sono diversi articoli di EY che trattano dei PIC18.

In ogni caso, se trovi una risorsa in rete valida, fammelo sapere. Metterò il link nel sito alla sezione "guide". :ok:

Grazie Fabio. iOi

Re: ADC sul pierin pic18

MessaggioInviato: 12 set 2013, 8:33
da aduri
Ciao,
io mi sono trovato bene con questa guida/manuale.
http://www.laurtec.it/italiano/tutorial ... y_step.pdf

Antonio