Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programacion de Microcontroladores Pic - Nivel Ii - Sesion8
Programacion de Microcontroladores Pic - Nivel Ii - Sesion8
MICROCONTROLADORES PIC
NIVEL II
TRASMISION SERIE
El PIC16F877 contiene un modulo MSSP con dos puertas para
la comunicación serie:
SSP: Puerto serie síncrono, se utiliza en la comunicación de
otros microcontroladores o con periféricos. Posee dos
interfaces de trabajo:
SPI : Interfaz serie de Periféricos, desarrollada por la Motorola para la
comunicación entre microcontroladores de la misma o diferente
familia, en modo maestro-esclavo, Full – dúplex.
I2C: Interfaz inter circuitos, desarrollada por la Phillips con una gran
capacidad para comunicar microcontroladores y periféricos, Half-
dúplex.
Interfaz de comunicación serie (SCI) o receptor trasmisor
serie síncrono - asíncrono universal (USART), permite la
comunicación con un ordenador trabajando full-dúplex o half-
dúplex.
TRASMISION SERIE
USART
REGISTROS DE TRABAJO
TRASMISION SERIE
USART REGISTROS DE TRABAJO
SPBRG
Para generar esta frecuencia el USART dispone de un
generador de frecuencia en baudios, BRG, cuyo valor es
controlado por el contenido grabado en el registro SPBRG
(X). En modo asíncrono:
En modo síncrono:
TRASMISION SERIE
USART EN CCS
DIRECTIVAS
#USE RS232 (BAUD=baudios, XMIT=pin, RCV=pin...)
Esta directiva le dice al compilador la velocidad en
baudios y los pines utilizados para la I/O serie. Esta
directiva tiene efecto hasta que se encuentra otra
directiva RS232. La directiva #USE DELAY debe
aparecer antes de utilizar #USE RS232. Esta directiva
habilita el uso de funciones tales como GETCH,
PUTCHAR y PRINTF. Si la I/O no es estándar es preciso
poner las directivas FIXED_IO o FAST_IO delante de
#USE RS232.
TRASMISION SERIE
USART EN CCS
DIRECTIVAS
#USE RS232 (BAUD=baudios, XMIT=pin, RCV=pin...)
Opciones:
TRASMISION SERIE
USART EN CCS
DIRECTIVAS
#USE RS232 (BAUD=baudios, XMIT=pin, RCV=pin...)
Opciones:
TRASMISION SERIE
USART EN CCS
DIRECTIVAS
#USE RS232 (BAUD=baudios, XMIT=pin, RCV=pin...)
Opciones:
TRASMISION SERIE
USART EN CCS
FUNCIONES
Setup_uart(baud)
Baud es una constante que define la velocidad. Un 1
enciende el USART y con 0 lo apaga. Con cualquier valor
de velocidad, el USART se enciende.
set_uart_speed(baud)
Esta función cambia la velocidad de transmisión de la
UART (Universal Asynchronous Receiver Transmitter) en
tiempo de ejecución.
TRASMISION SERIE
USART EN CCS
FUNCIONES TRASMISION DE DATOS
putc(cdata)
putchar(cdata)
cdata: carácter.
Estas funciones envían un carácter a la patilla XMIT del dispositivo
RS232. Es preciso utilizar la directiva #USE RS232 antes de la
llamada a esta función para que el compilador pueda determinar la
velocidad de transmisión y la patilla utilizada.
puts(string)
Esta función envía cada carácter de string a la patilla XMIT del
dispositivo RS232. Una vez concluido el envío de todos los
caracteres la función envía un retorno de carro CR o RETURN
(ASCII 13) y un avance de línea LF o LINE-FEED (ASCII 10).
TRASMISION SERIE
USART EN CCS
FUNCIONES TRASMISION DE DATOS
printf([function], string, [values])
La función de impresión formateada PRINTF saca una cadena de
caracteres al estándar serie RS-232 o a una función especificada. El
formato está relacionado con el argumento que ponemos dentro de
la cadena (string). Cuando se usan variables, string debe ser una
constante. El carácter % se pone dentro de string para indicar un
valor variable, seguido de uno o más caracteres que dan formato al
tipo de información a representar. Si ponemos %% obtenemos a la
salida un solo %. El formato tiene la forma genérica %wt, donde w es
optativo y puede ser 1,2,...,9. Esto es para especificar cuántos
carácteres son representados; si elegimos el formato 01,...,09
indicamos ceros a la izquierda, o también 1.1 a 9.9 para
representación en punto flotante. t es el tipo de formato y puede
ser uno de los siguientes:
TRASMISION SERIE
USART EN CCS
FUNCIONES TRASMISION DE DATOS
TRASMISION SERIE
USART EN CCS
FUNCIONES RECEPCION DE DATOS
c = getc()
c = getch()
c = getchar()
Estas funciones esperan un carácter por la patilla RCV del
dispositivo RS232 y retorna el carácter recibido. Es preciso
utilizar la directiva #USE RS232 antes de la llamada a esta
función para que el compilador pueda determinar la velocidad
de transmisión y la patilla utilizada. La directiva #USE RS232
permanece efectiva hasta que se encuentre otra que anule la
anterior. Los procedimientos de I/O serie exigen incluir #USE
DELAY para ayudar a sincronizar de forma correcta la
velocidad de transmisión. Recordad que es necesario adaptar
los niveles de voltaje antes de conectar el PIC a un dispositivo
RS-232.
TRASMISION SERIE
USART EN CCS
FUNCIONES RECEPCION DE DATOS
gets(char *string)
Esta función lee caracteres (usando GETC()) de la cadena
(string) hasta que encuentra un retorno de carro(valor ASCII
13). La cadena se termina con un 0.
kbhit()
Esta función devuelve TRUE si el bit que se está enviando al pin
RCV de un dispositivo RS232, es el bit de inicio de un carácter.
Es preciso utilizar la directiva #USE RS232 antes de la llamada
a esta función para que el compilador pueda determinar la
velocidad en baudios y la patilla utilizada. La directiva #USE
RS232 permanece efectiva hasta que se encuentre otra que
anule la anterior.
TRASMISION SERIE
USART EN CCS
1. Enviar los datos del 0 al 10, en modo asíncrono, entre
dos PIC. Visualizar con un LCD los datos enviados y los
datos recibidos; la recepción del dato deberá ser por
interrupción del USART.
MOSTRAR LCD
MOSTRAR LCD Fin_int
RETARDO
TRASMISION SERIE
USART EN CCS
2. Enviar los datos de una conversión AD al puerto serie
de un PC. inicio
Configurar CAD
RS232
TIEMPO
LEER
CONVERSION MOSTRAR LCD
ENVIAR
VALOR SERIAL RETARDO
TRASMISION SERIE
USART EN CCS
3. Enviar dato desde la PC al PIC por el puerto serie.
Cuando lo reciba debe visualizarse en un LCD y enviar
la palabra “recibido” al PC. Emplear Interrupciones
inicio SERV_INT_RDA
Habilitar ENVIAR
Interrupción “Recibido” SERIAL
I2C
Las dos primeras líneas son drenador abierto, por lo que necesitan
resistencias de pull-up.
Los dispositivos conectados al bus I²C tienen una dirección única
para cada uno. También pueden ser maestros o esclavos. El dispositivo
maestro inicia la transferencia de datos y además genera la señal de
reloj, pero no es necesario que el maestro sea siempre el mismo
dispositivo, esta característica se la pueden ir pasando los
dispositivos que tengan esa capacidad. Esta característica hace que al
bus I²C se le denomine bus multimaestro.
TRASMISION SERIE
I2C
REGISTROS DE TRABAJO
SSPCON
SSPCON2
TRASMISION SERIE
I2C
REGISTROS DE TRABAJO
SSPSTAT
TRASMISION SERIE
I2C EN CCS
DIRECTIVAS
#USE I2C (master/slave, SDA=Pin, SCL=Pin opciones)
La librería I2C contiene funciones para implementar un bus I2C.
Se generan las funciones software a menos que se especifique la opción
NOFORCE_SW. El modo SLAVE sólo debe usarse con las funciones SSP. Las
opciones son:
MASTER Establece el modo maestro o principal
SLAVE Modo esclavo
SCL=pin Especifica el pin SCL (es un bit de dirección)
SDA=pin Especifica el pin SDA
ADDRESS=nn Especifica la dirección del modo esclavo
FAST Usa la especificación rápida I2C
SLOW Usa la especificación lenta I2C
RESTART_WDT Reinicia el WDT mientras espera en I2C_READ
NOFORCE_SW Usa funciones hardware I2C
TRASMISION SERIE
I2C EN CCS
FUNCIONES
i2c_start()
Esta función lanza una condición de inicio cuando el dispositivo
I2C está modo master. Es necesario especificar la directiva
#USE I2C antes de la llamada a I2C_START(). Después de la
condición de inicio el reloj se mantiene a nivel bajo hasta que
se llama a las funciones I2C_READ() e I2C_WRITE().
i2c_stop()
Esta función lanza una condición de stop o paro cuando el
dispositivo I2C está modo máster. Hay que especificar la
directiva #USE I2C antes de la llamada a I2C_STOP()
TRASMISION SERIE
I2C EN CCS
FUNCIONES
b = i2c_poll()
Esta función retorna un valor distinto de cero (TRUE) cuando el hardware
ha recibido un byte en el buffer. En ese momento se produce una llamada a
la función I2C_READ () que devolverá inmediatamente el byte recibido.
I2C_POLL() está disponible sólo cuando se usa el SSP.
i2c_read()
La función I2C_READ() lee un byte del interface I2C. Es necesario
especificar la directiva #USE I2C antes de la llamada a I2C_READ(). En
modo 'master' esta función genera los impulsos de reloj y en modo
'esclavo' permanece a la espera de estos impulsos. Cuando la función
espera los datos no se puede producir ninguna interrupción. Si incluimos la
opción RESTART_WDT en la directiva #USE I2C entonces esta función
activa el WDT o perro guardián mientras está esperando. Se puede utilizar
el parámetro optativo '0' para que la función no envíe el carácter acuse de
recibo (ACK), de los datos recibidos.
TRASMISION SERIE
I2C EN CCS
FUNCIONES
i2c_write(byte)
La función I2C_WRITE() envia un byte al interface I2C.
Hay que especificar la directiva #USE I2C antes de la
llamada a I2C_WRITE(). En modo 'master' la propia
función genera la señal de reloj con los datos y en modo
'esclavo' esperará la señal de reloj del 'master'. Esta
función devuelve el Bit de acuse de recibo (ACK).
I2c_slaveaddr(int8 adr)
Se especifica la dirección del dispositivo en modo esclavo
TRASMISION SERIE
I2C EN CCS
1. Conectar dos microcontroladores PIC uno como maestro y
uno como esclavos en las direcciones 10h el maestro debe
enviar al esclavo un dato, conecte LCDs a cada
microcontrolador que describa la acción que esta
ejecutando.
2. Conectar tres microcontroladores, el maestro recibe una
señal analógica de voltaje (0-5) y la envía a los dos esclavos,
el primero de acuerdo al valor recibido emite una alarma si
sobrepasa los 3v. El segundo esclavo debe mostrar en un lcd
el estado de la entrada de acuerdo a lo siguiente:
0 a 2,99 V – Normal
>=3 V - ALARMA