Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 11 novembre 04, 00:23   #1 (permalink)  Top
UserPlus
 
L'avatar di davidea
 
Data registr.: 24-08-2004
Residenza: palermo (pa)
Messaggi: 846
Invia un messaggio via MSN a davidea
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!!!
davidea non è collegato   Rispondi citando
Vecchio 11 novembre 04, 23:41   #2 (permalink)  Top
User
 
L'avatar di MSchiepp
 
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 è l’unica 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.
MSchiepp non è collegato   Rispondi citando
Vecchio 12 novembre 04, 00:23   #3 (permalink)  Top
Amministratore
 
L'avatar di BaroneRosso
 
Data registr.: 27-07-2000
Residenza: Roma
Messaggi: 9.820
Immagini: 6
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
BaroneRosso non è collegato   Rispondi citando
Vecchio 12 novembre 04, 01:56   #4 (permalink)  Top
UserPlus
 
L'avatar di davidea
 
Data registr.: 24-08-2004
Residenza: palermo (pa)
Messaggi: 846
Invia un messaggio via MSN a davidea
Citazione:
Originally posted by MSchiepp+11 novembre 2004, 22:46--><div class='quotetop'>QUOTE(MSchiepp @ 11 novembre 2004, 22:46)</div><div class='quotemain'>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!!!

[/b]


il mio schema a blocchi o il sorgente originario?

Citazione:
Originally posted by MSchiepp@11 novembre 2004, 22:46
Provo a darti qualche risposta.

Il numero di cicli sembra essere 34 x 10 (dmcount).

quindi 340, ma la variabile puo' essere max 255, e allora? il resto lo buttiamo? non credo, dovrei avere settato il bit di carry e avere il resto della somma-255 nella variabile?
in ogni caso, il valore misurato dovrebbe essere decrementato della parte fissa (1millisecondo) che non e' comando motore.....

Citazione:
Originally posted by MSchiepp@11 novembre 2004, 22:46
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

perche' il conteggio con count viene ripetuto 2 volte? se inizializzo a 1, poi decfsz decrementa e controlla se e' stato raggiunto lo zero, mi ritrovo che appena arrivo all' istruzione, viene fatto il decremento, arrivando subito a 0, quindi se controllo ed e' zero, salto! o no?


Citazione:
Originally posted by MSchiepp@11 novembre 2004, 22:46
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

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!!!
davidea non è collegato   Rispondi citando
Vecchio 12 novembre 04, 02:11   #5 (permalink)  Top
User
 
Data registr.: 09-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
mephisto non è collegato   Rispondi citando
Vecchio 12 novembre 04, 09:56   #6 (permalink)  Top
User
 
L'avatar di MSchiepp
 
Data registr.: 21-01-2004
Residenza: Milano
Messaggi: 989
Citazione:
Originally posted by davidea@12 novembre 2004, 01:01
il mio schema a blocchi o il sorgente originario?
Il sorgente, ovvio!


Citazione:
quindi 340, ma la variabile puo' essere max 255, e allora? il resto lo buttiamo? non credo, dovrei avere settato il bit di carry e avere il resto della somma-255 nella variabile?
In effetti ci sono ottime probabilità che sia sbagliato!!


Citazione:
perche' il conteggio con count viene ripetuto 2 volte?
1! Il secondo giro non viene mai fatto!


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.
MSchiepp non è collegato   Rispondi citando
Vecchio 12 novembre 04, 23:22   #7 (permalink)  Top
UserPlus
 
L'avatar di davidea
 
Data registr.: 24-08-2004
Residenza: palermo (pa)
Messaggi: 846
Invia un messaggio via MSN a davidea
Citazione:
Originally posted by MSchiepp@12 novembre 2004, 09:01
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
si scaricato, ma i problemi cercano tutti me, all' avvio mi dice che non ho abbastanza memoria e si chiude!!!!, strano, 512mb dovrebbero bastare... !
__________________
73 de davidea!!!
davidea non è collegato   Rispondi citando
Vecchio 13 novembre 04, 09:57   #8 (permalink)  Top
User
 
L'avatar di MSchiepp
 
Data registr.: 21-01-2004
Residenza: Milano
Messaggi: 989
Strano, a me funziona benissimo con 256...
__________________
__________________________________________________
The worst day flying is better than the best day working.
MSchiepp non è collegato   Rispondi citando
Vecchio 13 novembre 04, 11:37   #9 (permalink)  Top
UserPlus
 
L'avatar di davidea
 
Data registr.: 24-08-2004
Residenza: palermo (pa)
Messaggi: 846
Invia un messaggio via MSN a davidea
Citazione:
Originally posted by MSchiepp@13 novembre 2004, 09:02
Strano, a me funziona benissimo con 256...

disinstallato e reinstallato, risolto!!!!
ora devo capire come si fa' il debug, per ora l' ho solo installato, e provato ad avviare, stasera porvo un po' il sorgente.
__________________
73 de davidea!!!
davidea non è collegato   Rispondi citando
Rispondi

Bookmarks




Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


Discussioni simili
Discussione Autore discussione Forum Commenti Ultimo Commento
regolatore con 16f84 fedor60 Circuiti Elettronici 10 11 marzo 08 17:25
regolatore con 16f84 fedor60 Circuiti Elettronici 2 12 aprile 06 21:19
Regolatore con pic 16f84 dbkill Circuiti Elettronici 2 01 giugno 05 11:23
Regolatore pic 16f84 Angqwe Circuiti Elettronici 5 28 novembre 03 20:55
Regolatore pic 16f84 Kayser_Soze Circuiti Elettronici 5 27 novembre 03 14:12



Tutti gli orari sono GMT +2. Adesso sono le 03:28.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002