![]() |
Come Impostare Pin Vref 12f683 Ciao a tutti, mi sto cervellando con un 12F683 :blink: , non riesco ad attivare il VREF, è il mio primo lavoro con i pic, sto imparando con il corso di Tanzilli. Ho impostato come segue: __CONFIG _FCMEN_ON & _IESO_OFF & _CP_OFF & _CPD_OFF & _BOD_ON & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT BSF STATUS,RP0 ;BANK 1 MOVLW B'00001011' ;GP3 GP1 GP0 INPUT, IL RESTO OUT MOVWF TRISIO MOVLW B'00000011' ;IMPOSTA GP0 E GP1 ANALOGICO MOVWF ANSEL MOVLW B'10001100' ;IMPOSTA ATTIVA CVREF,CVREF HI, VR1 MOVWF VRCON BCF STATUS,RP0 ;BANK0 MOVLW B'01010100' ;IMPOSTA COMP. RIFERIMENTO INTERNO MOVWF CMCON0 MOVLW B'01000000' MOVWF ADCON0 END sul pin GPIO1 dovrei leggere la tensione di riferimento? o sbaglio? |
No, il pin Vref è di input; puoi selezionare come tensione di riferimento in base alla quale verranno fatte le misure dell'adc o la tensione di alimentazione del pic, o quella fornita sul pin Vref (A1). Vai a pagina 63 del datasheet e leggi bene :wink: ciao |
ok, ora devo andare al lavoro, stasera vedo , a presto grazie. :rolleyes: |
Ciao ragazzi, ho provato e riprovato a leggere e cercar di capire il datasheet, ma non cavo un ragno dal buco. ho provato a impostare ADCON0, ma non vedo nulla. forse erro nel misurare: dopo aver impostato il VRCON e il COMPARATORE con riferimento interno, la tensione Vref la posso misurare con un tester? Il piedino COUT del comparatore lo imposto come uscita nel GPIO? lo posso leggere con il BTFSS? |
Citazione:
Tu stai impostando un po' di registri del convertitore e un po' del comparatore. Nell'ordine: 1) definisci cosa ti serve fare e cosa ti serve usare. 2) Come ti hanno già detto, la tensione di Vref non è disponibile all'esterno. 3) Per comparatore e convertitore le tensioni di riferimento sono diverse: per il convertitore (VRef) puoi solo usarla in ingresso e per il comparatore (CVref) puoi generarla all'interno, ma non puoi farla uscire dal micro. 3) Se vuoi vedere all'esterno l'uscita del comparatore devi usare un'altra configurazione; per leggere lo stato del comparatore devi leggere il bit 6 del registro CMCON0 (vedi 8.4.1 del datasheet). Facci sapere i progressi... Michele |
Eccomi di nuovo, grazie per avermi fatto vedere che mescolo un po' le cose, ho controllato e ricontrollato il datasheet, cosi dovrei aver impostato esattamente: #include <p12f683.inc> __CONFIG _FCMEN_ON & _IESO_OFF & _CP_OFF & _CPD_OFF & _BOD_ON & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT REF EQU 2 BUZZ EQU 5 REED EQU 3 COMP EQU 6 ORG 0x00 BSF STATUS,RP0 ;BANK 1 MOVLW B'00001011' ;GP3 GP1 GP0 INPUT, IL RESTO OUT MOVWF TRISIO MOVLW B'00000011' ;IMPOSTA GP0 E GP1 ANALOGICO MOVWF ANSEL MOVLW B'10101100' ;IMPOSTA ATTIVA CVREF,VRR HI, Vref 2.5V CON VDD V MOVWF VRCON BCF STATUS,RP0 ;BANK0 MOVLW B'00010101' ;IMPOSTA COMPARATORE CON RIF INT MOVWF CMCON0 START BCF GPIO,BUZZ BTFSS CMCON0,COMP BSF GPIO,BUZZ GOTO START END se non sbaglio variando la tensione all'ingresso del comparatore tramite GPIO0 il BTFSS CMCON0,COMP legge lo stato d'uscita del comparatore? programmato il pic non ho nessuna variazione. :( |
Citazione:
Michele |
Grazie Michele, son contento di riuscire a capire qualcosa, ma ancora troppo poco :P . ho provato a copiare nel registro ANSEL b'00000000' , ho provato con CLRF ANSEL ma il risultato non cambia. Sto cercando anche che cos'è il collegamento del sample & hold del convertitore. a prestissimo |
Scritto così mi sembra giusto e dovrebbe andare; devi controllare alcune cosette: 1) hai programmato i bit di configurazione per abilitare l'oscillatore, il reset e disabilitare il watch-dog? 2) la tensione variabile per far scattare il comparatore deve essere inviata su GPIO1 (CIN-), altrimenti devi settare CMCON0 a 00011101 3) prova a muovere un bit in uscita e a vedere se il micro funziona 4) se guardi il pin GPIO5 devi usare un oscilloscopio, perchè oscilla e con un tester non vedresti niente... Controlla questi punti e poi ne riparliamo Michele |
:hail::hail::hail::hail: onore al merito. cambiato il settaggio di CMCON0. Mi sono piantato perchè da :azz: POLLO :azz: GPIO1 è il secondo piedino dall'alto del comparatore,io non contavo il Vss quindi il secondo dall'alto è il CIN+. Ho battuto parecchio la testa prima di vedere l'errore, non ho fatto subito quello che mi hai detto perchè ho poco tempo a disposizione. per ora ti ringrazio enormemente. spero di non piantarmi ancora su errori così. Tempo addietro ho fatto un tiro a segno,interamente progettato da me, avevo utilizzato :asd: 17 ic a porte logiche, ora vorrei farlo con i pic, molto, ma moto meno complicato. ci sentiamo |
Attivare 2 Uscite CIAO,ho proseguito il mio circuito, mi sono trovato un piccolo problema, l'ho bypassato ma vorrei sapere il perchè: quando il comparatore mi da uscita alta attiva 2 uscite, con due istruzioni come a seguito non succede nulla: BSF GPIO,LED BSF GPIO,RF ho modificato con MOVLW B'00110000' MOVWF GPIO così ottengo il mio scopo, dopo un tot di tempo devo spegnere il led,mettto BCF GPIO,LED |
Citazione:
Michele |
ciao, ho impostato LED e RF in due modi: ho collocato 2 memorie FLY1 EQU 0X24 FLY2 EQU 0X25 poi ho collocato nelle memorie i seguenti binari MOVLW B'00110000' MOVWF FLY1 MOVLW B'00010000' MOVWF FLY2 in questo modo FLY1 mette a valore alto il bit n°5 (LED) e n°4 (RF) è FLY2 mette a valore alto il bit n°4(RF) nel programma ho bisogno di RF attivo e LED lampeggiante per un lasso di tempo x. con l'istruzione go MOVF FLY1,GPIO ;"dovrei" accendere il LED e abilitare l'uscita RF. CALL TIME1 ;tempo di ritardo per lampeggio LED MOVF FLY2,GPIO ;"dovrebbe" spegnere il LED e restare attivo RF. GOTO go :huh: invece non si attiva nulla. ho risolto togliendo i FLY1 e FLY2 e modificato il programma così go MOVLW B'00110000' ; :) MOVWF GPIO ; :) CALL TIME1 ; :) MOVLW B'00010000' ; :) MOVWF GPIO ; :) GOTO go così ho 5 istruzioni dove, secondo il mio ragionamento ne bastano 3! Ho anche provato a mettere FLY1 EQU B'00110000' FLY2 EQU B'00010000' ho tolto le 4 istruzioni per collocare i binari nelle 2 FLY ma nulla ho usato anche #DEFINE FLY1 B'00110000' ; ho anche sostituito il binario con 30H #DEFINE FLY2 B'00010000' ; ho anche sostituito il binario con 10H ma nulla, mi sono tenuto il programma con le faccette. forse è il mio ragionamento che è errato? :mumble: |
Citazione:
MOVF FLY1,GPIO Non puoi muovere direttamente il contenuto di un registro in un altro: devi sempre passare dal registro W; l'istruzione MOVF reg,d muove il contenuto del registro in W se d=0 in reg se d=1. Nel tuo caso ti servono due valori costanti da usare per settare le uscite di GPIO; la soluzione più semplice è: #define FLY1 0x30 #define FLY2 0x10 . . . MOVLW FLY1 MOVWF GPIO Michele |
| Tutti gli orari sono GMT +2. Adesso sono le 05:40. |
Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002