Omarro Inserito: 9 aprile 2005 Segnala Share Inserito: 9 aprile 2005 Salve,devo generare un segnale pwm con il pic 16f84 con quarzo 4mhz e frequenza del pwm 1khz, ma sinceramente non ho idea di come fare, potete darmi qualche suggerimento??grazie Link al commento Condividi su altri siti More sharing options...
Giorgio Demurtas Inserita: 9 aprile 2005 Segnala Share Inserita: 9 aprile 2005 quanti passi vuoi? cioè tra 0% e 100% di d.c. quanti intervalli vuoi?Ci sono dei pic che hanno il PWM integrato, ma comunque si può sempre implementare da zero su un piedino qualunque.ciao Link al commento Condividi su altri siti More sharing options...
Omarro Inserita: 9 aprile 2005 Autore Segnala Share Inserita: 9 aprile 2005 come ho detto l'hardware è questo!mi serve per scuola... Link al commento Condividi su altri siti More sharing options...
stefano_ Inserita: 9 aprile 2005 Segnala Share Inserita: 9 aprile 2005 ciao,non sono un grande esperto comunque il 16f84 non ha la gestione interna del pwm quindi devi simularla attivando e disattivando un uscita del pic con la frequenza che vuoi tuNon so cosa ci devi fare comunque questa soluzione non è molto raccomandata se la frequenza deve essere precisa,in alternativa potresti utilizzare un 16f877 che ha la gestione interna del pwmcosta di più ma se ti serve un frequenza precisa in questo modo stai tranquillo.ps. Correggetemi se ho detto qualche cavolataciao ciao Link al commento Condividi su altri siti More sharing options...
Omarro Inserita: 9 aprile 2005 Autore Segnala Share Inserita: 9 aprile 2005 fino a qui ci sono però la frequenza non so come gestirla, più che altro il duty cycleper es con freq 1khzil duty cycle del 6 % dovrei fare un ritardo di 60 microsece poi altro ritardo di 940 microsec il che non so come fare... Link al commento Condividi su altri siti More sharing options...
stefano_ Inserita: 9 aprile 2005 Segnala Share Inserita: 9 aprile 2005 con cosa programmi il picassembler, basic, c ecc.... ??? Link al commento Condividi su altri siti More sharing options...
Omarro Inserita: 9 aprile 2005 Autore Segnala Share Inserita: 9 aprile 2005 assembler... purtroppo mi hanno obbligato, in c a quest'ora avevo già finito Link al commento Condividi su altri siti More sharing options...
stefano_ Inserita: 9 aprile 2005 Segnala Share Inserita: 9 aprile 2005 cavoli tuoi !!!!!!!scherzo ovviamente solo che non posso esserti di aiuto a me non mi obbliga nessuno !!!! eh eh !!!comunque è meglio così con l'assembler ai una precisione doc e soprattutto cosa da non sottovalutare le dimensioni dell'hex sono ridottissime.ciao e ... in bocca al lupo Link al commento Condividi su altri siti More sharing options...
Niki77 Inserita: 12 aprile 2005 Segnala Share Inserita: 12 aprile 2005 (modificato) Con questo codice dovresti avere un ritardo esatto di 60 ms con un quarzo a 4mhz PDelay movlw .66 movwf PDel0 PLoop1 movlw .181 movwf PDel1 PLoop2 clrwdt clrwdt decfsz PDel1, 1 goto PLoop2 decfsz PDel0, 1 goto PLoop1 clrwdt return con quest'altro invece 940ms sempre a 4mhz di clk PDelay movlw .251 movwf PDel0 PLoop0 movlw .29 movwf PDel1 PLoop1 movlw .25 movwf PDel2 PLoop2 clrwdt clrwdt decfsz PDel2, 1 goto PLoop2 decfsz PDel1, 1 goto PLoop1 decfsz PDel0, 1 goto PLoop0 return Per il resto se è per scuola bisogna che un attimino ti dai da fare...A meno che non ti pigli voglia di sfruttare gli interrrupt del tmr0 (scelta molto + elegante e hi tech dal mio punto di vista) puoi provare con queste temporizzazioni...A proposito, ricorda che questi codici danno il tempo di delay esatto comprensivi di istruzione call e return, quindi devi sempre e comunque considerare in aggiunta o in sottrazione i cicli macchina di tutte le altre operazioni che svolgi per alzare e abbassare l'uscita del processore!!Buon divertimento. Modificato: 12 aprile 2005 da Niki77 Link al commento Condividi su altri siti More sharing options...
Omarro Inserita: 12 aprile 2005 Autore Segnala Share Inserita: 12 aprile 2005 non vorrei si faccia confusione, io so programmare ma mancava l'idea di come fare comunque...ho fatto questo con il TMR0main BSF PORTA,4 movlw 6 movwf dutycycle call Delay BCF PORTA,4 movlw 94 movwf dutycycle call Delay goto mainil delayDelay movlw 251 movwf TMR0 DelayLoop movf TMR0,W btfss STATUS,Z goto DelayLoop movlw 251 movwf TMR0 decfsz dutycycle,1 goto DelayLoop return il problema è che quando misuro con il tester l'uscita da PORTA.4 misuro una tensione non consona a 6% di duty cycle molto strano poiche questo ciclo sovrebbe fare un ritardo da 10 microsecondi per il numero messo in DUTYCYLE con un freq di 1khz il 6% di 5 volt è 300mV invece misuro 800mV il 16% il che è molto strano...invece in secondo programma da me svolto in C, sostanzialmente ho riportato da assembler in C il ritardo è di una precisione "micidiale" come mai?ahh dimenticavo il prescaler a un divisore impostato a 2Grazie Link al commento Condividi su altri siti More sharing options...
Niki77 Inserita: 12 aprile 2005 Segnala Share Inserita: 12 aprile 2005 Delaymovlw 251movwf TMR0 Link al commento Condividi su altri siti More sharing options...
Omarro Inserita: 12 aprile 2005 Autore Segnala Share Inserita: 12 aprile 2005 OK RISOLTO sono Uno SCEMO!!! siccome a casa ero sprovvisto di 16f84 ho provato con il 16f876a il problema che il registro dutycycle lo avevo messo a 0x10 di memoria ma purtroppo il 16f876a a quell'allocazione non ha RAM libera ma altri registri...adesso ho cabiato e funzia.GRAZIE lo stesso per l'aiuto 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