curso pic16f87x 10

Upload: proteus7

Post on 31-May-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/14/2019 Curso PIC16F87X 10

    1/8

  • 8/14/2019 Curso PIC16F87X 10

    2/8

    MICROCON

    TROLADORES

    65RESISTOR

    rrecto, se enva otro byte que puedeser una direccin, un comando, etc.Si la secuencia de transmisin finali-za, el Slave pondr a 1 la seal SDA(ACK alto) para que el master puedagenerar la secuencia de Stop.

    En una operacin I2C con el m-dulo MSSP intervienen seis registros:q Registro de control SSPCONq Registro de control SSPCON2q Registro de estado SSPSTATq Buffer serie de Transmisin / Re-cepcin SSPBUFqRegistro de desplazamiento SSPSR,que no es accesible directamente.q Registro de direccin SSPADD.

    Los cuatro bits del registro de con-trol SSPCON (SSPCON ) per-miten en control del mdulo I2C en

    una de las siguientes formas:q Modo Slave del I2C ( 7 bits de di-reccin)q Mdulo Slave del I2C (10 bits dedireccin)qModo Master del I2C, reloj = SC/4(SSPADD+1)

    Antes de seleccionar uno de losmodos del I2C, es necesario progra-mar los pines SCL y SDA con los va-lores apropiados en los bits del regis-tro TRIS. Con slo seleccionar uno

    de los modos y colocando a 1 el bitSSPEN, las patillas SCL y SDA seconfiguran automticamente comoseal de reloj y datos respectivamen-te. Con el bit CKE (SSPSTAT)se configuran los niveles de entradapara estas patillas. Cuando CKE es1, los niveles estn de acuerdo a lasespecificaciones SMBUS; sin em-bargo, cuando es 0, los niveles se-rn conformes a las especificacionesdel bus I2C.

    El registro SSPSTAT, que es slode lectura, contiene el estado de los

    datos a transferir. Esta informacin

    incluye la deteccin de los datos bitsde Start o Stop, indica si el byte reci-bido es un dato o una direccin de 10bits y si ser ledo o escrito.

    El registro SSBUF es de lectu-ra/escritura y en l se guardan los da-tos a transferir por el bus o del que seleern los datos recibidos. En el modode transmisin los modos almacena-dos en este registro se transfieren alregistro SSPSR desde el cual saldrn

    en serie por la lnea SDA. Los dos re-gistros forman un doble buffer quepermiten que en recepcin se invier-ta el sentido de los datos; son reci-bidos en serie por el registros SSPSRy transferidos al SSPBUF cuando larecepcin finaliza al completarse unbyte. Si se recibe otro byte sin que elanterior se haya ledo, el bit SSPOV(SSPCON) se pone a 1 para in-dicar que el byte recibido en el regis-tro SSPSR se ha perdido.

    El registros SSPADD ,mantienela direccin en el modo de 10 bits es

    necesario escribir el byte alto de la di-reccin (1111 0A9 A8 0) seguido delbyte de menor peso (A7:A0).

    MODO ESCLAVOCuando el bus I2C se configura co-

    mo esclavo, las patillas SCL y SDAdebern configurarse como entradascon los valores apropiados en el re-gistro TRISC. El mdulo SSP anula-r el estado de las entradas con los da-tos de salida cuando as se requiera(transmisin esclavo). Cuando una di-

    reccin o un dato transferido despusde una direccin, se ha recibido, elhardware genera automticamente elimpulso ACK y carga los datos a tra-vs del registro SSPSR en el registroSSPBUF.

    El mdulo SSP no crear el im-pulso de reconocimiento ACK encualquiera de las siguientes dos situa-ciones ( o en las dos a la vez):

    q El bit indicador de buffer llenoBF (SSPSTART ) se ha puesto auno antes de que la transferencia sea

    recibida.

    q El bit indicador desbordamientoSSPOV (SSPCON) se ha puestoa uno antes de que la transferencia searecibida.

    Si el bit BF est a 1, el registroSSPSR no carga los valores en elSSPBUF pero, sin embargo, los bitsSSPIF y SSPOV si se ponen a 1.

    DIRECCIONAMIENTOUna vez que el mdulos MSSP se

    ha habilitado, espera que ocurra unacondicin Start, a continuacin losochos bits son tomados y desplazadosen el registro SSPSR por cada flancoascendente de la seal de reloj SDL.El valor del registro SSPSR escomparado con el del SSPADD en elflanco de bajada del octavo impulsode reloj, si la direccin es igual y ade-ms los bits BF y SSPOV estn a ce-ro tambin ocurren los siguienteseventos:

    q El valor almacenado en el registro

    SSPSR es cargado en el registro SSP-BUF en la bajada del octavo impulsoSCL.q El bit BF (buffer lleno) se ponea 1 al bajar a cero el octavo impul-so de reloj.q Se genera un impulso #ACK.q El Flag de interrupcin SSPIF(PIR1) se pone a 1 para generarla interrupcin si es que est habilita-da. En el flanco de bajada del nove-no pulso de la seal de reloj SCL.

    En el modo de direccionamientode 10-bits, es necesario recibir por elSlave dos bytes de direccin. Loscinco bits mas significativos (MSbs)del primer byte de direccin espe-cifica si sta es una direccin de 10bits. El bits (SSPSTAT ) debeespecificar escritura, de esta mane-ra el dispositivo slave, recibir unsegundo byte de direccin.

    Para una direccin de 10-bits, elprimer byte ser igual a 1111 0 A9A8 0 ' dnde A9 y A8 son los dos me-nos significativos (MSbs) de la di-

    reccin. La sucesin de eventos du-

    Figura 3.- El Master Transmite informacin al Slave

  • 8/14/2019 Curso PIC16F87X 10

    3/8

    rante una direccin de 10-bits es co-mo sigue, con los pasos 7-9 con el es-lave-transmitiendo:

    1. Recibe el primer byte (alto) deDireccin (los bits , BF, y el bit UA(SSPSTAT ) se ponen a "1").

    2. Se actualiza el registro SS-PADD con segundo (bajo) byte deDireccin (se ponen a cero los bitsUA y se libera la lnea SCL ).

    3. Se leen los registros SSPADD(se pone a cero el bit BF) y el bit deflag se pone a cero.

    4. Se recibe el segundo (bajo) by-te de Direccin (los bits ,BF, y UA seponen a uno).

    5. Se actualiza el registro SS-PADD con el primer (alto) byte deDireccin. Esto pone a cero el bit UAy deja libre la lnea SCL.

    6. Se lee el registro SSPADD (sepone a cero el bit BF) y el bit de flagse pone a cero.

    7. Se recibe la condicin de Startrepetida.

    8. Se recibe el primer byte (al-

    to) de Direccin (los bits y BF seponen a uno).

    9. Se lee el registro SSPADD (sepone a cero el bit BF) y el flag se po-ne a cero.

    RECEPCIN Y TRANSMISINEN EL MODO SLAVE

    Cuando el bit del byte de direc-cin que se ha recibido est a cero yocurre una igualdad en la direccin,el bit del registro se pone a cero y secarga la direccin recibida en el re-gistro SSPADD. Cuando el byte dedireccin produce un desbordamien-to no se enva el impulso de recono-cimiento ACK. Esta situacin est de-

    finida porque uno de los bits BF(SSPSTAT ) o SSPOV (SSP-CON) o ambos, estn a uno. Porcada byte recibido el SSP puede oca-sionar una interrupcin si previamen-te se ha puesto a cero el bit (PIR).El registro SSPSAT se utiliza para co-nocer el estado del byte recibido.

    Si el bit recibido en el byte de di-reccin se encuentra a 1 y la direc-cin es reconocida, el bit del regis-tro se pone a 1 y la direccin se al-macena en el registro SSPADD, se

    enva el impulso de reconocimientoACK con el noveno bit de reloj y semantiene a cero el pin SCL. El dato atransmitir se deber cargar en el re-gistro SSPADD, con lo que tambinse cargar en el SSPSR, El pin SCLse habilita con el bit CLK (SSP-CON) y el master mantendr elcontrol de la seal de reloj. El masterobtendr un bit de datos por cada im-pulso de reloj, en la bajada del octavobit todos los bits estarn ya desplaza-dos en los registros SSPSR. Por ca-da byte as transmitido el SSP oca-

    sionar una interrupcin si previa-

    Nota: La condicin de Start

    Repetida (paso 7) en el modo del

    10-bits se utiliza solo por la ne-

    cesidad de emparejar la primera

    direccin de 7 bits. . El usuario

    no actualiza el SSPADD para el

    segundo byte de la direccin.

    Estado De los bits enla transferencia

    0 0 SI SI SI

    1 0 NO NO SI

    1 1 NO NO SI0 1 SI NO SI

    SSPSRSSPBUF

    GeneraimpulsoACK

    Sube a uno el bit SSPIF(CCP genera interrupcinsi est habilitada)

    ACTUACIN DE LOS BYTES RECIBIDOSEN LA TRANSFERENCIA DE DATOS

    BF SSPOV

    Figura 4.- Cronograma del protocolo I2C en recepcin y modo de direccionamiento de 7 bits

    Figura 5.- Cronograma del protocolo I2C en transmisin y modo de direccin de 7 bits

    Nota : Las clulas sombreadas muestran las condiciones dnde el soft-ware del usuario no puso a cero la condicin de desbordamiento

  • 8/14/2019 Curso PIC16F87X 10

    4/8

    mente se haba puesto a cero el bit(PIR1). El registro SSPSAT seemplear para conocer el estado delbyte transmitido.

    El impulso ACK se activa en lasubida del noveno bit SCL. Si la l-

    nea SDA se mantiene a nivel alto (nohay impulso ACK), el dato a transfe-rir se ha completado. Si el impulsoACK no es enclavado por el esclavo,este se prepara para otro evento Start.Pero si la lnea SDA est a nivel bajo(presencia ACK) el dato a transmitirse cargar en el registro SSPADD ypor consiguiente en el SSPSR.

    LLAMADA GENERAL

    Ya hemos comentado que el pri-mer byte que enva el master despus

    de la condicin Start corresponde a ladireccin del esclavo al que van diri-gidos los siguientes datos. Excepcio-nalmente se puede realizar una lla-mada general. Es decir, a todos los es-clavos, a la que, en teora, todosdebern responder.

    Esta llamada general tiene lugarcuando la direccin enviada tiene to-dos los bits a cero (incluso ) y es re-conocida si el bit GCEN est habili-tado (SSPCON2 =1).

    OPERACIN SLEEP

    Mientras est en modo Sleep, elmdulo I2C puede recibir direccio-nes o datos, y cuando se empareja ladireccin o byte completo se despier-ta el procesador del modo Sleep (si lainterrupcin de SSP se habilita).

    EFECTO DEL RESET

    Un reset deshabilita el mduloSSP y termina con la transferencia encurso.

    MODO MASTER

    Trabajando en modo master en elbus I2C puede genera interrupcionescuando son detectadas las condicio-nes de START y STOP. Cuando seocasiona un reset o se deshabilita elmdulo MSSP los bits STOP (P) ySTART (S) se borran. En este modode trabajo las lneas SCL y SDA sonmanipuladas por el hardware del pro-pio puerto MSSP. Cuando se habilitala interrupcin del SSPel flag se pon-dr a uno cuando ocurra uno de lossiguientes eventos:q Una condicin de Start

    q Una condicin de Stop

    Figura 6.- Cronograma del protocolo I2C slave, en transmisin y modo de direccin de 10 bits

    Figura 7.- Cronograma del protocolo I2C slave, en recepcin y modo de direccin de 10 bits

    Figura 8.- En modo I2C se puede realizar una llamada general a todos los esclavos. La

    direccin es 00H con R/W a cero.

  • 8/14/2019 Curso PIC16F87X 10

    5/8M

    ICROCONTROLADOR

    ES

    68ESISTOR

    q

    Un byte de datos ha sido transmiti-do/recibidoq Se ha transmitido el bit de recono-cimiento ACKq Repeticin de condicin Start.

    Cuando el dispositivo est confi-gurado como master es el encargadode generar todos los impulsos de relojy las condiciones START y STOP;

    la transferencia finaliza con una con-dicin STOP o con una repeticin dela condicin START, Con la repeti-cin de sta ltima condicin, tienelugar una nueva transferencia de da-tos, por lo que el bus I2C no se libera.

    El master que transmite, generaun impulso de reloj (SCL) por cadabit a transmitir por la patilla SDA. Elprimer byte ha de ser siempre la di-

    reccin del dispositivo esclavo al queirn destinados los datos (o del que serecibirn). Despus de este primer by-te se enva el bit de lectura o escritu-ra, un uno en este bit indica que seproceder a leer del circuito esclavo,por el contrario, cuando es un cero elesclavo reconocer los siguientes by-tes como bits a escribir en su memo-ria, registros, etc. Despus de cada

    Registros asociados con la operacin I2CDireccin Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en POR,BOR Valor en el resto de Reset

    Bh,8Bh

    0Bh,18Bh INTCON GIE PEIE(1) TOIE INTE RBIE TOIF INTF RBIF 0000 000x 0000 000u

    Ch PIR1 PSPIF1 ADIF(1) RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

    Ch PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000Dh PIR2 -- (2) -- EEIF BCLIF --- --- CCP2IF -r-0 0 - -0 -r-0 0 - -0

    Dh PIE2 -- (2) -- EEIE BCLIE --- --- CCP2IE -r-0 0 - -0 -r-0 0 - -0

    7 TRISC PORTC (Direccinamiento de los Datos) 1111 1111 1111 1111

    3h SSPBUF Registro Buffer Transmisin/Recepcin del mdulo SSP xxxx xxxx uuuu uuuu

    4h SSPCON WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPPM0 0000 0000 0000 0000

    4h SSPSTAT SMP SKE D/#A P S R/W UA BF --00 0000 --00 0000

    Leyenda x = desconocido u= sin cambios - = Sin implementar, se lee 0

    Nota 1: Estos bits estn reservados en los modelos de 28 pines, mantener siempre borrados

    2: Estos bits estn reservados, mantener siempre borrados

    Figura 9.- Diagrama de bloques del SSP configurado como I2C en modo Master

  • 8/14/2019 Curso PIC16F87X 10

    6/8

    byte transmitido el mdulo se espera a recibir un bit dereconocimiento ACK y por ltimo, tendr lugar una re-peticin de la condicin START o STOP para finalizarla operacin.

    Cuando el master tiene que actuar como receptor elprimer byte que tiene que transmitir es la direccin delesclavo del que proceder a leer, seguido del bit (en es-

    te caso, el bit ser un uno porque va a proceder a leerde esclavo). Los bits de datos los recibir a travs de la pa-tilla SDA por cada impulso de reloj, SCL, que genere.Despus de cada byte recibido se genera un bit de re-conocimiento ACK y se finalizar con una repeticinde la condicin START o STOP.

    Una secuencia tpica de transmisin ser lasiguiente:

    a) El usuario genera una condicin START habili-tando el bit START (SEN) del registro SSPCON2.

    b) El se pone a uno. El mdulo espera el tiemporequerido para completar la condicin de START an-

    tes de que se inicie una nueva operacin.c) El usuario cargar en el registro SSPADD la di-reccin del esclavo.

    d) La direccin es desplazada bit a bit a la salidaSDA

    e) El mdulo MSSP desplaza el bit ACK del dispo-sitivo esclavo y escribe su valor en el registro SSPCON2(SSPCON2).

    f) El mdulo genera una interrupcin cuando finali-za el noveno impulso de reloj (pone a uno ).

    g) El usuario cargar los ocho bits de datos en el regis-tro SSPADD

    Figura 10.- Diagrama de flujos que

    deber seguir el programa para

    generar una condicin de START

  • 8/14/2019 Curso PIC16F87X 10

    7/8

    MICROCON

    TROLADORES

    70ESISTOR

    h) Los datos son desplazados bita bit a la salida SDA hasta transmitirlos ocho bits.

    i) El mdulo MSSPdesplaza el bitACK recibido del dispositivo esclavoy escribe su valor en el registro SSP-

    CON2 (SSPCON2).j) Se genera una interrupcin al fi-

    nalizar el noveno impulso de reloj (po-ne a 1 ).

    k) El usuario genera una condi-cin STOP habilitando el bit PEN enel registro SSPCON2

    l) Se genera una interrupcin cuan-do se completa la condicin de STOP.

    La condicin de START la iniciael usuario cuando habilita el bit SEN(SSOCIN2 ). La velocidad del ge-

    nerador de baudios se recarga con elcontenido de los bits del registro SS-PADD y se inicia la cuenta. Lasdos patillas (SDA y SCL) se manten-drn a nivel alto hasta que transcurra eltiempo TBRG (BRG=Baud Rate Ge-nerator) despus del cual, la patilla SDAbajar a cero. Esta accin de bajar SDAmanteniendo a uno la seal de reloj es laque indica que la condicin START hatenido lugar y causa que suba a uno el

    bit S (SSPSTAT ). Seguidamente,el generador se vuelve a recargar conel contenido de SSPADD y sereanuda de nuevo la cuenta. Una vezhaya transcurrido el tiempo TBRG elbit SEN se borrar y se suspender la

    accin de mantener congelada a nivelbajo la patilla SDA. SCLbajar a cero.

    Si el usuario intenta escribir en elregistro SPBUF cuando una condi-cin START est en progreso el bitWCOL subir a uno y no se cargar elregistro SPBUF.

    REPETICIN DE LASEAL DE START

    Hay muchos casos en los que tienelugar un continuo envi o recepcin dedatos del mismo dispositivo esclavo.

    Para estos casos, no es necesario repe-tir todas las secuencias iniciales (unasecuencia START seguida de la direc-cin del esclavo) basta con repetir unacondicin START para proseguir conel envo o recepcin de datos.

    Una repeticin de la condicinSTART tiene lugar si despus de quebaje a cero el noveno impulso de relojhay una subida a uno de SDA y semantiene durante TBRG, despus sesube el reloj y tambin se mantienedurante TBRG. Por ltimo, se baja acero la patilla SDA. En realidad, si

    observamos el diagrama de tiemposveremos que es muy similar a la con-dicin START del inicio.

    Para ocasionar la repeticin hay queponer a uno el bit RSEN (SSPCON2< 1>) cuando el mdulo I2C est inac-tivo. Al realizarlo, la patilla SCL semantiene a nivel cero y el ndice de ve-locidad del generador de baudios se re-carga con el contenido del registro SS-PADD para iniciar la cuenta. Lapatilla SDA es liberada (se lleva a uno)y se desencadena el proceso descrito en

    el prrafo anterior, finalizando con elborrado del bit RSEN. Inmediatamen-te que se detecta la condicin STARTen las patillas SDA y SCL, el bit S(SSPSTAT subir a uno; a conti-nuacin se deber escribir en el registroSSPBUF con los siguientes bytes.

    SECUENCIA DE

    RECONOCIMIENTO ACK

    La secuencia de reconocimiento sehabilita poniendo a uno el bit ACKEN(SSPCON2). Cuando este bit esta uno la patilla SCLes puesta a cero y el

    contenido del bit ACK se presenta en

    Figura 11.- Diagrama de flujos

    que deber seguir el programa

    para generar una condicin de

    START

    Figura 12.- Diagrama de flujo que deber de seguir el programa para

    generar una repeticin de la condicin de START

  • 8/14/2019 Curso PIC16F87X 10

    8/8

    MICR

    OCONTROLADORES

    71RESISTOR

    la patilla SDA. Si se desea generar unACK el bitACKDT deber estar borrado, si no, se deber po-ner a uno antes de iniciar la secuencia de recono-cimiento. El generador de baudios contar un pe-riodo TBRG antes de llevar a nivel alto la patillaSCL volver a contar otro periodo y la llevar a ni-vel bajo. Acontinuacin, el bit ACKEN ser bo-rrado automticamente, el generador de baudiosse detendr y el mdulo SSP se mantendr en mo-do inactivo.

    Tambin en este caso, si se trata de escri-bir en el registro cuando est en progreso la

    secuencia de reconocimiento, subir a uno el,bit WCOL y no tendr efecto la escritura en elregistro.

    LA CONDICIN DE STOPPodemos decir que esta secuencia es la inver-

    sa de la START, se inicia habilitando el bit PEN(SSPCON2). La secuencia finaliza cuandosuba a uno la patilla SDA (tambin subir a uno elbit P (SSPSTAT ), transcurra el tiempoTBRG, se borre el bit PEN y suba a uno el .

    En el prximo nmero de esta revista vere-mos algunos dispositivos I2C, y como trabajancuando se le conectan a un microcontrolador

    PIC16F87X.

    Figura 13.- Diagrama de flujos completo que deber

    seguir el programa para una transmisin en modo

    master.

    Figura 14.- Diagrama de flujos que debe seguir el

    programa para recepcin en modo master

    Figura 15.- Diagrama de flujos que deber seguir el programa

    para enviar una condicin de STOP