Manual de Usuario SOFTWARE
MCE Starter KIT STUDENT v3.00 DEBUG
mc electronics
速
Sistema Operativo para PIC16F887 v1.06 Sistema Operativo para PIC18F4620 v 1.01
MCE Starter KIT STUDENT v3.00 - SOFT.
1
mc electronics
Contenido: 3 4 6 7
Introducción general Funciones del RTOS_PIC16V1.04 Variables del sistema Rutinas del BIOS Rutinas para manejo del LCD Rutinas para la lectura de mensajes Rutinas para generación de Delays Rutinas para manejo de la UART Rutinas para el control de los display 7 seg. Rutinas para el control del módulo ADC R i para ell controll d Rutina dell Timer Ti
11 Rutinas de Aplicación Rutina de menú principal Rutinas de Mensajes Rutinas de ejecución TEST 12 Firmware en lenguaje C
MCE Starter KIT STUDENT v3.00 - SOFT.
2
mc electronics
Introducción: El RTOS_PIC16V1.06 es un conjunto de programas que permiten el control de los periféricos de un PIC, en este caso este conjunto de rutinas forman un BIOS (Sistema Básico Input / Output) que permite controlar los recursos de la placa MCE Starter KIT STUDENT diseñada por mcelectronics para el entrenamiento con microcontroladores PIC. Este BIOS esta adaptado al trabajo sobre PIC16F88X, y que con muyy pequeñas p q reformas p puede migrar g a PIC16F87X. El RTOS_PIC16V1.06 además del BIOS, contiene un conjunto de rutinas que forman la capa de aplicación que utilizan las rutinas del BIOS para emplazar un software de DEMO que le permite ver al usuario algunas de las funcionalidades de la tarjeta de entrenamiento MCE Starter KIT STUDENT. La idea del desarrollo del RTOS_PIC16V1.06 es la de simplificarle al programador el trabajo de configuración e implementación de rutinas para el control de los recursos y manejos de periféricos del Microcontrolador PIC, de esta forma se facilita el desarrollo de programas al usuario. El RTOS tiene la ventaja de facilitar la programación en lenguaje assembler de los microcontroladores de Microchip, transformándose en una herramienta muy poderosa para el desarrollador. Nuestro producto no termina aquí, nuestra idea es ir ampliando la capacidad y eficiencia del RTOS_PIC16 en versiones futuras. En nombre de mcelectronics agradezco su cuota de confianza y esperamos haber cumplido con nuestro objetivo principal, brindarle a usted un buen servicio. Gracias.
Andrés A dé R Raúl úl Bruno B Saravia S i Profesor RTC Argentina
MCE Starter KIT STUDENT v3.00 - SOFT.
3
mc electronics
Funciones: El RTOS esta formado por un conjunto de rutinas que podemos dividir en 2 grupos funcionales interrelacionados, el conjunto de rutinas de la placa de aplicaciones, y el conjunto de rutinas que forman el BIOS o sistema básico de entrada / salida. El BIOS contiene un grupo de rutinas encargadas de distintas funciones que permiten controlar el HARDWARE de su tarjeta Starter KIT, como ser:
Lectura del ADC de 10 bits en formato de 8 bits Rutina para conversión de datos Binarios a formato BCD Rutina de conversión de datos en formato BCD a ASCII Rutina de configuración I/O y periféricos Rutina de Inicialización del LCD Rutina de Escritura de Caracteres en el LCD Rutina de Escritura de comandos en el LCD Rutina de Limpieza de la pantalla del LCD Rutina de lectura de tablas de mensaje para enviar al LCD y UART Rutina de escritura de datos en la UART Rutina de Delay de 100 microsegundos Rutina de Delay de 5 ms Rutina de Delay de 500 ms
Por su parte el programa de aplicaciones (denominada a esta área “capa de aplicaciones”) es el encargado de usar las rutinas del BIOS para una función específica, en el caso de la tarjeta Starter KIT1, se ha confeccionado un programa “Demo” que le permite ver al usuario en f i funcionamiento i algunos l d de llos periféricos ifé i d dell PIC16F887 con que viene i equipada i d lla tarjeta. j Estas rutinas se encargan de desplegar mensajes en pantalla y disparar las distintas rutinas que permiten evaluar el HARDWARE de que se dispone, a las cuales hemos denominado rutinas TEST.
MCE Starter KIT STUDENT v3.00 - SOFT.
4
mc electronics
El usuario puede hacer uso de las rutinas de la capa de aplicaciones para con pequeñas modificaciones adaptarlas para desplegar otros mensajes o ampliar sus capacidades, permitiendo así reducir tiempos de desarrollo e implementación.
A continuación listamos las funciones de las rutinas que forman la capa de aplicaciones:
Rutina principal del menú Rutina Boton1 Rutinas de Menús Rutinas de TEST para el testeo de : Secuencia de LEDS Secuencia de Displays p y de 7 segmentos g Testeo de la operación del PWM Testeo de del Timer 1 Testeo del ADC canal 3 y canal 4
MCE Starter KIT STUDENT v3.00 - SOFT.
5
mc electronics
Variables de Sistema: Para poder trabajar el RTOS_PIC16V1.04 utiliza una serie de variables a las cuales denominamos genéricamente variables del sistema: w_temp: Esta variable es usada para almacenar el valor del registro W en las interrupciones. Pertenece al grupo de variable denominadas “salvado del contexto” status_temp: p Esta variable es usada p para almacenar el registro g STATUS en la operación p de salvado de contexto, como en el caso anterior. pclath_temp: Esta variable salva el valor del PCLATH en la operación de salvado del contexto durante la interrupción CONT1, CONT2, CONT3: son usadas para contar dentro de los delays, son precargados con un valor el cual determina el tiempo del delay. CONT: es usada como contador general PUNTERO: esta variable es usada para apuntar al caracter en las tablas de mensaje con el cual debe volver de las mismas. CHAR: esta variable almacena el carácter que se envía al LCD o la UART cuando se retorna de la tabla de mensajes . PUNTERO_TEMP: almacena el valor temporalmente del PUNTERO ADC5 y ADC3: almacenan el valor del canal 4 y canal 5 del ADC, una vez realizada la conversión de analógico a digital. UNIDAD, DECENA y CENTENA: UNIDAD CENTENA almacenan l ell resultado l d d de lla conversión ió d de fformato bi binario i a BCD. En cada una se guarda el número decimal resultado del proceso de conversión. UNIDAD_ASCII, DECENA_ASCII y CENTENA_ASCII: almacenan el resultado de la conversión de formato BCD a ASCII. En cada una se guarda un dígito ASCII. MENU: almacena el número del menú seleccionado en la rutina principal. CTH y CTL se almacenan el valor del período del PWM para cargar al mismo en la rutina de testeo correspondiente
MCE Starter KIT STUDENT v3.00 - SOFT.
6
mc electronics
Rutinas del BIOS CONVER_BINBCD: Esta rutina convierte un valor binario de 8 bits a BCD no empaquetado. El valor a convertir debe estar almacenado en W antes de llamar a la subrutina, el resultado de la conversión son 3 bytes que se almacenan en los registros UNIDAD, DECENA y CENTENA. Esta rutina debe ser usada para convertir cualquier valor binario de 8 bits para mostrarlo en un display, en este caso si se trata de un LCD inteligente, debe completarse con la rutina CONVER ASCII CONVER_ASCII. Ejemplo: movlw call
‘A’ CONVER_BINBCD
LEER_ADC_CHN:Esta rutina se encarga de activar el conversor ADC, y genera un resultado el cual retorna dentro del registro W W. El valor que retorna es en 8 bits bits, ya que solo se lee la parte mas alta del registro de resultado, ajustado sobre la izquierda, perdiendo los dos bits de menos peso. Esta rutina funciona de forma complementaria con la rutina LEER_ADC que se encuentra en la capa de aplicaciones. Para convocar esta rutina, usted debe seleccionar el canal a leer y luego debe convocar a esta rutina, antes de realizar la llamada debe esperar unos milisegundos llamando a la subrutina DLY5MS. Ejemplo: movlw b’1001000’ movwf ADCON0 call DLY5MS call LEER_ADC_CHN CONVER_ASCII: Esta rutina simplemente convierte un valor binario en formato BCD a otro ASCII. El valor a convertir debe estar almacenado en los registros UNIDAD, DECENA y CENTENA. La rutina una vez ejecutada almacena el resultado de la conversión en 3 registros: UNIDAD_ASCII, DECENA_ASCII y CENTENA_ASCII.Esta rutina es complementaria de CONVER_BINBCD, y por lo general se ejecuta luego de esta para generar un valor numérico imprimible en una terminal o en display LCD inteligente. Ejemplo: movf call call
MCE Starter KIT STUDENT v3.00 - SOFT.
CONT,W , CONVER_BINBCD CONVER_ASCII
7
mc electronics
CLEAR_LCD: CLEAR LCD: Esta rutina al ejecutarse limpia la pantalla del display, no devuelve ningun valor. La rutina es útil cuando se quiere, por ejemplo en un menú, crear una nueva pantalla, limpiando entonces el contenido de la anterior. En este caso recomendamos que la rutina de CLEAR_LCD quede fuera del loop sobre todo si la pantalla tiene contenidos que se refrescan, ya que sino generará una efecto parpadeo. Ejemplo: loop
call call goto
CLEAR_LCD MUESTRA_TEMP loop
INICIALIZACION: Esta rutina configura el hardware del microcontrolador. SCAN_MNSJ:Esta rutina lee un mensaje desde una tabla y lo envía al LCD y a la USART. Para utilizarla en la variable PUNTERO debe cargarse el N° del primer carácter del mensaje donde comienza la tabla de caracteres, que en el programa se denomina TABLA1. El mensaje debe terminar con el carácter $, y el mensaje debe encontrarse entre comillas. Para escribir el mensaje en la tabla debe comenzar el mensaje con la directiva DT, un ejemplo aclarará este concepto:
TABLA1
ADDWF DT DT
PCL,W “ MCELECTRONICS$” “ 2008 $”
En el ejemplo propuesto TABLA1 contiene los mensajes, observe las directivas DT que anteceden al mensaje. Si los mensajes tienen la misma dimensión, no se hace necesario el borrado de pantalla, ya que uno pisa al otro, de esta forma se evita el efecto parpadeo, el cual se produce cuando l mensajes los j poseen llongitud i d variable, i bl por ello ll recomendamos d que sii lla pantalla ll tiene i una serie de campos que deben ser refrescados continuamente, dichos campos posean la misma longitud.
MCE Starter KIT STUDENT v3.00 - SOFT.
8
mc electronics Un ejemplo final aclara el uso de la rutina:
TABLA1
ADDWF DT DT DT
PCL,W “ANDRES$” “RAUL$” “BRUNO$”
MOVLW MOVWF CALL MOVLW MOVWF CALL
.0 PUNTERO SCAN_MNSJ .12 PUNTERO SCAN_MNSJ
;cabecera: ;0 ;7 ;12
En el ejemplo observe que cargamos en el PUNTERO el valor 0 y luego invocamos la rutina SCAN_MNSJ, la cual barre el mensaje que comienza en la posición 0 y escribe “ANDRES” en el LCD y la USART, luego hace lo mismo pero con el mensaje que comienza en 12, escribiendo ahora “BRUNO”. envía: Esta subrutina se encarga de transmitir por la USART un carácter colocado en la variable CHAR. Esta rutina es usada en por la rutina SCAN_MNSJ para envío del mensaje por la USART. INIDISPLAY: Esta subrutina inicializa el modo de operación del LCD de la placa StarterKit1 para que opere con una interfaz de 8 bits, en modo autoincremento con cursor y carácter 5x7 dots. CTRL_DISP: Apaga el cursor del LCD DLY100US: Es una rutina de tiempo de un solo bucle, usada para pequeñas temporizaciones. DLY5MS: Esta otra rutina es de 2 bucles de tiempo, el valor de los bucles debe cargarse en CONT1 y CONT2 LONG_DLY: En este caso esta es otra rutina de delay pero de 3 bucles que puede llegar a unos 500 ms de retardo.
MCE Starter KIT STUDENT v3.00 - SOFT.
9
mc electronics
Delays En las rutinas de DELAY puede alterarse el tiempo de la rutina modificando el valor de cada variable usada como contadora (CONT1, CONT2 o CONT3) según las siguiente ecuación: 1 ciclo: 2 ciclos:
T=[((3*X)+5)*(4/fosc)] T={[(Y*((3*X)+4))+7]*(4/fosc)}
Donde X e Y son las variables con que se cargan los contadores. DATO: Esta rutina se encarga de enviar un carácter imprimible al LCD, el caracter que se desea imprimir en el display debe ser cargado en W antes de llamar a la subrutina. Ejemplo: MOVLW CALL
‘A’ DATO
Escribe en el display, a partir de la posición actual del cursor la letra “A” COMANDO: Esta rutina se encarga de enviar un comando no imprimible al display, como un comando de posicionamiento; el comando debe cargarse en W antes de llamar a la subrutina. Ejemplo: MOVLW CALL
0XC1 COMANDO
Posiciona el cursor en la posición 01 de la segunda línea del display. Nota: La primer línea del display inicia en 0x80, mientras que la segunda línea inicia en 0xC0.
MCE Starter KIT STUDENT v3.00 - SOFT.
10
mc electronics
Rutinas de Aplicación SCAN_MENU: Es la rutina principal, el cuerpo principal del programa desde el cual se invocan todas las demás subrutinas del programa. Esta rutina llama la subrutina BOTON1 para saber cual es el número de menú seleccionado. La rutina compara el número de menú retornado por la rutina BOTON1 , invocando a la subrutina MENSAJE correspondiente al menú elegido y luego invoca la subrutina TESTX según g corresponda p cuando se detecta q que se ha p pulsado el Tactswitch conectado a RA0. BOTON1:Esta rutina lee el tactswitch conectado en el PORTA, bit RA2 como un pulsador, incrementado un contador que se denomina MENU. Esto permite seleccionar un numero de menú. La rutina retorna con el número de menú seleccionado dentro de la variable menú. Cada vez que se invoca a esta rutina la misma explora al pulsador, si este no esta pulsado retorna al programa sin modificar el estado que tenía MENU. Si al invocar la subrutina, el pulsador esta accionado, incrementa MENU y retorna cuando se deja de acciona el pulsador. La rutina contempla el delay antirrebotes. Esta subrutina es invocada por la rutina principal para seleccionar el menú MENSAJEX: Imprime un mensaje en el LCD y al mismo tiempo en la USART. Cada subrutina MENSAJEX (X es un número de 1 a 11)envía un comando de posicionamiento al display y genera el despliegue del mensaje correspondiente cargando el PUNTERO e invocando a las subrutinas SCAN_MNSJ y TX_DATA TESTX: Ejecuta una demostración distinta, en el programa hemos incluido 5 demostraciones (5 rutinas TEST) que permiten ver en funcionamiento, una secuencia de leds sobre el PORTB (TEST1), una secuencia de números sobre el display de 7 segmentos que van desde 0 a F (TEST2), manejar el PWM desde el pulsador RA1 y RA2 (TEST3), leer el conversor ADC canales 3 y 4 (TEST4), funcionamiento del Timer 1 disparado desde el exterior por medio de un NE555 d de ffrecuencia i variable i bl (TEST5) (TEST5). LEER_ADC: Esta subrutina lee el conversor ADC, usa los canales 3 y 4, devolviendo el valor digital de los mismos en 8 bits en los registros ADC3 y ADC5. Si bien el conversor integrado es de 10 bits, esta rutina utiliza al conersor como si fuera un conversor de 8 bits.
MCE Starter KIT STUDENT v3.00 - SOFT.
11
mc electronics
Firmware en C para PIC18F4620 //Curso de "C18" //Hardware de MCELECTRONICS /*El software controla los siguientes dispositivos:LCD, ADC, Int por TMR1, enciende Leds del PORTB, Pulsadores,PWM y el RS232 *// /* Incluimos a continuación los distíntos archivos de librerías */ #include <P18F4620.h> //Libreria donde estan definidos los SFRs, memoria,etc// #include <adc.h> //Librería del ADC #include <stdio.h> //Librería del StandarI/O #include <usart.h> //Librería de USART #include <delays.h> //Librería de Retardos #include <ftoa.h> //Librería para convertir de Float a ASCII #include <terminal.h>//Librería para controlar el Hyperterminal (protocolo) #include <LCD.h> //Libreria de LCD inteligente #include <timers.h> //Libreria de los Timers #include <pwm.h> //Libreria del PWM
#define Up_pwm PORTAbits.RA0 // buffer de impresion de variables char buffvar [20], buffvar1 [20],buffvar2 [20], buffvar3 [10], buffvar4 [10], buffvar5 [10],buffer[20], bufferf[20]; int var, var1,var2, var3,duty,duty2,x; float real; // definición de funciones void id InterruptHandlerHigh();// I H dl Hi h() // manejo j d de iinterrupciones i void muestra_duty(void);//muestreo del duty cicle del PWM
MCE Starter KIT STUDENT v3.00 - SOFT.
12
mc electronics
Firmware en C para PIC18F4620 //Rutina Principal void main(void) { //Definicion de Puertos PORTA=0; // Para usar los Pulsadore RA0/RA2, / , AN3 y AN4 DDRA=63; //PORTA 0 a 5 como entradas PORTA=0; PORTB=0; DDRB=0; //PORTB como salidas PORTB=0; PORTC=0; DDRC=0; //PORTC como salidas PORTC=0; PORTD=0; DDRD=0; //PORTB como salidas PORTD=0; PORTE=0; DDRE=0; //PORTB como salidas PORTE=0; //Configuracion de Canales AD ADCON1=0x0A;//RA0 a RA4 Como ADC // Llamado a subfunci贸n del timer para su configuraci贸n OpenTimer0( TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_4 ); INTCON2bi TMR0IP = 1; INTCON2bits.TMR0IP 1 // Timer0 Ti 0 en alta l Prioridad P i id d RCONbits.IPEN = 1; // Enable nivel de Prioridad INTCONbits.GIEH = 1; // Enable Interrupciones // Llamado a subfunci贸n del PWM para su configuraci贸n OpenPWM1(100);// Establecemos la frecuencia de trabajo OpenTimer2(TIMER INT OFF & T2 OpenTimer2(TIMER_INT_OFF T2_PS_1_16 PS 1 16 & T2 T2_POST_1_16); POST 1 16) OpenPWM2(100);// Establecemos la frecuencia de trabajo
MCE Starter KIT STUDENT v3.00 - SOFT.
13
mc electronics
Firmware en C para PIC18F4620 // Configurando la AUSART OpenUSART( USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH,26); //38400 // Configurando g el ADC OpenADC(ADC_FOSC_2 & ADC_RIGHT_JUST & ADC_2_TAD , ADC_CH3 & ADC_CH4 & ADC_INT_OFF,11); ADCON1=0x0A;
Prรกcticas completas en el DVD. www.mcelectronics.com.ar/stdv3 l t i / td 3
MCE Starter KIT STUDENT v3.00 - SOFT.
mc electronics
14
mc electronics
Restaurar el Firmware En caso de necesitar restablecer la placa a su estado original de fábrica dispone del firmware compilado para cada microcontrolador: PIC16F887: D:\firmware\mce_16F887.hex PIC18F4620: D:\firmware\mce_18F4620.hex Donde “D” es la letra de su unidad de DVD.
MCE Starter KIT STUDENT v3.00 - SOFT.
15
mc electronics
速
Impreso en papel reciclado. Buenos Aires - Argentina Febrero 2009 MCE Starter KIT STUDENT v3.00 Manual REV: 220409
Austria 1760 - OF 8 Ciudad de Buenos Aires (1425). BA. Argentina. (011) 6091-4922/4581 www.mcelectronics.com.ar info@mcelectronics.com.ar
Impreso MCE220409
MCE Starter KIT STUDENT v3.00 - SOFT.
16