Lettura posizione cursore display 2x16 con controller 44780

12 Anni 5 Mesi fa - 12 Anni 5 Mesi fa #1 da Armando

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.

  • Armando
  • Junior Member
  • Junior Member
Di più
12 Anni 5 Mesi fa - 12 Anni 5 Mesi fa #2 da Armando

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.

  • Armando
  • Junior Member
  • Junior Member
Di più
12 Anni 5 Mesi fa #3 da Mauro Laurenti
le impostazioni sembrerebbero ok.

Come imposti il valore su RB1 e RB5?
Come leggi via software il valore dei bit?

Ti consiglio di ridurre il programma alla funzione che non ti funziona in maniera da focalizzare i test e facilitare la comprensione del problema.

Saluti,

Mauro

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

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
12 Anni 5 Mesi fa #4 da Armando
Ciao Mauro,

il PIC sui fronti di salita di un segnale di clock (correttamente rilevati su RB4) deve campionare un segnale digitale.
Ho quindi abilitato le interruzioni (ad alta priorità) sulla PORTB e dalla ISR di volta in volta leggo il bit da acquisire.

Se leggo da RB5 tutto funziona come previsto (a meno delle inutili interruzioni generate dai fronti del segnale che non interessano minimamente e per i quali devo resettare il flag di interruzione).
Se invece leggo da un pin differente (su cui non è abilitata l'interruzione) come l'RB1 non leggo correttamente il segnale. Preferirei usare RB1 proprio per avere interruzioni solo sui fronti del segnale di clock...

Preferendo ad esempio RB1 ad RB5 per acquisire il segnale, credo sia da cambiare solo il valore assegnato a TRISB (da 0b00110000 a 0b00010010) ed il bit da salvare (da LATBbits.RB5 a LATBbits.RB1).

Mi è sorto il dubbio che la lettura (del segnale) non debba avvennire nella ISR ed ho quindi usato una flag settata dalla ISR (e resettata dal main) con la quale affido al main (all'uscita della ISR) la lettura del bit LATBbits.RB1. Nulla è cambiato. Ho verificato che anche con questa modifica (con ISR più "snella") la lettura da LATBbits.RB5 funziona a dovere.

Potrei ignorare il problema visto che il programma funziona.

Ma è evidente che deve funzionare anche su porte diverse, cosa che al momento non mi riesce...

Grazie ancora!
Armando

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

  • Armando
  • Junior Member
  • Junior Member
Di più
12 Anni 5 Mesi fa #5 da Mauro Laurenti
Ciao Armando,

le interruzioni sul pin RB1 e RB5 sono diverse.
Il gruppo RB4 e RB7 ha una tipologia di interruzione e setta un flag.
RB0 e RB1 settano un altro flag (associato alle interruzioni INT).

Quindi devi cambiare in maniera opportuna l'Interrupt Service Routine al fine da identificare il pin (flag) che ha generato l'interruzione.

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