LIBRO PROYECTOS PIC BASIC.pdf
Short Description
Download LIBRO PROYECTOS PIC BASIC.pdf...
Description
PROYECTO PARA LA DETECCIÓN DE OBJETOS SE ILUMINARÁ EL LED ROJO/AMARILLO/VERDE UTILIZANDO UN 12F629, QUE HARÁ PARPADEAR LENTAMENTE LOS INDICADORES LED
Mediante el comando PWM (modulación por ancho de pulso), se realiza el programa para detección de objetos con tres indicadores LED (rojo, amarillo, verde) que se activaran brillando poco a poco, cuando el objeto detectado este lejos y con mayor intensidad cuando el objeto este adelante del sensor LDR1. Al sentir la oscuridad (la noche), se pone en movimiento un conjunto de rutinas.
Circuito de programación El 12F629 (IC 8-pin) está lleno de características, cada pin se selecciona y se establece a través del estado. El IC no requiere reloj externo, sino interno, el pin ha sido utilizado como otro pin de control. El circuito funciona bien con energía ener gía de batería (oficialmente 2.0-5.5V)
Programa (B): 'Ejercicio 1 uso del PWM 'Tres LEDs (GPIO.0-rojo, amarillo GPIO.1, GPIO.4-verde) 'Van cambiando su brillo uno después de otro (no al mismo tiempo) 'cuando la entrada del LCD1 (GPIO.2) es" 0 "(a oscuras).
TRISIO=%000100 'GPIO.2 única entrada CMCON=7 'Deshabilitar los comparadores. WPU=%00000100 ' Pull-Up on GPIO.2 OPTION_REG.7=0 ' habilitar Pull-Up's
LR LY LG level
var var var var
GPIO.0=0 GPIO.1=0 GPIO.4=0
GPIO.0 'LED rojo en GPIO.0 GPIO.1 'LED amarillo en GPIO.1 GPIO.4 'LED verde en GPIO.4 word 'level=variable
' LED off GPIO.0. 'LED off GPIO.1. 'LED off GPIO.4.
CdSin: If GPIO.2=0 then inicio Goto CdSin
inicio: For level=0 to 255 PWM LR, level, 5 Next level
'Fade-up rutina '0 -> 255 '5 ciclos para cada nivel
For level=255 to 0 step -1 'Fade-down rutina PWM LR, level, 5 '255 -> 0 NEXT level
For level=0 to 255 PWM LY, level, 5 Next level
For level=255 to 0 step -1 PWM LY, level, 5 NEXT level
For level=0 to 255 PWM LG, level, 5 Next level
For level=255 to 0 step -1 PWM LG, level, 5 NEXT level Goto CdSin
'Nota 'la Configuración de programación se establece de la siguiente manera: '1) FOSC - INTOSC (GP4: I / O); WDTE - Habilitar; PWRTE - Activar 'MCLR - Internas (por lo que MCLR no requiere resistencia a conexión Vdd) 'BODEN - Habilitar! CD - Desactivar, CDP - Desactivar.
UTILIZACIÓN DE LA FUNCIÓN DE ADC 12F675 (TRES LEDS DE VISUALIZACIÓN PARA NIVEL DE ENTRADA DE LA LUMINOSIDAD)
El PIC 12f675 es económico como el PIC12F629, sin embargo posee convertidor analógico-digital de 10 Bit.
Modulo análogo digital (ADC): El PIC 12f675 posee un modulo ADC que se utiliza para saber la tensión en su entrada, este modulo convierte una señal análoga a digital de 10 bit. Tiene cuatro entradas análogas pero solo una de ellas puede leer a un tiempo, la entrada activa se selecciona mediante un multiplexor interno dedicado a este propósito que la conecta al circuito sample and hold. Para poder realizar la conversión al ADC necesita una fuente de tensión de referencia que pueda seleccionarse desde dos orígenes distintos, uno puede ser la alimentación del PIC y el otro puede ser una tensión de referencia externa suministrada al pin destinado para este propósito y que ocupa una de las entradas análogas, y por último se necesita una fuente de pulsos de reloj. El resultado de la conversión se obtiene en dos registros de 8 bit cada uno.
Al configurar el modulo ADC se tiene que tener presente la correcta sincronizacion del relor principal con la velocidad real del convertidor. El PIC 12f675 dispone de un divisor de frecuencia dispueto entre el reloj principal y la entrada de reloj del ADC. Para poder seleccionar la escala del divisor el datasheets el PIC especifica que se necesitan 11 Tad para realizar cada conversion. El tad es un pulso de reloj de un ancho ( tiempo) determinado que lo da la velocidad de conversion del modulo ADC. En este caso el manual indica que como minimo se requiere de 1.6 us , por lo tanto en ala tabla, para la frecuencia de reloj seleccionada, se buscara la configuracion del divisor que de cómo resultado 1.6 us, o en su defecto por no exixstir , la inmediata superior. Si se observa la tabla es posible que se de la paradoja de que una frecuancia de reloj mas elevada el ACED trabaje mas lemto ya que solo se pueden seleccionar multiplos de la frecuecia proncipal.
Al tiempo de conversion de la lectrura hay que añadirle el tiempo de os registros de salida. Cuando muestra el resultado en un solo registro de 8 BIT se tarda 4 ciclos de reloj en leerlo o lo que es lo mismo 1 ciclo de ejecucion de instrucción y 8 ciclos
de reloj ( 2 ciclos de instrucción) cuando el formato de salida es de 10 BITS, porque el resultaso de la lectura se divide en dos registros de 8 BITS. Setendra que hacer una espera minima de 10 useg, si se realiza un cambio de configuracion en tiempo de ejecucion para estar seguro que la lectura no estara falseada. El tiempo de espera es necesario para que el modulo complete su nueva configuracion y se estabilice. La impdencia de la señal aplicada a la entrada no debe superar los 10 K, de sta forma se garantizan que se esta trabajando dentro de os parametros expuestos en el datasheets del PIC. El modulo tiene un flag de aviso de terminacion de lectura y permite interrupciones , tambien puede trabajr en el modulo Sleep del micro mediante el relo interno RC. Esta permitido abortar la conversion que este en proceso, pero despues de esto hay que esperar 2Tad antes de mandar una nueva y los registros de salida mantienen el valor de la conversion anterior.
Registros de salida del adc La conversion interna del ADC siempre se de 10 BIT pero se puede programar para que la muestre en dos formatos: 10 y 8 BITS, los registros de lectura son ADRESH y ADREL , son el valor mayor y menor de la lectura respectivamente y ambos se usan con el formato de salida de 10 BITS. Si se eligio el formato ede salida de 8 BITS el valor de la conversion se leee en el registro ADRESH.
Configuracion modulo ADC Los registros de configuacion son ADCON0 y ANSEL
ANSEL ( ADCS2: ADCS0): Se asigna el tipo de reloj y su conversion al modulo ADC.
ANSEL ( ANS3: ANS0): Se seleccionan los pines que trabajaran como analogos y con el registro TRISIO bits se asignan como entradas. ADCS2: ADCS0 : Bits de tiempo de adquisicion: Con los bits ADCS2: ADCS0se seleciona el tiempo de adquisicion del modulo ADC que se de 11 Tad (1tad= 1.6 us para este ADC). Conocido esto solo queda configurar los bits del divisor según la tabla trabajando con un cristal de 4 Mhz, como no existe un multiplo que de 1.6 us exactos se elige el inmediatamente superior que es 2us (001 = 8Tosc).
Conclusion: Trabajando a 4Mhz elegimos la opcion 001 = FOSC/8 , porque (4Mhz/8) = 2 useg. En el caso de no obtener el valor exacto como en este caso, el manual indica que se seleccione el inmediatamente superior o coloquemos un cristal con una frecuencia especial.
Aclaracion: 4Mhz/8= 0.5 Mhz =>1/0.5 Mhz = 2 uSeg. ( conversion completa 10bits), haya que tener en cuenta que el PIC siempre genera una conversion de 10 bits. Es posible que configurando otros valores inferiores a los recomendados el modulo funcione correxctamente , pero se sale de los parametros, esto implica que aunque funciones el ADC del micro utilizado, puede que al utilizar otro distinto, sus margnes de tolerancia sean distintos y no funcione correctamante.
Configuracion en modo BIT Ejemplo: ANSEL ADCS2: ADCS0 = 001 = FOSC/8 , seleccióna el divisor ADCS2 = 0 ADCS1 = 0 ADCS0 = 1 ANSEL ANS3 = 1 : GP4/AN3, trabaja como analogo. ANS2 = 1 : GP2/AN2, I/O trabaja como digital. ANS1 = 1 : GP1/AN1, I/O trabaja como digital. ANS0 = 1 : GP0/AN0, I/O trabaja como digital. I/O = El pin puede trabajar como entrada o salida ( Input/ Output) según se programe en el registro TRISIO
Asignacion de Bits como (I/O) Ejemplo: TRISIO.2 = 0 ‘ GP2/AN2 , como salida, control LED. TRISIO.4= 1 ‘ GP4/AN3 , como entrada, lectruta de la resistencia ajustable. TRISIO.5 = 0 ‘GP5 pin, como salida, Tx pueto serie. El resto de pines como entradas.
Modo ebreviado: ANSEL = %00011000 ‘Fosc/8 (4Mhz/8 = 2uSeg), AN3 analogo y resto I/O( bit 3-0). TRISIO = %11011011 ‘Se definen los pines como entrada = 1 salida = 0 % en lengueje BASIC significa que el numero siguiente esta expresado en binario. ADCON regitro de control modulo ADC
Selección en modo Bits:
ADCON ADON = 1 ‘ Activa el modo GO/_DONE ‘ Se pone a 1 para activar el proceso de conversion , solo cuando el modulo ya se estable con la configuracion. CHS1:CHS0 ‘ selecciona el pin analogo ( canal) que se asigna al ADC para su lectura. CHS1 = 1 CHS0 = 0
Tabla de selección de canal de entrada.
VCFG = 0 ‘ Tension de referencia conetada a la alimetacion del pic. ADFM = 1 ‘ Se justifican los Bits hacia la derecha , formato de salida de la conversion con 10 Bits . Si ADFM = 0 los Bits se justifican hacia la izquiera que dando el formato de salida de la conversion con 8 Bits.
Modo abreviado: ADCON0 = &10001101 ¿ ADC salida con 10 bits ,refenecia a VDD, canal AN3 (bit 3-2) , adc On.
Circuito Similar al ejercicio 1 la diferencia con el PIC12F629 es: GP0 entrada de sensor CDS (pin 7), LED de color rojo y amarillo, GP1 GP2 (pin 6,5). La sensibilidad de sensor CDS se ajusta con el potenciómetro de 10K (que es como un círculo azul) es visible.
Programación Cuando la luz no sea percibida por el sensor CDS, en repetidas ocasiones el LED rojo - amarillo - verde se encienden intermitente en orden. Con el ADC de 10 bits, el rango de entrada es de 0 a 1023. Para convertir este rango se estableció la entrada provisional de Vin de la siguiente manera: • • • •
Vin> 800 800> = Vin> 500 500> = Vin> 300 Vin = 3.9V: Todos los LED no se encienden 3,9 - 2,5 V: El LED rojo parpadea 2,5 - 1,5 V: LED amarillo intermitente 1,5 V>: LED parpadea en verde
Por supuesto, al cambiar el contenido del rango por encima de 4, puede cambiar la forma en que no se iluminan o se encienden. Además, cada uno de los patrones de flash LED, ON - 0.1seg, OFF - es de 0,5 segundos.
Programa (B) El programa se comenzará con ADCON0 =% 10000011 y termina con Goto ADCloop. También utilizamos reloj interno de 4MHz. La configuración se realiza con un programador. 'Cada uno de los LEDs (Rojo , Amarillo , Verde ) 'se ilumina con el parpadeo de acuerdo al cambio 'En el nivel de voltaje de entrada de sensor LDR1, que 'Está conectado a GPIO.0.
'Pin 1: Vdd (+3-5V) 'Pin 8: Vss 'GPIO.0: entrada - conectar LDR1 a potenciometro de 10k(0-5V) 'entre Vdd y Vss 'GPIO.1: conectar LED (Rojo) 'GPIO.2: conectar LED (Amarillo) 'GPIO.4: conectar LED (Verde) ADCON0=%10000011 '=131 (decimal) 'bit7=1(justificado a la derecha),bit6=0(V se refieren-Vdd), 'bit5-4=0(no se han aplicado),bit3-2=00(Un canal 0-0), 'bit1=1(se inicia de inmediato),bit0=1(En operacion)
ANSEL=%00000001 'establece Fosc/2 y GPIO.0 como entrada ASC 'bit7=0(no implementado),bit6-4=000 (Fosc/2),
'bit3-2-1=0(PIN Digtal I/O ),bit0=1(entrada analoga) TRISIO=%00000001 'pone todos los pines como salidas, excepto GPIO.0 CMCON=7
'desactiva la función de comparación
Define ADC_BITS 10 'Usar 10-bit ADC Define ADC_CLOCK 3 'usar Reloj interno Define ADC_SAMPLEUS 50 'muestra el tiempo
Vin var word 'Vin - almacenamiento de tensión de entrada LedR var GPIO.1 'LedR - LED Rojo LedY var GPIO.2 'LedY - LED Amarillo LedG var GPIO.4 'LedG - LED Verde
ADCloop: Low LedR Low LedY Low LedG ADCIN 0, Vin 'leer canal ADC ch-0 y guardar enVin (rango 0-1023) Pause 500
'Necesarios para activar-desactivar el LED
If Vin>800 then goto ADCloop 'Sin luces If (800>=Vin) and (Vin>500) then goto LR '( de 0-1023) IF (500>=Vin) and (Vin>300) then goto LY If Vin=>2 Lcdout $fe,1 'Clear LCD Lcdout $fe,2, "Volt=",dec(Vin/100),".",DEC2 Vin LCDOUT $FE,$C0 Lcdout "Temp=",Dec2 Vin,"C" Samples=0 goto ADCLoop
‘Al programar tener en cuenta: 'FOSC-INTRC__RA6=I/O, WDTE-habilitado, PWRTE-habilitado, MCLRE-RA5=I/O, 'BODEN-habilitado, LVP-RB3=I/O, CPD-Deshabilitado, WRT-All-habilitado, 'DEBUG-' 4-bit bus, CCPMX-CCPI=RB2, CP-' 4-bit bus
……..SIGUE MAS
View more...
Comments