Vai al contenuto
PLC Forum


acquisire 128 pixel - con il PIC16F876


thewiredlogics

Messaggi consigliati

thewiredlogics

Ciao a tutti e grazie per l'aiuto che avrete la pazienza di darmi...

Ho realizzato una interfaccia per l'acquisizione dei segnali analogici provenienti da un array lineare di 128 fotodiodi. Questo sensore funziona in modo molto semplice: basta un segnale di start a cui seguono 128 impulsi (un clock) + un 129° per finire un ciclo di lettura. L'ampiezza di questo clock (la larghezza) deve essere tarata in modo tale da non saturare a 5 volt od essere al contrario troppo piccola. Sperimentalmente si è visto che vanno bene 235 microsecondi per questo t_intg.

Sto utilizzando il pic16F876, quarzo a 4 MHz e seriale settata a 9600, convertitore abilitato con frequenza a metà di quella del quarzo, sto programmando in C e cerco la soluzione più semplice senza utilizzare interrupt.

Ho provato questa routine ma dopo un transitorio ricevo valori alti (se leggo i byte ho F8- F9) e se tappo il sensore col dito non vedo le variazioni attese, sembra non cambi nulla....eppure il firmware mi sembra così semplice da essere necessariamente giusto:

void acquisizione (void)

{

unsigned int i; //contatore

RCIF=0;

while(!RCIF)

{

SI_ON; //Attiviamo l'impulso start per potere iniziare la conversione

for(i=0; i<128; i++) //Conversione A/D

{

CLOCK_ON;//viene mandato in uscita il valore successivo

DelayUs(t_intg);

ADGO=1;

while(ADGO);

SI_OFF;

CLOCK_OFF;

while(!TRMT);

TXREG = ADRESH;

}

CLOCK_ON; //Ultimo impulso per poter chiudere

DelayUs(5);

CLOCK_OFF;

}

}

Secondo voi dov'è l'errore?

Link al commento
Condividi su altri siti


Ciao,

1° non ho capito cosa ci fai con questo sensore

2° non specifichi come lo hai collegato alla seriale e come lavora la stessa (sincrona, assincrona)

Secondo mè l'interrupt sulla ricezione dei dati in seriale lo devi usare, a maggior ragione se poi usi DelayUs(t_intg);.

Ciao

Sergio

Link al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...