interrupt fa cose strane

10 Anni 5 Mesi fa #6 da Pinna
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

Chi vola vale, chi vale vola, chi non vola è un vile

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

  • Pinna
  • Avatar di Pinna
  • Moderator
  • Moderator
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!

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

  • sharky
  • Senior Member
  • Senior Member
Di più
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.
Ultima Modifica 10 Anni 5 Mesi fa da sharky.

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

  • sharky
  • Senior Member
  • Senior Member
Di più
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

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

  • ettore
  • New Member
  • New Member
Di più
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! :)

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

  • sharky
  • Senior Member
  • Senior 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