mister999 Inserito: 18 agosto 2004 Segnala Share Inserito: 18 agosto 2004 Ciao!E' la prima volta che posto qui.Sono due anni che nel mio ristrettissimo tempo libero mi dedico a qualche stupidagine di eletronica e diciamo che le cose di base sembro averele imparate.Da poco ho iniziato la sperimentazione con qualche PIC e sono riuscito a costruirmi qualche bel circuito decorativo (Supercar....).Adesso vorrei passare a qualcosa di più serio... Vorrei costruirmi un timer che conti alla rovescia che abbia le seguenti caratteristiche:- visualizzi almeno i decimi di secondo (se è possiible anche i centesimi)- dato che visualizzo i decimi, mi basta che conti da 900 secondi...- date le precedenti caratteristiche, se non ci sono i minuti non me ne frega niente, ma se si possono implementare senza fatica sarebbe meglio...- abbia pulsanti di Start/Stop/Pause- Allo zero attivi un relè e soprattutto emani un suono, del tipo un cicalino per circa due secondi...- il tutto dovrebbe essere il + economico possibile- + piccolo possibile- funzionante anche con una pila da 9vIL TUTTO REALIZZABILE DOVREBBE ESSERE REALIZZABILE CON I PIC (anche + DI 1) SE E' IMPOSSIBILE VANNO BENE ANCHE ALTRI PROCESSORI L'IMPORTANTE E' CHE NON COSTINO TROPPO E CHE SIANO FACILMENTE PROGRAMMABILI...Grazie 10000000000000000000 a che vorrà darmi una mano, anche piccola... magari anche modificando un progetto esistente. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 18 agosto 2004 Segnala Share Inserita: 18 agosto 2004 Il lavoro è pittosto semplice....se le tue conoscenze HW & Sw sono discrete. In pratica ti basta usare un PIC con un quarzo, per avere una buona precisione, poi usando l'interrupt del timer 0 puoi programmare tutti i tempi che vuoi, sia in avanti che indietro. Non specifichi cosa vuoi usare come interfaccia Tastierino + display? pulsanti up-down più sette segmenti? Link al commento Condividi su altri siti More sharing options...
mister999 Inserita: 19 agosto 2004 Autore Segnala Share Inserita: 19 agosto 2004 Grazie 10000 per la disponibilità...Beh, come interfaccia vorrei la cosa più semplice possibile, non mi importa... più facile è meglio è.comunque intendo usare i display 7 segmenti... per me andrebbe bene 000:0 =(secondi:decimi)oppure se non comporta grosse complicazioni 000:00 =(secondi:centesimi)oppure ancora (ma credo che le grosse complicazioni le comporti) 00:00:0/0 =(minuti:secondi:decimi o centesimi).Se magari potessi dirmi qualcosa di più dettagliato te ne sarei grato... ad esempio ricordo che per pilotare i display c'era bisogno di un driver per ogni segmento...ma poi come dico di scrivere in ogni display una cifra diversa?Ciao! Link al commento Condividi su altri siti More sharing options...
dlgcom Inserita: 19 agosto 2004 Segnala Share Inserita: 19 agosto 2004 Da quello che ho capito , vuoi il progetto completo di schema e software o vuoi dei consigli?Con un pic puoi fare tutto , dipende dalla tua esperienza .In rete ci sono molti progetti con pic QUESTO e' un esempio. Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 19 agosto 2004 Segnala Share Inserita: 19 agosto 2004 (modificato) modificalo in base al tuo PIC e impsta il prescaler in base al tuo quarzo Conta da 1 a 9,999 secondi , quindi anche con i millesimi I display sono multiplexati e pilotati da 4 transistor BC337 TITLE 'TEMPORIZZATORE CICLICO A 4 DISPLAY' LIST F=INHX8M, P=16C57 ;xt 3.2768mhz wdt=yes;------------------ definizione costanti per temporizzazioni ----------------MSEC5 equ .128 ;settaggio prescaler per ottenere 5msMSEC1 equ .50 ;conteggi da 20ms per un totale di 1sMAXIM equ .99 ;massimo valore ammesso per il displayINTER1 equ .40 ;tempo tra primi due incrementi basso (x 20ms)INTER2 equ .1 ;tempo tra due incrementi alto (x 20ms);--------------------- definizione costanti per display ---------------------ZER_O equ 003H ;associa label a 003HUNO equ 09FH ;associa label a 09FHDUE equ 025H ;associa label a 025HTRE equ 00DH ;associa label a 00DHQUATT equ 099H ;associa label a 099HCINQUE equ 049H ;associa label a 049HSEI equ 041H ;associa label a 041HSETTE equ 01FH ;associa label a 01FHOTTO equ 001H ;associa label a 001HNOVE equ 009H ;associa label a 009H;----------------------------------------------------------------------------FZERO equ 0 ;associa label a 0RTCC equ 1 ;associa label a 1F2 equ 2 ;associa label a 2F3 equ 3 ;associa label a 3FSR equ 4 ;associa label a 4F5 equ 5 ;associa label a 5F6 equ 6 ;associa label a 6F7 equ 7 ;associa label a 7F8 equ 8 ;conteggio bit 93F9 equ 9 ;byte 93F10 equ 0AH ;ritardo scrittura eepromF11 equ 0BH ;ritardo scrittura eepromF12 equ 0CH ;registro conteggio 1sF13 equ 0DH ;registro conteggio 00-99 dx tempo lavoroF14 equ 0EH ;registro conteggio 00-99 sx tempo lavoroF15 equ 0FH ;registro conteggio 00-99 dx tempo pausaF16 equ 10H ;registro conteggio 00-99 sx tempo pausaF17 equ 11H ;bit 0: 0--> pausa 1--> lavoro ;bit 1: 0--> prog pausa 1--> prog lavoro ;bit 2: 1--> memoria pulsante stop premuto ;bit 3: 1--> memoria puls. avanti premuto ;bit 4: 1--> memoria puls. indietro premuto ;bit 5: 1--> memoria ritorno da stop in timer ;bit 6: 1--> memoria stop premuto ;bit 7: Modificato: 19 agosto 2004 da walterword Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 19 agosto 2004 Segnala Share Inserita: 19 agosto 2004 F18 equ 12H ;contatore per lampeggio led in programmazioneF19 equ 13H ;contatore per passo pulsanti indietro in prog.F20 equ 14H ;contatore per passo pulsanti avanti in prog.F21 equ 15H ;associa label a 15HF22 equ 16H ;associa label a 16HF23 equ 17H ;associa label a 17HF24 equ 18H ;associa label a 18HF25 equ 19H ;associa label a 19HF26 equ 1AH ;associa label a 1AHF27 equ 1BH ;registro visualizzazione decineF28 equ 1CH ;registro visualizzazione unitaF29 equ 1DH ;copia f13 per conversioneF30 equ 1EH ;copia f14 per conversioneF31 equ 1FH ;copia per controllo numero > 99;----------------------------------------------------------------------------CS equ 7 ;chip select f6,7CLK equ 6 ;clock f6,6DI equ 5 ;data input f6,5DO equ 4 ;data output f6,4RELE equ 0 ;rele f6,0LEDR equ 1 ;led rosso f6,1LEDV equ 2 ;led verde f6,2J1 equ 3 ;jumper per ciclico f6,3;---------------------------------------------------------------------------- ORG 0 ;pagina 0;---------------------- routine di attesa fine 5ms --------------------------WAI5MS clrwdt ;azzera watchdog movf RTCC,0 ;controllo se finiti 5ms SKPZ ;equivale a btfss 3,2 goto WAI5MS ;vai a WAI5MS movlw MSEC5 ;copia in W il numero MSEC5 movwf RTCC ;copia W nel registro RTCC retlw 0 ;ritorna da subroutine con W = 0; -------------------- subroutine tx stop 93 --------------------------------STO93 bcf F6,CLK ;azzera bit x del registro F6 bcf F6,DI ;azzera bit x del registro F6 bcf F6,CS ;azzera bit x del registro F6 retlw 0 ;ritorna da subroutine con W = 0; --------------- subroutine tx stop 93 in scrittura ------------------------STO93W bcf F6,DI ;azzera bit x del registro F6 bcf F6,CS ;azzera bit x del registro F6 bsf F6,CS ;setta bit x del registro F6 movlw .200 ;copia in W il numero .200 movwf F10 ;copia W nel registro F10DE0 movlw 0B1H ;copia in W il numero 0B1H movwf F11 ;copia W nel registro F11DE1 clrwdt ;azzera watchdog bcf F6,CLK ;azzera bit x del registro F6 btfsc F6,DO ;testa bit x del registro F6 e salta se = 0 goto SCRIT ;vai a SCRIT bsf F6,CLK ;setta bit x del registro F6 decfsz F11 ;decrementa registro F11 salta se = 0 -> F11 goto DE1 ;vai a DE1 decfsz F10 ;decrementa registro F10 salta se = 0 -> F10 goto DE0 ;vai a DE0SCRIT bcf F6,CS ;azzera bit x del registro F6 retlw 0 ;ritorna da subroutine con W = 0; -------------------- subroutine tx byte 93 --------------------------------; f8 = conteggio bit f9 = byte da tx; ---------------------------------------------------------------------------STA93 bsf F6,CS ;setta bit x del registro F6 bsf F6,DI ;setta bit x del registro F6 bsf F6,CLK ;setta bit x del registro F6TX93 movlw 08H ;copia in W il numero 08H movwf F8 ;copia W nel registro F8LPTX93 clrwdt ;azzera watchdog bcf F6,CLK ;azzera bit x del registro F6 rlf F9 ;shifta a sinistra il registro F9 -> F9 bcf F6,DI ;azzera bit x del registro F6 btfsc F3,0 ;testa bit 0 del registro F3 e salta se = 0 bsf F6,DI ;setta bit x del registro F6 bsf F6,CLK ;setta bit x del registro F6 decfsz F8 ;decrementa registro F8 salta se = 0 -> F8 goto LPTX93 ;vai a LPTX93 retlw 0 ;ritorna da subroutine con W = 0; -------------------- subroutine rx byte 93 --------------------------------; f8 = conteggio bit f9 = byte ricevuto Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 19 agosto 2004 Segnala Share Inserita: 19 agosto 2004 ; ---------------------------------------------------------------------------RX93 movlw .8 ;copia in W il numero .8 movwf F8 ;copia W nel registro F8 clrf F9 ;azzera registro F9LP93 clrwdt ;azzera watchdog bcf F6,CLK ;azzera bit x del registro F6 bcf F3,0 ;azzera bit 0 del registro F3 rlf F9 ;shifta a sinistra il registro F9 -> F9 btfsc F6,DO ;testa bit x del registro F6 e salta se = 0 bsf F9,0 ;setta bit 0 del registro F9 bsf F6,CLK ;setta bit x del registro F6 decfsz F8 ;decrementa registro F8 salta se = 0 -> F8 goto LP93 ;vai a LP93 retlw 0 ;ritorna da subroutine con W = 0;---------------------- conversione bcd decimale ----------------------------; in w va passato il byte da convertireBINBCD movwf F29 ;ritorna unita movwf F31 ;copia per controllo > 99 clrf F30 ;ritorna decineGTENT movlw .10 ;copia in W il numero .10 subwf F29,0 ;sottrai W da registro F29 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto OVER ;vai a OVER movwf F29 ;copia W nel registro F29 incf F30 ;incrementa registro F30 -> F30 goto GTENT ;vai a GTENTOVER movlw MAXIM + 1 ;copia in W il numero MAXIM + 1 subwf F31 ;sottrai W da registro F31 -> F31 btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 retlw 0 ;ritorna da subroutine con W = 0 movlw .1 ;numero > 99 movwf F29 ;unita movwf F14 ;copia W nel registro F14 movwf F16 ;copia W nel registro F16 clrf F30 ;decine clrf F13 ;azzera registro F13 clrf F15 ;azzera registro F15 retlw 0 ;ritorna da subroutine con W = 0; ------------------- presentazione cifre su porta c ------------------------; in w la cifra da visualizzareDISPL addwf F2,1 ;somma W al registro F2 -> F2 retlw ZER_O ;numero 0 retlw UNO ;numero 1 retlw DUE ;numero 2 retlw TRE ;numero 3 retlw QUATT ;numero 4 retlw CINQUE ;numero 5 retlw SEI ;numero 6 retlw SETTE ;numero 7 retlw OTTO ;numero 8 retlw NOVE ;numero 9 retlw ZER_O ;non ammesso; ------------------ test pressione pulsante di stop ------------------------TSTSTP movlw 0EFH ;copia in W il numero 0EFH movwf F7 ;copia W nel registro F7 clrwdt ;azzera watchdog btfss F7,3 ;testa bit 3 del registro F7 e salta se = 1 goto TESTAS ;pulsante stop premuto bcf F17,6 ;clear memoria stop premuto retlw 0 ;ritorna da subroutine con W = 0TESTAS btfsc F17,6 ;testo se riconferma stop premuto goto STOP ;vai a STOP bsf F17,6 ;setto memoria stop premuto retlw 0 ;ritorna da subroutine con W = 0;------------------------ leggi dati da eeprom ------------------------------READ93 clrwdt ;azzera watchdog movlw 080H ;leggi da memoria 0 movwf F9 ;copia W nel registro F9 call STA93 ;salta alla subroutine STA93 bcf F6,CLK ;dummy load bsf F6,CLK ;setta bit x del registro F6 call RX93 ;salta alla subroutine RX93 movf F9,0 ;copia registro F9 -> W movwf F13 ;primo byte call RX93 ;salta alla subroutine RX93 movf F9,0 ;copia registro F9 -> W movwf F14 ;secondo byte call STO93 ;salta alla subroutine STO93 movlw 081H ;leggi da memoria 1 movwf F9 ;copia W nel registro F9 call STA93 ;salta alla subroutine STA93 bcf F6,CLK ;dummy load bsf F6,CLK ;setta bit x del registro F6 call RX93 ;salta alla subroutine RX93 movf F9,0 ;copia registro F9 -> W movwf F15 ;primo byte call RX93 ;salta alla subroutine RX93 movf F9,0 ;copia registro F9 -> W movwf F16 ;secondo byte call STO93 ;salta alla subroutine STO93 retlw 0 ;ritorna da subroutine con W = 0;------------------------ visualizzazione numero ----------------------------VISUAL btfsc F17,0 ;testo se in lavoro o in pausa goto STATLA ;vai a STATLA movf F15,0 ;copia registro F15 -> W movwf F27 ;copia W nel registro F27 movf F16,0 ;copia registro F16 -> W movwf F28 ;copia W nel registro F28 goto VISU ;vai a VISUSTATLA movf F13,0 ;copia registro F13 -> W movwf F27 ;copia W nel registro F27 movf F14,0 ;copia registro F14 -> W movwf F28 ;copia W nel registro F28VISU clrw ;azzera W TRIS F7 ;porta c out movf F27,0 ;copia registro F27 -> W call BINBCD ;salta alla subroutine BINBCD movf F30,0 ;copia registro F30 -> W call DISPL ;salta alla subroutine DISPL movwf F7 ;copia W nel registro F7 bcf F5,0 ;azzera bit 0 del registro F5 call WAI5MS ;salta alla subroutine WAI5MS bsf F5,0 ;setta bit 0 del registro F5 movf F29,0 ;copia registro F29 -> W call DISPL ;salta alla subroutine DISPL movwf F7 ;copia W nel registro F7 bcf F5,1 ;azzera bit 1 del registro F5 call WAI5MS ;salta alla subroutine WAI5MS bsf F5,1 ;setta bit 1 del registro F5 movf F28,0 ;copia registro F28 -> W call BINBCD ;salta alla subroutine BINBCD movf F30,0 ;copia registro F30 -> W call DISPL ;salta alla subroutine DISPL movwf F7 ;copia W nel registro F7 bcf F5,2 ;azzera bit 2 del registro F5 call WAI5MS ;salta alla subroutine WAI5MS bsf F5,2 ;setta bit 2 del registro F5 movf F29,0 ;copia registro F29 -> W call DISPL ;salta alla subroutine DISPL movwf F7 ;copia W nel registro F7 bcf F5,3 ;azzera bit 3 del registro F5 call WAI5MS ;salta alla subroutine WAI5MS bsf F5,3 ;setta bit 3 del registro F5 movlw 00FH ;copia in W il numero 00FH TRIS F7 ;porta c0..c3 in altre out movlw 0FFH ;copia in W il numero 0FFH movwf F7 ;copia W nel registro F7 retlw 0 ;ritorna da subroutine con W = 0;----------------------------------------------------------------------------START movlw B'0000' ;porta a out TRIS F5 ;copia W nel registro TRIS movlw B'1111' ;copia in W il numero B'1111' movwf F5 ;copia W nel registro F5 movlw 018H ;copia in W il numero 018H TRIS F6 ;porta b0..b2,b5..b7 out b3,b4 in movlw 01EH ;copia in W il numero 01EH movwf F6 ;copia W nel registro F6 clrw ;azzera W TRIS F7 ;porta c out movlw 0FFH ;copia in W il numero 0FFH movwf F7 ;copia W nel registro F7 movlw B'00000100' ;rtcc interno con prescaler 1:32 OPTION ;copia W nel registro option movlw MSEC5 ;copia in W il numero MSEC5 movwf RTCC ;copia W nel registro RTCC clrf FSR ;azzera registro FSR bcf F17,5 ;memoria ritorno start non da timerINI call READ93 ;leggi tempi in eepromMAIN movlw MSEC1 ;inizializzo contatore ad 1s movwf F12 ;copia W nel registro F12 bsf F17,0 ;memoria ciclo lavoro bcf F17,6 ;clear memoria stop premuto btfss F6,J1 ;testo se ciclico o timer goto CICLIC ;vai a CICLIC goto TIMER ;vai a TIMER;----------------------------------------------------------------------------TIMER clrwdt ;azzera watchdog bcf F6,RELE ;rele off bsf F6,LEDR ;led rosso off bcf F6,LEDV ;led verde on btfsc F17,5 ;vedo se ritorno da timer goto LPTIM ;vai a LPTIMRILSTA call VISUAL ;salta alla subroutine VISUAL bcf F7,4 ;attesa eventuale rilascio clrwdt ;azzera watchdog btfss F7,0 ;aspetto pulsante start-timer goto RILSTA ;vai a RILSTA call WAI5MS ;salta alla subroutine WAI5MSLPTIM call VISUAL ;salta alla subroutine VISUAL bcf F7,4 ;azzera bit 4 del registro F7 clrwdt ;azzera watchdog btfss F7,0 ;aspetto pulsante start-timer goto CICLIC ;vai a CICLIC bcf F7,4 ;azzera bit 4 del registro F7 clrwdt ;azzera watchdog btfsc F7,3 ;aspetto stop x programmazione goto LPTIM ;vai a LPTIM goto ATTESA ;vai a ATTESA;----------------------------------------------------------------------------CICLIC bcf F6,LEDR ;led rosso on bsf F6,RELE ;rele on bsf F6,LEDV ;led verde off bsf F17,0 ;memoria ciclo lavoro bcf F17,5 ;memoria ritorno start non in timerLPCIC1 call VISUAL ;salta alla subroutine VISUAL call TSTSTP ;controllo se premuto pulsante stop decfsz F12 ;controllo se scaduto 1s goto LPCIC1 ;vai a LPCIC1 movlw MSEC1 ;ripristino conteggio 1s movwf F12 ;copia W nel registro F12 decfsz F14,1 ;sottraggo unita goto NO_ZE ;vai a NO_ZE movf F13,0 ;unita < 0 SKPNZ ;equivale a btfsc 3,2 goto LPCIC2 ;decine = 0 goto LPCIC1 ;vai a LPCIC1NO_ZE movlw MAXIM ;copia in W il numero MAXIM subwf F14,0 ;sottrai W da registro F14 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto LPCIC1 ;vai a LPCIC1 decf F13,1 ;decrementa registro F13 -> F13 movlw MAXIM ;decine >= 0 movwf F14 ;copia W nel registro F14 movlw MAXIM ;copia in W il numero MAXIM subwf F13,0 ;sottrai W da registro F13 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto LPCIC1 ;vai a LPCIC1 goto LPCIC2 ;vai a LPCIC2 ;LPCIC2 bsf F6,LEDR ;led rosso off bcf F6,RELE ;rele off bcf F17,0 ;memoria ciclo pausa btfsc F6,J1 ;testo se ciclico o timer goto INI ;vai a INI bcf F6,LEDV ;led verde on call VISUAL ;salta alla subroutine VISUAL call TSTSTP ;controllo se premuto pulsante stop decfsz F12 ;controllo se scaduto 1s goto LPCIC2 ;vai a LPCIC2 movlw MSEC1 ; ripristino conteggio 1s movwf F12 ;copia W nel registro F12 ; decfsz F16,1 ;sottraggo unita goto NO_ZER ;vai a NO_ZER movf F15,0 ;unita < 0 SKPNZ ;equivale a btfsc 3,2 goto ENDCIC ;decine = 0 goto LPCIC2 ;vai a LPCIC2NO_ZER movlw MAXIM ;copia in W il numero MAXIM subwf F16,0 ;sottrai W da registro F16 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto LPCIC2 ;vai a LPCIC2 decf F15,1 ;decrementa registro F15 -> F15 movlw MAXIM ;decine >= 0 movwf F16 ;copia W nel registro F16 movlw MAXIM ;copia in W il numero MAXIM subwf F15,0 ;sottrai W da registro F15 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto LPCIC2 ;vai a LPCIC2 goto ENDCIC ;vai a ENDCIC ;ENDCIC bsf F6,LEDV ;led verde off goto INI ;vai a INI;--------------------------------------------------STOP bcf F6,RELE ;rele off bsf F6,LEDR ;led rosso off bcf F6,LEDV ;led verde onLPSTP call VISUAL ;salta alla subroutine VISUAL bcf F7,4 ;azzera bit 4 del registro F7 clrwdt ;azzera watchdog btfss F7,3 ;aspetto rilascio goto LPSTP ;vai a LPSTP goto ATTESA ;vai a ATTESA;----------------------------------------------------------------------------ATTESA clrwdt ;azzera watchdog call VISUAL ;salta alla subroutine VISUAL bcf F7,4 ;azzera bit 4 del registro F7 clrwdt ;azzera watchdog btfsc F6,J1 ;vedo se in timer per saltare pulsante start goto SI_TIM ;vai a SI_TIM btfsc F7,0 ;aspetto start goto ATT1 ;vai a ATT1 call WAI5MS ;salta alla subroutine WAI5MS btfsc F7,0 ;controllo se falsa partenza goto ATT1 ;vai a ATT1 goto START ;vai a STARTSI_TIM bcf F7,4 ;azzera bit 4 del registro F7 clrwdt ;azzera watchdog btfss F7,0 ;aspetto pulsante start-timer goto ENDATT ;vai a ENDATTNOSTAR bcf F7,4 ;azzera bit 4 del registro F7 clrwdt ;azzera watchdogATT1 btfsc F7,3 ;aspetto stop x programmazione goto ATTESA ;vai a ATTESA bsf F17,1 ;programmazione lavoro (fase) bsf F17,0 ;programmazione lavoro (tempi) bsf F17,2 ;memoria pulsante stop premuto call READ93 ;salta alla subroutine READ93 goto PROGR ;vai a PROGRENDATT call WAI5MS ;salta alla subroutine WAI5MS btfsc F7,0 ;controllo se falsa partenza goto NOSTAR ;vai a NOSTAR bsf F17,5 ;memoria ritorno start in timer goto INI ;vai a INI Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 19 agosto 2004 Segnala Share Inserita: 19 agosto 2004 ;----------------------------------------------------------------------------PROGR bsf F6,LEDV ;led verde off bsf F6,LEDR ;led rosso off bcf F6,RELE ;rele off bcf F17,3 ;clear memoria pulsante avanti premuto bcf F17,4 ;clear memoria pulsante indietro premuto movlw INTER1 ;copia in W il numero INTER1 movwf F19 ;tempo di step con pressione pulsanti continua movlw INTER1 ;copia in W il numero INTER1 movwf F20 ;tempo di step con pressione pulsanti continua movlw .10 ;copia in W il numero .10 movwf F18 ;contatore per lampeggio ledLPPRG call VISUAL ;salta alla subroutine VISUAL bcf F7,4 ;azzera bit 4 del registro F7 clrwdt ;azzera watchdog btfsc F7,2 ;aspetto pulsante indietro goto NOIND ;vai a NOIND btfss F17,4 ;testa bit 4 del registro F17 e salta se = 1 goto INDIE ;vai a INDIE decfsz F19 ;decrementa registro F19 salta se = 0 -> F19 goto GIRO ;vai a GIRO movlw INTER2 ;copia in W il numero INTER2 movwf F19 ;copia W nel registro F19 goto INDIE ;vai a INDIENOIND btfsc F7,1 ;aspetto pulsante avanti goto NOAVA ;vai a NOAVA btfss F17,3 ;testa bit 3 del registro F17 e salta se = 1 goto AVANT ;vai a AVANT decfsz F20 ;decrementa registro F20 salta se = 0 -> F20 goto GIRO ;vai a GIRO movlw INTER2 ;copia in W il numero INTER2 movwf F20 ;copia W nel registro F20 goto AVANT ;vai a AVANTNOAVA bcf F17,3 ;clear memoria pulsante avanti premuto bcf F17,4 ;clear memoria pulsante indietro premuto movlw INTER1 ;copia in W il numero INTER1 movwf F19 ;tempo di step con pressione pulsanti continua movlw INTER1 ;copia in W il numero INTER1 movwf F20 ;tempo di step con pressione pulsanti continua btfsc F7,3 ;aspetto stop x passaggio a programmazione pausa goto RILST ;vai a RILST btfsc F17,2 ;aspetto rilascio goto GIRO ;vai a GIRO btfss F17,1 ;testo se programmazione pausa o lavoro goto ENDPRG ;fine programmazione btfsc F6,J1 ;vedo se in timer (pausa non settabile) goto ENDPRG ;vai a ENDPRG bcf F17,1 ;setto programmazione pausa (fase) bcf F17,0 ;setto programmazione pausa (tempi) bsf F17,2 ;setto memoria pulsante stop premuto goto GIRO ;vai a GIRO ;INDIE bsf F17,4 ;setto memoria puls. indietro premuto btfss F17,1 ;testa bit 1 del registro F17 e salta se = 1 goto INDPAU ;vai a INDPAU decf F14,1 ;decrementa registro F14 -> F14 movlw MAXIM + 1; ;copia in W il numero MAXIM + 1; subwf F14,0 ;sottrai W da registro F14 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto GIRO ;vai a GIRO movlw MAXIM ;copia in W il numero MAXIM movwf F14 ;copia W nel registro F14 decf F13,1 ;decrementa registro F13 -> F13 movlw MAXIM + 1; ;copia in W il numero MAXIM + 1; subwf F13,0 ;sottrai W da registro F13 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto GIRO ;vai a GIRO movlw MAXIM ;copia in W il numero MAXIM movwf F13 ;copia W nel registro F13 goto GIRO ;vai a GIRO ;INDPAU decf F16,1 ;decrementa registro F16 -> F16 movlw MAXIM + 1; ;copia in W il numero MAXIM + 1; subwf F16,0 ;sottrai W da registro F16 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto GIRO ;vai a GIRO movlw MAXIM ;copia in W il numero MAXIM movwf F16 ;copia W nel registro F16 decf F15,1 ;decrementa registro F15 -> F15 movlw MAXIM + 1; ;copia in W il numero MAXIM + 1; subwf F15,0 ;sottrai W da registro F15 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto GIRO ;vai a GIRO movlw MAXIM ;copia in W il numero MAXIM movwf F15 ;copia W nel registro F15 goto GIRO ;vai a GIRO ;AVANT bsf F17,3 ;setto memoria puls. avanti premuto btfss F17,1 ;controllo se programmazione pausa o lavoro goto AVAPAU ;vai a AVAPAU incf F14,1 ;incrementa registro F14 -> F14 movlw MAXIM + 1; ;copia in W il numero MAXIM + 1; subwf F14,0 ;sottrai W da registro F14 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto GIRO ;vai a GIRO clrf F14 ;azzera registro F14 incf F13,1 ;incrementa registro F13 -> F13 movlw MAXIM + 1; ;copia in W il numero MAXIM + 1; subwf F13,0 ;sottrai W da registro F13 -> W btfsc F3,0 ;testa bit 0 del registro F3 e salta se = 0 clrf F13 ;azzera registro F13 goto GIRO ;vai a GIRO ;AVAPAU incf F16,1 ;incrementa registro F16 -> F16 movlw MAXIM + 1; ;copia in W il numero MAXIM + 1; subwf F16,0 ;sottrai W da registro F16 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto GIRO ;vai a GIRO clrf F16 ;azzera registro F16 incf F15,1 ;incrementa registro F15 -> F15 movlw MAXIM + 1; ;copia in W il numero MAXIM + 1; subwf F15,0 ;sottrai W da registro F15 -> W btfsc F3,0 ;testa bit 0 del registro F3 e salta se = 0 clrf F15 ;azzera registro F15 goto GIRO ;vai a GIRO ;GIRO btfss F17,3 ;testa bit 3 del registro F17 e salta se = 1 goto NOPRES ;vai a NOPRES decfsz F19 ;decrementa registro F19 salta se = 0 -> F19 goto NOPRES ;vai a NOPRES bcf F17,3 ;clear memoria pulsante avanti indietro premuto movlw INTER2 ;copia in W il numero INTER2 movwf F19 ;tempo di step con pressione pulsanti continuaNOPRES decfsz F18 ;decrementa registro F18 salta se = 0 -> F18 goto LPPRG ;vai a LPPRG btfss F17,1 ;testa bit 1 del registro F17 e salta se = 1 goto TOGV ;vai a TOGV movlw B'00000010' ;copia in W il numero B'00000010' xorwf F6 ;togglo led rosso bsf F6,LEDV ;led verde off goto TOGR ;vai a TOGRTOGV movlw B'00000100' ;copia in W il numero B'00000100' xorwf F6 ;togglo led verde bsf F6,LEDR ;led rosso offTOGR movlw .10 ;copia in W il numero .10 movwf F18 ;contatore per lampeggio led goto LPPRG ;vai a LPPRG ;RILST bcf F17,2 ;azzera bit 2 del registro F17 goto GIRO ;vai a GIROENDPRG goto MEMO93 ;vai a MEMO93;------------------ memorizza nuovo numero su eeprom ------------------------MEMO93 movf F13,0 ;copia registro F13 -> W addwf F14,0 ;somma W al registro F14 -> W btfsc F3,2 ;testa bit 2 del registro F3 e salta se = 0 incf F14,1 ;incrementa registro F14 -> F14 movf F15,0 ;copia registro F15 -> W addwf F16,0 ;somma W al registro F16 -> W btfsc F3,2 ;testa bit 2 del registro F3 e salta se = 0 incf F16,1 ;incrementa registro F16 -> F16 movlw 030H ;abilitazione scrittura movwf F9 ;copia W nel registro F9 call STA93 ;salta alla subroutine STA93 call STO93 ;fine comando abilitazione scrittura clrwdt ;azzera watchdog movlw 040H ;scrivi a partire dalla memoria 0 movwf F9 ;copia W nel registro F9 call STA93 ;salta alla subroutine STA93 movf F13,0 ;copia registro F13 -> W movwf F9 ;copia W nel registro F9 call TX93 ;primo byte movf F14,0 ;copia registro F14 -> W movwf F9 ;copia W nel registro F9 call TX93 ;secondo byte call STO93W ;salta alla subroutine STO93W movlw 041H ;scrivi a partire dalla memoria 1 movwf F9 ;copia W nel registro F9 call STA93 ;salta alla subroutine STA93 movf F15,0 ;copia registro F15 -> W movwf F9 ;copia W nel registro F9 call TX93 ;primo byte movf F16,0 ;copia registro F16 -> W movwf F9 ;copia W nel registro F9 call TX93 ;secondo byte call STO93W ;salta alla subroutine STO93W clrf F9 ;disabilitazione scrittura call STA93 ;salta alla subroutine STA93 call STO93 ;fine comando disabilitazione scrittura goto STOP ;vai a STOP;---------------------------------------------------------------------------- ORG 07FFH ;istruzione successiva a indirizzo 07FFH goto START ;vai a START END ;fine del programma Link al commento Condividi su altri siti More sharing options...
mister999 Inserita: 20 agosto 2004 Autore Segnala Share Inserita: 20 agosto 2004 Grazie dell'aiuto Walterword, ma 9 secondi sono troppo pochi... come dicevo me ne servono almeno 900 secondi... poi se non ci sono i millesimi o neanche i centesimi poco importa...Per DLGCOMsi, effettivamente vorrei + di un consiglio... come dicevo magari andrebbero bene anche le modifiche da apportare a un progetto esistente...quello che mi hai segnalato tu lo conoscevo gia, ma non sapevo come modificarlo perche non visualizza nemmeno i decimi di secondo...Se avete pazeinza per potermi dare altre dritte ve ne sarei grato...Grazie 1000 comunque per l'aiuto parziale!Ciao! Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 20 agosto 2004 Segnala Share Inserita: 20 agosto 2004 se studi bene il codice vedrai che potrai fare quello che vuoi tutto sta a decidere il decremento , e poi puoi aggiungere anche altri display , il cui valore e' un registro che si incrementa con quello minoreper esempio , mi basta avare un clock di 10 ms per incrementare quello dei secondi , dei minuti e delle orepurtroppo in questo momento non riesco a dirti di piu , ho delle cose urgenti da consegnare oltre al progetto on line del rabbit ciao walter 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