Programacion en CCS Compiler de Microcontroladores PIC, sentencias y codigos de todos los programas. Archivos y libros relacionados a la programacion de PIC en lenguaje C.
Libros, revistas y textos que le serviran para ampliar su conocimiento en los diferentes temas de la electrónica.Dale click en la pestaña LIBROS de la parte superior.
Como su propio nombre lo dice, lo que hace es convertir una señal analógica a digital.
Pasa por los siguientes procesos:
Muestreo de la señal analógica
Cuantificación
Codificación
Estos vendrían a ser los procesos mas básicos que se tiene que realizar para convertir una señal analógica a una digital, ya que puede haber otros procesos más.
El convertidor de aproximaciones sucesivas se utiliza en aplicaciones donde se necesitan altas velocidades de conversión. Se basa en realizar sucesivas comparaciones de forma ascendente o descendente hasta encontrar un valor digital que iguale la tensión entregada por el conversor D/A y la tensión de entrada.
CARACTERISTICAS
Rango de Entrada(Vin): Voltaje a leer por el módulo ADC.
Número de bits(N): Rango de conversión usado por el ADC. Puede ser 8 o 10 bits, definido por el programador
Resolución: Mínimo valor de lectura. viene definido por la siguiente relación.
Tensión de referencia(Vref): Es el voltaje base por la cual toma como punto de referencia el modulo ADC para poder hacer sus conversiones, puede ser valor absoluto de 0 - Vref o en un margen de -Vref a +Vref.
Tiempo de conversión(Tad): Tiempo que demora el ADC en realizar la conversión.
Error de conversión: Bits erróneos generados por una mala conversión, la cual se origina por una alta velocidad o una mala configuración del modulo.
También hay otra manera de expresarla resolución, en el cual intervienen el Vref
Si Vref+ = 5V y Vref- = 0V , tenemos
por ejemplo, si tenemos que la lectura es de 256 LSB, entonces la tensión analógica será:
TABLA DE SELECCION DE FUENTES DE RELOJ
(1): El reloj RC tiene un valor tipico de Tad = 4us
(2): Estos valores violan el mínimo tiempo requerido (1.6us) de Tad
(3): Para conversiones mas rápidas se recomienda otro tipo de reloj
(4): Cuando se usa osciladores mayores de 1MHz, el modo RC es recomendable cuando se esta en el modo SLEEP
TABLA DE CONFIGURACION DE LOS CANALES
MODULO ADC EN C
En el compilador , las instrucciones para manejar el conversor AD son las siguientes:
setup_adc_ports(valor)
setup_adc(modo)
set_adc_channel(canal)
valor=read_adc() ---> Lectura del resultado y almacenado en valor, que viene a ser un numero entero dependiendo de la directiva #DEVICE ADC= empleada.
Estos son algunos sensores cuya salida es en votios, la cual podemos hacer uso de l modulo AD del PIC para poder digitalizar y controlar esta señal.
LES DEJO EL TUTORIAL PARA QUE PUEDAN COMPRENDER MEJOR EL USO DE ESTE MODULO
Las interrupciones permiten a cualquier suceso interior o exterior interrumpir la ejecución del programa principal en cualquier momento. En el momento de producirse la interrupción, el pic ejecuta un salto, a la rutina de atención a la interrupción, previamente definida por el programador, donde se atenderá a la demanda de la interrupción.
El microcontrolador pic 16f87x posee las siguientes fuentes de interrupción:
Interrupción externa por RB0/INT.
Interrupción por cambio de nivel lógico en RB4 - RB7.
Interrupción por desborde del timer 0.
Interrupción del transmisor del modulo USART.
Interrupción del receptor del modulo USART.
Interrupción del modulo CPP.
Interrupción del EEPROM.
INTERRUPCIONES EN C
En el compilador C, la directiva habitual en el manejo de las interrupciones es: #INT_xxxx
ejm: #INT_USB
Las posibles directivas para la familia 16F87x son las siguientes:
#INT_AD -------------- Conversión AD completa
#INT_BUSCOL --------------- Colisión de bus
#INT_CPP1 --------------- Unidad de captura 1,comparación y PWM
#INT_CPP2 --------------- Unidad de captura 1,comparación y PWM
#INT_EEPROM -------------- Escritura EEPROM finalizada
#INT_EXT --------------- Interrupción externa RB0
#INT_RB --------------- Cambio de estado en B4-B7
#INT_RDA ---------------- RS232 dato recibido
...
Existen directivas mas que pueden ser usadas, tanto para esta familia como para otras. Para mayor información les sugiero revisar el datasheet del microcontrolador
INTERRUPCION EXTERNA POR RB0
La directiva usada es #INT_EXT y se debe acompañar de las siguientes funciones.
EXT_INT_EDGE(H_TO_L); ----- Cambio de estado de alto a bajo
EXT_INT_EDGE(L_TO_H); ----- Cambio de estado de bajo a alto
ENABLE_INTERRUPTS (INT_EXT); ------ Habilita la interrupción RB0
ENABLE_INTERRUPTS (GLOBAL); ------ Habilita la interrupción de forma global.
INTERRUPCION EXTERNA POR CAMBIO DE ESTADO DE RB4-RB7
La directiva usada es #INT_RB y se debe acompañar de las siguientes funciones.
EXT_INT_EDGE(H_TO_L); ----- Cambio de estado de alto a bajo
EXT_INT_EDGE(L_TO_H); ----- Cambio de estado de bajo a alto
ENABLE_INTERRUPTS (INT_RB); ------ Habilita la interrupción
ENABLE_INTERRUPTS (GLOBAL); ------ Habilita la interrupción de forma global.
Les dejo un tutorial, en donde podrán observar paso a paso como programar el PIC haciendo uso de estas directivas.
utilizados en el desarrollo de proyectos con microcontroladores PIC y
que tienen su aplicación en el ingreso de datos de manera manual por
parte del usuario, en aquellos casos en que el empleo de pulsadores
simples no es lo más apropiado, ya sea por la presentación final del
producto o por la restricción del número de líneas de entrada de los
microcontroladores PIC.
El teclado matricial 4x4 está constituido por una matriz de
pulsadores dispuestos en filas (A,B,C,D) y columnas (1,2,3,4), con la
intención de reducir el número de pines necesarios para su conexión. Las
16 teclas necesitan sólo 8 pines del microcontrolador, en lugar de los
16 pines que se requerirían para la conexión de 16 teclas
independientes.
LIBRERIA A USAR
El compilador C incluye la librería KBD.c para manejar el teclado 3x4. las funciones que se incorporan son las siguientes:
Kbd.init(); inicializa el sistema debe ser la primera función a ser llamada
Kbd_getc(); devuelve el valor de la tecla pulsada en función a la tabla que se tiene programada.
En el caso que se quiera utilizar un teclado matricial de 4x4, tendremos que modificar la librería KBD.c
Pueden descargar la librería ya modificada para hacer uso con un keypad 4x4.
En los tutoriales se podrá ver como se realiza la programacion para poder usar el teclado, asi como tambien como modificar la libreria KBD.c para usarlo con un keypad 4x4.
Tutorial - Modificacion de Libreria KBD
Tutorial - Programacion del PIC para uso del keypad 4x4
Componente electrónico compuesto por 7 LED's uno en cada segmento
Existen dos tipos de este display: ánodo común (el punto común entre todos los segmentos es Vcc) y cátodo común (punto común entre segmentos es la tierra-GND)
Esta ultima imagen muestra como esta conectado cada segmento y el punto común entre ellos
¿Cómo conecto el display?
En el caso de un ánodo común, el pin común debe de estar conectado a Vcc (5V-12V) y el segmento que queremos que encienda a 0V o GND
La imagen muestra como conectar para poder visualizar el numero 1
En el caso de cátodo común, el pin común debe ir conectado a 0V-GND, y el segmento que queremos encender a Vcc (5V-12V)
La imagen muestra la conexión para poder visualizar el numero 4
¿COMO LO CONECTAMOS AL PIC?
Para poder trabajar directamente con el PIC sin hacer uso de un 7447 o 7448 (conversor de BCD a 7 segmentos), para poder visualizar los números del 0 al 9 en un display cátodo común, haremos lo siguiente:
La imagen nos muestra que valor debemos darle al puerto (el que vamos a usar) para poder visualizar el numero que deseamos.
Ejemplo: para poder visualizar el numero 5, hacemos lo siguiente:
output_b(0x6D); ó output_b(109);
Recordar que esto sirve para un display cátodo común.
Ustedes lo pueden realizar para un display ánodo común, recordando que estos tienen Vcc en común y para poder encender un segmento éste tiene que estar conectado a 0V.
El CCS acepta el los siguientes tipos de variables
CONSTANTES
Las constantes se pueden especificar en octal, decimal, hexadecimal o en binario.
VARIABLES
La variables se utilizan para nombrar posiciones de memoria RAM.
Se deben de declarar obligatoriamente antes de utilizarlas, para ello se debe indicar el nombre y el tipo de dato que se utilizará.
Se definen de la siguiente manera.
tipo nombre_variable =
valor inicial
Ejemplo:
float voltaje=0;
int8 suma=0;
int contador=10;
MANEJO DE PUERTOS
El compilador nos ofrece funciones predefinidas que nos ayudan a trabajar con los puertos
Ejemplos:
output_B(0b11001100); //saca un uno lógico por el pin(b7,b6,b4,b3)
valor = input_A(); //lee el valor del puerto A y lo almacena en valor
También existen funciones asociadas a un solo pin, tales como:
Ejemplos:
output_toggle(pin_b6); //complementa el valor del pin b6
input(pin_c3); //lee el valor del pin c3
output_low(pin_b0); //Pone el pin b0 a un cero logico
Les dejo el tutorial para que puedan entenderlo mejor.
Para iniciarnos en la programación de los microcontroladores PIC, haremos el clásico HOLA MUNDO, que consiste en el encendido y apagado de un led.
Explicaremos cada una de las instrucciones del programa, así como también les dejaré el video tutorial correspondiente.
Para empezar este es nuestro entorno de programación
Para empezar a escribir nuestro código, creamos un archivo en blanco
Colocamos un nombre a nuestro proyecto, en¡ este caso yo le colocare el nombre de encendido y apagado de un led
Una vez creado nuestro archivo en blanco, empecemos las líneas de código de nuestro programa
Lo primero que debemos de hacer es incluir el PIC con el que trabajaremos, en este caso será el 16F877a, lo siguiente que haremos es escribir con velocidad de cristal trabajará nuestro PIC, en este caso será de 20MHz; y tambien mencionar los fusibles, en este caso será el HS, que se usa para cristales de alta velocidad. Si usted usará un cristal menor o igual a 4MHz, deberá colocar #fuses XT. Nuestro programa estaría quedando de la siguiente manera:
El nowdt, deshabilita el watchdog timer(perro guardian). Para mayor información de este fusible ver el datasheet del PIC
Ahora llamaremos a nuestra función principal, que es el void main, el programa quedaría de esta manera:
Luego agregamos un bucle infinito para que nuestro programa se repite indefinidamente
Dentro de este bucle infinito escribiremos las instrucciones que ejecutara nuestro PIC.
El programa quedaría de la siguiente manera
La velocidad con la que el PIC realiza cada instrucción es de 20MHz/4, que vendría a ser igual a 5MHz, por lo tanto el tiempo que demorá el microcontrolador en ejecutar cada instrucción es de 0.2 microsegundos
Es por ello que se añade un retardo en el programa, ya que sino, no se vería el cambio de alto a bajo en el pin b0 del microcontrolador.
Por ultimo compilamos el programa.
Con esto quedaría listo nuestro programa para poder simularlo, así como también grabarlo o quemarlo en un PIC real.
La simulación lo podrá ver en el siguiente video tutorial.