BaroneRosso.it - Forum Modellismo

BaroneRosso.it - Forum Modellismo (https://www.baronerosso.it/forum/)
-   Circuiti Elettronici (https://www.baronerosso.it/forum/circuiti-elettronici/)
-   -   Come Impostare Pin Vref 12f683 (https://www.baronerosso.it/forum/circuiti-elettronici/159227-come-impostare-pin-vref-12f683.html)

buby72 12 gennaio 10 15:47

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?

illez 12 gennaio 10 16:01

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

buby72 12 gennaio 10 16:50

ok, ora devo andare al lavoro, stasera vedo , a presto grazie. :rolleyes:

buby72 13 gennaio 10 20:25

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?

MSchiepp 14 gennaio 10 09:58

Citazione:

Originalmente inviato da buby72 (Messaggio 1881809)
Ciao ragazzi, ho provato e riprovato a leggere e cercar di capire il datasheet...

Coraggio riprova! In effetti stai facendo confusione e stai facendo un mix di due cose: il comparatore e il convertitore ADC sono due cose diverse!!!
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

buby72 14 gennaio 10 18:07

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. :(

MSchiepp 15 gennaio 10 10:51

Citazione:

Originalmente inviato da buby72 (Messaggio 1883320)
...ho controllato e ricontrollato il datasheet, cosi dovrei aver impostato esattamente:

Stiamo migliorando... metti a zero il registro ANSEL, altrimenti i due ingressi vengono collegati al sample & hold del convertitore!

Michele

buby72 15 gennaio 10 14:56

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

MSchiepp 15 gennaio 10 17:02

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

buby72 18 gennaio 10 14:54

: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

buby72 21 gennaio 10 08:32

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

MSchiepp 21 gennaio 10 10:35

Citazione:

Originalmente inviato da buby72 (Messaggio 1893081)
...con due istruzioni come a seguito non succede nulla:
BSF GPIO,LED
BSF GPIO,RF

Visto così non sembra sbagliato... come hai definito LED e RF?

Michele

buby72 22 gennaio 10 23:45

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:

MSchiepp 23 gennaio 10 11:15

Citazione:

Originalmente inviato da buby72 (Messaggio 1895983)
... forse è il mio ragionamento che è errato? :mumble:

Non del tutto, ma un po' sì.

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