Documentos de Académico
Documentos de Profesional
Documentos de Cultura
10 Total
UNIDAD Nº3
2. Objetivos:
3. Materiales
4. Procedimiento
En base al Pic 16F877A, diseñar un voltímetro digital, en donde la variación de tensión que ingresa
por el canal 0, se podrá observar en un LCD con dos décimas de resolución. Adicionalmente el
voltímetro digital funcionará un minuto cada vez que se ha presionado la tecla inicio.
El voltímetro digital requiere de dos funciones ingresadas por teclado, que podrán ser ejecutadas en
cualquier momento:
5. Contenido
a. Comunicación Serial
La comunicación serial sólo utiliza tres líneas, una para recibir los datos Rx, otra para
trasmitir los datos Tx y la línea común GND. En nuestro caso específico para el PIC 16F887
las lineas TX y RX corresponden a los pines 25 y 26 (Puerto RC6 y RC7 respectivamente)
como puede ser observado en la siguiente figura. Para cualquier otro PIC, solo basta con
buscar donde están ubicados estos pines con ayuda del datasheet.
En esta comunicación además de una línea sobre la que se transfieren los datos, se necesita
otra que contenga pulsos de reloj que indiquen que el dato es válido; la duración del bit está
determinada por la duración del pulso de sincronismo.
En esta comunicación los pulsos de reloj no son necesarios y se utilizan otros mecanismos
para realizar la transferencia de datos. La duración de cada bit está determinada por la
velocidad con la cual se realiza la trasferencia de datos, por ejemplo si se transmite a 1200
bits por segundo (baudios), la duración de cada bit es de 833 microsegundos. Las velocidades
de transmisión más comunes son 300, 600,1200, 2400, 9600, 14400 y 28800 baudios.
Y para lograr dicha comunicación con nuestro computador, es necesario utilizar un circuito
integrado adicional llamado MAX232. El MAX232 es un circuito integrado de Maxim que
convierte las señales de un puerto serie RS-232 a señales compatibles con los niveles TTL de
circuitos lógicos. El MAX232 sirve como interfaz de transmisión y recepción para las señales
RX, TX, CTS y RTS.
Figura 2. Diagrama de conexión del MAX 232 con el cable serial DB9
b. MODULO PL203
Este módulo convierte un puerto USB en un puerto serial, con niveles de voltaje TTL
compatibles con la mayoría de tarjetas microcontroladoras como es Arduino/Pic , salidas de
voltaje reguladas de ,posee leds indicadores de transmisión y recepción de datos, trabaja con
Windows 7,Windows 8,Visua XP,Linux.
c. LM35
El LM35 es un sensor que puede medir temperatura. Su salida es analógica, es decir, entrega
un voltaje proporcional a la temperatura. El sensor tiene un rango desde −55°C a 150°C. Dado
que el sensor LM35 es analógico, basta con medir con un multímetro, el voltaje a salida del
sensor. Para convertir el voltaje a la temperatura, el LM35 proporciona 10mV por cada grado
centígrado. También cabe señalar que ese sensor se puede usar sin offset, es decir que si
medimos 20mV a la salida, estaremos midiendo 2°C.
Explicación de Pines
El sensor presenta 3 pines de conexión, de izquierda a derecha tenemos el pin de alimentación
+Vs, el pin Vout, y el pin de tierra GND (Figura 2).
d. TIMER 0
El Timer 0 también llamado RTCC se puede cargar con un valor cualquiera entre 0 y 255 y
puede ser incrementado a través del Reloj interno y dividido por un valor que se puede
escoger entre los que se indican a continuación (Valor de Preescaler):
La interrupción RTCC se produce cada vez que el contador TIMER0 pasa de 255 para 0.
Para entender el funcionamiento del Timer 0, como ejemplo se supone que se
necesita generar una interrupción cada 20 ms. (20.000 microsegundos).
La fórmula para aplicar es la siguiente recordando que primero debemos pasar el tiempo de
temporización a segundos es:
La interrupción solo se genera cuando el timer pasa de 255 a 0, esto quiere decir que
debemos restarle al valor total del timer (256) el valor de carga inicial que tenga el Timer 0.
Timer 0 puede ser dividido (preescaler) por un valor aplicando alguna de las instrucciones
citadas al comienzo del post. Al seleccionar el preescaler o división, se debemos tratar de
obtener un valor entero al dividir el tiempo del retardo sobre el preescaler. Este valor no
puede ser mayor a 256. En caso de ser mayor, significa que antes de cumplir el retardo el
microcontrolador habrá generado más de una interrupción.
e. INTERRUPCIONES
Con las interrupciones en un microcontrolador vamos a poder hacer que el dispositivo pare
de repente la tarea que está realizando para que haga o realice una función con urgencia y
después continúe haciendo su rutina habitual.
Las interrupciones PIC ocurren por sucesos externos como la generación de una interrupción
por flanco PIC, una interrupción externa PIC cambiando el nivel en un PIN del
microcontrolador o eventos internos tales como el desbordamiento de un contador,
terminación del conversor análogo a digital, entre otras.
Figura6.iNTERRUPCIONES
a. Diagrama de bloques1
SALIDAS
ENTRADAS PORTC
Representación en
PORTD decimal en forma
el LCD de 16x2
Teclado
matricial 4x4 8
uC
6
Microcontrolador
CPU
PORTA 16F877A TX y RX
Sensor LM35
PORTB
6
1
PORTB
INDICADOR
LED
5.3. Valor de los registros de configuración
Tabla5.-Configuración de registros
VARIABLE DESCRIPCIÓN
PORTD Puerto Declarado para el teclado matricial 4x4
Tabla6.-Configuración de puertos
char tecla(void)
{
char c; //Variable para la lectura del teclado
do{
c=kbd_getc(); //Toma el valor del teclado
}
while(c=='\0'); //Espera a que presione una tecla
return(c);
}
//INTERRUPCIONES---------------------------------------------------------------------------
#INT_RDA
void interrupcion_Recepcio(){
int recibo; //Guarda el dato recibido
recibo=getc(); //Guarda el valor
}
int comprobar=0; //Inicializa el valor
#int_ext
void interrupcion(){
lcd_putc("\f"); //Limpia el LCD
output_low(pin_b2); //Pone en bajo RB2
output_low(pin_b4); //Pone en balo RB4
delay_us(500); //Tiempo de espera
do{
}
/*------------------------------FUNCION PRINCIPAL---------------------------*/
void main(){
setup_adc_ports(NO_ANALOGS); //Configura puertos analogos
setup_adc(ADC_OFF); //Deshabilita la conversion
setup_psp(PSP_DISABLED); //
setup_spi(FALSE); //
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); //Configura el contador del timer
setup_timer_1(T1_DISABLED); //Deshailita el timer1
setup_timer_2(T2_DISABLED,0,1); //Deshabilita el timer2
setup_comparator(NC_NC_NC_NC); //Activa el comparador
setup_vref(FALSE); //No indica voltaje d referencia
set_tris_a(0xff); // comprobar puertos
enable_interrupts(global); //Habilita las iterrupciones
enable_interrupts(int_RDA); //Habilita las interrupcion RDA
char x; //Guarda el caracter presionado
char p; //Guarda el caracter presionado
char uni; //Guarda las unidades
char dece; //Guarda las decenas
lcd_init(); //inicio lcd
Kbd_init(); //inico teclado
etiqueta:
enable_interrupts(int_ext); //Deshabilita las interrupciones externas
EXT_INT_EDGE(H_to_L); //Indica cambio por flanco descendente
Figura8.-Interfaz en Java
5.7.Simulación
Figura8.-Simulación
6. Conclusiones
Para efectuar la conversión AD se requiere de al menos 1.6 μs, por ende es necesario
considerar en el modo de conversión un tiempo mayor al establecido para realizar la
conversión. Al emplear un oscilador de 4 Mhz fue necesario utilizar el oscilador RC
interno para frecuencias mayores a 1 Mhz el cual tiene un reloj de 4 μs permitiendo
realizar sin problema la conversión AD empleando la instrucción
setup_adc(adc_clock_internal).
Para poder efectuar la comunicación es necesario validad el envio y recepción de la
misma.
Las interrupciones #int_rb y #int_ext permiten configurar las interrupciones externas
del microcontrolador de acuerdo a las teclas del teclado matricial, además permite
controlar la activación del pin digital como el envío de datos por comunicación serial,
es necesario habilitar las resistencias pull up del puerto B para su correcto
funcionamiento.
Para la utilización del LCD se debe considerar que por defecto se encuentra
configurada para ser utilizada en el puerto D, además se debe definir que pines del
microcontrolador estarán conectados a la misma.
Se debe instalar todos los driver para la lectura del puerto serial, como la instalación
de librerías en NetBeans para la lectura de los datos con el pic.
7. Referencias