stive882003 Inserito: 29 maggio 2006 Segnala Share Inserito: 29 maggio 2006 salve a tutti. ho da poco fatto un programmino in asm per un 16f84a dove dovevo effettuare un ritardo di 12 ore. ho provato questo ritardo usando 5 registri con determinati valori che si incrementavano continuamente. l'unica cosa è che il programma non funziona correttamente. siccome in mplab non posso testare dei ritardi così lunghi mi aiutereste a progettare questa routine di ritardo??la precisione non è importante, basta che sia di circa 12 ore...grazie in anticipo.. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 30 maggio 2006 Segnala Share Inserita: 30 maggio 2006 (modificato) Non dici niente sulla frequenza del quarzo che usi. La prima cosa che devi realizzare è l'interrupt sul timer, programmato in modo da avere un interrupt ogni 0.1 sec per esempio. Poi è solo una questione di conteggio.Prova a descrivere quello che hai implemetato e vediamo di metterlo a punto, magari anche con qualche dritta per testarlo più facilmente. Modificato: 30 maggio 2006 da Livio Orsini Link al commento Condividi su altri siti More sharing options...
stive882003 Inserita: 31 maggio 2006 Autore Segnala Share Inserita: 31 maggio 2006 si adesso vi posto il programma come era in origine: PROCESSOR 16F84A #INCLUDE "P16F84A.INC" __CONFIG _WDT_OFF & _XT_OSC CONT1 EQU 0CH CONT2 EQU 0DH CONT3 EQU 0EH CONT4 EQU 0FH CONT5 EQU 10H ORG 0 MOVLW 00H TRIS PORTB BSF PORTB,1 CONFIGURORITARDO1: MOVLW .250 MOVWF CONT1 MOVWF CONT2 MOVLW .180 MOVWF CONT3 MOVLW .64 MOVWF CONT4 MOVLW .60 MOVWF CONT5 RITARDO11: DECF CONT1 MOVFW CONT1 XORLW 00H BZ RITARDO12 GOTO RITARDO11 RITARDO12: MOVLW .250 MOVWF CONT1 DECF CONT2 MOVFW CONT2 XORLW 00H BZ RITARDO13 GOTO RITARDO11 RITARDO13: MOVLW .250 MOVWF CONT1 MOVWF CONT2 DECF CONT3 MOVFW CONT3 XORLW 00H BZ RITARDO14 GOTO RITARDO11 RITARDO14: MOVLW .250 MOVWF CONT1 MOVWF CONT2 MOVLW .180 MOVWF CONT3 DECF CONT4 MOVFW CONT4 XORLW 00H BZ RITARDO15 GOTO RITARDO11 RITARDO15: MOVLW .250 MOVWF CONT1 MOVWF CONT2 MOVLW .180 MOVWF CONT3 MOVLW .64 MOVWF CONT4 DECF CONT5 MOVFW CONT5 XORLW 00H BZ ACCENDOPOMPA GOTO RITARDO11 ACCENDOPOMPA: BSF PORTB,0 CONFIGURORITARDOPOMPA: MOVLW .250 MOVWF CONT1 MOVWF CONT2 MOVLW .80 MOVWF CONT3 MOVLW .60 MOVWF CONT4 RITARDO21: DECF CONT1 MOVFW CONT1 XORLW 00H BZ RITARDO22 GOTO RITARDO21 RITARDO22: MOVLW .250 MOVWF CONT1 DECF CONT2 MOVFW CONT2 XORLW 00H BZ RITARDO23 GOTO RITARDO21 RITARDO23: MOVLW .250 MOVWF CONT1 MOVWF CONT2 DECF CONT3 MOVFW CONT3 XORLW 00H BZ RITARDO24 GOTO RITARDO21 RITARDO24: MOVLW .250 MOVWF CONT1 MOVWF CONT2 MOVLW .80 MOVWF CONT3 DECF CONT4 MOVFW CONT4 XORLW 00H BZ SPENGOPOMPA GOTO RITARDO21 SPENGOPOMPA: BCF PORTB,0 CONFIGURORITARDO3: MOVLW .250 MOVWF CONT1 MOVWF CONT2 MOVLW .208 MOVWF CONT3 MOVLW .60 MOVWF CONT4 MOVLW .55 MOVWF CONT5 RITARDO31: DECF CONT1 MOVFW CONT1 XORLW 00H BZ RITARDO32 GOTO RITARDO31 RITARDO32: MOVLW .250 MOVWF CONT1 DECF CONT2 MOVFW CONT2 XORLW 00H BZ RITARDO33 GOTO RITARDO31 RITARDO33: MOVLW .250 MOVWF CONT1 MOVWF CONT2 DECF CONT3 MOVFW CONT3 XORLW 00H BZ RITARDO34 GOTO RITARDO31 RITARDO34: MOVLW .250 MOVWF CONT1 MOVWF CONT2 MOVLW .208 MOVWF CONT3 DECF CONT4 MOVFW CONT4 XORLW 00H BZ RITARDO35 GOTO RITARDO31 RITARDO35: MOVLW .250 MOVWF CONT1 MOVWF CONT2 MOVLW .208 MOVWF CONT3 MOVLW .60 MOVWF CONT4 DECF CONT5 MOVFW CONT5 XORLW 00H BZ FINE GOTO RITARDO31 FINE: RETURN END però mi ero reso conto che non funzionasse il tutto perchè io ho fatto il conto moltiplicando i vari registri.. poi ho trovato un programmino su internet: http://www.piclist.com/techref/piclist/codegen/delay.htm questo genera automaticamente la routine di ritardo modificata, e di conseguenza ho fatto il programma qui sotto: PROCESSOR 16F84A #INCLUDE "P16F84A.INC" __CONFIG _WDT_OFF & _XT_OSC ORG 0 MOVLW 00H TRIS PORTB INIZIO: BSF PORTB,1 cblock CONT1 CONT2 CONT3 CONT4 CONT1_4 endc RITARDO movlw 0x16 movwf CONT1 movlw 0x6E movwf CONT2 movlw 0x16 movwf CONT3 movlw 0xEB movwf CONT4 movlw 0x01 movwf CONT1_4 RITARDO_0 decfsz CONT1, f goto $+2 decfsz CONT2, f goto $+2 decfsz CONT3, f goto $+2 decfsz CONT4, f goto $+2 decfsz CONT1_4, f goto RITARDO_0 nop ACCENDOPOMPA: BSF PORTB,0 cblock C1 C2 C1_2 C1_3 endc RITARDOPOMPA movlw 0xFE movwf C1 movlw 0x2D movwf C2 movlw 0x32 movwf C1_2 movlw 0x02 movwf C1_3 RITARDOPOMPA_0 decfsz C1, f goto $+2 decfsz C2, f goto $+2 decfsz C1_2, f goto $+2 decfsz C1_3, f goto RITARDOPOMPA_0 goto $+1 goto $+1 goto $+1 nop return SPENGOPOMPA: BCF PORTB,0 cblock CONT5 CONT6 CONT7 CONT8 CONT5_4 endc RITARDO2 movlw 0xFE movwf CONT5 movlw 0x47 movwf CONT6 movlw 0x76 movwf CONT7 movlw 0xE9 movwf CONT8 movlw 0x01 movwf CONT5_4 RITARDO2_0 decfsz CONT5, f goto $+2 decfsz CONT6, f goto $+2 decfsz CONT7, f goto $+2 decfsz CONT8, f goto $+2 decfsz CONT5_4, f goto RITARDO2_0 goto $+1 goto $+1 goto $+1 goto $+1 nop GOTO INIZIO END adesso lo sto testando. siccome devo aspettare 12 ore vi saprò dire domani se funziona o no. comunque il programma deve azionare una pompa..p.s. il quarzo che uso è da 4 mhz Link al commento Condividi su altri siti More sharing options...
stive882003 Inserita: 1 giugno 2006 Autore Segnala Share Inserita: 1 giugno 2006 eccomi qua. purtroppo non ha funzionato niente... la parte hardware sembra a posto, l'unica è il software.Quello che mi insospettisce è che una delle prime istruzioni è quella di settare la portb,1, ma dopo avere montato e alimentato il pic, questa porta rimane sempre a livello basso. non so cosa pensare.... Link al commento Condividi su altri siti More sharing options...
rfabri Inserita: 2 giugno 2006 Segnala Share Inserita: 2 giugno 2006 Io non ne capisco niente di assembler ma hai provato a fare ritardi progressivi per vedere se il tuo programmino funziona e poi pian piano aumentare il tempo,ossia hai provato con ritardi di 10 minuti poi 30 e cosi via tanto per sapere se qualcosa funziona?,BYE. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 2 giugno 2006 Segnala Share Inserita: 2 giugno 2006 Sevai sul sito di Tanzilli e ti scarichi "PIC by example" ti trovi proprio un bell'esempio di generatore di secondi con PIC16F84 e quarzo a 4MHz che impiega TMR0 r prescaler. Una volta che hai raggiunti il secondo con tre registri in deconteggio è facilissimo arrivare alle 12 ore di ritartdo. Link al commento Condividi su altri siti More sharing options...
ziopolly Inserita: 2 giugno 2006 Segnala Share Inserita: 2 giugno 2006 Scrivo da poco tempo programmi in assembler per PIC, ma ti suggerisco vivamente di fare "girare" tutto quello che scrivi su MPLAB: io ho imparato il 90% osservando il comportamento dei vari registri ad ogni passo del nuovo listato da testare!Il problema dei ritardi puo essere facilmente aggirato forzando i vari registri utente a "1" (serve in questo modo un solo decremento per fare proseguire il programma) e forzando il TMR0 a 255 (idem come sopra).Questo sistema ti permette di fare completare tutte le routine senza attendere ore.ciao da ziopolly 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