
|
![]() | #1 (permalink) Top |
UserPlus |
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!!! |
![]() | ![]() |
![]() | #2 (permalink) Top |
User Data registr.: 21-01-2004 Residenza: Milano
Messaggi: 989
|
Ho guardato il sorgente riportato sul tuo schema a blocchi; in effetti non è un esempio di chiarezza ed efficacia
se vuoi imparare a programmare i microcontrollori non usarlo come esempio!!! Provo a darti qualche risposta. 1) La variabile shift in effetti non serve (e non è lunica cosa inutile ). Le variabili ed i registri sono tutti a otto bit (0-255) 2) movf n,f in effetti serve solo a settare il bit Z se il contenuto della variabile è 0; il flag rimane nello stato in cui si trova fino a quando viene eseguita un istruzione che lo modifica; non tutte le istruzioni modificano i flag dello status register (es. la movwf non ne modifica alcuno). Il numero di cicli sembra essere 34 x 10 (dmcount). 3) La routine di Delay ritarda di 200 cicli: 25 x 4 (prescaler) ripetuta due volte (la variabile count viene inizializzata a 1 e poi decrementata una sola volta). A 3.8 Mhz 200 cicli corrispondono a 210 uS, più i ritardi dovuti alle istruzioni di test (esiste un bit di overflow del timer 0 T0IF molto più semplice da usare) 4) In effetti la variabile count non serve: è sufficiente impostare il timer a 205 per avere 50 cicli di timer che con il prescaler a 4 fa sempre 200! Da notare anche che il 16F84 è un micro ormai obsoleto; in alternativa il 16F628 ha anche un timer a 16 bit che in questi casi è molto utile!! Michele
__________________ __________________________________________________ The worst day flying is better than the best day working. |
![]() | ![]() |
![]() | #3 (permalink) Top | ||||
UserPlus | Citazione:
il mio schema a blocchi o il sorgente originario? Citazione:
in ogni caso, il valore misurato dovrebbe essere decrementato della parte fissa (1millisecondo) che non e' comando motore..... Citazione:
Citazione:
ne ho piu' di qualcuno sparso per casa, visto l' uso che se ne faceva tempo addietro.... <!--QuoteBegin-BaroneRosso@11 novembre 2004, 23:28 Se interessa la prossima settimana pubblico un progettino che mi hanno inviato proprio con il 16F628, queste sono le caratteristiche [/quote] si che interessa, se magari c'e' pure lo stampato ancora meglio
__________________ 73 de davidea!!! | ||||
![]() | ![]() |
![]() | #4 (permalink) Top | |||
User Data registr.: 21-01-2004 Residenza: Milano
Messaggi: 989
| Citazione:
Citazione:
Citazione:
Se non l'hai già puoi scaricare dal sito Microchip l'ambiente di sviluppo MPLAB IDE per i pic che ti consente di simulare il funzinamento di un programma seguendolo passo-passo e verificando lo stato di tutte le variabili. Michele
__________________ __________________________________________________ The worst day flying is better than the best day working. | |||
![]() | ![]() |
![]() | #5 (permalink) Top | |
UserPlus | Citazione:
![]()
__________________ 73 de davidea!!! | |
![]() | ![]() |
![]() | #7 (permalink) Top |
Amministratore |
Se interessa la prossima settimana pubblico un progettino che mi hanno inviato proprio con il 16F628, queste sono le caratteristiche Regolatore di giri con bec e cut-off per celle Lipo: N. celle: 2-3 selezionabile via jumper Logica di controllo: PIC16F626 Quarzo 4MHZ Uscita: PWM 1KHZ con duty cicle variabile da 0 a 100% Lettura segnale ingresso: 155KHZ (155 letture ogni 1ms) per controllare il segnale in ingresso uso del comparatore interno per il cut-off Diodo led per segnalazione anomalie
__________________ Saluti Francesco Kaitner alias "Il Barone Rosso" WebMaster di: BaroneRosso.it e DroneRC.it Il Portale del Modellismo in Italia |
![]() | ![]() |
![]() | #8 (permalink) Top |
User Data registr.: 10-05-2004 Residenza: Varese (Olgiate Olona)
Messaggi: 914
|
Bravissimo Barone, cosi adesso oltre i motori da CD impariamo anche a farci i regolatori.... Alla base di uno "sport" c'e' sempre una base culturale. Se ascolto dimentico, se vedo ricordo, se faccio IMPARO. Buona notte. Alberto |
![]() | ![]() |
![]() |
Bookmarks |
| |
![]() | ||||
Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
regolatore con 16f84 | fedor60 | Circuiti Elettronici | 10 | 11 marzo 08 18:25 |
regolatore con 16f84 | fedor60 | Circuiti Elettronici | 2 | 12 aprile 06 22:19 |
Regolatore con pic 16f84 | dbkill | Circuiti Elettronici | 2 | 01 giugno 05 12:23 |
Regolatore pic 16f84 | Angqwe | Circuiti Elettronici | 5 | 28 novembre 03 21:55 |
Regolatore pic 16f84 | Kayser_Soze | Circuiti Elettronici | 5 | 27 novembre 03 15:12 |