jueves, 14 de julio de 2016

JCM UBA-10-SS (ID003 Protocol) Simple Driver gcc (Raspberry Pi /Banana Pi/ PC Linux)


Simple Driver JCM UBA-10-SS (ID003 Protocol)

 JCM UBA-10-SS (ID003 Protocol)

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

lib_crc.o: lib_crc.c
    gcc -Wall -c lib_crc.c

tst_crc.o: tst_crc.c
    gcc -Wall -c tst_crc.c

clean:
    rm tst_crc.o lib_crc.o
----------------------------------------------------------------.

 Crc kermit


 
Communication settings:

BaudRate: 9600 (variable)
DataBits: 8 Bits
StopBits: 1 Bit
▪ Paridad: EVEN

Ejemplos de tramas ID003:
FC 05 11 27 56 (STATUS REQUEST)
FC 05 88 6F 5F (VERSION REQUEST)
FC 06 13 62 2B C9 (ESCROW)

Las denominaciones en el id003:

0x61 = 1st
0x62 = 2nd
0x63 = 3rd
0x64 = 4th
0x65 = 5th
0x66 = 6th
 ______________________________________________________________

 uba: main.o wiringSerial.o id003.o crc_kermit.o
    gcc -o uba main.o wiringSerial.o id003.o crc_kermit.o -l pthread

wiringSerial.o: wiringSerial.c
    gcc -Wall -c wiringSerial.c

main.o: main.c
    gcc -Wall -c main.c

id003.o: id003.c
    gcc -Wall -c id003.c

crc_kermit.o: crc_kermit.c
    gcc -Wall -c crc_kermit.c

clean:
    rm main.o wiringSerial.o id003.o crc_kermit.o
 ______________________________________________________________

Descargar Código fuente (Simple Driver JCM UBA)

Descargar herramienta para comprender Id003 by igrotechnics

Driver UBA (JAVA/C++ [Qt]) ID003 Protocol

Disculpen si no respondí antes, password: "sydbernard", "sydbernard1", "maniacmansion" ,"maniacmanison1". Alguno ha de servir.

Código fuente (Simple Driver JCM UBA)



miércoles, 13 de julio de 2016

Bill Acceptors Apex 5000/7000 Simple Driver gcc (Raspberry Pi /Banana Pi/ PC Linux)


Apex 5000/7000 Simple Driver (gcc) 

 Bill Acceptor Apex 7000
 
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;
---------------------------------------------------------+
 Descargar Código Fuente

Disculpen si no respondí antes, password: "sydbernard", "sydbernard1", "maniacmansion" ,"maniacmanison1". Alguno ha de servir.
---------------------------------------------------------+
$ gcc -Wall -c main.c wiringSerial.c apex.c
$ gcc -o apex main.o wiringSerial.o apex.o -l pthread
$ rm main.o wiringSerial.o apex.o
---------------------------------------------------------+
 
makefile;

apex: main.o wiringSerial.o apex.o
gcc -o apex main.o wiringSerial.o apex.o -l pthread

wiringSerial.o: wiringSerial.c
gcc -Wall -c wiringSerial.c

main.o: main.c
gcc -Wall -c main.c

apex.o: apex.c
gcc -Wall -c apex.c

clean:
rm main.o wiringSerial.o apex.o
----------------------------------------------------------+
  
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.

Tipo de MSG y número Ack – Un byte de dato.

Tipo de MSG - (Bits 4, 5 y 6 de este byte)

1- Mensajes De Maestro a esclavo (Bill Acceptor).
2- Mensajes de esclavo (Bill Acceptor) a Maestro.

Número ACK - 0 ó 1 (bits 0-3) (Revisar RS-232 Serial Interface Specification

ApexSeries Acceptors para mayor información.

Data- Porción de mensaje, el data consiste de múltiple campos;
Data Fields para los mensajes enviados por el Master. (Byte 0 es enviado primero)
ETX- 03H Byte Fin del mensaje.
Checksum- (1 byte checksum). El cheksum es calculado con todos los bytes (except: STX, ETX y
el checksum mismo). Haciendo (XOR) a todos los bytes.

/* ***************************************************************** */


Campo de datos para el mensaje enviado por el Master

BYTE 0
BIT 0- $1 Accept Enable (Set to a “1” to accept a bill)
BIT 1- $2 Accept Enable (Not used on Apex series acceptors)
BIT 2- $5 Accept Enable
BIT 3- $10 Accept Enable
BIT 4- $20 Accept Enable
BIT 5- $50 Accept Enable
BIT 6- $100 Accept Enable

BYTE 1
BIT 0- Reserved for future use. (Set to 0)
BIT 1- SECURITY (Reserved for future use.)
BIT 2- ORIENTATION (Reserved for future use.)
BIT 3- ORIENTATION (Reserved for future use.)
BIT 4- Escrow (Set = 1 to enable escrow)
BIT 5- Stack (Set = 1 causes bill to be stacked)
BIT 6- Return (Set = 1 causes bill to be returned)

BYTE 2
BIT 0- 6 - Reserved for future use.



Ejemplo (-->):  
02 08 11 7F 00 00 03 66 (Todas las denominaciones activadas)
02 08 10 7F 00 00 03 67 (Todas las denominaciones activadas)




 
Campo de dato enviado por el Slave (Bill Acceptor)

BYTE 0
Bit 0- Idling (Set = 1 if acceptor is in idle state)
Bit 1- Accepting (Set = 1 if accepting a bill)
Bit 2- Escrowed (Set =1 if a bill is in escrow)
Bit 3- Stacking (Set = 1 if a bill is being stacked)
Bit 4- Stacked (Set = 1 if a bill was stacked, Idle (Bit 0) also set during this state)
Bit 5- Returning (= 1 if a bill is being returned)
Bit 6- Returned (Set = 1 if the bill has been returned, Idle (Bit 0) also set during this state)

BYTE 1
Bit 0- Cheated (Set = 1 if acceptor suspects cheating)
Bit 1- Bill rejected (Set = 1 if a bill was rejected)
Bit 2- Bill jammed (Set = 1 if a bill is jammed)
Bit 3- Stacker full (Set = 1 if the stacker is full)
Bit 4- Bill cassette present (Set = 1 if cassette is present)
Bit 5- Reserved for future use (Set to 0)
Bit 6- Reserved for future use (Set to 0)

BYTE 2
Bit 0- Power up (Set = 1 if acceptor is initializing)
Bit 1- Invalid command (Set = 1 if an invalid command was received)
Bit 2- Failure (Set = 1 if acceptor has failed)
Bit 3-5 Bill value field
000 = None/unknown bill or note
001 = $1 or 1 st note type
010 = $2 or 2 nd note type
011 = $5 or 3 rd note type
100 = $10 or 4 th note type
101 = $20 or 5 th note type
110 = $50 or 6 th note type
111 = $100 or 7 th note type
Bit 6- Reserved for future use.

BYTE 3
Reserved for future use.
BYTE 4
Model number (00-7FH)
BYTE 5
Revision of firmware (00-7FH)


Ejemplo (<--):  
02 0B 21 01 10 00 00 14 07 03 28 (Idling, Stacker Presente)
02 0B 20 01 10 00 00 14 07 03 29 (Idling, Stacker Presente)


/* ****************************************************************** */
BYTE 0
typedef union {
    uint8_t byte;
    struct {
        uint8_t idling:1;
        uint8_t accepting:1;
        uint8_t escrowed:1;
        uint8_t stacking:1;
        uint8_t stacked:1;
        uint8_t returning:1;
        uint8_t returned:1;
    };
} rxbyte0;

BYTE 1
typedef union {
    uint8_t byte;
    struct {
        uint8_t cheated:1;
        uint8_t bill_rejected:1;
        uint8_t bill_jammed:1;
        uint8_t stacker_full:1;
        uint8_t bill_cassette_present:1;
    };
} rxbyte1;

BYTE 2
typedef union {
    uint8_t byte;
    struct {
        uint8_t power_up:1;
        uint8_t invalid_command:1;
        uint8_t failure:1;
        uint8_t bill_value_field:3;
    };
} rxbyte2;

Simple Driver Apex 7000(LinuxMint x86)


 

domingo, 10 de julio de 2016

Banana PI – WiringPi TFT touch 320x240


Banana PI – WiringPi TFT 320x240

Banana PI + WiringPi (WiringBpi) + RPI 2.8 TFT Add-on (Display TFT 320x240 [ILI9323DS])


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:

$ gcc -Wall -c main.c tft.c
$ gcc -o tftb main.o tft.o -l wiringPi
$ rm main.o tft.o

o creando un archivo makefile:

tftbin: tft.o main.o
           gcc -o tftbin main.o tft.o -l wiringPi
tft.o: tft.c
         gcc -Wall -c tft.c
main.o: main.c
             gcc -Wall -c main.c
clean:
          rm main.o tft.o

 Descargar Código fuente
 Descargar Archivos BMP (RGB888)
 Descargar WiringBpi


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. 
Todo lo demás son los Datos.













sábado, 9 de julio de 2016

WAV PLAYER AVR


WAV PLAYER AVR
Reproductor de archivos WAVE  (LPCM) 

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 de ELM-CHAN Petit 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ódec de 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 Internet no 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
 
Simulación Proteus 7.9

 
Señal PWM


  
MP3 to WAV (8 bits)
  
WinImage (wimg

Cuadro comparativo entre Hardware/software PWM, R2R y DAC externo.

Código fuente pff.h (Indicar las funciones y formatos necesarios )
Código fuente mm.c (Indicar en que pin de cual puerto va conectado CS, revisar tambien spi.c)
Código fuente lcd.h (configurar pines para el display ) 

Código fuente (Descargar)
Esquema del circuito (Eagle)
Esquema del circuito en .pdf
Archivo (.mmc) para simular SD con proteus. (Adentro vienen 2 pistas en formato WAV y 2 archivos de txt... Abrir con MMCIMG)
Programa para formatear SD (FREE), micro SD, etc.
Programa para convertir MP3 en WAV (FREE)
AVR calculator
Documento para comprender el PWM con timers del micrAVR
Documento sobre PWM
Programa para crear y ver la imagen que usa proteus para simular (MMCIMG)
Programa para ver los archivos WAV en hexadecimal
Archivo .wav 48Khz, 8 bits, stereo
 

 
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).
 

Esquema en Eagle

Simulación Proteus

  
Fuses en AVRISPmkll