Curso de microcontroladores capitulo 11

download Curso de microcontroladores capitulo 11

If you can't read please download the document

Transcript of Curso de microcontroladores capitulo 11

  • E l bus I2C es un bus serie, for-

    mado por dos hilos (SDA ySCL) mas la lnea 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 conexin.

    La lnea SDA (Sereial Data) es lalnea para la transferencia de datos se-

    rie, mientras que la lnea SCL (SerialClock) es la lnea de reloj que se utili-za para la sincronizacin de datos. Es-tas lneas son de drenador o de colec-tor abierto y deben conectarse a posi-tivo de la alimentacin a travs 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 lneacorrespondiente, 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 lneadepende de los otros transistores. En

    CURSO DE MICROCONTROLADORESPIC16F87X (...y XI)

    CURSO DE MICROCONTROLADORESPIC16F87X (...y XI)

    Fernando Remiro DomnguezProfesor de Sistemas Electrnicos

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

    MICR

    OCON

    TROL

    ADOR

    ES

    50RESISTOR

    En el nmero anterior prometiamos que

    conectaramos algn dispositivo I2C a los

    PIC16F87X, pero antes deempezar queremos recordarbrevemente en que consiste

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

    Figura 1.- Configuracin tpica del bus I2C

    50-64 MICROCONTROLADORES2 26/4/04 10:50 Pgina 50

  • MICR

    OCON

    TROL

    ADOR

    ES

    51RESISTOR

    estas condiciones la lnea corres-pondiente estar a nivel alto a travsde la resistencia de pull-up.

    Se pueden transferir datos por elbus a una velocidad mxima de 100Kbits/seg en el modo estndar (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 nmero de dispositivos co-nectados al bus viene limitado por lacapacidad mxima admitida en el bus,que es de 400 pF. El valor de Rp de-pende de la tensin de alimentacin yde la capacidad del bus y del nmerode perifricos conectados, valores tpi-cos estn 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-rizacin y la direccin de la transfe-rencia de datos. Este circuito integra-do es el nico que aplica los pulsos dereloj a la lnea SCL. Los maestros sue-len ser microcontroladores.Cuando se conectan variosdispositivos maestros a un ni-co bus I2C la configuracin re-alizada se denomina multi-maestro. Es el dispositivo queinicia la transferencia, generala seal 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 recibenseales de comandos y de reloj proce-dentes del maestro.

    TRANFERENCIA DE UN BITPOR LA LNEA SDA

    Los datos en la lnea SDA debenser estables durante el periodo ALTOde reloj. La lnea de datos SDA slopuede cambiar cuando la seal de re-loj en la lnea SCL se encuentre en es-tado bajo tal y como se muestra en la fi-gura 3.

    CONDICIONES DE START Y STOP

    La condicin de START es unatransicin de un nivel alto a un nivelbajo de la lnea SDA mientras la lneaSCL esta en a nivel alto.

    Una transicin de un nivel bajo aun nivel alto de la lnea SDA mientrasla lnea SCL est a nivel alto, defineuna condicin de STOP.

    Las condiciones de START y STOPsiempre las genera el Master. El bus seconsidera ocupado despus 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 Pgina 51

  • MICR

    OCON

    TROL

    ADOR

    ES

    52RESISTOR

    dicin de START y se considera queesta libre de nuevo un tiempo despusde una condicin de STOP

    TRANSFERENCIA DE DATOS Cada dato que se quiere transmitir

    por la lnea SDA debe tener 8 bits y latransmisin comienza empezando porel bit ms 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 seal 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 funcin, como,por ejemplo, sirviendo a una interrup-cin, puede mantener a nivel bajo lalnea 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 lnea de reloj SCL.

    Cuando un esclavo receptor no re-conoce su propia direccin de escla-vo, la lnea de datos queda a nivel alto.Entonces el maestro genera una con-dicin de STOP para cortar la trans-ferencia.

    Si un esclavo receptor reconoce co-mo suya la direccin del esclavo, perocierto tiempo despus no puede reci-bir mas octetos de datos, el esclavo nogenera el bit de ACK del ultimo octeto,quedando la lnea SDA a nivel alto, en-tonces el maestro genera una condi-cin de STOP para cortar la transfe-rencia.

    En el caso de un maestro implicadoen una transferencia, ste debe sea-lar el final de los datos al esclavo trans-misor, no generando el bit de ACK delltimo octeto que ha recibido del es-

    clavo. El esclavo transmisor debe dejarlibre la lnea de datos para permitir queel maestro genere la condicin 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-pus de la condicin de START, se en-va la direccin de un esclavo. Esta di-reccin tiene 7 bits, el octavo bit es unbit de direccin de datos (R/W), un "0"indica una transmisin (ESCRITU-RA), un "l" indica peticin de datos(LECTURA). Una transferencia de da-tos siempre termina con una condicinde STOP generada por la unidad prin-cipal. No obstante, si un maestro andesea comunicarse con el bus, puedegenerar otra condicin de START y di-reccionar a otro esclavo sin generar pri-mero una condicin 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 Pgina 52

  • 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-

    dicin de STOP la genera elmaestro.

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

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

    DESCRIPCIN del PCF8574ASe trata de un dispositivo disean-

    do para interface con el bus I2C queproporciona una ampliacin de 8 lne-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 ladescripcin 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 lnea #INT de inte-rrupciones que puede conectarse a lalgica de interrupciones del micro-controlador. Que ser llamando a tra-vs de la interrupcin con esta lnea,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 slo 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 Pgina 53

  • cin del esclavo, tal y como se muestraen la Figura 12.

    La parte fija de la direccin es lacombinacin binaria 0111 para el mo-delo PCF8574A y 0100 para elPCF8574, la parte programable la de-termina el nivel lgico de las sealesA0-A2 que las define el usuario a vo-luntad.

    Cada lnea 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 enva lacondicin de START.

    Seguidamente enva la direccin delPCF8574 en modo escritura quepuesto en binario ser0100(A2)(A1)(A0)0, donde(A2),(A1) y (A0) es el valor lgicoque 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.

    Smbolo PINDIO16; SO16 SSOP20 Descripcin

    A0 1 6 Entrada de direccionamiento 0A1 2 7 Entrada de direccionamiento 1A2 3 9 Entrada de direccionamiento 2P0 4 10 Lnea I/O 0 bidirecional P1 5 11 Lnea I/O 1 bidirecionalP2 6 12 Lnea I/O 2 bidirecionalP3 7 14 Lnea I/O 3 bidirecionalVss 8 15 Masa de alimentacinP4 9 16 Lnea I/O 4 bidirecionalP5 10 17 Lnea I/O 5 bidirecionalP6 11 19 Lnea I/O 6 bidirecionalP7 12 20 Lnea I/O 7 bidirecional#INT 13 1 Salida de interrupcin (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 tensin de alimentacinn.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 Pgina 54

  • 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 atravs de las lneas 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 LEDs D0:D5,

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

    Figura 12.- Direccin de esclavo para el PCF857 y PCF857A

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

    Figura 14.- Circuito prctico de ampliacinde un puerto de salida con un PCF8574 atravs del BUS I2C

    50-64 MICROCONTROLADORES2 26/4/04 10:50 Pgina 55

  • MICR

    OCON

    TROL

    ADOR

    ES

    56RESISTOR

    ;****************************************************************************;I2C_8574_1.asm;Este programa configura el mdulo MSSP en modo I2C Master y se utiliza en modo Transmisin; El programa lee el contenido de PORTA RA0:RA5 y lo enva a las lneas correspondientes del;puerto del perifrico 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 interrupcingoto INICIO

    ;****************************************************************************;I2C_EmviaStart: Enva la condicin de StartI2C_EmviaStart

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

    Espera_Start btfss PIR1,SSPIF ;Fin de secuencia de transmisin?goto Espera_Start ;Espera fin de transmisinreturn

    ;****************************************************************************;Send_Byte: Transmite el byte del W va 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 estndar con niveles I2Cmovlw .9movwf SSPADD ;Velocidad del bus I2C 100KHzbcf STATUS,RP0 ;Selecciona banco 0

    ;Configuramos el mdulo MSSP en el modo Master I2Cmovlw b'00101000'movwf SSPCON ;Mdulo MSSP en Oncall I2C_EmviaStart ;Enva condicin de Startmovlw b'01110000'call I2C_EnviaByte ;Enva la direccin 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 pgina 0goto INICIO

    end ;Fin del programa fuente

    50-64 MICROCONTROLADORES2 26/4/04 10:50 Pgina 56

  • 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 lneas que es-tn en azul y se pueden poner ";" en laslneas que estn 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 revs, es decir el nodo decada diodo a travs de una resistenciade 330 conectado a positivo (Vcc) y ala entrada del PCF8574 se conecta elctodo y la entrada del interruptor que

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

    Figura 16.- Circuito prctico de ampliacin de un puerto de entrada con un PCF8574 a travs del BUS I2C

    Figura 17 .- Ejemplo de cmo conectar comoentrada salida los pines del PCF8574

    50-64 MICROCONTROLADORES2 26/4/04 10:50 Pgina 57

  • MICR

    OCON

    TROL

    ADOR

    ES

    58RESISTOR

    ;****************************************************************************************;I2C_8574_2.asm;Este programa configura el mdulo MSSP en modo I2C Master y se utiliza en modo Recepcin; El programa lee el contenido de las lneas del PUERTO del PCF8574 del y lo enva a las ;lneas 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 interrupcingoto INICIO

    ;****************************************************************************************;I2C_EmviaStart: Enva la condicin de Start

    I2C_EmviaStart bcf PIR1,SSPIF ;Restaura el flag del mdulo MSSPbsf STATUS,RP0 ;Selecciona pgina 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 va I2C. La rutina finaliza cuando se recibe /ACK

    I2C_EnviaByte bcf PIR1,SSPIF ;Restaura el flag del mdulo 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 mdulo MSSPbsf STATUS,RP0 ;Selecciona pgina 1bsf SSPCON2,RCEN ;Activa el modo receptorbcf STATUS,RP0 ;Selecciona pgina 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 mdulo MSSPbsf STATUS,RP0 ;Selecciona pgina 1bcf SSPCON2,ACKDT ;Pone bit ACK a "0"bsf SSPCON2,ACKEN ;Aciva la secuencia de generacin del bit ACKbcf STATUS,RP0 ;Selecciona pgina 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 estndar con niveles I2Cmovlw .9movwf SSPADD ;Velocidad del bus I2C 100KHzbcf STATUS,RP0 ;Selecciona banco 0

    ;Mdulo MSSP en el modo Master I2Cmovlw b'00101000'movwf SSPCON ;Mdulo MSSP en Oncall I2C_EmviaStart ;Enva condicin de iniciomovlw b'01110001'call I2C_EnviaByte ;Enva byte de direccin 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 pgina 0goto INICIO

    end ;Fin del programa fuente

    50-64 MICROCONTROLADORES2 26/4/04 10:50 Pgina 58

  • pone un "0" o un "1", tal y como semuestra en la figura 17, sobre este cir-cuito se pueden ver perfectamente tam-bin como varan 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 estarn complementadasdesde el punto de vista de encendidoy apagado de los diodos.

    DESCRIPCIN del SAA1064Seguidamente veremos otro dis-

    positivo I2C como es el controlador dedisplays SAA1064, se trata de un dis-positivo especialmente diseado para elcontrol de hasta 4 displays 7 segmentostipo LED con punto decimal, utilizan-do el multiplexado de dos pares de d-gitos. Se trata lgicamente 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 caractersticas ms 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 comn Oscilador integrado. Bits de control para seleccionar vi-

    sualizacin esttica, dinmica, 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 tensin aplicada en el pinADR. Esta patilla se controla con ayu-da de una tensin continua que, com-parada con unos umbrales internos dereferencia, define, mediante un pe-queo convertidor A/D interno, el valorde los dos bits de direccin A0 y Al taly coma se muestra en la tabla 3. As

    por ejemplo si ponemos a masa el pinADDR la direccin del SAA1064 serb01110000 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 mximo.

    EL BYTE DE ESTADOnicamente el bit de ms peso de

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

    EL BYTE DE INSTRUCCINMediante 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-racterstica permite una rpida inicia-cin 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 Pgina 59

  • 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 esttico. Visualizacin

    continua sobre los dgitos 1 y 2. Nohay multiplexaci6n.

    C0=1 Modo dinmico. Se visualizade forma multiplexada sobre los dis-plays 1+3 y 2+4.

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

    tos. Funcin test. C4=1 Aade 3 mA a la corriente de

    salida de los segmentos. C5=1 Aade 6 mA a la corriente de

    salida de los segmentos. C6=1 Aade 12 mA a la corriente de

    salida de los segmentos.

    NPin Seal Descripcin1 ADR Lnea de direccionamiento por hardware2 CEXT Condensador externo (modo dinmico)3-10 P8-P1 Salidas a segmentos de los dgitos 1 y 211 MX1 Activacin de los dgitos 1 y 312 VEE Negativo de alimentacin13 VCC Positivo de alimentacin14 MX2 Activacin de los dgitos 2 y 415-22 P9-P16 Salidas a segmentos de los dgitos 3 y 423 SDA Lnea de datos del bus I2C24 SCL Lnea de reloj del bus I2C

    Tabla 2.- Descripcin de los pines del SAA1064

    Figura 19.- Patillaje del SAA1064

    Tabla 3.- Direccionamiento del SAA1064 en funcin de la tensin en el pin ADR

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

    Tensin en ADR A0 A1 Direccin de lectura Direccin 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 Dgito 10 1 0 Dgito 20 1 1 Dgito 31 0 0 Dgito 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 Pgina 60

  • Este libro introduce al lector en la reali-zacin de proyectos con el popular micro-controlador PIC16F84A.

    Los contenidos se presentan de maneraasequible y entretenida sin perder elnecesario nivel tcnico.

    El lector dispone de todo lo necesariopara realizar los proyectos de formacmoda ya que no requiere de grandesmedios materiales y todo est descritoen el libro o en el CD-ROM que acom-paa la obra.

    La obra es eminentemente prctica:contiene ms de 160 ejercicios y pro-yectos resueltos completamente, siendomuchos de ellos proyectos clsicos,como termmetros, relojes, calenda-rios, cerraduras electrnicas, control dedisplays, termostatos, temporizadores,alarmas, sirenas, comunicacin con elordenador, juegos, control de motores,microrobots, etc.

    El software utilizado es de libre distri-bucin y los circuitos emplean compo-nentes que pueden adquirirse fcilmen-te en cualquier tienda de componenteselectrnicos. El gasto a realizar pararealizar las prcticas planteadas esmnimo.

    Este libro posee su propia pgina Weben www.pic16f84a.com que pretende serun lugar de encuentro entre todos aque-llos que utilicen el libro, donde podrnintercambiar ideas, realizar consultas,descargar actualizaciones de los proyec-tos y tambin descargar apuntes deconocimientos necesarios.

    MMIICCRROOCCOONNTTRROOLLAADDOORRPPIICC1166FF8844

    Desarrollo de proyectos"

    ndice Extractado: Microcontrolador PIC16F84.Perifricos bsi-cos. Grabacin de microcontroladores PIC. Organizacin de lamemoria. Arquitectura Interna. Ensamblador. MPLAB.Programacin elemental. Saltos. Subrutinas. Manejo de tablas.Subrutinas de retardo. LCD. EEPROM de datos. TIMER0. Otrosrecursos. Interrupciones de entradas. Interrupcin por TIMER0.Teclado matricial. Comunicacin con el ordenador. Bus I2C.24LC256, memoria EEPROM en bus I2C. DS1624, Termmetro 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 lnea. Motores de corriente continua.Motores paso a paso. Servomotores de radiocontrol. Sensorespara microbtica. Construccin de un microrobot.

    50-64 MICROCONTROLADORES2 26/4/04 10:50 Pgina 61

  • 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 aldgito 1, D27:D20 al dgito 2, D37:D30al dgito 3 y D47:D40 al dgito 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 seal se genera internamente y

    pone todos los bits a "0", resultandouna visualizacin en blanco para los 4dgitos. nicamente se activa el flagPR del byte de estado.

    SALIDAS MULTIPLEXADASLas lneas de salida MXl y MX2

    se activan alternativamente en el mododinmico con una frecuencia que seobtiene desde el oscilador interno. Ycomo se puede ver en la figura 21, sepueden colocar cuatro displays. Parala seleccin de los displays seleccio-nados en cada momento se necesitaconectar dos transistores que trabajanen corte o saturacin.

    En el modo esttico nicamentese activa MXl con lo que solo se vi-sualiza sobre 2 dgitos, como puedeverse en la figura 22.

    Seguidamente vamos a probar elfuncionamiento del controlador de dis-plays en modo dinmico conectandoa las lneas SDA y SCL del SAA1046las correspondientes del PIC16F876(RC4/SDA y RC3/SCL), adems 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 direccin del dis-positivo ser b01110000 . 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 enva la condicin deSTART

    Seguidamente se manda el byte dedireccionamiento que en nuestro ca-so es b01110000.

    Despus se manda el byte de ins-truccin 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 detrs.

    Si el registro direccionado es el decontrol a continuacin debe enviarsela palabra de control. Despus se

    transmite la informacin queaparecer en cada uno de losdisplays.

    Finalmente el Master mandar unacondicin de STOP.

    Figura 21.- Conexin de cuatro displays al SAA1064 en modo dinmico

    Figura 22.- Conexin de dos displays al SAA1064 en modo esttico

    50-64 MICROCONTROLADORES2 26/4/04 10:50 Pgina 62

  • 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"; Revisin : 0.0 Programa para PIC16F87X; Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz = 1 uS; Perro Guardin :seshabilitado Tipo de Reloj : XT; Proteccin del cdigo: 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 interrupcingoto Inicio

    ;****************************************************************************;I2C_EmviaStart: Enva la condicin de StartI2C_EmviaStart

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

    Espera_Start btfss PIR1,SSPIF ;Fin de secuencia de tranmisin?goto Espera_Start ;Espera fin de transmisionreturn

    ;****************************************************************************;Send_Byte: Transmite el byte del W va 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: Enva la secuencia de stop

    I2C_EnviaStop bcf PIR1,SSPIF ;Restaura el flag del mdulo MSSPbsf STATUS,RP0 ;Seleciona pgina 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 mdulo MSSPbsf STATUS,RP0 ;Selecciona pgina 1bsf SSPCON2,RCEN ;Activa el modo receptorbcf STATUS,RP0 ;Selecciona pgina 0

    50-64 MICROCONTROLADORES2 26/4/04 10:50 Pgina 63

  • 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 mdulo MSSPbsf STATUS,RP0 ;Selecciona pgina 1bcf SSPCON2,ACKDT ;Pone bit ACK a "0"bsf SSPCON2,ACKEN ;Aciva la secuencia de generacin del bit ACKbcf STATUS,RP0 ;Selecciona pgina 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 estndar con niveles I2Cmovlw .9movwf SSPADD ;Velocidad del bus I2C 100KHzbcf STATUS,RP0 ;Selecciona banco 0

    ;Mdulo MSSP en el modo Master I2C

    movlw b'00101000'movwf SSPCON ;Mdulo MSSP en On

    Visualiza call I2C_EmviaStart ;Enva secuencia de iniciomovlw b'01110110' ;call I2C_EnviaByte ;Direccin del dispositivo SAA1064 en la PLUSmovlw .0 ;call I2C_EnviaByte ;Enva byte de instruccinmovlw b'01000111' ;call I2C_EnviaByte ;Enva byte de controlmovlw b'01110110' ;segmentos correspondientes a la "H"call I2C_EnviaByte ;Visualiza sobre el dgito D1movlw b'00111111' ;segmentos correspondientes a la "O"call I2C_EnviaByte ;Visualiza sobre el dgito D2movlw b'00111000' ;segmentos correspondientes a la "L"call I2C_EnviaByte ;Visualiza sobre el dgito D3movlw b'01110111' ;segmentos correspondientes a la "A"call I2C_EnviaByte ;Visualiza sobre el dgito D4call I2C_EnviaStop ;Enva secuencia de stop

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

    ORG 0x1F00bcf PCLATH,4bcf PCLATH,3 ;Selecciona la pgina 0goto Inicio

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

    50-64 MICROCONTROLADORES2 26/4/04 10:50 Pgina 64