| UserPlus
Data registr.: 24-08-2004 Residenza: palermo (pa)
Messaggi: 846
|
salve, dopo aver realizzato il regolatore di velocita' per motori brushed proposto nella sezione schemi elettrici, e aver visto che a basse velocita' non mi soddisfa un granche', ho deciso di riprendere lo studio del 16f84, e dal sorgente tentare di capire cosa fa' e se e' possibile migliorarlo......
premetto, non ero per niente bravo un paio di anni fa' quando studiai il pic, e non lo sono ora, quindi potrei anche sparare delle emerite min....te
per semplificare ho diviso il sorgente in 5 macroblocchi :
1) inizializzazione e mainloop
2) funzione mnext
3) funzione mnow
4) onmotor
5) funzione delay
per tentare di dissiparmi i dubbi ho realizzato pure lo schema a blocchi del sorgente.....e' in powerpoint... se serve lo converto in jpg (per chi e' piu' bravo di me', e' giusta la via che ho intrapreso ?????)
[attachmentid=1502]
e allora.... mambo....
1) a cosa serve la variabile SHIFT, impostata ma mai utilizzata?
il ritardo l' ho calcolato sulla base dei commenti del sorgente originario, ma come vedremo piu' avanti non sono d' accordo!
ma le variabili, quanto possono essere grandi ??? 8 bit (dec 255) o 14bit (dec 16383)
2)
movf DMCount,F
btfss STATUS,Z
queste 2 righe, non riuscivo a capire cosa facessero, poi girovagando su google, ho trovato una spiegazione :
si sposta il contenuto della variabile DMCount su se stessa, in modo che se e' uguale a 0, viene settato il bit Z del registro STATUS.
e' corretta questa interpretazione?
ma il bit Z viene impostato nuovamente a 0 subito dopo essere interrogato?
per ogni ciclo dicontrollo ove l' ingresso e' alto si somma 34 al valore di motnext
per un totale massimo (se il valore puo' essere max 16383) di 481 step, ma siccome il tempo dell' ingresso on e' 1millisecondo di default e 1 variabile in base alla posizione dello stick, dovremmo levare un valore che non vedo levato da nessuna parte!!! :-(
in tutto cio' , non ho capito a cosa si riferisce motres(0).... a indicare se il ciclo precedente era di mnow o mnext?
3) controlla lo stato di motnext, se diverso da 0 accende il motore, controlla che motnext non sia arrivato a 0, se no lo spegne, setta DMCount = 10 e MOTRES=0
4) onmotor, decrementa motnext e accende il motore.
5) delay ????
per prima cosa, imposta il timer 0 a 231 e count a 1,,,,,,
ma il timer non AVANZA di un passo ogni 16 Hz? (Fosc/4)/prescaler
quindi impostandolo a 231, avremo che il bit Z del registo status, andra a 1 dopo 384 Hz ((255-231)*16) circa 0,1millisecondi con quarzo da 3,8mhz
ogni volta che vi e' il bit Z settato, riassegna al timer il valore 231, e decrementa count, ma count e' 1, quindi diventa subito 0, e cio ci fa' uscire immediatamente dal ciclo, ma allora che senso ha avere la variabile count?
bene , per stasera e' tutto!!!!!.... non mi sparate, ma ho una gran confusione, e se non ho sbagliato niente, il sorgente non dovrebbe funzionare..... ma sicuramente ho sbagliato e non vedo dove, mi illuminate?
__________________
73 de davidea!!!
|