Simple driver (gcc) para un billetero JCM
UBA-10-SS usando el protocolo ID003.
Las
tramas del protocolo ID003 tienen la forma:
|
SYNC | Length | CMD | Data Fields | Checksum |
▪ SYNC
(1byte): 0xFC
▪ Length
(1byte): Longitud total del string (todos los bytes)
▪ CMD
(1byte) (instrucción,
tipo de orden)
▪
Data (variable)( datos, opcional)
▪
CRC (2byte)( CRC-Kermit)
Para
mayor comprensión del CRC-Kermit probar la librería de Lammert Bies, la cual se puede compilar en gcc. Las funciones para el
crc-kermit en este driver han salido de aquí.
----------------------------------------------------------------.
crc: tst_crc.o lib_crc.o
gcc -o crc tst_crc.o lib_crc.o
Aquí se ha usado de
la librería WiringPI los archivos wiringSerial.c, wiringSerial.h
ademas de la función Delay(), pero el código funciona en ambos
(Raspberry
Pi / Banana Pi/PC Linux).
En el caso de la
librería wiringSerial, esta debería trabajar para 7 bits de datos, 1
bit de paridad EVEN.
Por lo que se ha
modificado la función serialOpen ;
options.c_cflag
|= PARENB; // Paridad activada.
options.c_cflag
&= ~PARODD; // Paridad EVEN.
options.c_cflag
|= CS7; // 7 bits de datos.
Este simple driver
consta de 5 archivos; main.c, apex.c, apex.h, wiringSerial.c,
wiringSerial.h. Para compilarlos;
Para este ejemplo en
la función loop_apex se
indica que cuando haya un billete valido, este sea aceptado automáticamente, una vez almacenado el billete se envia el mensaje:
Accept bill: #billete
Ademas de los BYTE 0, BYTE1, BYTE2 enviados por el billetero.
Simple
driver Apex bill acceptor (Linux Mint, x86)
Raspberry Pi
Conexión Rpi - Apex (conector 18 pin)
conector 18 pin (verde-Tx, rojo/blanco-Rx)
Pyramid
Bill Acceptors Apex 5000/7000
Los
billeteros (Bill Acceptors) Pyramid APEX 5000/7000 :
Comunicación:
▪ Baud
rate- 9600
▪ 1
start and 1 stop bit
▪ 7
data bits (bit 0 = sent first (LSB))
▪ 1
parity bit ( even parity)
Inactive
Timing – Si el Bill Acceptor no detecta comunicación con el Host
dentro de un lapso de 5 segundos, iniciando desde la última
comunicación enviada por el host, el bill acceptor:
1 –
rechazara cualquier billete mantenido en escrow.
2 –
Dejará de aceptar billetes hasta que el master inicie la
comunicación nuevamente.
Formato
común para la transmisión:
|
STX | Length | MSG Type and Ack Number | Data Fields | ETX | Checksum
|
STX-
0x02 El inicio del mensaje es indicado por 1 byte.
Length-
Número de bytes en cada mensaje (binary), incluyendo STX, ETX y
Checksum.
Consiste en leer
archivos BMP RGB888 (24 bits) y convertirlos a RGB565 (16 bits) para
presentarlos en un Display TFT 240x320 (Raspberry PI 2.8 TFT Add-on)
con controlador ILI9323DS. El
Display se controla mediante los pines GPIO de la
BananaPi/RaspberryPi.
La
librería de Seeed technologies
inicialmente trabajaba para AVR/Arduino pero aqui fue modificada
para funcionar conjuntamente con WiringPi.
El proyecto consiste
de cuatro archivos tft.c, tft.h, font.h y main.c. El proyecto lo
compilamos con gcc:
FormatoBMP: Un archivo BMP es un archivo de mapa de bits, es decir, un
archivo de imagen de gráficos, con píxeles almacenados en forma de
tabla de puntos que administra los colores como colores reales o
usando una paleta indexada.
La estructura de un
mapa de bits es la siguiente:
Encabezado
del archivo
Encabezado
de información del mapa de bits (también llamado encabezado de
información).
Paleta
(opcional)
Cuerpo de la
imagen
Encabezado del
archivo
El encabezado del archivo proporciona información acerca del tipo de
archivo (mapa de bits) y su tamaño, así como también indica dónde comienza realmente la
información de la imagen.
El encabezado comprende cuatro campos:
La firma (en 2 bytes), que indica que se trata de un archivo BMP con
dos caracteres BM (42 4D en hexadecimal) que indica que se trata de un mapa de bits
de Windows
El tamaño total del archivo en bytes (codificado en 4 bytes)
Un campo reservado (en 4 bytes)
El desajuste de la imagen (en 4 bytes), es decir, la ubicación del
comienzo de la
información de la imagen en relación con el comienzo del archivo
Archivo .bmp visto en GHEX
Firma: BM
Tamaño: 0x38436
Reservado: 0
Inicio del campo de datos: 0x36
Encabezado de información del mapa de bits
proporciona información acerca de
la imagen, en especial las dimensiones y los colores.
El tamaño del encabezado de información del mapa de bits en bytes
(codificado en 4 bytes). Los siguientes valores hexadecimales son
posibles según el tipo de formato BMP: 28 para Windows 3.1x, 95, NT
El ancho de la imagen (en 4 bytes), es decir, el número de píxeles
contados de forma horizontal
La altura de la imagen (en 4 bytes), es decir, el número de píxeles
contados de forma vertical
El número de planos (en 2 bytes). Este valor es siempre 1
La profundidad del modelo de color (en 2 bytes), es decir, el número
de bits usados para codificar el color. Este valor puede ser equivalente a 1, 4, 8, 16,
24 ó 32
El método de compresión (en 4 bytes). Este valor es 0 cuando la
imagen no está
comprimida.
Encabezado: 0x28
Ancho: 0xF0 (240)
Largo:0x140 (320)
Planos: 0x01
Bits: 0x18 (24)
Compresión: 0x00
El tamaño total de la imagen en bytes (en 4 bytes).
La resolución horizontal (en 4 bytes), es decir, el número de
píxeles por metro contado de forma horizontal.
La resolución vertical (en 4 bytes), es decir, el número de píxeles
por metro contado de forma vertical.
El número de colores de la paleta (en 4 bytes).
Tamaño: 0x38400
Resolución H: 0x0B13
Resolución V: 0x0B13
Paleta: 0x0
El número de colores importantes de la paleta (en 4 bytes). Este
campo puede equivaler a 0 cuando todos los colores son importantes.
Reproductor
de archivos WAVE LPCM utilizando microcontrolador AVR (ATmega328P),
tarjeta SD de 16GB, 2GB y micro SD de 16GB, este reproductor
soporta archivos WAVE con muestras de 8 bits, mono/estéreo,
frecuencia de muestreo máxima de 96 kHz.
El
microcontrolador AVR trabaja con una frecuencia de reloj de 16Mhz y
se encarga de leer la tarjeta SD en donde se encuentran almacenados
los archivos WAVE (.wav). Se usaron dos temporizadores del ATmega328P
con los cuales se implementa un DAC mediante señales PWM y un filtro
pasa bajos de primer orden, el microcontrolador extrae los
datos de la SD y los envía al respectivo temporizador.
Se
puede producir señales de audio usando 2 timer del AVR funcionando
como comparador. Haciendo uso de modo modulación por ancho de pulso
(PWM) en combinación con un filtro pasa bajos, la salida del
comparador puede ser usado efectivamente como un DAC para producir
señal analógica de audio. Si limitamos la señal analógica
modulada dentro de frecuencias comprendidas en el rango que por los
humanos es reconocido como audio. Aproximadamente 20Hz – 20KHz,
obtendremos sonido.
Circuito
SDC
Existen
en internet varias versiones de reproductores WAVE, los hay con
PIC24, dsPIC30F, AVR, ARM, etc. El principio es el mismo, mediante
los temporizadores y filtro pasa bajos se implementa un DAC.
Este
reproductor esta basado en la librería deELM-CHANPetit
FatFs R0.02a
, las cuales soportan FAT12/16/32, las memorias de 16GB que se usaron
aquí están formateadas en FAT32.
El
entorno de desarrollo para el atmega328 usado en este proyecto es:
AVR
studio 4.19
y para la simulación PROTEUS
7.9,
usar MMCIMG
para crear la imagen que contiene el archivo .wav, esto con fines de
simulación en proteus, tambien pueden usar este archivo .mmc que
contiene 2 archivos wav, 1 .txt y 1 .csv. Archivo
(.mmc) para la SD/MMC de proteus
Archivos
WAVE
WAV
(o WAVE), es un formato de audio digital
normalmente sin compresión
de datos propiedad de Microsoft
y de IBM que se
utiliza para almacenar sonidos en el PC,
admite archivos mono
y estéreo
a diversas resoluciones y velocidades de muestreo, su extensión es
[.wav].
Wav File Header
Es
una variante del formato RIFF(Resource
Interchange File Format,
formato de fichero para intercambio de recursos), método para
almacenamiento en "paquetes.
A
pesar de que el formato WAV es compatible con casi cualquier códecde
audio, se utiliza principalmente con el formato PCM(no
comprimido) y, al no tener pérdida de calidad, es adecuado para uso
profesional. Para tener calidad CD de audio se
necesita que el sonido se grabe a 44100 Hz y a 16 bits. Por cada
minuto de grabación de sonido se consumen unos 10 megabytes de
espacio en disco. En la cabecera del fichero se indica la longitud
del mismo con un número entero de 32 bits, lo que limita el tamaño
del fichero.
En Internetno
es popular, fundamentalmente porque los archivos sin compresión son
muy grandes. Son más frecuentes los formatos comprimidos con pérdidas,
como el MP3 o
el Ogg
Vorbis.
Actualización: a 4 botones: stop, play/pause,
back, next.
Al encender aparece en estado stop... en este estado
el MCU permanece rotando un mensaje en la segunda fila del display.
Al presionar play/pause cambia a estado play, si de nuevo presionan
play/pause cambia a estado pause.
En la esquina superior derecha del display se
muestra ( (Archivo .wav actual) / (total
archivos en folder).