Eramita Analogico Inserito: 20 marzo 2021 Segnala Inserito: 20 marzo 2021 (modificato) Buongiorno, sono nuovo del forum. Scrivo da Treviso e sono Paolo. Vorrei avere un confronto su un problema che sto riscontrando sulla programmazione dei pin di uscita del PIC16F629 Premetto che sto scrivendo il programma in PIc Basic, però andando a leggere il file ASM generato in fase di compilazione sembrerebbe tutto in ordine, eppure non mi spiego una cosa. In sostanza ho una routine di interrupt generata dal TMR0 che mi aggiorna periodicamente una serie di registri a scorrimento 74HC594 per estendere il numero di uscite del PIC (nella fattispecie sono 7 registri in serie, per un totale di 56 uscite) I dati seriali li faccio uscire da GP0, il clock dello scorrimento da GP1 e il clock di caricamento delle uscite da GP2 Il problema è che quando imposto ad 1 l'uscita GP0 poi devo dare un breve impulso a 1 su GP1 per far avanzare lo scorrimento dei registri, però se vado a guardare con l'oscilloscopio questi segnali vedo che GP0 va regolarmente a 1 salvo tornare immediatamente a 0 quando GP1 va a 1. Infatti sui registri vengono caricati tutti 0. Se metto una piccola capacità (tipo 100 pF) su GP0 invece funziona tutto perché infatti il dato a 1 è leggermente ritardato e viene "preso" dal fronte di salita di GP1 Ma perché GP0 torna a zero da solo quando imposto GP1 a 1?? Ribadisco che dal file asm vedo bsf riferito a gp0 e subito dopo solamente bsf riferito a gp1, seguito a sua volta da bcf del solo gp1 Grazie in anticipo per eventuali indicazioni. Saluti. Modificato: 20 marzo 2021 da Eramita Analogico
Eramita Analogico Inserita: 20 marzo 2021 Autore Segnala Inserita: 20 marzo 2021 (modificato) Scusate, il pic è 12F, non 16F 12F629 (8 pin) Aggiornamento: ho provato ad usare GP5 anziché GP0 per l'uscita seriale dei dati, e con lo stesso codice funziona. GP5 si comporta regolarmente. GP0 invece, settato a 1 subito dopo GP5 e subito prima di GP1, torna da solo a 0 quando GP1 va a 1 Si tratta di un bug forse? O c'è qualche impostazione particolare diversa da Trisio che non ho considerato? Grazie, saluti. Modificato: 20 marzo 2021 da Eramita Analogico
DavidOne71 Inserita: 20 marzo 2021 Segnala Inserita: 20 marzo 2021 purtroppo non so programmare in basic con i pic Con la simulazione di questo asm a me funziona processor 12F629 include <p12f629.inc> __CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT ;Internal osc. RADIX DEC cblock 0x20 Count1 Count2 endc org 0 errorlevel -302 bsf STATUS,RP0 movlw b'11101100' movwf TRISIO bcf STATUS,RP0 movlw b'00000111' ; Disattiva movwf CMCON ; i comparatori errorlevel +302 ini bsf GPIO,0 ; Pin 6 bsf GPIO,1 ; Pin 6 movlw 1 call D100ms bcf GPIO,0 bcf GPIO,1 movlw 1 ; Pin 6 call D100ms goto ini ; Ritardo software di 100ms D100ms clrf Count1 movlw 132 movwf Count2 Loop decfsz Count1,F goto Loop decfsz Count2,F goto Loop return Questo listato genera un onda quadra sulle uscite GP0 e GP1
Eramita Analogico Inserita: 21 marzo 2021 Autore Segnala Inserita: 21 marzo 2021 Grazie, mancava cmcon per disattivare il comparatore. Ciao
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