Expended or A

download Expended or A

of 7

Transcript of Expended or A

  • 7/26/2019 Expended or A

    1/7

    1

    CCaappttuulloo77

    7. Problema: Gestin de una mquina expendedora

    Objetivos:

    Gestin de 3 displays por I2C mediante el componente SAA1064.

    Gestin de rebotes en las entradas mediante rutinas de librera.

    1. Manejo del diagrama de estados.

    Sizar el control de una mquina expendedora de refrescos. La mquina

    dispone de 4 tipos de refrescos y admite 4 tipos de monedas: 5, 20, 50 cntimos de euro y

    un euro, respectivamente. Para ello se muestra en primer lugar una tabla con las entradas ysalidas que tiene el sistema y su conexin al 16F88:

    SALIDAS (activadas a nivel alto) ENTRADAS (a nivel bajo)COMETIDO PIN COMETIDO Entradas

    8574 (000)Depsitos8574 (001)

    Devuelve moneda de 5 cntimos PB0 Moneda de 5 cntimos de Euro P0 P0

    Devuelve moneda de 20 cntimos PB1 Moneda de 20 cntimos de Euro P1 P1

    Devuelve moneda de 50 cntimos PB2 Moneda de 50 cntimos de Euro P2 P2

    Devuelve moneda de 1 euro PB3 Moneda de 1 Euro (100 cntimos) P3 P3Expende Lata 1: Naranja (1.25 ) PB4 Lata 1: Naranja (1.25 Euros) P4 P4

    Expende Lata 2: Limn (1.35 ) PB5 Lata 2: Limn (1.35 Euros) P5 P5

    Expende Lata 3: Agua (0.90 ) PB6 Lata 3: Agua (0.90 Euros) P6 P6

    Expende Lata 4: Isotnica (1.50 ) PB7 Lata 4: Isotnica (1.50 Euros) P7 P7

    SCL del bus I2C RA3

    SDA del bus I2C RA4 Cancelar Operacin (devuelve dinero) PA0

    Se utilizarn 3 dispositivos I2C:

    1. SAA1064 para mandar 3 dgitos a sendos displays de 7 segmentos.2. PCF8574 (con pines [A2-A0]=000) para las entradas del cliente (monedas y

    peticin de lata).

    3. PCF8574 (con pines [A2-A0]=001) para las entradas del estado de losdepsitos (monedas y latas).

    La nica entrada que se leer con control de rebotes ser la seal de Cancelar Operacin

    ya que va directa al pin PA0. El resto de entradas pasan a travs de los dispositivos

    PCF8574 pero se considerar que no generan rebotes.

  • 7/26/2019 Expended or A

    2/7

    2 Serie 74HCxx

    Habr dos variables globales: (a) Dinero que suma el valor de las monedas

    introducidas hasta el momento, y (b) Cambioque tomar un valor disinto de cero cuando la

    mquina devuelva el cambio.

    Se pide:

    a) Diagrama de estados del programa.b) Resolucin en lenguaje C.

    Notas:

    - Comprueba si el dinero introducido es mayor o igual al precio de la lata elegida y, en el

    caso de que se expenda la lata, dar un pulso a nivel alto en la salida correspondiente a

    esa lata.

    Si la mquina expendedora no tiene existencias de la lata que ha seleccionado el

    usuario entonces no har nada y esperar a que pulse el botn de otra lata o bien elbotn de cancelar para que se devuelva el dinero introducido.

    - Se identificar la moneda detectada y se sumar su valor a la variable dinero.

    Actualizar la variable global digitos[3] llamando a calculaDigitos que, adems, enva

    dichos valores por I2C al SAA1064 para que los muestre en el display .

    - Habr una variable global que se llamar Cambio. El programa devolver las monedas

    necesarias correspondiente al valor almacenado por esta variable pero intentando

    minimizar el nmero de las mismas. Se dar un pulso por cada moneda que se devuelva

    en el pin del puerto B correspondiente.

    En el caso de que la mquina no tenga el cambio completo devolver aquellas

    monedas que pueda. Lo que reste quedar visible en los displays de forma que pueda ser

    usado para el siguiente servicio.

  • 7/26/2019 Expended or A

    3/7

    Problema 16 3

    Esquemtico del circuito para el 16F88.

    RESET

    P16

    P15

    P14

    P13

    P12

    P11

    P10

    P9

    P8

    P16

    P15P14

    P13

    P12P11

    P10P9

    P7

    P6

    P5P4

    P3P2

    P1 P1

    P2

    P3

    P4

    P5

    P6

    P7

    P8

    10k

    100

    RA7/OSC1/CLKIN16

    RB0/INT/CCP1 6

    RB1/SDI/SDA 7

    RB2/SDO/RX/DT 8

    RB3/CCP1 9

    RB4/SCK/SCL 10

    RB5/SS/TX/CK 11

    RB6/AN5/T1OSO/T1CKI 12

    RB7/AN6/T1OSI 13

    RA0/AN0 17

    RA1/AN1 18

    RA2/AN2/CVREF/VREF- 1

    RA3/AN3/C1OUT/VREF+ 2

    RA4/AN4/T0CKI/C2OUT 3

    RA6/OSC2/CLKOUT15

    RA5/MCLR4

    U1

    PIC16F88

    CLOCK=8MHz

    PROGRAM=expendedora.COF

    12

    3

    45

    67

    8

    1615

    14

    1312

    1110

    9

    RN1330

    Isotnica

    Agua

    Limn

    Naranja

    Cambio5c

    nt.

    20cnt.

    50cnt.

    1

    ExpenderLata

    SCL14

    SDA15

    INT13

    A01

    A12

    A23

    P0 4

    P1 5

    P2 6

    P3 7

    P4 9

    P5 10

    P6 11

    P7 12

    U2

    PCF8574

    SCL14

    SDA15

    INT13

    A01

    A12

    A23

    P0 4

    P1 5

    P2 6

    P3 7

    P4 9

    P5 10

    P6 11

    P7 12

    U3

    PCF8574

    DepsitosMonedas

    DepsitosLatas

    IntroduccinMonedas

    PeticindeLata 5

    cnt.

    5cnt.

    20cnt.

    20cnt.

    50cnt.

    50cnt.

    1

    1

    Naranja

    Naranja

    Limn

    Limn

    Agua

    Agua

    Isotnica

    Isotnica

    10k

    R24k7

    R14k7

    dp g f e d c b a

    2 1

    SDA

    SCL

    P2

    P1

    ADRP3P4

    P5P6

    P7P8

    P9P10

    P11P12P13

    P14

    P15P16

    MX1

    MX2

    IC2 SAA1064

    dp g f e d c b a

    2 1

    7.d) Diagrama de estados del programa.

    La mquina expendedora puede considerarse como 3 procesos (ver figura) que trabajan

    en paralelo: (a) expedir lata si procede, (b) introduccin de monedas y (c) devolucin del

    cambio.

    Reposo0

    HayDinero

    CaeMoneda

    LataPulsada

    Devolver

    cae moneda

    Pulsa Lata

    Dinero=0

    Dinero>0

    Dinero>0

    Sigue Pulsado botn Lata

    Deja de Pulsar

    botn de lata

    Si pulsa cancelar :

    - Cambio=Dinero (devuelve

    cambio)

    - Dinero=0

    Dinero=0Reposo1

    Introduce Moneda

    Al detectar la moneda: (a) se prepara el

    cambio de estado y (b) Incrementa la

    variable Dinero

    Termin de caer

    la moneda

    No introduce moneda

    Reposo2

    Cambio=0

    Cambio>0 Cambio=0

    Al detectar lata se prepara el cambio

    de estado y se expende la lata:

    - Pulso a la salida de la lata elegida

    - Cambio= Dinero - PrecioLata

    - Dinero=0

    1. Este estado se repite una vez por

    cada moneda devuelta.

    2. Si no hubiera suficientes monedas

    para devolver el cambio, har:

    - Dinero= Cambio

    - Cambio= 0

    Cambio>0

  • 7/26/2019 Expended or A

    4/7

    4 Serie 74HCxx

    Antes de plantear cualquier diagrama de estados hay que preguntarse: se puede

    considerar el sistema como la suma de varios subsistemas que trabajan en paralelo? Si la

    respuesta es afirmativa la consigna siempre debe ser la misma: divide y vencers. Es

    mucho ms fcil, rpido y seguro resolver un problema como la unin de varios subsistemas

    sencillos que intentar resolverlo con un nico diagrama de estados.

    Se ejecutar un estado de cada proceso en el mdulo principal del programa para que no

    se desatienda ninguna tarea. Esta tcnica ya se vi en el problema 2.

    Los 3 diagramas de estado se corresponden con 3 procesos que trabajan en paralelo pero

    que no son independientes ya que se comunican entre ellos a travs de las variables globales

    Dinero y Cambio. Cualquier proceso puede consultar estas variables y modificar su valor en

    el momento que lo precisen. A continuacin se detalla el funcionamiento de cada proceso:

    a) Proceso de expedir una lata

    Reposo0

    HayDinero

    LataPulsada

    Pulsa Lata

    Dinero=0

    Dinero>0

    Dinero>0

    eja de Pulsar

    otn de lata

    Si pulsa cancelar :

    - Cambio=Dinero (devuelve

    cambio)

    - Dinero=0

    Dinero=0

    Al detectar lata se prepara el cambio

    de estado y se expende la lata:

    - Pulso a la salida de la lata elegida

    - Cambio= Dinero - PrecioLata - Dinero=0

    Reposo0: Permanece en este estado

    mientras no se introduzcan monedas

    (gestionado por el 2 proceso), es

    decir, mientras la variable Dinero

    valga 0. No atiende los botones de

    latas ni el botn de cancelar.

    HayDinero: Permanece en esteestado mientras haya dinero y no se

    pulse un botn de lata o el de

    cancelar. Si se pulsa el botn de

    cancelar se va al estadoReposo0y si

    se pulsa una lata hace dos cosas: (a)

    prepara el cambio al estado Lata y

    (b) Comprueba si el valor de la

    variable Dinero es mayor que el

    precio de la lata elegida. Si no hay

    suficiente dinero no hace nada y pasa

    al siguiente estado. Si la respuesta es afirmativa asigna a la variable Cambio =

    Dinero Precio Lata. Si la variable Cambioes distinta de 0 se pone en marcha el

    tercer proceso y deja de iterar el estadoReposo2. La variable Dinero se pone 0 paraque un nuevo usuario puede empezar a introducir monedas que incrementarn esta

    variable desde el siguiente proceso.

    LataPulsada:Mientras el usuario continue pulsando el botn de lata que ya ha sido

    procesada en el estadoLata- se mantiene en este estado.

  • 7/26/2019 Expended or A

    5/7

    Problema 16 5

    b) Proceso de introduccin de monedas (no afecta a la variable Cambio)

    CaeMoneda

    cae moneda

    Reposo1

    Introduce Moneda

    Al detectar la moneda:

    (a) se prepara el cambio

    de estado y (b)

    Incrementa la variable

    DineroTermin de caer

    la moneda

    No introduce moneda

    Reposo1: Permanece en este estadomientras no se introduzcan monedas.

    Cuando se detecte una moneda: (a) prepara

    el cambio al estado caeMoneda y (b)

    identifica la moneda introducida e

    incrementa el valor de la variableDineroen

    el valor correspondiente. Si esta variable

    tena el valor 0 entonces el proceso anterior

    deja su estado de reposo.

    CaeMoneda: Estado de espera a que lamoneda detectada termine de caer. As se

    evita procesarla mltiples veces.

    c) Proceso de devolucin del cambio

    Devolver

    Reposo2

    Cambio=0

    C am bi o>0 C am bi o= 0

    1. Este estado se repite una vez por

    cada moneda devuelta.2. Si no hubiera suficientes monedas

    para devolver el cambio, har:

    - Dinero= Cambio

    - Cambio= 0

    Cambio>0

    Reposo2: Permanece en este estado mientras el

    proceso de expedicin de lata no asigne un valor

    distinto de cero a la variable Cambio.

    Devolver:Se ejecuta una vez por cada moneda

    que devuelve decrementando la variable Cambio

    hasta que llegue al valor 0. Si detecta que no hay

    monedas para devolver el cambio entonces hace

    las siguientes asignaciones: Dinero=Cambio y

    Cambio=0. De esta forma puede retornar al

    estado Reposo2. La variable Dinero es distintade 0 lo que significa que ese cambio no devuelto

    queda como crdito para pedir una nueva lata.

    7.j) Diseo de la rutina CalculaDigitos.La rutina CalculaDigitos lee el valor de la variable Dinero (2 bytes) y calcula los 3

    dgitos para mostrarlos en los displays. Esta rutina realiza 2 divisiones enteras.

    1. Digitos[2]= Cociente1(Dinero/100)2. Digitos[1]= Cociente2(resto1/10) resto1= resto deDinero/1003. Digitos[0]= resto2(resto1/10)

    Esta rutina se llama cuando se modifica el valor de la variable Dinero.Cada vez que el

    usuario introduce una moneda o la mquina retorna una moneda hay que llamarla para que

    actualice la variableDigitos. A continuacin se muestra como acta esta rutina si el dinero

    introducido es 2,75.

    275 100275

    75 1075

    digitos[2]= 2

    Cociente1resto1 Cociente2resto2

    digitos[1]= 7 digitos[0]= 5

  • 7/26/2019 Expended or A

    6/7

    6 Serie 74HCxx

    Componente SAA1064 para el manejo de 4 displays

    El dispositivo SAA1064 se conecta mediante bus I2C a un microcontrolador y permite

    disponer hasta de 4 displays en la placa. Los displays son dispositivos que necesitan muchos

    pines y que, adems, consumen mucho. Con este dispositivo solo se requieren 2 pines del

    microcontrolador (SDA y SCL) y el consumo se reduce multiplexando (rotando) los displayspor parejas mediante un oscilador RC interno. De esta forma en un momento dado solo hay 2

    displays encendidos por lo que el consumo se reduce a la mitad.

    En la siguiente figura se muestra como se conectan 4 displays al SAA1064.

    P16

    P15

    P14

    P13

    P12

    P11

    P10

    P9

    P8

    P16

    P15P14

    P13

    P12

    P11

    P10

    P9

    P7

    P6

    P5

    P4

    P3

    P2

    P1 P1

    P2

    P3

    P4

    P5

    P6

    P7

    P8

    dp g f e d c b a

    2 1

    SDA

    SCL

    P2

    P1

    ADR

    P3

    P4

    P5

    P6

    P7

    P8

    P9

    P10

    P11

    P12

    P13

    P14P15

    P16

    MX1

    MX2

    IC2

    SAA1064

    dp g f e d c b a

    2 1

    La direccin del SAA1064 para poder seleccionado por el maestro es la siguiente:

    MSB LSB

    S 0 1 1 1 0 A1 A0 0 ACKDireccin del esclavo WR

    Los bits A1 y A0 se configuran por hardware pero de una forma muy peculiar ya que solo se

    utiliza un pin externo (ADR) de entrada analgica para ello. Dependiendo de la tensin de

    este pin se tienen los siguientes valores para los bits:

    Tensin pin ADR A1 A0 Direccin como esclavo en escriturab01110(A1)(A0)0

    0V 0 0 b01110000

    3/8 Vcc 0 1 b01110010

    5/8 Vcc 1 0 b01110100

    Vcc 1 1 b01110110

  • 7/26/2019 Expended or A

    7/7

    Problema 16 7

    Registros internos del SAA1064

    Este dispositivo contiene 5 registros internos: uno de control y 4 de datos.

    Registro Direccin Sc Sb SA

    Control 0 0 0 0Dgito 1 1 0 0 1Dgito 2 2 0 1 0Dgito 3 3 0 1 1Dgito 4 4 1 0 0

    Los registros Dgito n contienen la informacin que muestra el display correspondiente.

    Siendo el dgito 1 el de las unidades, dgito 2 el de las decenas, La informacin que

    contienen estas variables est en formato 7 segmentos. Por ejemplo, si el dgito 1 est

    mostrando en pantalla el nmero 1, la informacin que contiene la variable es b00000110

    que nos indican que se iluminan los dos segmentos que representan al nmero 1. Sidgito 2

    fuera el nmero 8 entonces esta variable almacenara el valor b01111111 que iluminara los

    7 segmentos del display.

    La informacin de los bits de la variable de control son los siguientes:

    C0: Si vale 0 trabaja en modo esttico y solo se pueden conectar 2 displays enmodo continuo (no hay multiplexacin).

    Si vale 1 trabaja en modo dinmico y se pueden conectar hasta 4 displays.

    C1: Si vale 0 los dgitos 1 y 3 estn apagados (unidades y centenas). Si vale 1estn encendidos.

    C2: Si vale 0 los dgitos 2 y 4 estn apagados. Si vale 1 estn encendidos. C3: Si vale 0 los segmentos funcionan en modo normal. Si vale 1 todos se

    encienden para su comprobacin.

    C4: Aade 3mA de corriente por segmento para que se ilumine un poco ms.

    C5: Aade 6mA de corriente por segmento para que se ilumine un poco ms.

    C6: Aade 12mA de corriente por segmento para que se ilumine un poco ms.

    Ejemplo: Configurar el LCD en modo dinmico con 15mA de corriente por

    segmento:

    Control: B01010111

    El manejo del SAA1064 a travs del bus I2C es tan simple como el envo de 7 bytes

    por parte del maestro (PIC16F84a/F88). En el siguiente ejemplo se particulariza para un

    SAA1064 ubicado en la direccin b01110000, con 15mA de luminosidad por segmento yque muestra el nmero 1803:

    1. Direccin de esclavo: b01110000' ( Los pines A1,A0 configurados a 0, )2. byte de direccin de reg.: 0 (se comienza por el registro de control)3. byte de control: b01010111 (15mA y modo dinmico: 4 displays)4. byte de la unidades: b01001111 (nmero 3en formato 7 segmentos)5. byte de la decenas: b00111111 (nmero 0en formato 7 segmentos)

    6. byte de la centenas: b01111111 (nmero 8en formato 7 segmentos)7. byte de la u. millar: b00000110 (nmero 1en formato 7 segmentos)