Expended or A
-
Upload
maria-marmago -
Category
Documents
-
view
215 -
download
0
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)