- Messaggi: 1010
- Ringraziamenti ricevuti 107
interrupt fa cose strane
10 Anni 5 Mesi fa #6
da Pinna
Chi vola vale, chi vale vola, chi non vola è un vile
Risposta da Pinna al topic interrupt fa cose strane
vorrei avere la risposta a due domande:
1) confermi che il prescaler è impostato 1:2? (mi era successo di invertire i valori dei relativi bit)
2) che tempo vuoi ottenere dal timer1?
Marcello
1) confermi che il prescaler è impostato 1:2? (mi era successo di invertire i valori dei relativi bit)
2) che tempo vuoi ottenere dal timer1?
Marcello
Chi vola vale, chi vale vola, chi non vola è un vile
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Pinna
- Moderator
Riduci
Di più
10 Anni 5 Mesi fa #7
da sharky
Risposta da sharky al topic interrupt fa cose strane
Ciao!
Alla domanda nr 1 ora non ti so rispondere perche sto a letto.. Alla domanda due si:
Vorrei avere una durata del timer variabile! Ho una durata del pwm alto che varia da 1 a 2 ms con una risoluzione di 1000. Dunque il timeravrá la durata di questo valore, una volta raggiunto questo tempo resetterá l uscita del pwm portandola a 0 e partirá nuovamente il timer ma questa volta con una durata piu lunga compresa tra i 18 e i 19 ms (20 ms - durata primo timer) in pratica si alterna un timer corto a uno lungo generando un pwm con una durata che varia dall 1 ai due ms e un ciclo di 20 ms. Mi serve per controllare un servo tramite un potenziometro!
Alla domanda nr 1 ora non ti so rispondere perche sto a letto.. Alla domanda due si:
Vorrei avere una durata del timer variabile! Ho una durata del pwm alto che varia da 1 a 2 ms con una risoluzione di 1000. Dunque il timeravrá la durata di questo valore, una volta raggiunto questo tempo resetterá l uscita del pwm portandola a 0 e partirá nuovamente il timer ma questa volta con una durata piu lunga compresa tra i 18 e i 19 ms (20 ms - durata primo timer) in pratica si alterna un timer corto a uno lungo generando un pwm con una durata che varia dall 1 ai due ms e un ciclo di 20 ms. Mi serve per controllare un servo tramite un potenziometro!
Si prega Accedi o Crea un account a partecipare alla conversazione.
- sharky
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 59
- Ringraziamenti ricevuti 0
10 Anni 5 Mesi fa - 10 Anni 5 Mesi fa #8
da sharky
Risposta da sharky al topic interrupt fa cose strane
Dopo parecchie prove credo che il problema sia settare l uscita.
#define LED GPIObits.GP4
Se nell' interrupt metto LED^=1; il led si spegne e si accende in base all impostazione del timer.
Se invece metto
if (LED)
{
LED=0;
}
else
{
LED=1;
}
viene sempre eseguito il lato ELSE e mail il primo. Come mai?
Cioè LED ^=1; funziona LED=0 / LED=1 no.
#define LED GPIObits.GP4
Se nell' interrupt metto LED^=1; il led si spegne e si accende in base all impostazione del timer.
Se invece metto
if (LED)
{
LED=0;
}
else
{
LED=1;
}
viene sempre eseguito il lato ELSE e mail il primo. Come mai?
Cioè LED ^=1; funziona LED=0 / LED=1 no.
Ultima Modifica 10 Anni 5 Mesi fa da sharky.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- sharky
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 59
- Ringraziamenti ricevuti 0
10 Anni 5 Mesi fa #9
da ettore
Risposta da ettore al topic interrupt fa cose strane
Io vedo un unico vero problema nel tuo codice a pagina 1. I pins GP0,GP1,GP2 e GP4 condividono funzioni analogiche, cioè, AN0, AN1, etc etc. Tali funzioni sono inizializzate al reset del micro controllore e questo disabilita il buffer di lettura di quei pins. Ciò significa che qualunque lettura su uno di quei pins della porta GPIO ritornerà 0. In definitiva, quando usi LED^=1 stai eseguendo una lettura implicita di quel pin prima di settarlo; ne leggi lo stato e poi lo inverti.
Prova quindi ad aggiungere la linea:
ANSEL=1 all'inizio di main. Il registro ANSEL è inizializzato con degli 1 nelle posizioni dei corrispettivi pins. I pins che poni a zero abiliteranno in buffer digitale di lettura ed escluderanno la funzione analogica (ADC). Ho lasciato il bit ANSEL<0> a 1 nell'eventualità che tu lo voglia usare per convertire il segnale dal potenzionetro.
Meno importante ma degno di nota: che vuol dire TRISIO = 0x00000001; ? Non dovrebbe essere TRISIO = 0b00000001; ?
Ettore
Prova quindi ad aggiungere la linea:
ANSEL=1 all'inizio di main. Il registro ANSEL è inizializzato con degli 1 nelle posizioni dei corrispettivi pins. I pins che poni a zero abiliteranno in buffer digitale di lettura ed escluderanno la funzione analogica (ADC). Ho lasciato il bit ANSEL<0> a 1 nell'eventualità che tu lo voglia usare per convertire il segnale dal potenzionetro.
Meno importante ma degno di nota: che vuol dire TRISIO = 0x00000001; ? Non dovrebbe essere TRISIO = 0b00000001; ?
Ettore
Si prega Accedi o Crea un account a partecipare alla conversazione.
- ettore
- New Member
Riduci
Di più
- Messaggi: 14
- Ringraziamenti ricevuti 2
10 Anni 5 Mesi fa #10
da sharky
Risposta da sharky al topic interrupt fa cose strane
miticoooooo!!!
grazie mille era proprio questo il problema!
grazie mille era proprio questo il problema!
Si prega Accedi o Crea un account a partecipare alla conversazione.
- sharky
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 59
- Ringraziamenti ricevuti 0
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.