- Messaggi: 130
- Ringraziamenti ricevuti 11
Rotary Encoder
8 Anni 6 Mesi fa #1
da Claudio_F
Rotary Encoder è stato creato da Claudio_F
Buongiorno, sto provando vari sensori e periferiche con il PIC18F4550, ma non riesco a portarne a termine nemmeno uno. sto usando MPLAB v3.3 e XC8 v1.37 forse dipende da quello. Utilizzando le librerie LTlib 4.0.1 (DS1337) ho collegato un RTC DS3231 e fin qui tutto bene. Ora volevo usare un rotary encoder per settare l'orologio, ma anche scopiazzando codice da progetti già provati in passato non ottengo nulla. In particolare ruotando l'encoder non viene rilevata nessuna variazione. Allego il sorgente.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Claudio_F
- Autore della discussione
- Premium Member
Riduci
Di più
8 Anni 5 Mesi fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Rotary Encoder
Ho visto velocemente il codice, non ho pensato alle varie operazioni logiche che hai fatto, ma un possibile problema che vedo è subdolo.
Fai uso della funzione delay dentro la funzione delle interruzioni (ISR).
la funzione delay è usata anche dal modulo LCD fuori dalla ISR, per cui questo può creare problemi tra cui il blocco del programma. la funzione delay in gergo si chiama non thread safe.
dovresti togliere il commento nel file delay.h alla seguente riga di codice:
//#define DELAY_INTERRUPT_BLOCKING
in questo modo puoi usare la funzione delay anche nelle ISR.
rimane ancora un 1% di non thread safe visto che alcune operazioni non sono compiute in maniera atomica.
Saluti,
Mauro
Fai uso della funzione delay dentro la funzione delle interruzioni (ISR).
la funzione delay è usata anche dal modulo LCD fuori dalla ISR, per cui questo può creare problemi tra cui il blocco del programma. la funzione delay in gergo si chiama non thread safe.
dovresti togliere il commento nel file delay.h alla seguente riga di codice:
//#define DELAY_INTERRUPT_BLOCKING
in questo modo puoi usare la funzione delay anche nelle ISR.
rimane ancora un 1% di non thread safe visto che alcune operazioni non sono compiute in maniera atomica.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
8 Anni 4 Mesi fa #3
da Claudio_F
Risposta da Claudio_F al topic Rotary Encoder
Superato il problema dell'encoder (allego il codice)ora la domanda è questa: è possibile far lampeggiare solo una parte del display? Il problema è questo: utilizzando un modulo TRC e partendo dall'esempio del libro XC8 STEP BY STEP, vorrei ruotando l'encoder far lampeggiare, solo le ore, i minuti e l'anno e una volta selezionato, sempre tramite l'encoder ottenere l'incremento o decremento del valore mostrato e quindi trasferire questi valori come settaggio dell'RTC.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Claudio_F
- Autore della discussione
- Premium Member
Riduci
Di più
- Messaggi: 130
- Ringraziamenti ricevuti 11
8 Anni 4 Mesi fa #4
da alfa75
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.
Risposta da alfa75 al topic Rotary Encoder
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.
- alfa75
- Platinum Member
Riduci
Di più
- Messaggi: 527
- Ringraziamenti ricevuti 86
8 Anni 4 Mesi fa #5
da Claudio_F
Risposta da Claudio_F al topic Rotary Encoder
Ottima idea
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Claudio_F
- Autore della discussione
- Premium Member
Riduci
Di più
- Messaggi: 130
- Ringraziamenti ricevuti 11
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Login
© LaurTec 2006 - 2024