bit Inserita: 21 febbraio 2004 Segnala Share Inserita: 21 febbraio 2004 Beh, come dice dlgcom stai saltando le tappe. Vai con calma e studia bene i vari capitoli, provando anche i programmi in pratica. Hai già tirato fuori il timer0, e le varie opzioni in merito.Per adesso usa i vecchi cicli di ritardo tradizionali. Inoltre non ti imbarcare in programmi più complessi se li devi lasciare a mezzo. Fai qualcosa che tu possa provare in pratica se funziona, se poi sei in difficoltà ti do una mano.Una curiosità: a parte i microprocessori, a che livello sei come conoscenza dell'elettronica digitale? Intendo dire porte logiche , risoluzione di circuiti combinatori, contatori, memorie, registri, circuiti sequenziali, numerazione binaria, calcolo binario... insomma questa roba qua.Non è per scoraggiarti, ma cercare di usare un microprocessore senza sapere cosa sia un registro, o una sottrazione binaria, non è facile.Ciao. Link al commento Condividi su altri siti More sharing options...
aleda5859 Inserita: 22 febbraio 2004 Autore Segnala Share Inserita: 22 febbraio 2004 In effetti le mie conoscenze rimangono a livello hobbystico... è che ho poco tempo per "studiare",con gli esami ecc a scuola quest'anno è un casino.Il programma non è che l'avevo lasciato a metà..ma prima di andare avanti volevo sapere se stavo sbagliando oppure no...Cosa intendi con "cicli di ritardo tradizionali?"Non preoccuparti di scoraggiarmi... la verità è la verità.. Link al commento Condividi su altri siti More sharing options...
bit Inserita: 22 febbraio 2004 Segnala Share Inserita: 22 febbraio 2004 Dunque, vediamo la differenza tra un ciclo di ritardo tradizionale e un ritardo generato da un timer ed eventualmente un'interrupt.In un ciclo di ritardo tradizionale si fa eseguire al microprocessore una serie di istruzioni assolutamente inutili, ma sufficienti a "far perdere un certo tempo" prima di eseguire una certa operazione.Se il tempo da "perdere" è poco, nell'ordine di alcuni microsecondi, esiste l'apposita istruzione NOP, istruzione assolutamente ininfluente sullo stato del micro, ma che impiega 1 ciclo macchina per essere eseguita, quindi, per un PIC con clock a 4 Mhz, corrisponde a 1 us. Come sai infatti un ciclo macchina corrisponde a 4 cicli di clock, e le istruzioni, per essere eseguite, richiedono 1 ciclo macchina (2 se l'istruzion eimplica un salto).Se il tempo di ritardo è maggiore è inutile sprecare memoria per scrivere decine di istruzioni NOP, che tra l'altro non permetterebbero mai di raggiungere comunque ritardi consistenti. Si creano allora dei cicli di conteggio, anche più di uno dentro l'altro, fino a raggiungere il ritardo desiderato. Ovviamente va fatto un calcolo per vedere quanti cicli di conteggio servono, quale valore iniziale di conteggio va impostato, ecc...La struttura tipica di un ciclo di ritardo è questa: MOVLW 0x30 MOVWF TEMPOCIC_RIT:DECFSZ TEMPO,F GOTO CIC_RITse servono più cicli di conteggio insieme la forma diventa questa: MOVLW 0x20 MOVWF TEMPO2CIC_RIT2:MOVLW 0x30 MOVWF TEMPO1CIC_RIT1:DECFSZ TEMPO1,F GOTO CIC_RIT1 DECFSZ TEMPO2,F GOTO CIC_RIT2TEMPO1 e TEMPO2 sono registri generici.A te provare a calcolare il ritardo introdotto, non è difficile.Questo metodo ha il vantaggo di essere semplice, ma ha lo svantaggio di tenere occupata la CPU in istruzioni inutili. In tal caso si possono usare i timer interni, che se correttamente impostati, possono richiedere un'interrupt alla fine del conteggio e segnalare quindi che è trascorso un certo tempo da quando il ritardo è stato impostato. Nel frattempo la CPU può continuare a fare altre cose. La capacità di questi timer però è limitata, e spesso è necessario introdurre comunque un contatore di divisione nella subroutine di interrupt, ma questo lo vedremo poi.Riguardo all'elettronica digitale non so se l'hai studiata a scuola (penso di si, visto che vuoi presentare il progetto come tesi d'esame, hai detto?) e come l'hai studiata (purtroppo ci sono professori che insegnano da cani), però è abbastanza importante per usare bene i micro sapercisi districare. Se non sei sicuro di quello che sai ti consiglio un ripasso.Ciao. Link al commento Condividi su altri siti More sharing options...
aleda5859 Inserita: 24 febbraio 2004 Autore Segnala Share Inserita: 24 febbraio 2004 sfortunatamente sono in un liceo scientifico.. e abbiamo cominciato appena quest'anno a parlare di corrente e magnetismo.. 'Un ripassone comunque non fà mai male no? Per il ritardo vediamo.. noi inizializziamo tempo uno a 0x30 cioè 48 dec.. ogni ciclo macchina (4 clock..) viene decrementato di uno.. quindi -1 ogni Mhz giusto?dopo 48 volte arriva a zero ed impiega un ciclo in più per l'istruzione di salto.. quindi in totale dopo 49 cicli ho "vuotato" tempo1 e hosaltato all'istruzione successiva...lì decremento di uno temp2 (inizializzato a 32 dec..) e riprendo da capo....in totale quindi per ogni decremento unitario di temp2 impiego 49 cicli macchina...di decrementi me ne servono 32...49 * 32 =1568 cicli macchina..che mi impegnano il pic nel ritardo...quindi... considerato un ciclo = 1Mhzla frequenza di ritardo sarà di 1.000.000/1568 Hz.. ovvero.. 637.7HzIl periodo quindi sarà di 1.5 millesimi di secondo circa... ho indovinato? :ph34r: Link al commento Condividi su altri siti More sharing options...
Giorgio Demurtas Inserita: 24 febbraio 2004 Segnala Share Inserita: 24 febbraio 2004 ciao aleda,se il tuo obiettivo è generare un colck di 1Hz dai uno sguardo all n°222 di F.E. , trovi la subroutine già bella pronta.ciaogiorgiops. ho fatto il mio primo circuito semiserio con il pic....l'effetto supercar nello scooter! guardate la foto nel mio sito. Link al commento Condividi su altri siti More sharing options...
aleda5859 Inserita: 24 febbraio 2004 Autore Segnala Share Inserita: 24 febbraio 2004 Qual'è il tuo sito????? mi spiegava bit che conviene partire da zero..e tirare su su le somme...grazie per la dritta comunque..come sta il tutorial su fare elettronica dei pic? Link al commento Condividi su altri siti More sharing options...
bit Inserita: 25 febbraio 2004 Segnala Share Inserita: 25 febbraio 2004 Attento aleda5859, il ragionamento è giusto, ma hai tralasciato un piccolo particolare: nel ciclo di conteggio più interno vengono eseguite due istruzioni: quella di decremento DECFSZ, che non implicando nessun salto (a parte quando finisce il conteggio), utilizza un ciclo macchina, e un'istruzione di salto GOTO che chiude il ciclo e che utilizza due cicli macchina. Totale 3 cicli macchina per ogni decremento.Il conto dell'esempio diventa quindi:3x48x32=4608 cicli macchina.Con il clock a 4 Mhz, ricordando che un ciclo macchina utilizza 4 cicli di clock il ritardo vale 4608 us.Anche il 49 era sbagliato. Infatti se imposti 1 il ciclo non viene eseguito mai, si fa 1 decremento e si esce subito.Comunque quando suggerivo un ripasso non intendevo i fondamenti dell'elettrotecnica in generale, ma un po' di elettronica digitale, porte logiche e giù di lì.Non preoccuparti, l'orologio si farà!Ciao! Link al commento Condividi su altri siti More sharing options...
aleda5859 Inserita: 26 febbraio 2004 Autore Segnala Share Inserita: 26 febbraio 2004 Grazie bit per le delucidazioni anche stavolta ottimali..Mi chiedevo però..se ogni istruzione di GOTO spendo 2 cicli macchina in più... non devo considerare anche quelli che mi servono per passare da temp2 a temp1? e quindi avere.. 3 x 48 x3 x 32 perchè ogni decremento di temp2 ho un ciclo per l'istruzione decremento e 2 per ritornare a temp1 inizializzato no?quindi 3 * 48 * 3 * 32 = 13824 cicli..13824 microsecondi.. mi sbaglio? :ph34r: Link al commento Condividi su altri siti More sharing options...
Claudio F Inserita: 26 febbraio 2004 Segnala Share Inserita: 26 febbraio 2004 Intanto come primo post saluti al forum appena scoperto Mi accodo subito a questo microscopico thread in quanto anche io sono appassionato di micro, e ho messo un po'di note per principianti sul mio sito (dovrebbe funzionare l'iconcina sotto il messaggio).Ho notato un po'di dubbi sul calcolo dei ritardi software... riprendo l'esempio di bit:MOVLW 0x20MOVWF TEMPO2Queste due istruzioni vengono eseguite una sola volta, e durano 2uSCIC_RIT2: MOVLW 0x30MOVWF TEMPO1CIC_RIT1: DECFSZ TEMPO1,FGOTO CIC_RIT1Questo ciclo interno prevede un'inizializzazione di TEMPO1 fatta con due istruzioni (quindi 2uS) e poi le due istruzioni vere e proprie del ciclo. Il ciclo e' vuoto (contiene solo il decremento e il GOTO) e dura esattamente 47*3+2uS, cioe' 143uS. Infatti per 47 volte si ha il decremento e il GOTO, e l'ultima volta si ha il decremento con skip del GOTO. In totale le 4 istruzioni durano quindi 145uS.DECFSZ TEMPO2,FGOTO CIC_RIT2Questo ciclo esterno dura 31*3+2 uS + 32 volte tutto quello che contiene, cioe' le 4 istruzioni del ciclo interno di 145uS. In totale abbiamo 31*3+2 + 32*145 = 4735uSConsiderando anche le due istruzioni iniziali di caricamento in TEMPO2, l'insieme delle 8 istruzioni dell'esempio richiede esattamente 4737uS per essere eseguito.ciao Claudio F Link al commento Condividi su altri siti More sharing options...
bit Inserita: 26 febbraio 2004 Segnala Share Inserita: 26 febbraio 2004 Ineccepibile l'analisi di Claudio. La mia formula è approssimata, dato che il grosso del ritardo è dato dal numero di ripetizioni del ciclo interno. Di solito, quando si usa più di un ciclo uno dentro l'altro è perchè uno solo non bastava. Il ciclo interno di solito è settato per valori alti, spesso proprio 256d, quindi le istruzioni dei cicli esterni hanno poca influenza. Inoltre difficilmente si ricerca la precisione con questo tipo di ritardi.Ciao! Link al commento Condividi su altri siti More sharing options...
aleda5859 Inserita: 27 febbraio 2004 Autore Segnala Share Inserita: 27 febbraio 2004 Al momento sono a scuola.. cerco di fare un ritardo di circa un secondo.. e stasera ve lo posto ok?Sperando..di essere il più preciso possibile.. Link al commento Condividi su altri siti More sharing options...
aleda5859 Inserita: 28 febbraio 2004 Autore Segnala Share Inserita: 28 febbraio 2004 Intanto vediamo se ho capito bene... :MOVLW 0x20 } “ queste due istruzioni le scrivo una volta ogni ciclo quindi mi –costeranno- ”MOVWF TEMPO2 } “2uS e basta”CIC_RIT2:MOVLW 0x30 | “queste istruzioni verranno ripetute ogni volta che ripartirà il MOVWF TEMPO1 | “ciclo di ritardo 2.. 2 cicli macchina x ciclo”CIC_RIT1:DECFSZ TEMPO1,F |“Settato il registro tempo1 a 48 dec ripeterò queste istruzioni GOTO CIC_RIT1 |“per47volte[(1+2 ) x 47]e la 48esima volta avrò l’istruzione |“decfsz + lo skipp della stessa (2).Alla fine allora per ogni volta |“che si azzererà il registro tempo uno avro speso[(1+2 ) x 47]+2 | “per queste istruzioni.DECFSZ TEMPO2,F | “queste due istruzioni decrementeranno il registro tempo2GOTO CIC_RIT2 | “che avverrà in 32 volte. 31 di queste comprenderanno le due | “istruzioni: 3 cicli. L’ultima volta decfsz+il suo salto (2) In conclusione : {{2+[(1+2 ) x 47]+2} x 32 + [(31 x 3)+2] }} +2 = 4640 + 95 = 4735ci sono?Avrò: {{2+[( 1+2 ) x Y]+2} x Z + [( V x 3)+2] }} +2 = 1 secondo.dove : Y = N° di inizializzazione di TEMPO1 - 1 Z = N° di inizializzazione di TEMPO2 V = N° di inizializzazione di TEMPO2 - 1quindi... premettendo che non sono un matematico.. {{2+[( 1+2 ) x Y]+2} x Z + [(( Z-1 ) x 3)+2] }} +2 = 1.000.000 [[(3Y+4) * Z ] + (3Z - 1) ] +2 = 1.000.000 3ZY +7Z +1 = 1.000.000 Z(3Y - 7 ) - 999.999 = 0 Z = ( 999.999 ) / (3Y - 7) Dando adesso un valore a Y ricordandoci che è N°TEMPO - 1 Y = 1120 (QUINDI tempo1 si dovrebbe inizializzare a 1121.. è possibile?) Z= ( 999.999) / (3360 + 7) Z = 999.999 / 3367 Z = 297 qUINDI tempo2 Link al commento Condividi su altri siti More sharing options...
Claudio F Inserita: 28 febbraio 2004 Segnala Share Inserita: 28 febbraio 2004 In conclusione : {{2+[(1+2 ) x 47]+2} x 32 + [(31 x 3)+2] }} +2 = 4640 + 95 = 4735 Link al commento Condividi su altri siti More sharing options...
aleda5859 Inserita: 29 febbraio 2004 Autore Segnala Share Inserita: 29 febbraio 2004 Cosa sono i NOP? Istruzioni che non fanno niente in pratica?Avevo pensato ad una cosa del genere...inizializzo TEMPO1 (Y+1) a 255inizializzo TEMPO2 (Z+1) a 246e immettere in ogni ciclo di ritardo 13 NOPperciò..detto precedentemente : {{2+[( 13+3 ) x Y]+2} x Z + [( V x (13+3) )+2] }} +2 = 1 secondo.dove :Y = N° di inizializzazione di TEMPO1 - 1Z = N° di inizializzazione di TEMPO2V = N° di inizializzazione di TEMPO2 - 1adesso ottengo... (4+16Y) x Z + 16Z-16 +4 Z (16Y + 20) - 12 = 1Mhz Z = (1Mhz + 12 ) / (16Y + 20)ricordando i valori dei registri... a me verrebbe un ciclo di circa 1.000.568ogni duemila secondi ne perdo uno quindi... che dovrei fare? impostare una correzzione dopo unc erto tot di tempo?Ringrazio ancora tutti per gli aiuti preziosi che mi date! Link al commento Condividi su altri siti More sharing options...
Claudio F Inserita: 29 febbraio 2004 Segnala Share Inserita: 29 febbraio 2004 e immettere in ogni ciclo di ritardo 13 NOPperciò..detto precedentemente :{{2+[( 13+3 ) x Y]+2} x Z + [( V x (13+3) )+2] }} +2 = 1 secondo. Link al commento Condividi su altri siti More sharing options...
bit Inserita: 1 marzo 2004 Segnala Share Inserita: 1 marzo 2004 Il calcolo che hai fatto per il ritardo di un secondo è anche troppo preciso. Quando servirà un clock preciso useremo altri metodi.Cos'è un NOP? Semplicemente una istruzione che non fa nulla, e che dura 1 ciclo macchina. Ma questo potevi anche scoprirlo dai data sheets dei pic. Li hai? Li puoi scaricare dal sito della microchip, ti saranno utili.Ciao. Link al commento Condividi su altri siti More sharing options...
bit Inserita: 1 marzo 2004 Segnala Share Inserita: 1 marzo 2004 la seconda non richiede nulla di esterno ma facilmente il programma dovra' prevedere una procedura di correzione periodica (del tipo ogni tot conteggi scartarne uno ecc...). Link al commento Condividi su altri siti More sharing options...
aleda5859 Inserita: 1 marzo 2004 Autore Segnala Share Inserita: 1 marzo 2004 Wow ragazzi grazie mille ancora per le risposte!Adesso che abbiamo analizzato questa parte..cosa dite che conviene "provare"?Per il ciclo effettivo di tempo base dovrò untilizzare il TMR0? Link al commento Condividi su altri siti More sharing options...
bit Inserita: 1 marzo 2004 Segnala Share Inserita: 1 marzo 2004 Rimanendo in tema di provare... li hai provati i programmi che ti ho segnalato? Funzionano? Altrimenti è inutile andare avanti... Ciao! Link al commento Condividi su altri siti More sharing options...
Claudio F Inserita: 2 marzo 2004 Segnala Share Inserita: 2 marzo 2004 Dipende dal quarzo che useremo per il pic. Se la qualità è la stessa non cambia la precisione del clock esterno rispetto ai timer interni. Inoltre la correzione può anche essere fatta anche attraverso la calibrazione dell'oscillatore attraverso compensatori capacitivi. Link al commento Condividi su altri siti More sharing options...
bit Inserita: 2 marzo 2004 Segnala Share Inserita: 2 marzo 2004 Il timer0 è un po' rognoso per ottenere temporizzazioni cicliche, ma è possibile. E' sufficiente tenere conto delle istruzioni che passano tra l'arrivo dell'interrupt e il risettaggio del timer0 stesso. Questo tempo va aggiunto al tempo per cui è stato calcolato il valore del timer0. Di conseguenza non potremo mai disabilitare l'interrupt nel programma principale, pena la possibile perdita di sincronismo.Altrimenti si usa un pic più evoluto come il 16F628, dove sono presenti 3 timer. Il timer2 in particolare può essere impostato con qualunque periodo compreso tra 1 e 256, senza dover risettare nulla in interrupt. Si possono quindi ottenere facilmente clock regolari e precisi.Ciao! Link al commento Condividi su altri siti More sharing options...
aleda5859 Inserita: 3 marzo 2004 Autore Segnala Share Inserita: 3 marzo 2004 grazie mille ancora per le preziosissime informazioni..ah..avete ragione..intanto provo questi..e poi vi faccio sapere..grazzzzzzzzzzzzzzzzzzz Link al commento Condividi su altri siti More sharing options...
aleda5859 Inserita: 5 aprile 2004 Autore Segnala Share Inserita: 5 aprile 2004 sono tornato!sto riassemblando il programmatore... tra qualche iorno dorvei riessere attivo! Link al commento Condividi su altri siti More sharing options...
aleda5859 Inserita: 14 aprile 2004 Autore Segnala Share Inserita: 14 aprile 2004 ho uplodato le foto del programmatore in costruzione...Devo essere pronto per gli esami.. azz... Che ne pensate? Ho avuto qualche problema con la basetta.. (si nota vero?) ma non importa.. Visto come vengono bene le linee di rame? Solo con una lampada!!!!Bit posso sempre contare sul tuo aiuto vero? Link al commento Condividi su altri siti More sharing options...
aleda5859 Inserita: 15 aprile 2004 Autore Segnala Share Inserita: 15 aprile 2004 ecco un paio di foto... foto..bit ci sei sempre con noi? Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora