curso pic16f87x 11

15
E l bus I 2 C es un bus serie, for- mado por dos hilos (SDA y SCL) mas la línea de masa, que puede conectarse varios dispo- sitivos mediante un hardware tan sencillo como el que se muestra en la figura 1. Aunque los buses serie no tienen la capacidad de los buses para- lelo, requieren menos cableado y me- nos terminales de conexión. La línea SDA (Sereial Data) es la línea para la transferencia de datos se- rie, mientras que la línea SCL (Serial Clock) es la línea de reloj que se utili- za para la sincronización de datos. Es- tas líneas son de drenador o de colec- tor abierto y deben conectarse a posi- tivo de la alimentación a través de una resistencia externa, formando una es- tructura de AND cableada (como pue- de verse en la figura 2) de tal manera que dependiendo del transistor de sa- lida de cada dispositivo pueden ocu- rrir alguno de los siguientes casos: Que el transistor esté saturado, lo que provocará un nivel bajo en la línea correspondiente, independientemente del estado de los otros transistores. Indicando en este caso que el bus es- tá ocupado. Que el transistor esté en corte, por lo tanto está en estado de alta impe- dancia, es decir, el estado de la línea depende de los otros transistores. En CURSO DE MICROCONTROLADORES PIC16F87X (...y XI) CURSO DE MICROCONTROLADORES PIC16F87X (...y XI) Fernando Remiro Domínguez Profesor de Sistemas Electrónicos IES. Juan de la Cierva www.terra.es/personal/fremiro MICROCONTROLADORES 50 RESISTOR En el número anterior prometiamos que conectaríamos algún dispositivo I 2 C a los PIC16F87X, pero antes de empezar queremos recordar brevemente en que consiste el bus serie I 2 C (IIC, Inter Integrated Circuit Bus). Figura 1.- Configuración típica del bus I2C 50-64 MICROCONTROLADORES2 26/4/04 10:50 Página 50

Upload: proteus7

Post on 06-Jun-2015

1.189 views

Category:

Documents


0 download

DESCRIPTION

curso de pic16f87x de la revista resistor impartido por el frofesor fernando remir esta buy bueno mejor que el de peralta

TRANSCRIPT

Page 1: Curso PIC16F87X 11

E l bus I2C es un bus serie, for-mado por dos hilos (SDA ySCL) mas la línea de masa, quepuede conectarse varios dispo-sitivos mediante un hardware

tan sencillo como el que se muestra en

la figura 1. Aunque los buses serie notienen la capacidad de los buses para-lelo, requieren menos cableado y me-nos terminales de conexión.

La línea SDA (Sereial Data) es lalínea para la transferencia de datos se-

rie, mientras que la línea SCL (SerialClock) es la línea de reloj que se utili-za para la sincronización de datos. Es-tas líneas son de drenador o de colec-tor abierto y deben conectarse a posi-tivo de la alimentación a través de unaresistencia externa, formando una es-tructura de AND cableada (como pue-de verse en la figura 2) de tal maneraque dependiendo del transistor de sa-lida de cada dispositivo pueden ocu-rrir alguno de los siguientes casos:● Que el transistor esté saturado, lo que

provocará un nivel bajo en la líneacorrespondiente, independientementedel estado de los otros transistores.Indicando en este caso que el bus es-tá ocupado.

● Que el transistor esté en corte, por lotanto está en estado de alta impe-dancia, es decir, el estado de la líneadepende de los otros transistores. En

CURSO DE MICROCONTROLADORESPIC16F87X (...y XI)

CURSO DE MICROCONTROLADORESPIC16F87X (...y XI)

Fernando Remiro DomínguezProfesor de Sistemas Electrónicos

IES. Juan de la Ciervawww.terra.es/personal/fremiro

MICR

OCON

TROL

ADOR

ES

50RESISTOR

En el número anterior prometiamos que

conectaríamos algún dispositivo I2C a los

PIC16F87X, pero antes deempezar queremos recordarbrevemente en que consiste

el bus serie I2C (IIC, Inter Integrated Circuit Bus).

Figura 1.- Configuración típica del bus I2C

50-64 MICROCONTROLADORES2 26/4/04 10:50 Página 50

Page 2: Curso PIC16F87X 11

MICR

OCON

TROL

ADOR

ES

51RESISTOR

estas condiciones la línea corres-pondiente estará a nivel alto a travésde la resistencia de pull-up.

Se pueden transferir datos por elbus a una velocidad máxima de 100Kbits/seg en el modo estándar (Stan-dard Mode), 400 Kbits en el modo rá-pido (Flast Mode) y a 3,4Mb/s en elcaso de alta velocidad (High-SpeedMode). El número de dispositivos co-nectados al bus viene limitado por lacapacidad máxima admitida en el bus,que es de 400 pF. El valor de Rp de-pende de la tensión de alimentación yde la capacidad del bus y del númerode periféricos conectados, valores típi-cos están entre 4K7 y 2K2.

Los dispositivos conectados al busI2C pueden ser tanto Maestros comoEsclavos. Debemos de tener en cuenta,que un Maestro ( Master )es un circui-to integrado que determina la tempo-rización y la dirección de la transfe-rencia de datos. Este circuito integra-do es el único que aplica los pulsos dereloj a la línea SCL. Los maestros sue-len ser microcontroladores.Cuando se conectan variosdispositivos maestros a un úni-co bus I2C la configuración re-alizada se denomina multi-maestro. Es el dispositivo queinicia la transferencia, generala señal de reloj y finaliza latransferencia. Mientras que unEsclavo ( Slave ) es cualquiercircuito integrado conectadoal bus I2C que no es capaz degenerar pulsos de reloj. Los

circuitos integrados esclavos recibenseñales de comandos y de reloj proce-dentes del maestro.

TRANFERENCIA DE UN BITPOR LA LÍNEA SDA

Los datos en la línea SDA debenser estables durante el periodo ALTOde reloj. La línea de datos SDA sólopuede cambiar cuando la señal de re-loj en la línea SCL se encuentre en es-tado bajo tal y como se muestra en la fi-gura 3.

CONDICIONES DE START Y STOP

La condición de START es unatransición de un nivel alto a un nivelbajo de la línea SDA mientras la líneaSCL esta en a nivel alto.

Una transición de un nivel bajo aun nivel alto de la línea SDA mientrasla línea SCL está a nivel alto, defineuna condición de STOP.

Las condiciones de START y STOPsiempre las genera el Master. El bus seconsidera ocupado después de la con-

Figura 2.- Etapa de salida de los dispositivos I2C

Figura 3.- Transferencia de un bit por el bus I2C

Figura 4.- Condiciones de START y de STOP

50-64 MICROCONTROLADORES2 26/4/04 10:50 Página 51

Page 3: Curso PIC16F87X 11

MICR

OCON

TROL

ADOR

ES

52RESISTOR

dición de START y se considera queesta libre de nuevo un tiempo despuésde una condición de STOP

TRANSFERENCIA DE DATOS Cada dato que se quiere transmitir

por la línea SDA debe tener 8 bits y latransmisión comienza empezando porel bit más significativo (MSB). El nu-mero de octetos implicados en cadatransferencia es indefinido. Cada oc-teto ha de ir seguido por un bit de re-conocimiento ACK (acknowledge-ment) en el noveno pulso de reloj. Elreceptor ejecuta éste reconocimientoponiendo la señal SDA a nivel bajo, taly como se muestra en la figura 5.

Si un dispositivo receptor no puederecibir otro octeto por encontrarse re-alizando alguna otra función, como,por ejemplo, sirviendo a una interrup-ción, puede mantener a nivel bajo lalínea de reloj SCL para hacer que eltransmisor pase a un estado de espera.

La transferencia de datos conti-nuará cuando el receptor esté prepara-do para recibir otro octeto de datos ydeje libre la línea de reloj SCL.

Cuando un esclavo receptor no re-conoce su propia dirección de escla-vo, la línea de datos queda a nivel alto.Entonces el maestro genera una con-dición de STOP para cortar la trans-ferencia.

Si un esclavo receptor reconoce co-mo suya la dirección del esclavo, perocierto tiempo después no puede reci-bir mas octetos de datos, el esclavo nogenera el bit de ACK del ultimo octeto,quedando la línea SDA a nivel alto, en-tonces el maestro genera una condi-ción de STOP para cortar la transfe-rencia.

En el caso de un maestro implicadoen una transferencia, éste debe seña-lar el final de los datos al esclavo trans-misor, no generando el bit de ACK delúltimo octeto que ha recibido del es-

clavo. El esclavo transmisor debe dejarlibre la línea de datos para permitir queel maestro genere la condición deSTOP, tal y como puede verse en la fi-gura 6.

FORMATOS Las transferencias de datos siguen

el formato mostrado en la figura 7; des-pués de la condición de START, se en-vía la dirección de un esclavo. Esta di-rección tiene 7 bits, el octavo bit es unbit de dirección de datos (R/W), un "0"indica una transmisión (ESCRITU-RA), un "l" indica petición de datos(LECTURA). Una transferencia de da-tos siempre termina con una condiciónde STOP generada por la unidad prin-cipal. No obstante, si un maestro aúndesea comunicarse con el bus, puedegenerar otra condición de START y di-reccionar a otro esclavo sin generar pri-mero una condición de STOP. En unatransferencia de este tipo son posibles,

Figura 5.- Transferencia de datos por el bus I2C

Figura 6.- Reconocimiento de un octeto en el bus I2C

50-64 MICROCONTROLADORES2 26/4/04 10:50 Página 52

Page 4: Curso PIC16F87X 11

MICR

OCON

TROL

ADOR

ES

53RESISTOR

por tanto, varias combinaciones de for-matos de lectura/escritura.

Posibles formatos de transferenciade datos son:

1. El maestro transmisor transmite alesclavo receptor. Si el bit 8 es de es-critura, R/W=0, la secuencia será lade la figura 8.

2. El maestro-receptor lee de unesclavo-emisor.

En el momento de1 primer reco-nocimiento, el maestro transmisor pa-sa a ser maestro receptor y el esclavoreceptor pasa a ser esclavo transmisor.Este primer ACK siempre lo genera elesclavo. Los siguientes ACK y la con-

dición de STOP la genera elmaestro.

3. Formatos combinados. Durante uncambio de sentido dentro de unatransferencia, la condición deSTART y la dirección de1 esclavose repiten, pero el bit R/W se in-vierte.

Seguidamente describiremos unsencillo periférico I2C, como es el PCF8574A, que es un periférico de entra-das/salidas digitales.

DESCRIPCIÓN del PCF8574ASe trata de un dispositivo diseñan-

do para interface con el bus I2C queproporciona una ampliación de 8 líne-as de E/S digitales y que se puede em-plear en cualquier sistema microcon-trolador dotado del hardware y/o soft-ware necesario para el protocolo I2C.En la tabla 1 se muestra su patillaje y ladescripción de cada uno de los pines.

El PCF 8574A es un dispositivoCMOS de bajo consumo que incluyesalidas "latcheadas" con amplificado-res de alta corriente para activar direc-tamente cargas tipo LED. Su diagra-ma de bloques es el que se muestra enla figura 11.

Dispone de la línea #INT de inte-rrupciones que puede conectarse a lalógica de interrupciones del micro-controlador. Que será llamando a tra-vés de la interrupción con esta línea,el I/O remoto puede informar al mi-crocontrolador si hay datos de entra-da en los puertos, sin tener que comu-nicarse por el bus I2C. Es decir, puedetrabajar como un simple dispositivoesclavo. Los PCF8574 y versionesPCF8574A sólo difieren en su direc-

Figura 7.- Transferencia completa de datos

Figura 9.- El maestro lee datos del esclavo

Figura 10.- Formato combinado

Figura 8.- El Maestro escribe datos en el esclavo

50-64 MICROCONTROLADORES2 26/4/04 10:50 Página 53

Page 5: Curso PIC16F87X 11

ción del esclavo, tal y como se muestraen la Figura 12.

La parte fija de la dirección es lacombinación binaria 0111 para el mo-delo PCF8574A y 0100 para elPCF8574, la parte programable la de-termina el nivel lógico de las señalesA0-A2 que las define el usuario a vo-luntad.

Cada línea de la puerta de E/S pue-de usarse como entrada o salida inde-pendientemente. En modo de escriturase transfieren desde el MASTER has-ta la puerta es como se muestra en la fi-gura 14, por lo tanto la secuenciade transferencia de datos es lasiguiente:

● En primer lugar el Master envía lacondición de START.

● Seguidamente envía la dirección delPCF8574 en modo escritura quepuesto en binario será0100(A2)(A1)(A0)0, donde(A2),(A1) y (A0) es el valor lógicoque tengan las patillas del mismonombre del dispositivo.

● En tercer lugar se transmiten los da-tos a escribir en el puerto delPCF8574.

● Finalmente el Master manda una se-ñal de STOP para finalizar la trans-ferencia.

Símbolo PINDIO16; SO16 SSOP20 Descripción

A0 1 6 Entrada de direccionamiento 0A1 2 7 Entrada de direccionamiento 1A2 3 9 Entrada de direccionamiento 2P0 4 10 Línea I/O 0 bidirecional P1 5 11 Línea I/O 1 bidirecionalP2 6 12 Línea I/O 2 bidirecionalP3 7 14 Línea I/O 3 bidirecionalVss 8 15 Masa de alimentaciónP4 9 16 Línea I/O 4 bidirecionalP5 10 17 Línea I/O 5 bidirecionalP6 11 19 Línea I/O 6 bidirecionalP7 12 20 Línea I/O 7 bidirecional#INT 13 1 Salida de interrupción (activa a nivel bajo)SCL 14 2 Entrada de reloj del bus I2CSDA 15 4 Entrada/Salida de datos del bus I2CVDD 16 5 Positivo tensión de alimentaciónn.c -- 3 No conectadan.c -- 8 No conectadan.c -- 13 No conectadan.c -- 18 No conectadaTabla 1.- Patillaje del PCF8574

MICR

OCON

TROL

ADOR

ES

54RESISTOR

Figura 11.-Diagrama debloques delPCF8574

50-64 MICROCONTROLADORES2 26/4/04 10:50 Página 54

Page 6: Curso PIC16F87X 11

MICR

OCON

TROL

ADOR

ES

55RESISTOR

Podemos comprobar lo dicho has-ta el momento realizando el circuitode la figura 14, en el que se ha conec-tado el PIC16F876 a un PCF8574 através de las líneas RC3 (SCL) y RC4(SDA). Para comprobar el efecto de laescritura de datos sobre el puerto se

han conectado unos diodos LED(D0:D7). Si cargamos en el microcon-trolador el programa I2C_8574_1.asm,este realiza la lectura del valor que pro-porcionan los interruptores conecta-dos al puerto A y pone el valor corres-pondiente en los diodos LED’s D0:D5,

Los diodos D6 y D7 se han conectadoen el circuito de aplicación para podercomprobar el funcionamiento de otrosprogramas, como por ejemplo un pén-dulo de diodos LED que pueda realizarel lector. El programa está preparadopara aquellos lectores que utilizan el

Figura 12.- Dirección de esclavo para el PCF857 y PCF857A

Figura 13.- Secuencia de escritura desde el Master al PCF8574

Figura 14.- Circuito práctico de ampliaciónde un puerto de salida con un PCF8574 através del BUS I2C

50-64 MICROCONTROLADORES2 26/4/04 10:50 Página 55

Page 7: Curso PIC16F87X 11

MICR

OCON

TROL

ADOR

ES

56RESISTOR

;****************************************************************************;I2C_8574_1.asm;Este programa configura el módulo MSSP en modo I2C Master y se utiliza en modo Transmisión; El programa lee el contenido de PORTA RA0:RA5 y lo envía a las líneas correspondientes del;puerto del periférico I2C PCF8574.

List p=16F876 ;Tipo de procesadorinclude "P16F876.INC" ;Definiciones de registros internos

; __config _XT_OSC & _CP_OFF & _WRT_ENABLE_ON & _BODEN_ON & _LVP_OFF & _WDT_ON; org 0x00 ;Vector de Reset; goto INICIO

org 0x05 ;Salva el vector de interrupcióngoto INICIO

;****************************************************************************;I2C_EmviaStart: Envía la condición de StartI2C_EmviaStart

bcf PIR1,SSPIFbsf STATUS,RP0 ;Selecciona página 1bsf SSPCON2,SEN ;Activa secuencia de iniciobcf STATUS,RP0 ;Selecciona página 0

Espera_Start btfss PIR1,SSPIF ;¿Fin de secuencia de transmisión?goto Espera_Start ;Espera fin de transmisiónreturn

;****************************************************************************;Send_Byte: Transmite el byte del W vía I2C. La rutina finaliza cuando se recibe /ACK

I2C_EnviaBytebcf PIR1,SSPIFmovwf SSPBUF ;Byte a transmitir pasa al buffer de salida

Espera_Bytebtfss PIR1,SSPIF ;¿Se ha recibido el bit /ACK?goto Espera_Byte ;No esperarreturn

;****************************************************************************;Programa principal

INICIO clrf PORTCbsf STATUS,RP0 ;Selecciona banco 1movlw b'00000110'movwf ADCON1 ;PortA E/S Digitalmovlw b'11111111'movwf TRISA ;configura PortA como entradamovwf TRISC ;RC3/SCL y RC4/SDA entradasmovlw b'10000000'movwf SSPSTAT ;Velocidad estándar con niveles I2Cmovlw .9movwf SSPADD ;Velocidad del bus I2C 100KHzbcf STATUS,RP0 ;Selecciona banco 0

;Configuramos el módulo MSSP en el modo Master I2Cmovlw b'00101000'movwf SSPCON ;Módulo MSSP en Oncall I2C_EmviaStart ;Envía condición de Startmovlw b'01110000'call I2C_EnviaByte ;Envía la dirección del PCF8574

Bucle movf PORTA,W ;Caraga en W el valor del PORTAandlw b'00111111' ;asegura RA7:RA6 como cerocall I2C_EnviaByte ;Envia Byte al PCF8574goto Bucle

;****************************************************************************************ORG 0x1F00bcf PCLATH,4bcf PCLATH,3 ;Selecciona la página 0goto INICIO

end ;Fin del programa fuente

50-64 MICROCONTROLADORES2 26/4/04 10:50 Página 56

Page 8: Curso PIC16F87X 11

MICR

OCON

TROL

ADOR

ES

57RESISTOR

bootloader con el circuito que venimosutilizando en este curso, o bien utili-zando un programador con un softwarecomo el IC-PROG , para lo cual habrá

que quitar los ";" de las líneas que es-tán en azul y se pueden poner ";" en laslíneas que están marcadas de colorverde.

Los datos de entrada se transfierendesde la puerta hasta el MASTER enmodo de lectura de acuerdo al crono-grama de la figura 15.

Para comprobar su funcionamiento,modificaremos el circuito de la figura14, para conectar unos conmutadores alas entradas de los diodos, tal y comose muestra en la figura 16, si se mantie-nen los diodos, aparecerá el problemade que cuando se pone a nivel alto unconmutador, el diodo se encenderá, pa-ra evitar este efecto, se pueden ponerlos diodos al revés, es decir el ánodo decada diodo a través de una resistenciade 330µ conectado a positivo (Vcc) y ala entrada del PCF8574 se conecta elcátodo y la entrada del interruptor que

Figura 15.- Secuencia de lectura desde PCF8574 hacia el Master.

Figura 16.- Circuito práctico de ampliación de un puerto de entrada con un PCF8574 a través del BUS I2C

Figura 17 .- Ejemplo de cómo conectar comoentrada salida los pines del PCF8574

50-64 MICROCONTROLADORES2 26/4/04 10:50 Página 57

Page 9: Curso PIC16F87X 11

MICR

OCON

TROL

ADOR

ES

58RESISTOR

;****************************************************************************************;I2C_8574_2.asm;Este programa configura el módulo MSSP en modo I2C Master y se utiliza en modo Recepción; El programa lee el contenido de las líneas del PUERTO del PCF8574 del y lo envía a las ;líneas correspondientes del PORTB donde se visualiza su valore en los diodos LEDS que se ;le han conectado;****************************************************************************************

List p=16F873 ;Tipo de procesadorinclude "P16F873.INC" ;Definiciones de registros internos

; __config _XT_OSC & _CP_OFF & _WRT_ENABLE_ON & _BODEN_ON & _LVP_OFF & _WDT_ON;; org 0x00 ;Vector de Reset; goto INICIO

org 0x05 ;Salva el vector de interrupcióngoto INICIO

;****************************************************************************************;I2C_EmviaStart: Envía la condición de Start

I2C_EmviaStart bcf PIR1,SSPIF ;Restaura el flag del módulo MSSPbsf STATUS,RP0 ;Selecciona página 1bsf SSPCON2,SEN ;Activa secuencia de iniciobcf STATUS,RP0

Espera_Start btfss PIR1,SSPIF ;¿Ha finalizado la secuencia de inicio ?goto Espera_Start ;No, esperar fin de secuenciareturn

;****************************************************************************************;I2C_EnviaByte: Transmite el byte del W vía I2C. La rutina finaliza cuando se recibe /ACK

I2C_EnviaByte bcf PIR1,SSPIF ;Restaura el flag del módulo MSSPmovwf SSPBUF ;Byte a transmitir pasa al buffer de salida

Espera_Byte btfss PIR1,SSPIF ;¿se ha recibido el bit /ACK ?goto Espera_Byte ;No, esperar ACKreturn

;****************************************************************************************;I2C_LeeByte: Lee un byte procedente del dispositivo I2C seleccionado y lo deja en W;Seguidamente se genera y transmite el bit /ACK

I2C_LeeByte bcf PIR1,SSPIF ;Restaura el flag del módulo MSSPbsf STATUS,RP0 ;Selecciona página 1bsf SSPCON2,RCEN ;Activa el modo receptorbcf STATUS,RP0 ;Selecciona página 0

Espera_Lectura btfss PIR1,SSPIF ;¿Se han recibidos los 8 bits ?goto Espera_Lectura ;No, esperar lectura

bcf PIR1,SSPIF ;Restaura el flag del módulo MSSPbsf STATUS,RP0 ;Selecciona página 1bcf SSPCON2,ACKDT ;Pone bit ACK a "0"bsf SSPCON2,ACKEN ;Aciva la secuencia de generación del bit ACKbcf STATUS,RP0 ;Selecciona página 0

Espera_ACK btfss PIR1,SSPIF ;¿ Se ha finalizado la Secuencia ACK?goto Espera_ACK ;No, esperar ACKmovf SSPBUF,W ;Lee el byte recibidoreturn

;****************************************************************************************;Programa principal

INICIO clrf PORTBclrf PORTCbsf STATUS,RP0 ;Selecciona banco 1movlw b'11111111'movwf TRISC ;RC3/SCL y RC4/SDA entradasclrf TRISB ;Puerta B salidamovlw b'10000000'movwf SSPSTAT ;Velocidad estándar con niveles I2Cmovlw .9movwf SSPADD ;Velocidad del bus I2C 100KHzbcf STATUS,RP0 ;Selecciona banco 0

;Módulo MSSP en el modo Master I2Cmovlw b'00101000'movwf SSPCON ;Módulo MSSP en Oncall I2C_EmviaStart ;Envía condición de iniciomovlw b'01110001'call I2C_EnviaByte ;Envía byte de dirección del PCF8574 (lectura)

Bucle call I2C_LeeByte ;Lee el dispositivo PCF8584movwf PORTB ;Visualiza sobre los LEDs RB0-RB7 goto Bucle

;****************************************************************************************ORG 0x1F00bcf PCLATH,4bcf PCLATH,3 ;Selecciona la página 0goto INICIO

end ;Fin del programa fuente

50-64 MICROCONTROLADORES2 26/4/04 10:50 Página 58

Page 10: Curso PIC16F87X 11

pone un "0" o un "1", tal y como semuestra en la figura 17, sobre este cir-cuito se pueden ver perfectamente tam-bién como varían las salidas, pero hayque tener en cuenta que en este caso, elLED se enciende cuando le llega un"0" y se apaga cuando le llega un "1"desde el puerto del PCF8574, es decirlas salidas estarán complementadasdesde el punto de vista de encendidoy apagado de los diodos.

DESCRIPCIÓN del SAA1064Seguidamente veremos otro dis-

positivo I2C como es el controlador dedisplays SAA1064, se trata de un dis-positivo especialmente diseñado para elcontrol de hasta 4 displays 7 segmentostipo LED con punto decimal, utilizan-do el multiplexado de dos pares de dí-gitos. Se trata lógicamente de un dis-positivo I2C que puede trabajar juntocon otros tres, ya que permite cuatroposibles direcciones diferentes selec-cionadas por hardware su diagrama de

bloques es el que se muestra en la fi-gura 18 y sus características más sig-nificativas son:● Flag indicador del "Power On Reset"

(POR).● 16 salidas con corriente de hasta 21

µA controladas por software.● 2 salidas multiplexadas para contro-

lar segmentos de ánodo común ● Oscilador integrado.● Bits de control para seleccionar vi-

sualización estática, dinámica, apa-gado y de test.

En la figura 20 se muestra como sedebe direccionar el SAA1064 tantopara escritura como para lectura, don-de A1 y A0 son dos bits cuyo valor de-pende de la tensión aplicada en el pinADR. Esta patilla se controla con ayu-da de una tensión continua que, com-parada con unos umbrales internos dereferencia, define, mediante un pe-queño convertidor A/D interno, el valorde los dos bits de dirección A0 y Al taly coma se muestra en la tabla 3. Así

por ejemplo si ponemos a masa el pinADDR la dirección del SAA1064 seráb’01110000’ ó 70h.

Por lo tanto, con este sistema sepueden direccionar hasta cuatroSAA1064 en el mismo bus, lo que su-pone 16 displays de 7 segmentos co-mo máximo.

EL BYTE DE ESTADOÚnicamente el bit de más peso de

este byte (Power On Reset) tiene sig-nificado. Un "1" indica que hubo fallode alimentación desde la última vezque se leyó. Tras la lectura de este by-te, el bit vuelve a quedar a "0".

EL BYTE DE INSTRUCCIÓNMediante los tres bits de menos pe-

so de este byte (SC, SB y SA), se se-lecciona a partir de que registro se vana escribir secuencialmente los si-guientes bytes (ver la tabla 4). Esta ca-racterística permite una rápida inicia-ción por parte del MASTER.

MICR

OCON

TROL

ADOR

ES

59RESISTOR

Figura 18.- Diagrama de bloques del controlador de display SAA1064

50-64 MICROCONTROLADORES2 26/4/04 10:50 Página 59

Page 11: Curso PIC16F87X 11

BITS DE CONTROLLos bits de control se encuentran

dentro del byte de control. Se empleanlos 7 de menos peso y su significado esel siguiente:● C0=0 Modo estático. Visualización

continua sobre los dígitos 1 y 2. Nohay multiplexaci6n.

● C0=1 Modo dinámico. Se visualizade forma multiplexada sobre los dis-plays 1+3 y 2+4.

● Cl =0 Los dígitos 1+3 se apagan.● Cl =1 Los dígitos 1+3 no se apagan.● C2=0 Los dígitos 2+4 se apagan.● C2=1 Los dígitos 2+4 no se apagan.● C3=0 Funcionamiento normal● C3=1 Se activan todos los segmen-

tos. Función test.● C4=1 Añade 3 mA a la corriente de

salida de los segmentos.● C5=1 Añade 6 mA a la corriente de

salida de los segmentos.● C6=1 Añade 12 mA a la corriente de

salida de los segmentos.

NºPin Señal Descripción1 ADR Línea de direccionamiento por hardware2 CEXT Condensador externo (modo dinámico)3-10 P8-P1 Salidas a segmentos de los dígitos 1 y 211 MX1 Activación de los dígitos 1 y 312 VEE Negativo de alimentación13 VCC Positivo de alimentación14 MX2 Activación de los dígitos 2 y 415-22 P9-P16 Salidas a segmentos de los dígitos 3 y 423 SDA Línea de datos del bus I2C24 SCL Línea de reloj del bus I2C

Tabla 2.- Descripción de los pines del SAA1064

Figura 19.- Patillaje del SAA1064

Tabla 3.- Direccionamiento del SAA1064 en función de la tensión en el pin ADR

En la tabla 2 se muestra el patillaje del dispositivo y la descripción de cada una de suspatillas.

Tensión en ADR A0 A1 Dirección de lectura Dirección de escrituraVEE 0 0 71h 70h3/8 de VCC 0 1 73h 72h5/8 de VCC 1 0 75h 74hVCC 1 1 77h 76h

SC SB SA Registro0 0 0 Control0 0 1 Dígito 10 1 0 Dígito 20 1 1 Dígito 31 0 0 Dígito 41 0 1 Reservado1 1 0 Reservado1 1 1 Reservado

MICR

OCON

TROL

ADOR

ES

60RESISTOR

Figura 20.- Direccionamientodel SAA1064 para lectura yescritura

Tabla 4.- Registros internos delSAA1064

50-64 MICROCONTROLADORES2 26/4/04 10:50 Página 60

Page 12: Curso PIC16F87X 11

Este libro introduce al lector en la reali-zación de proyectos con el popular micro-controlador PIC16F84A.

● Los contenidos se presentan de maneraasequible y entretenida sin perder elnecesario nivel técnico.

● El lector dispone de todo lo necesariopara realizar los proyectos de formacómoda ya que no requiere de grandesmedios materiales y todo está descritoen el libro o en el CD-ROM que acom-paña la obra.

● La obra es eminentemente práctica:contiene más de 160 ejercicios y pro-yectos resueltos completamente, siendomuchos de ellos proyectos clásicos,como termómetros, relojes, calenda-rios, cerraduras electrónicas, control dedisplays, termostatos, temporizadores,alarmas, sirenas, comunicación con elordenador, juegos, control de motores,microrobots, etc.

● El software utilizado es de libre distri-bución y los circuitos emplean compo-nentes que pueden adquirirse fácilmen-te en cualquier tienda de componenteselectrónicos. El gasto a realizar pararealizar las prácticas planteadas esmínimo.

Este libro posee su propia página Weben www.pic16f84a.com que pretende serun lugar de encuentro entre todos aque-llos que utilicen el libro, donde podránintercambiar ideas, realizar consultas,descargar actualizaciones de los proyec-tos y también descargar apuntes deconocimientos necesarios.

MMIICCRROOCCOONNTTRROOLLAADDOORRPPIICC1166FF8844

Desarrollo de proyectos"

Índice Extractado: Microcontrolador PIC16F84.Periféricos bási-cos. Grabación de microcontroladores PIC. Organización de lamemoria. Arquitectura Interna. Ensamblador. MPLAB.Programación elemental. Saltos. Subrutinas. Manejo de tablas.Subrutinas de retardo. LCD. EEPROM de datos. TIMER0. Otrosrecursos. Interrupciones de entradas. Interrupción por TIMER0.Teclado matricial. Comunicación con el ordenador. Bus I2C.24LC256, memoria EEPROM en bus I2C. DS1624, Termómetro enBUS I2C. DS1307, reloj calendario en bus I2C.SAA1064, controla-dor de display. PCF8574, expansor de bus I2C. PCF8591, ADC yDAC en bus I2C. Bus de una línea. Motores de corriente continua.Motores paso a paso. Servomotores de radiocontrol. Sensorespara microbótica. Construcción de un microrobot.

50-64 MICROCONTROLADORES2 26/4/04 10:50 Página 61

Page 13: Curso PIC16F87X 11

MICR

OCON

TROL

ADOR

ES

62RESISTOR

LOS BYTES DE DATOS

Un segmento queda activado si elcorrespondiente bit esta a "1". Los bitsde datos D17 al Dl0 corresponden aldígito 1, D27:D20 al dígito 2, D37:D30al dígito 3 y D47:D40 al dígito 4.

El bit de mas peso MSB de estosdatos se corresponden con las salidasP8 y P16, los de menos peso LSB conlas salidas Pl y P9.

POWER ON RESETEsta señal se genera internamente y

pone todos los bits a "0", resultandouna visualización en blanco para los 4dígitos. Únicamente se activa el flagPR del byte de estado.

SALIDAS MULTIPLEXADASLas líneas de salida MXl y MX2

se activan alternativamente en el mododinámico con una frecuencia que seobtiene desde el oscilador interno. Ycomo se puede ver en la figura 21, sepueden colocar cuatro displays. Parala selección de los displays seleccio-nados en cada momento se necesitaconectar dos transistores que trabajanen corte o saturación.

En el modo estático únicamentese activa MXl con lo que solo se vi-sualiza sobre 2 dígitos, como puedeverse en la figura 22.

Seguidamente vamos a probar elfuncionamiento del controlador de dis-plays en modo dinámico conectandoa las líneas SDA y SCL del SAA1046las correspondientes del PIC16F876(RC4/SDA y RC3/SCL), además co-mo solo vamos a utilizar un controladorcon cuatro displays como el de la fi-gura 21, pondremos la patilla ADR amasa, por lo que la dirección del dis-positivo será b’01110000’ . El progra-ma que vamos a cargar(I2C_SAA1064_2.asm) en el micro-controlador va a presentar el mensaje"HOLA" en los displays, para ello se-guiremos el procedimiento de escritu-ra que se indica en la figura 20, es de-cir seguiremos la siguiente secuencia:● El microcontrolador que trabaja co-

mo Master envía la condición deSTART

● Seguidamente se manda el byte dedireccionamiento que en nuestro ca-so es b’01110000’.

● Después se manda el byte de ins-trucción donde los bits SC, SB y SAapuntan a uno de los ocho registrosinternos en el cual se escribirá el by-

te de datos que le sigue inmediata-mente detrás.

● Si el registro direccionado es el decontrol a continuación debe enviarsela palabra de control. Después se

transmite la información queaparecerá en cada uno de losdisplays.

● Finalmente el Master mandará unacondición de STOP.

Figura 21.- Conexión de cuatro displays al SAA1064 en modo dinámico

Figura 22.- Conexión de dos displays al SAA1064 en modo estático

50-64 MICROCONTROLADORES2 26/4/04 10:50 Página 62

Page 14: Curso PIC16F87X 11

MICR

OCON

TROL

ADOR

ES

63RESISTOR

;*************************************************************************************; Programa I2C_SAA1064_2.asm Fecha : 20- Abril-2004;El dispositivo I2C SAA1064. Controlador de displays de 7 segmentos;Se trata de visualizar sobre los 4 displays 7 segmentos conectados al SAA1064.;el mensaje "HOLA"; Revisión : 0.0 Programa para PIC16F87X; Velocidad del Reloj: 4 MHz Reloj Instrucción: 1 MHz = 1 uS; Perro Guardián :seshabilitado Tipo de Reloj : XT; Protección del código: OFF;**************************************************************************************

List p=16F876 ;Tipo de procesadorinclude "P16F876.INC" ;Definiciones de registros internos

; __config _XT_OSC & _CP_OFF & _WRT_ENABLE_ON & _BODEN_ON & _LVP_OFF & _WDT_ON; org 0x00 ;Vector de Reset; goto Inicio

org 0x05 ;Salva el vector de interrupcióngoto Inicio

;****************************************************************************;I2C_EmviaStart: Envía la condición de StartI2C_EmviaStart

bcf PIR1,SSPIFbsf STATUS,RP0 ;Selecciona página 1bsf SSPCON2,SEN ;Activa secuencia de iniciobcf STATUS,RP0 ;Selecciona página 0

Espera_Start btfss PIR1,SSPIF ;¿Fin de secuencia de tranmisión?goto Espera_Start ;Espera fin de transmisionreturn

;****************************************************************************;Send_Byte: Transmite el byte del W vía I2C. La rutina finaliza cuando se recibe /ACKI2C_EnviaByte

bcf PIR1,SSPIFmovwf SSPBUF ;Byte a transmitir pasa al buffer de salida

Espera_Byte btfss PIR1,SSPIF ;¿Se ha recibido el bit /ACK?goto Espera_Byte ;No, esperarreturn

;****************************************************************************;Send_Stop: Envía la secuencia de stop

I2C_EnviaStop bcf PIR1,SSPIF ;Restaura el flag del módulo MSSPbsf STATUS,RP0 ;Seleciona página 1bsf SSPCON2,PEN ;Activa secuencia de stopbcf STATUS,RP0

Espera_Stop btfss PIR1,SSPIF ;¿Fin de secuencia de Stop ?goto Espera_Stop ;Esperar Stop return

;*******************************************************************************************;Read_Byte: Lee un byte procedente del dispositivo I2C selecionado y lo devuelve en W;Seguidamente se genera y transmite el bit /ACK

I2C_LeeByte bcf PIR1,SSPIF ;Restaura el flag del módulo MSSPbsf STATUS,RP0 ;Selecciona página 1bsf SSPCON2,RCEN ;Activa el modo receptorbcf STATUS,RP0 ;Selecciona página 0

50-64 MICROCONTROLADORES2 26/4/04 10:50 Página 63

Page 15: Curso PIC16F87X 11

MICR

OCON

TROL

ADOR

ES

64RESISTOR

Read_Waitbtfss PIR1,SSPIF ;Recibidos los 8 bits ??goto Read_Wait;No, esperar

bcf PIR1,SSPIF ;Restaura el flag del módulo MSSPbsf STATUS,RP0 ;Selecciona página 1bcf SSPCON2,ACKDT ;Pone bit ACK a "0"bsf SSPCON2,ACKEN ;Aciva la secuencia de generación del bit ACKbcf STATUS,RP0 ;Selecciona página 0

Espera_ACK btfss PIR1,SSPIF ;¿Ha finalizado la decuencia ACK?goto Espera_ACK ;No, esperar ACKmovf SSPBUF,W ;Lee el byte recibidoreturn

;*******************************************************************************************;Programa principal

Inicio clrf PORTCbsf STATUS,RP0 ;Selecciona banco 1movlw b'11111111'movwf TRISC ;RC3/SCL y RC4/SDA entradasmovlw b'11001111'movwf OPTION_REG ;Preescaler de 128 asociado al WDTmovlw b'10000000'movwf SSPSTAT ;Velocidad estándar con niveles I2Cmovlw .9movwf SSPADD ;Velocidad del bus I2C 100KHzbcf STATUS,RP0 ;Selecciona banco 0

;Módulo MSSP en el modo Master I2C

movlw b'00101000'movwf SSPCON ;Módulo MSSP en On

Visualiza call I2C_EmviaStart ;Envía secuencia de iniciomovlw b'01110110' ;call I2C_EnviaByte ;Dirección del dispositivo SAA1064 en la PLUSmovlw .0 ;call I2C_EnviaByte ;Envía byte de instrucciónmovlw b'01000111' ;call I2C_EnviaByte ;Envía byte de controlmovlw b'01110110' ;segmentos correspondientes a la "H"call I2C_EnviaByte ;Visualiza sobre el dígito D1movlw b'00111111' ;segmentos correspondientes a la "O"call I2C_EnviaByte ;Visualiza sobre el dígito D2movlw b'00111000' ;segmentos correspondientes a la "L"call I2C_EnviaByte ;Visualiza sobre el dígito D3movlw b'01110111' ;segmentos correspondientes a la "A"call I2C_EnviaByte ;Visualiza sobre el dígito D4call I2C_EnviaStop ;Envía secuencia de stop

goto $;*************************************************************************************

ORG 0x1F00bcf PCLATH,4bcf PCLATH,3 ;Selecciona la página 0goto Inicio

;*************************************************************************************end ;Fin del programa fuente

50-64 MICROCONTROLADORES2 26/4/04 10:50 Página 64