TEORIA COBRE COMUNICACIÓN DE LA PC AL MICROCONTROLADOR
La forma más común y sencilla de comunicar cualquier dispositivo con un ordenador es através de si puerto serie, que es compatible con el denominado estándar RS232 (EIA232 standard). En un ordenador puede haber varios puertos series, normalmente denominados COM1, COM2, etc.
Los puertos series son accesibles medinte conectores. La norma RS232 establece 2 tipos de conectores llamados DB-25 (de 25 pines) y DB-9 (9 pines), machos y hembras. Cada una de las patillas del conector RS232 tiene una función especificada por la norma. Hay unos terminales por los que recibe y transmite datos y otros que controlan el establecimiento, flujo y cierre de la comunicación.
Hay circuitos que permiten la conversión entre niveles TTL y niveles RS232. El MAX232 convierte los niveles RS232 (cerca de +12 y -12 V) a voltajes TTL (0 a +5V) y viceversa sin requerir nada más que una fuente de +5V. El chip contiene dos drivers TTL a RS232 y dos RS232 a TTL. Necesita cuatro capacitores externos de unos pocos microfaradios para generar el voltaje RS232 internamente.
Estos son los únicos pines que se necesitan para que pueda comunicarse el pic con la computadora.
- El pin 3 es para la línea de transmisión TxD, transmite información con niveles RS232, por tanto se conecta al pin de R1IN del MAX232 para convertir estos niveles a TTL y transmitírselos al PIC16F84A a través de la patilla R1OUT.
- El pin 2 es la línea de recepción RxD, por donde envía la información el PIC16F84A con niveles TTL entra en la línea T1IN del MAX232 para convertirla en niveles RS232 y poder ser recibida por el puerto serie RS232.
- El pin 5 es de masa/tierra (SG)
Para el control de la comunicación del ordenador con el microcontrolador es necesario el siguiente software:
- Unas subrutinas que gestionen el software del microcontrolador, como las utilizadas en la librería RS232.INC
- Un programa para el ordenador que gestione el control del sistema, tal como Hyperterminal de Windows o similar.
Les dejo el que yo utilizo y funciona muy bien en cualquier Windows.
DESCRIPCIÓN:
En el LCD se
visualizarán los caracteres que se escriban en el teclado de la computadora.
Cuando llegue al límite de los 16 caracteres que se puedan ver en la primera
línea, se cambiará a la segunda línea y cuando termine los 16 de esa línea,
estos últimos caracteres se pasaran a la primera línea y continuará escribiendo
en la segunda línea y así sucesivamente.
CIRCUITO:
Este es el
circuito utilizado para esta práctica. Se tiene a PORTA como salida y entrada
de la comunicación con el ordenador; y a PORTB como salida.
El PORTA es
para las salidas que están conectados hacia el LCD: el pin RS con el pin RA0 y
el pin RA2 con el pin E del LCD. El pin R/W del LCD puede ir conectado a tierra
o al pin RA1 del micro controlador, siempre y cuando este mandando un 0 a R/W. Los
pines RA3 y RA4, son entradas del circuito integrado MAX232, uno se comporta
como transmisor y el otro como receptor, respectivamente.
En el PORTB se
utiliza la parte alta del registro como salidas para el LCD. Van del RB4:RB7 y
del LCD D4:D7. Se activan las resistencias pull-up.
En los pines
15 y 16 del micro controlador, irá el oscilador de cuarzo de 4 MHz conectado en
paralelo. Se conectará un capacitor de 22pF a cada pin del oscilador y
conectados a tierra. El MCRL estará conectado sólo a voltaje. El MCLR se puede
conectar solo a voltaje.
Los pines 15 y
16 del LCD, irán a voltaje por medio de una resistencia de 330 ohms y a tierra,
respectivamente.
El circuito
integrado que conecta la comunicación de la PC con el microcontrolador es el
MAX232. Los pines 14 y 13, son el transmisor de salida y el receptor de
entrada. Los pines 11 y 12 son los pines del transmisor de entrada y el
receptor de salida. Los pines restantes son conectados a capacitores de 1uF.
MATERIAL:
-Microcontrolador PIC16F84A
-1 LCD 16x2
-1 cable RS232
-Computadora
-Transceptor MAX232
-4 resistencias de 330 ohms
-Cristal de cuarzo de 4 MHz
-2 capacitores de 22 pF
-4 capacitores de 1uF
-1 capacitor de 100nF
-Alambres
-Protoboard
-Fuente y sus cables
CODIGO DEL PROGRAMA:
;MPLABX*************************************************************************
LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
CBLOCK 0x0C
Contador ;cuenta los caracteres
Tecla ;guarda lo que se ha pulsado
Contador_ram ;contador para mostrar los
numeros/caracteres
ENDC
; ZONA DE CÓDIGOS
*************************************************************
ORG 0
goto
Inicio
;INICIO-------------------------------------------------------------------------
Inicio
call LCD_Inicializa ;Inicializa el LCD
call
RS232_Inicializa ;Inicializa comunicacion con el puerto
movlw
PrimeraDir ;Mueve la primera direccion
disponible
movwf
FSR ;de la ram
;CODIGO-PRINCIPAL--------------------------------------------------------------
Main
call RS232_LeeDato ; Espera recibir
un carácter.
movwf Tecla ; Guarda el dato recibido.
call LCD_Caracter ; Lo
visualiza.
movf Tecla,W ; Y ahora lo reenvía otra vez al
ordenador.
call RS232_EnviaDato
incf
Contador,F ;Incrementa el contador
movf
Contador,W ;lo lee W
sublw
.16 ;lo resta para saber si llego al
max.
btfss
STATUS,C ;evalua si es un numero neg.
call
Linea2 ;pasa a la segunda linea
MoverLinea
movf
Contador,W ;Lee Contador
sublw
.32 ;Resta para saber si cubrio las
2 lineas
btfss
STATUS,C ;Evalua
call
A_linea1 ;Mueve lo que está en la linea 2 a la 1
goto
Main
;SUBRUTINAS--------------------------------------------------------------------
A_linea1
movlw
PrimeraDir ;mueve de nueva la primera dir. disponible
movwf
FSR
call
LCD_Linea1 ;Pone el cursor en la linea 1
movlw
.17 ;max. de caracteres
por linea
movwf
Contador ;lo pone en el contador, para que no
sobreescriba
movlw
.16
movwf
Contador_ram ;num. max. de caracteres que la ram
guardara
Ciclo
movf
INDF,W ;Lee
el contendo que esta en la direccion de FSR
call
LCD_Caracter ;evaluando
si se activo para mostrar este carac-
incf
FSR,F ;incrementa
la direccion
decfsz
Contador_ram,F ;Decrementa
el no. de direcciones (16)
goto
Ciclo ;Hasta
que termine de mostrar los 16 caracteres
movlw
PrimeraDir ;Termina
de mostrar, y lee de nuevo la 1ra dir.
movwf
FSR
call
LCD_Linea2 ;Llama
a la segunda linea
call
LCD_LineaEnBlanco ;limpia
la linea
call
LCD_Linea2 ;Vuelve
a llamar a la linea
return
Linea2 ;Se
encarga de ir guardando los caracteres una
movf
Contador,W ;vez
que ya se encuentra el cursor en la segunda
sublw
.17 ;linea. Evalua si lla llego al max. de los
carac-
btfsc
STATUS,Z ;teres
en la segunda linea
call
LCD_Linea2 ;se
coloca en la linea 2
movf
Tecla,W ;lee
lo que hay en Tecla
movwf
INDF ;lo guarda en el registro INDF que esta en
cierta
incf
FSR,F ;direccion
de FSR. Se mueve a la siguiente
return ;direccion
;LIBRERIAS----------------------------------------------------------------------
INCLUDE <RS232.INC> ; Subrutinas de control del teclado.
INCLUDE
<LCD_4BIT.INC>
INCLUDE <RETARDOS.INC>
CBLOCK
PrimeraDir ;La primera
direccion disponible para llenar
ENDC
END
CONCLUSIÓN:
Como en la práctica anterior se había analizado un
problema similar al de esta práctica (el cambio de renglón automático) fue
mucho más fácil desarrollar esta vez el código. Se reafirmaron los
conocimientos sobre usar la memoria RAM del microcontrolador.