18f4550... quanti problemi! External Interrupt INT0 che non interrompe nulla!

12 Anni 1 Mese fa #1 da Nutshell
Salve a tutti di nuovo, più lavoro con questo pic, più mi pento di esser passato dalla serie 16 alla serie 18! Prima funzionava tutto a primo colpo, ora qualunque cosa mi fa perdere tempo.

Sto lavorando con gli interrupts, e funzionano perfettamente quelli su PORTB(4:7). Funziona perfettamente l'interrupt generato dall' overflow di TMR0, ma l'external interrupt INT0 non vuole saperne di attivarsi alla pressione del pulsante (il pulsante mette il pin INT0, normalmente collegato ad una res di pull-up, a massa).

Non avendo trovato nulla sul forum immagino sia la prima volta che leggete di questo problema, se trovo la soluzione la posto.

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

  • Nutshell
  • Avatar di Nutshell
  • Premium Member
  • Premium Member
Di più
12 Anni 1 Mese fa - 12 Anni 1 Mese fa #2 da Mauro Laurenti
Ciao,

potresti postare il codice?

Con i PIC18 ci sono due livelli di priorita' per le interruzioni, questo permette di avere dei vantaggi ma richiede qualche accortezza in piu'.

Non hai fatto male a passare ai PIC18! :)

Saluti,

Mauro
Ultima Modifica 12 Anni 1 Mese fa da Mauro Laurenti.

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

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
12 Anni 1 Mese fa - 12 Anni 1 Mese fa #3 da Nutshell
Ciao Mauro, il codice è troppo lungo per essere postato, ma essenzialmente ho abilitato l'interrupt INT0, azzerato il flag dell'interrupt INT0, ho impostato la modalità compatibile (Tutti gli interrupt ad alta priorità), ho abilitato gli interrupt globalmente, ho indicato con "pragma code..." il salto alla routine di interrupt ad alta priorità e all' interno di questa per verificare l'interrupt di INT0 ho scritto il solito: if (INT0IF){routine;}

Alla fine mi sono scocciato, non avevo tempo da perdere e per questa volta visto che dovevo implementare un encoder rotativo ho fatto l'implementazione in polling invece che con l'interrupt.


Tieni presente che tutti gli altri interrupt che sto usando funzionano perfettamente (TMR0, RB<4:7>)
Ultima Modifica 12 Anni 1 Mese fa da Nutshell.

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

  • Nutshell
  • Avatar di Nutshell
  • Premium Member
  • Premium Member
Di più
12 Anni 1 Mese fa #4 da StefA

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.

  • StefA
  • Avatar di StefA
  • Moderator
  • Moderator
Di più
12 Anni 1 Mese fa #5 da Nutshell
Giusto il discorso di settare l' interrupt sul fronte di discesa, ma ammesso di non averlo fatto, l'interrupt dovrebbe scattare lo stesso nel momento in cui si rilascia il pulsante.

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

  • Nutshell
  • Avatar di Nutshell
  • Premium Member
  • Premium Member
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