L'interrupt può produrre un errore Conversione AD?

13 Anni 8 Mesi fa #1 da gcupini
Salve a tutti,

Uso un PIC16F88 (programmato in c) per effettuare 5 conversioni AD. Nel loop infinito eseguo le conversioni circa ogni 5 Sec tutto Funziona.
Se ora inserisco nel Main la inizializzazione di due Timer TMR0 e TMR1 per produrre un segnale PWM a bassa frequenza (50 Hz) usando evidentemente gli interrupt, il segnale PWM è OK, ma le conversioni AD “sbandano”.

Mi pare di poter spiegare il fenomeno come segue:
siccome gli interrupt dei timer “possono troncare” la conversione in atto, tale conversione non è più corretta.

E' così ?
Se si c'è un rimedio ?

Grazie per l'attenzione

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • gcupini
  • Visitatori
  • Visitatori
13 Anni 8 Mesi fa #2 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: L'interrupt può produrre un errore Conversione AD?
Ciao Giovanni,

il comportamento è strano. Le conversioni di un ADC sono di suo molto più lente di molti eventi che possono interrompere il programma, per cui il fatto che si verifichi una interruzione durante la conversione è piuttosto probabile.

Come fai a dire che la conversione non è più corretta?

Puoi postare il codice?

In questi casi oltre che problemi software devi considerare anche possibili problemi hardware (filtraggi e rumore).

Puoi descrivere il tuo hardware o postare lo schema?
Il circuito è montato su breadboard o hai un PCB?

Saluti,

Mauro

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
13 Anni 8 Mesi fa #3 da gcupini

File allegato:

Nome del file: FORUMCOD.pdf
Dimensione del file:50 KB

Ciao,
Si tratta sempre del firmware del mio rasa erba. Sto facendo prove su schede provvisorie. Per ora provo con I2c la comunicazione tra PIC18F4550 e PI C16F88.
Se ricordi ho sistemato la comunicazione I2c.
In ogni caso qui si tratta del PIC16F88 che lavora autonomamente convertendo in AD 5 misure. Le leggo da Master PIC18F4550 e su LCD sono tutte corrette.
Poi inserisco nel codice del PIC16 il codice per generare il PWM a 50 HZ e non solo leggo immediatamente una conversione errata su LCD, ma ho verificato, anche se ho usato solo dei led sul fronte PIC16 che effettivamente con il codice aggiunto non converte più correttamente. Il segnale PWM è invece corretto.

Ti allego un po di codici ma sono provvisori e non so se sono leggibili.

Mi scuso per gli spezzoni ma dovrei darti un codice diviso in piu file e ho cercato di sintetizzare. spero di averti dato quanto ti serve. Da leggere è anche troppo noioso
Allegati:

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • gcupini
  • Visitatori
  • Visitatori
13 Anni 8 Mesi fa #4 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: L'interrupt può produrre un errore Conversione AD?
Ciao Gianni,

dal codice non ho capito molto (l´ho visto ieri sera), ma ho potuto constatare che in realtà c´e´ di mezzo anche l´I2C. Piuttosto che inviare i dati via I2C potresti visualizzarli direttamente con dei led sul primo PIC?

Non escludere che sia la trasmissione I2C a dare problemi.
In ogni modo da un punto di vista hardware il PIC ha le capacita´ di disaccoppiamento?

Aggiungi un test sul programma principale in cui di tanto in tanto ti accerti che non si resetti la CPU.
Controlla i bit relativi alle varie tipologie di reset. Se si verifica un Reset accendi un LED di errore.

Se i 50Hz sono generati correttamente non credo tu abbia questo problema.
In ogni modo come misuri i 50Hz?

Saluti,

Mauro

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
13 Anni 8 Mesi fa #5 da gcupini
ciao Mauro,
Sapevo che il codice non era molto leggibile. Quindi mi scuso ma non voglio inondarti con tutto il codice diviso in varie librerie e difficilmente leggibile.

La comunicazione I2c non dovrebbe essere il problema. Infatti controllo, con un test fatto con due led, sul PIC in questione e questi confermano che quando attivo i due Timer la conversione AD è errata. Mentre i timer generano il segnale corretto (il motore brushless parte correttamente)

Cosa intendi per disaccoppiamento del PIC ? i due Pic hanno due regolatori indipendenti e la massa comune. Basta?

Verificherò invece se avvengono inattesi Reset coma da tua indicazione.

In ogni caso tu non hai dubbi sul fatto che i due interrupt di TMR0 e TMR1 possano interrompere la conversione AD e renderla errata ? Questo mi conforta.

Grazie

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • gcupini
  • Visitatori
  • Visitatori
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login