INTERRUPT ADC E LETTURA SWITCH RESISTIVO

12 Anni 3 Mesi fa - 12 Anni 3 Mesi fa #1 da RobertoPoz
INTERRUPT ADC E LETTURA SWITCH RESISTIVO è stato creato da RobertoPoz
Ciao!
Sto provando a leggere uno switch resistivo (commutatore), creando un menù dinamico. Per fare ciò utilizzo con successo l'ADC.
Il problema mi si pone quando voglio evitare di usare il ciclo infinito while(1) per eseguire le operazioni di lettura e visualizzazione del risultato dell'ADC.
Vorrei che l'ADC leggesse solo quando effettivamente necessario, ovvero quando cambia il valore dello switch, generando un'interruzione che, dopo essere stata gestita, faccia tornare il programma alla sua esecuzione ordinaria.
Qualcuno ha mai fatto qualcosa di simile? Idee? Ho provato diversi stralci di codice ma finora senza alcun successo.... :(
Uso il 18F4550.
Ultima Modifica 12 Anni 3 Mesi fa da RobertoPoz.

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

  • RobertoPoz
  • Visitatori
  • Visitatori
12 Anni 3 Mesi fa - 12 Anni 3 Mesi fa #2 da RobertoPoz
Risposta da RobertoPoz al topic Re: INTERRUPT ADC E LETTURA SWITCH RESISTIVO

Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.

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

  • RobertoPoz
  • Visitatori
  • Visitatori
12 Anni 3 Mesi fa #3 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: INTERRUPT ADC E LETTURA SWITCH RESISTIVO
Ciao,

Normalmente quello che si fa per rendere automatiche le letture di un ADC e' quello di usare un Timer.
Quando il timer genera un'interruzione fa partire l'ADC.
A sua volta abiliti le interruzioni per l'ADC in maniera da intercettare quando la conversione e' finita.

Alcune volte gli ADC hanno la possibilità di avere come trigger per l'ADC un timer, quindi nell'interrupt service routine del timer non e' in realta' necessario avviare il timer. In questo modo si automatizza il tutto e si risparmia energia.

Attento alle funzioni per LCD.

Sono relativamente lente e le conversioni ADC sono molto piu' veloci.
E' buona pratica rendere la funzione di gestione delle interruzioni quanto piu' breve e veloce possibile. Per cui non usare le funzione LCD al suo interno.

Implementa il tutto con un timer.

Fai prima lampeggiare un LED usando un Timer e le interruzioni
Poi dentro la funzione di gestione del timer, avvia l'ADC .

In questo modo spezzi il programma.

Saluti,

Mauro
Ringraziano per il messaggio: RobertoPoz

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

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
12 Anni 3 Mesi fa - 12 Anni 3 Mesi fa #4 da RobertoPoz
Risposta da RobertoPoz al topic Re: INTERRUPT ADC E LETTURA SWITCH RESISTIVO

Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.

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

  • RobertoPoz
  • Visitatori
  • Visitatori
12 Anni 3 Mesi fa #5 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: INTERRUPT ADC E LETTURA SWITCH RESISTIVO
Ciao,

come consiglio.

Dividi e conquista...
spezza il codice per funzioni e falle funzionare una alla volta. Poi comincia ad integrare il tutto.

Togli le funzioni LCD dalle routine d'niterrupt.
Le ISR (Interrupt Service Routine) devono gestire il minimo essenziale.

Saluti,

Mauro

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

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
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