• No se han encontrado resultados

Capítulo 3 Diseño propuesto

3.3 Sistema embebido

3.3.1 Componentes del sistema embebido

Este bloque está conformado por 5 componentes principales, los cuales son:  Microcontrolador.

 Display LCD

 Memoria EEPROM serial externa.  Puerto PS/2.

 Botones de selección.

A continuación se describirán el funcionamiento, conformación y configuraciones de cada uno de los componentes anteriormente mencionados, para después mostrar cómo es que todos ellos se interconectan y funcionan en conjunto.

Microcontrolador.

El microcontrolador es el cerebro del sistema embebido y, en pocas palabras, es el encargado de ejecutar el algoritmo desarrollado para controlar las funciones del sistema embebido y el lector de códigos de barras.

Figura 3.3 Microcontrolador PIC16F877A.

El microcontrolador que se decidió implementar en este prototipo propuesto fue el PIC16F877A de la marca Microchip (figura 3.3). La razón por la cual se prefirió el uso de este microcontrolador sobre otros similares, fue su amplia disponibilidad en el mercado, su precio accesible y la amplia documentación, referente a su uso, con la que cuenta.

Para que el dispositivo PIC16F877A funcione adecuadamente, debe de energizado con un voltaje de 5Vdc, tener un circuito oscilador (del cual su tipo, dependerá de la fuente de reloj configurada), tener un arreglo alrededor de la terminal de reset y tener una serie de instrucciones cargadas en su memoria de programa. Para este prototipo, el programa se escribió y compiló mediante el uso del software Mikro C Pro for Pic 4.6, de la empresa Mikroelektronika y fue instalado en el

30

microcontrolador mediante el hardware ICD2 y software MPLAB 8.6, ambos de la empresa Microchip.

El programa que se implemento finalmente en el microcontrolador PIC16F877A se encuentra anexado en el apéndice B de la sección de anexos. Para facilitar la comprensión del programa implementado e ilustrar la forma en que funciona este algoritmo, se realizo el diagrama de flujo que se observa en las figuras 3.4, 3.5 y 3.6.

De manera muy general, lo que sucede en el diagrama de flujo es lo siguiente. Una vez que el sistema embebido es energizado e inicializado, lo primero que realiza el programa es inicializar los registros que el microcontrolador implementara a lo largo de la ejecución de este algoritmo. Después se ejecutan una serie de comandos que inicializan la pantalla LCD, la comunicación I2C entre el microcontrolador y la memoria EEPROM serial externa, así como también la comunicación PS/2 entre el sistema embebido y el lector de códigos de barras.

Cabe mencionar que con el objetivo de facilitar la implementación y manejo de la pantalla LCD, la comunicación I2C y PS/2, se implementaron dentro del proceso de compilación del algoritmo implementado, una serie de funciones agrupadas en tres librerías dentro del compilador Mikro C Pro for Pic 4.6. Estas librerías son I2C, Lcd y PS2. El uso de estas librerías facilito en gran medida el desarrollo de algoritmo implementado en el microcontrolador PIC16F877A, ya que de no contar con ellas, se tendrían que haber desarrollado las funciones necesarias para la implementación de estas características dentro del sistema embebido.

Una vez que se inicializaron la pantalla LCD, la comunicación I2C y PS/2, el siguiente proceso que realiza el algoritmo es guardar en la memoria EEPROM serial externa los datos correspondientes al conjunto de productos que el sistema embebido será capaz de reconocer (base de datos). De tal modo que se determino que para cada producto, era necesario usar 30 bytes de memoria para almacenar el código de barras correspondiente a ese producto, el nombre del producto que se mostrará en la pantalla LCD y el precio de este. Los datos referentes al código de barras y nombre del producto ocupan un espacio de memoria de 26 bytes, siendo asignados 16 bytes al código de barras y los 10 restantes al nombre del producto. Cabe mencionar que estos datos son almacenados en formato ASCII, de modo que pueden ser mostrados directamente en la pantalla si así se deseará (como en el caso del nombre del producto). En cuanto al precio del producto, este es procesado en forma de dato flotante, esto con el objetivo de hacer más precisa la operación matemática involucrada en el algoritmo. Para almacenar este dato en la memoria externa, este debe de ser seccionado en 4 partes, de tal modo que un dato flotante necesita 4 bytes para poder ser almacenado en la memoria externa. Para poder seccionar un dato flotante dentro del compilador Mikro C Pro for Pic 4.6, es necesario agregar una librería al proyecto, la cual es #include<built_in.h> y utilizar las funciones Highest(pt), Higher(pt), Hi(pt)), Lo(pt), en donde pt, para este caso, es el dato flotante.

Hay que destacar que esta parte del algoritmo fue diseñada con el objetivo de comprender como es que funciona la memoria EEPROM serial externa 24LC1025 y la comunicación I2C entre el microcontrolador y esta memoria, para después agilizar la implementación de la característica de actualización inalámbrica de la base de datos, la cual para este prototipo propuesto no se logro implementar. Además, con el uso de esta memoria externa, se garantiza que más de 4000 productos puedan ser reconocidos por el prototipo. Para lograr lo anterior se implementaron algunas funciones agrupadas dentro de la librería I2C.

Regresando al diagrama de flujo, después de que los datos correspondientes al conjunto de productos que el sistema embebido será capaz de reconocer, fueron guardados en la memoria externa, la siguiente acción que realiza el algoritmo es limpiar las variables cuenta y barcode con valores de 0x00. En la variable cuenta (la cual es del tipo flotante) se almacenara el monto

31

estimado que el usuario pagará en caja, mientras que en la variable barcode (que en realidad es un vector de 16 bytes) se almacenará el código de barras que el lector identifique después de una lectura.

Después se despliega en la pantalla LCD el mensaje “Elija Producto” y “Cuenta $__.__”, siendo que en los espacios se mostrara el estimado actual a pagar. Una vez que se realizo esto, el algoritmo entra en bloque de decisión, en el cual, se plantea la siguiente cuestión, ¿El lector escaneo un código de barras? Si la respuesta es no, el algoritmo vuelve a realizar la misma pregunta, en caso contrario, el código escaneado es almacenado en la variable barcode.

Una vez que se almaceno el código recién escaneado en la variable barcode, el algoritmo vuelve a entrar en otro bloque de decisión, en el cual se plantea lo siguiente, ¿El código en barcode se encuentra almacenado en la base de datos (memoria externa)? Para dar respuesta a esto, se crearon una serie de funciones en las cuales se ingresa a la base de datos y se extraen los códigos de barras de cada uno de los productos almacenados. Estos códigos de barras son comparados con el código de barras en barcode, y de esa forma se determina sí el código recién escaneado se encuentra registrado en la base de datos. En caso de que el código no esté en la base de datos, se desplegará el mensaje de “No registrado” en la pantalla LCD durante 5 segundos, para después volver a mostrar el mensaje “Elija Producto” y “Cuenta $__.__”. En caso de que el código en barcode efectivamente se encuentre dentro de la base de datos, se obtienen los datos del producto relacionado con ese código de barras (precio y nombre del producto), para después desplegarlos en la pantalla LCD junto con el mensaje “¿Anexar a cuenta?”.

Después el algoritmo vuelve a entrar en otro bloque de decisión, ¿Sumar, restar ó pasaron 5 segundo? En esta parte del algoritmo es en donde se le da al usuario el poder de decidir qué hacer con los datos obtenidos a partir de la identificación de un producto determinado. Sí el usuario |selección) a su cuenta, lo que el algoritmo realiza es una suma entre el contenido de la variable cuenta y el precio del producto. El resultado de esta suma es almacenada en la variable cuenta y se vuelve a mostrar el mensaje “Elija Producto” y “Cuenta $__.__”. En caso de que el usuario decida restar el precio del producto recién identificado de su cuenta a pagar (presionando el botón de resta), el algoritmo comprobara si la cuenta es igual a 0, de ser así se desplegará el mensaje “Cuenta vacia” en la pantalla LCD. Sí la cuenta no es igual a 0, el algoritmo realizara la resta entre la cuenta y el precio del producto, después comprobará si la cuenta es mayor ó igual a cero. Si lo anterior es cierto, el algoritmo mostrará el mensaje “Elija Producto” y “Cuenta $__.__”. En caso de que la cuenta sea menor que 0, se desplegará el mensaje “Producto no Anexado a cuenta” durante 5 segundos y se anulará la resta realizada, para después desplegar el mensaje “Elija Producto” y “Cuenta $__.__”. En caso de que el usuario no presione ninguno de los botones de selección dentro de los 5 segundos posteriores a la identificación de un producto, el sistema embebido simplemente desplegara en la pantalla LCD el mensaje “Elija Producto” y “Cuenta $__.__”, volviéndose necesario un nuevo escaneo del producto deseado para poder anexar ó restar a la cuenta su precio.

Mención aparte merece la configuración y conexión de los demás componentes ubicados alrededor del microcontrolador PIC16F877A. La forma en que estos se conectan entre sí se analiza más a detalle en la sección 3.4.2., Unión de los componentes, mientras que su configuración será mencionada en el apartado correspondiente a cada componente.

32

33

34

Figura 3.6 Diagrama de flujo del algoritmo implementado, parte 3.

Pantalla LCD.

La pantalla LCD es el dispositivo de salida por medio del cual el sistema embebido muestra al usuario la información referente a la identificación de los productos escaneados por el lector de códigos de barras y el estado de su cuenta a pagar; por ende, es un componente importante dentro del prototipo.

El modelo que se prefirió implementar en el sistema embebido fue la pantalla LCD JHD162A (figura 3.7), debido a que es un módulo de representación grafica de datos muy popular y accesible de manejar.

35

Figura 3.7 Pantalla LCD JHD162A.

Cabe mencionar que la pantalla LCD JHD162A cuenta internamente con un componente electrónico encargado de controlarlo, el cual es el controlador KS0066. Para que este componente electrónico pueda operar adecuadamente, es necesario que cuente con las conexiones y componentes adecuados en cada una de sus 16 terminales. Además, la pantalla LCD JHD162A puede operar en modo de transmisión de datos de 4 bits u 8 bits y, al igual que los demás componentes ubicados en el sistema embebido, la pantalla LCD es controlada por el microcontrolador PIC16F877A, mediante una transmisión de instrucciones y datos a través de un bus de 4 bits.

Las conexiones de este dispositivo con el microcontrolador PIC16F877A y demás componentes electrónicos, se puede ver en la sección 3.4.2., Unión de los componentes.

Memoria EEPROM serial externa.

La memoria EEPROM serial externa es el componente del sistema embebido en el cual se almacenan los códigos de identificación, precios y nombres de los productos que el prototipo implementado puede identificar.

Es un componente muy importante, ya que, aunque el microcontrolador PIC16F877A cuenta con una memoria EEPROM interna, ésta es muy pequeña, por lo tanto el número de productos que el prototipo podría identificar, si se usase esta memoria interna, sería muy reducido. En cambio, con la implementación de una memoria EEPROM serial externa, el número de productos que se podrían identificar será mayor.

Para determinar la cantidad de memoria necesaria para almacenar un número razonable de productos, se determinó que para cada producto es necesario utilizar 30 bytes de memoria. 16 bytes para los caracteres del código de barras (16 dígitos), 10 bytes para el nombre del producto (10 caracteres) y 4 bytes para el precio de este (cantidad necesaria para representar un número del tipo flotante).

Basándose en estas necesidades, se seleccionó la memoria EEPROM serial 24LC1025 de la marca Microchip (figura 3.8), la cual tiene una capacidad de 1024K bits, de modo que es posible almacenar en ella la información de cerca de 4266 productos. En caso de que sea necesario aumentar la cantidad de productos, se pueden llegar a emplear hasta 4 dispositivos de este tipo en un mismo bus de comunicación. Otra ventaja es que al usar el protocolo de comunicación I2C, la transferencia de información entre el microcontrolador PIC16F877A y la memoria EEPROM serial 24LC1025 está garantizada [32].

Para que este componente funcione adecuadamente, debe ser energizado con 5Vdc. Además, debido a que las terminales de transmisión de datos 5 y 6 (datos y reloj, respectivamente) son del

36

tipo colector abierto, es necesario utilizar resistencias de pull-up a Vcc. Para identificar a la memoria 24LC1025 dentro del bus de comunicación I2C, un valor binario entre 0 y 1 puede ser colocado físicamente en las terminales 1 y 2 de este componente.

Figura 3.8 Memoria EEPROM serial 24lc1025.

Como se mencionó anteriormente, la memoria 24LC1025 se comunica por medio de un bus serial del tipo I2C con el microcontrolador PIC16F877A. Por consiguiente este dispositivo es controlado por el micrcocontrolador, el cual escribe en ella los distintos datos de identificación de los productos y los extrae cuando sea necesaria una identificación de producto. La forma en que la memoria EEPROM serial 24LC1025 se conecta con el microcontrolador PIC16F877A en el Sistema Embebido se puede apreciar en la sección 3.3.2 Implementación del sistema embebido.

Conector PS/2.

El conector PS/2 implementado en el sistema embebido (figura 3.9), es el medio físico por medio del cual se le proporciona al lector de códigos de barras un suministro de energía eléctrica (5Vdc) y un medio de comunicación con el micrcocontrolador (líneas de reloj y datos).

Figura 3.9 Conector PS/2.

A diferencia de todos los demás componentes en el sistema embebido, el conector PS/2 no es un componente electrónico, sin embargo se puede considerar como un hardware que facilita la conexión física del lector de códigos de barras con el sistema embebido.

Para que el lector de códigos de barras funcione adecuadamente, el conector PS/2 debe de suministrarle energía y un bus de datos a éste. Para lograr esto se siguió la configuración mostrada en la figura 3.10, en diseño del circuito impreso implementado.

37

Figura 3.10 Conexiones del conector PS/2.

La manera en que el conector PS/2 se conecta con el microcontrolador PIC16F877A y la fuente de energía eléctrica en el sistema embebido se puede apreciar en la sección 3.3.2., Implementación del sistema embebido.

Botones de selección.

Los botones (figura 3.11) son el medio por el cual el usuario le indica al sistema embebido que acciones debe este de realizar, dentro de determinados momentos. En el prototipo implementado se utilizaron solo 3 botones. Estos botones tienen conexión directa con el microcontrolador PIC16F877A, el cual ejecuta el algoritmo implementado en el sistema embebido. Cada uno de estos botones le indica al microcontrolador una función distinta a realizar, las cuales pueden ser:

 Reiniciar al sistema embebido.

 Agregar el precio de un producto recién analizado por el lector de códigos de barras a la cuenta del usuario.

 Restar el precio de un producto recién analizado por el lector de códigos de barras a la cuenta del usuario.

En el caso de las últimas dos acciones, el usuario solo puede darle esas órdenes al sistema embebido durante los 5 segundos posteriores a la identificación de algún producto que se encuentre registrado en la base de datos (memoria EEPROM serial 24LC1025). En el caso del reinicio del sistema embebido, esta acción puede realizarse en cualquier instante de la ejecución del algoritmo implementado.

Figura 3.11 Botón empleado en el sistema embebido.

Físicamente lo que realizan estos 3 botones es simplemente proporcionarle al microcontrolador señales del tipo TTL (0 o 1 binario), y en base a estas señales y al algoritmo implementado, el microcontrolador realizara determinadas acciones. La implementación de estos botones en el sistema embebido se muestra en la sección 3.3.2, Implementación del sistema embebido.

38

Documento similar