jueves, 22 de mayo de 2014

Adaptacion para usar una PC como estacion de internet con pago a traves de monedas

Con la idea de realizar la adaptación para el control de tiempo en una maquina de Internet depositando monedas. Ya hay en el mercado maquinas que haciendo esto pero con el deseo de hacerla por mi, me puse la tarea de realizar una estación que fuera funcional.
Par la estación el uso de una PC de escritorio, el control se realiza manipulando la alimentación de el teclado y el ratón, se usan dispositivos USB, y para habilitarlos cuando se tenga tiempo disponible e inhabilitarlos al finalizar el tiempo, también se envían pulsos para reiniciar la tarjeta madre de la PC y vuelva estar disponible otra vez para un nuevo usuario inicie una sesión.
El tiempo que el usuario tendrá cada vez que deposite una moneda se presentara en 4 displays de 7 segmentos.
Ya que entre las chacharas tenía descartada una placa con 4 diplays de una tableta de play choice( Un juego de nintendo para maquinas operadas con monedas, ya en desuso ), y que podía servir bastante bien para mi propósito, me di a la tarea de hacerle un pequeño esquema para poder, utilizarlo.
Revisando el diagrama me di cuenta de que las conexiones que salían y entraban de placa de displays eran por un conector de 12 cables,  los primeros 4 pines del conector se usaban para transmitir los datos hacia los cuatro integrados 4511 que son decodificadores de BCD a 7 segmentos con latch, los siguientes tres entradas son las entradas del decodificador de 3 a 8 (74LS138), y que sirve para seleccionar el 4511 en que los datos serán guardados, el siguiente pin del conector(8) se usa para habilitar el chip de selección, y  los últimos 4 pines son para las conexiones de tierra y +5 volts que alimentan el circuito 

Como me pareció que el cableado seria demasiado 12 cables me di a la tarea de reducirlo a 3 (aunque el conector que utilice es de 4), y hacerlo así mas sencillo de cablear.

Decidí quitar el decodificador (74LS138) ,  y en su lugar se colocar un micro-controlador PIC16F687, haciendo  mas sencillo el control ya que a través de la comunicación  serial asíncrona, solo se utiliza un cable para enviar la información al pic y este se encarga de escribirla en los displays, así que la placa solo queda conectada a tierra, +5volts y el cable de recepción de datos. Use este esquema para sustituirlo, se ven las conexiones del PIC y del decodificador LS138, unidas para saber cuales pines si deben soldarse en los lugares que tenia el que se quita y cuales no.
En las siguientes fotos se miran las adaptaciones hechas, primero quitar el decodificador (74LS138)...
... luego  poner una cables y una base para insertar el PIC, debido a que para la programación, se grababa el pic y luego se insertaba para ir probando el programa, hasta que quedo como se deseaba  aqui la imagen de la placa con el pic en su base
Después se recortaron los pines no necesarios y se quito la base, se soldó el pic ya programado en su lugar, cableándose algunos de los pines como los del voltaje y la tierra, quedando completada la adaptación
de la placa.

La información que recibe la placa de displays,( solo recibe no transmite) esta configurada para recibir los datos en serie a velocidad de 19200 bits por segundo, 8bits de datos sin paridad y con un bit de parada.
Los datos son recibidos es grupo de cinco bytes, en codigo ASCII, el primero que es el que espera el micro es una letra "t" y mientras no la reciba no hace nada, aunque reciba datos este los desecha, luego de recibir la "t" espera cuatro datos uno para cada display, estos solo pueden presentar números del 0 al 9 , si es enviado cualquier otro carácter, diferente a  los números del 0 al 9 el display de apaga.
La secuencia es entonces  letra "t" y en seguida los datos de los displays empezando con el de menor
valor hasta el de mayor valor.
Se le agrego una rutina de prueba de los displays que va presentando los números del 0 al 9 en secuencia durante un fracción de segundo, esto solo es al encender el display , y después de unos segundos ya esta listo para recibir datos y presentarlos.
El código fue hecho en CCS,
//
// AdaptPC.c
//        hardware: pic16f687
// Adaptación de un display de Play Choice
// para recibir los datos de presentación a través de
// puerto serie RX y su presentación en los displays
// Son 4 displays de 7 segmentos para números desde 0 hasta 9999
// vienen con descodificadores de 4 bits para 7 segmentos, con Latch
// El formato de recepción de datos es de cinco datos en ASCII empezando con
// la letra 't' y luego los datos de seg, dseg, min y dmin que corresponden a los
// cuatro displays, empezando de derecha a izquierda,
// los datos validos solo son los números del 0 al 9 y la letra 't'
// si se coloca un dato no valido el display no presentara nada estará apagado
//
/////////////////////////////////////////////////////////
#include <16F687.h>
#fuses INTRC_IO,NOWDT,NOPROTECT,NOMCLR
#use delay(clock=4000000)
#use rs232(baud=19200, xmit=PIN_B7,rcv=PIN_B5)

//constantes
const char D0 = PIN_C3, D1 = PIN_C5, D2 = PIN_C6, D3 = PIN_C4, Recibir = PIN_B5 ;

//variables
char  DISP1 = PIN_A4, DISP2 = PIN_A5, DISP3 = PIN_A1, DISP4 = PIN_A0;
char seg = 0, dseg = 0, min = 0, dmin = 0;
short b_transmision = 0;

///////////////////////////////////////////////
void pulsoEn(char xdisplay){
output_low(xdisplay);
output_high(xdisplay);
}
//////////////////////////////////////////////
void Inicializa(){
delay_ms(1);
output_high(D0);
output_high(D1);
output_high(D2);
output_high(D3);
pulsoEn(DISP1);
pulsoEn(DISP2);
pulsoEn(DISP3);
pulsoEn(DISP4);
}
///////////////////////////////////////////////
void colocaDato(char dato){
switch (dato) {
    case 0:output_low(D0);
output_low(D1);
output_low(D2);
output_low(D3);
          break;
    case 1:output_high(D0);
output_low(D1);
output_low(D2);
output_low(D3);
          break;
    case 2:output_low(D0);
output_high(D1);
output_low(D2);
output_low(D3);
          break;
    case 3:output_high(D0);
output_high(D1);
output_low(D2);
output_low(D3);
break;
    case 4:output_low(D0);
output_low(D1);
output_high(D2);
output_low(D3);
          break;
    case 5:output_high(D0);
output_low(D1);
output_high(D2);
output_low(D3);
          break;
    case 6:output_low(D0);
output_high(D1);
output_high(D2);
output_low(D3);
          break;
    case 7:output_high(D0);
output_high(D1);
output_high(D2);
output_low(D3);
          break;
    case 8:output_low(D0);
output_low(D1);
output_low(D2);
output_high(D3);
          break;
    case 9:output_high(D0);
output_low(D1);
output_low(D2);
output_high(D3);
          break;
    default:output_high(D0);
output_high(D1);
output_high(D2);
output_high(D3);
            break; }
}
///////////////////////////////////////////////
void escribeDatoEn(char display, char dato){
colocaDato(dato);
pulsoEn(display);
}
///////////////////////////////////////////////
void actualizaDisplay(){
if (dmin == 0){
escribeDatoEn(DISP4,15);
}
else escribeDatoEn(DISP4,dmin);
if ((dmin == 0) &&(min == 0)){
escribeDatoEn(DISP3,15);
}
else escribeDatoEn(DISP3,min);
if ((dmin == 0) &&(min == 0) && (dseg == 0)){
escribeDatoEn(DISP2,15);
}
else escribeDatoEn(DISP2,dseg);
escribeDatoEn(DISP1,seg);
}
///////////////////////////////////////////////
void autoPrueba(){
while(seg < 10){
actualizaDisplay();
delay_ms(300);
seg++; min++; dseg++; dmin++;
}
seg = 0; dseg =0; min = 0; dmin = 0;
actualizaDisplay();
}
///////////////////////////////////////////////
void asignaDatos (){
char aux ;
aux = getc();
if (aux == 't'){
aux = getc();
seg = (aux - 48);
aux = getc();
dseg = (aux - 48);
aux = getc();
min = (aux - 48);
aux = getc();
dmin = (aux - 48);
}
}
///////////////////////////////////////////////
void main (){
Inicializa();
autoPrueba();
while(TRUE){
delay_ms(1);
asignaDatos ();
actualizaDisplay();
}
}




1 comentario:

  1. Spades Royale - Online Casino Review 2021
    Spades Royale is a very カジノ シークレット popular and interesting 퍼스트 카지노 online casino game. matchpoint It is a popular online casino that offers a variety of games including blackjack,

    ResponderEliminar