GCBasic: Librería Comparadores para PIC
Página 1 de 1.
GCBasic: Librería Comparadores para PIC
Aquí les dejo una librería para comparadores con función establecer Vref.
En principio está pensada para PIC16F87X, pero se puede usar en otros PICs, para esto la función: comp_conf hay que usarla directamente con el valor que podemos ver en los datasheets:
comp_conf b'010'
comp_conf 2
comp_conf 0x02
Para utilizarla basta con ponerlas en el directorio "include" y añadir
la correspondiente linea #include librería.h en el programa donde se
vaya a usar.
Aunque podemos hacerlo para no tener que añadir la
linea #include cada vez que las vayamos a usar; para esto hay que
colocar la librería en "include/lowlevel" y editar el archivo:
lowlevel.dat para añadirle el nombre de la librería, de esta forma el
compilador comprobará si se usan las funciones sin necesidad de añadir
la linea #include.
El driver y el ejemplo también está en la seccion de descargas.
Driver:
Ejemplo de uso:
En principio está pensada para PIC16F87X, pero se puede usar en otros PICs, para esto la función: comp_conf hay que usarla directamente con el valor que podemos ver en los datasheets:
comp_conf b'010'
comp_conf 2
comp_conf 0x02
Para utilizarla basta con ponerlas en el directorio "include" y añadir
la correspondiente linea #include librería.h en el programa donde se
vaya a usar.
Aunque podemos hacerlo para no tener que añadir la
linea #include cada vez que las vayamos a usar; para esto hay que
colocar la librería en "include/lowlevel" y editar el archivo:
lowlevel.dat para añadirle el nombre de la librería, de esta forma el
compilador comprobará si se usan las funciones sin necesidad de añadir
la linea #include.
El driver y el ejemplo también está en la seccion de descargas.
Driver:
- Código:
'________________________________________________________________________________
'
' LIBRERIA COMPARADORES PARA PIC16F87X Y COMPATIBLES
'
' (asm optimizado)
'
' Nombre: comp-87X.h
'________________________________________________________________________________
'
'
' This library is free software; you can redistribute it and/or
' modify it under the terms of the GNU Lesser General Public
' License as published by the Free Software Foundation; either
' version 2.1 of the License, or (at your option) any later version.
'
' This library is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
' Lesser General Public License for more details.
'
' You should have received a copy of the GNU Lesser General Public
' License along with this library; if not, write to the Free Software
' Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
'
'________________________________________________________________________________
'
' FUNCIONES DISPONIBLES (ejemplos):
'________________________________________________________________________________
'
'
'IMPORTANTE: CUALQUIER CAMBIO EN LA CONFIGURACION DE COMPARADPRES
' DESABILITA LAS INTERRUPCIONES POR COMPARADORES,
' EN ESE CASO HABRÁ QUE REHABILITARLAS.
'
'
'Establece comparadores a: 2 comparadores con Vref interna:
'
' comp_conf TWO_COMP_VREF
'
'
'Establece canales multiplexados a RA0 RA1:
'
' comp_mpl RA0_RA1
'
'
'Establece Vref a 60% de Vdd:
'
' comp_vref VREF_60
'
'
'Invierte la salida del comparador1:
'
' comp_inv C1_INV
'
'
'Lee comparador1:
'
' value = comp1_read
'
'
'Lee comparador2:
'
' value2 = comp2_read
'
'
'Deshabilita comparadores:
'
' comp_off
'
'________________________________________________________________________________
'
' DEFINICIONES (opciones disponibles):
'________________________________________________________________________________
'
' Configuración de comparadores
#define COMP_RESET 0X00
#define COMP1_OUT 0X01
#define TWO_COMP 0X02
#define TWO_COMP_OUT 0X03
#define TWO_COMP_COMREF 0X04
#define TWO_COMP_COMREF_OUT 0X05
#define TWO_COMP_VREF 0x06
#define COMP_OFF 0X07
' Multiplexor: usados bits 0-3
#define RA0_RA1 0X00
#define RA2_RA3 0X08
' Invertir salidas: usados bits 4-5 = CMCON.C1INV-C2INV
#define NO_INV 0X00
#define C1_INV 0X10
#define C2_INV 0X20
#define C1_C2_INV 0X30
' Definiciones Vref, voltajes aproximados para Vpp=5v
#define VREF_0 0X20 'V = 0,000
#define VREF_5 0X21 'V = 0,208
#define VREF_6 0X21 'V = 0,208
#define VREF_7 0X22 'V = 0,417
#define VREF_8 0X22 'V = 0,417
#define VREF_9 0X22 'V = 0,417
#define VREF_10 0X22 'V = 0,417
#define VREF_11 0X23 'V = 0,625
#define VREF_12 0X23 'V = 0,625
#define VREF_13 0X23 'V = 0,625
#define VREF_14 0X23 'V = 0,625
#define VREF_15 0X24 'V = 0,833
#define VREF_16 0X24 'V = 0,833
#define VREF_17 0X24 'V = 0,833
#define VREF_18 0X24 'V = 0,833
#define VREF_19 0X25 'V = 1,042
#define VREF_20 0X25 'V = 1,042
#define VREF_21 0X25 'V = 1,042
#define VREF_22 0X25 'V = 1,042
#define VREF_23 0X26 'V = 1,250
#define VREF_24 0X26 'V = 1,250
#define VREF_25 0X26 'V = 1,250
#define VREF_26 0X26 'V = 1,250
#define VREF_27 0X01 'V = 1,406
#define VREF_28 0X01 'V = 1,406
#define VREF_29 0X27 'V = 1,458
#define VREF_30 0X27 'V = 1,458
#define VREF_31 0X02 'V = 1,562
#define VREF_32 0X02 'V = 1,562
#define VREF_33 0X28 'V = 1,667
#define VREF_34 0X03 'V = 1,719
#define VREF_35 0X03 'V = 1,719
#define VREF_36 0X04 'V = 1,875
#define VREF_37 0X04 'V = 1,875
#define VREF_38 0X04 'V = 1,875
#define VREF_39 0X04 'V = 1,875
#define VREF_40 0X05 'V = 2,031
#define VREF_41 0X05 'V = 2,031
#define VREF_42 0X2A 'V = 2,083
#define VREF_43 0X06 'V = 2,188
#define VREF_44 0X06 'V = 2,188
#define VREF_45 0X2B 'V = 2,292
#define VREF_46 0X2B 'V = 2,292
#define VREF_47 0X07 'V = 2,344
#define VREF_48 0X07 'V = 2,344
#define VREF_49 0X08 'V = 2,500
#define VREF_50 0X08 'V = 2,500
#define VREF_51 0X08 'V = 2,500
#define VREF_52 0X09 'V = 2,656
#define VREF_53 0X09 'V = 2,656
#define VREF_54 0X2D 'V = 2,708
#define VREF_55 0X2D 'V = 2,708
#define VREF_56 0X0A 'V = 2,812
#define VREF_57 0X0A 'V = 2,812
#define VREF_58 0X2E 'V = 2,917
#define VREF_59 0X0B 'V = 2,969
#define VREF_60 0X0B 'V = 2,969
#define VREF_61 0X0C 'V = 3,125
#define VREF_62 0X0C 'V = 3,125
#define VREF_63 0X0C 'V = 3,125
#define VREF_64 0X0C 'V = 3,125
#define VREF_65 0X0D 'V = 3,281
#define VREF_66 0X0D 'V = 3,281
#define VREF_67 0X0D 'V = 3,281
#define VREF_68 0X0E 'V = 3,438
#define VREF_69 0X0E 'V = 3,438
#define VREF_70 0X0E 'V = 3,438
#define VREF_71 0X0F 'V = 3,594
#define VREF_72 0X0F 'V = 3,594
#define VREF_73 0X0F 'V = 3,594
#define VREF_74 0X0F 'V = 3,594
#define VREF_75 0X0F 'V = 3,594
#define comp1_read CMCON.C1OUT
#define comp2_read CMCON.C2OUT
'________________________________________________________________________________
'
' FUNCTIONS
'________________________________________________________________________________
sub comp_conf(set_config) #NR
BCF PIE2,CMIE ; Desactiva interrupciones comparadores
BCF PIR1,CMIF ; Borra flag interrupciones comparadores
MOVF set_config,W
MOVWF CMCON ; Establece modo de operación
end sub
sub comp_mpl(set_switch) #NR
BCF PIE2,CMIE ; Desactiva interrupciones comparadores
BCF PIR1,CMIF ; Borra flag interrupciones comparadores
MOVF set_switch,W
BCF CMCON,CIS ; Borra anteriores selecciones
IORWF CMCON,F ; Establece canales multiplexados
end sub
sub comp_vref(set_cvr) #NR
MOVF set_cvr,W
MOVWF CVRCON ; Establece valor de Vref
BSF CVRCON,7 ; Habilita módulo Vref
end sub
sub comp_inv(set_inv) #NR
BCF PIE2,CMIE ; Desactiva interrupciones comparadores
BCF PIR1,CMIF ; Borra flag interrupciones comparadores
MOVF set_inv,W
BCF CMCON,4 ; Borra anteriores selecciones
BCF CMCON,5
IORWF CMCON,F ; Establece canales invertidos
end sub
sub comp_off
BCF PIE2,CMIE ; Desactiva interrupciones comparadores
BCF PIR1,CMIF ; Borra flag interrupciones comparadores
MOVLW 0x07
MOVWF CMCON ; Establece modo off = 111
MOVLW 0x00
MOVWF CVRCON ; Deshabilita modulo Vref
end sub
Ejemplo de uso:
- Código:
'________________________________________________________________________________
'
' Ejemplo de uso del driver adc-87X.h
'
'
' Un led conectado a PORTB.7 se encenderá cuando el voltaje en PORTA.0 < 60% Vdd
'
'________________________________________________________________________________
'
'General hardware configuration
#chip 16F876A, 20
#config HS_OSC, WDT_OFF, LVP_OFF, PWRTE_ON
#include comp-87X.h
'el driver comp-87X.h debe estar en la carpeta "iclude" de GcBasic
#define LED1 PORTB.7
'________________________________________________________________________________
DIR A0 IN
DIR B7 OUT
comp_conf TWO_COMP_VREF
comp_mpl RA0_RA1
comp_vref VREF_60
do
LED1 = comp1_read
loop
Temas similares
» GCBasic: Librería ADC para PIC16F87X
» Librería para multitarea en GCBasic.
» Editor para compilar programas de GCBASIC
» Libreria para PIC
» Bug en la librería ADC para 18F
» Librería para multitarea en GCBasic.
» Editor para compilar programas de GCBASIC
» Libreria para PIC
» Bug en la librería ADC para 18F
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.