miércoles, 22 de abril de 2020

Diseñando la estación de soldadura capitulo 2

Diseñando la Estación de Soldadura Capítulo 2


En  el capitulo anterior (Aquí) se describió el inicio del diseño de la Estación de soldadura, dando continuidad con el se describe como se hace para poder generar los datos de la tabla llamada "imagen" en la  cual se encuentran los datos de la imagen a mostrar en  la pantalla glcd ,para esto se tomo una imagen de 128 x 64 bits junto con  los programas que se usaran , "este es solo un método puede que se encuentren otros programas mas prácticos para generar el mapa de bits para introducirlo al programa , este que se describe fue el que se uso para introducir este mapas a el código". Para obtener el valor de los datos a incluir en esta tabla se genera la imagen deseada en un formato de 64 x 128 bits monocromática sin escala de grises y se extraen los datos por medio de un software, a continuación, se explicará con un ejemplo como hacerlo:


Escoger la imagen a desplegar como la mostrada en la imagen ,  la cual hay que editarla en tamaño a 128 * 64 con cualquier editor de imágenes 
Con un software llamado  bmp2 glcd : Este se abre en símbolo de sistema, para lo cuan hay que situarse en la ubicación del archivo y escribir bmp2glcd nombrearchivo.bmp –v  (el archivo de imagen debe estar en la misma carpeta que el programa, y de alto 128 y ancho 64 extensión bmp) :




• Este genera un archivo de la imagen en bmp en blanco y negro sin escalas de grises apta para el display y un archivo en c que no aplica para este caso la imagen generada hay que girarla 90° con cualquier editor de imágenes, luego  este archivo se abre con otro software llamado fastLCD:


En este programa con el símbolo de abrir carpeta se abre el archivo de imagen, se puede editar o hacer lo
que se desee, con el icono que dice BAS se exporta al archivo *.bas 
Se selecciona el tipo de ic que usa la glcd  T6963,  Font select pin 0, 8bits  y abajo como imagen se le da ok y luego se nombra y guarda el archivo:

El archivo creado se puede abrir con el bloc de notas por medio de “abrir como” se verá cómo se ve en la imagen:


Los &h se cambian todos por 0x se puede hacer rápido copiando todo y pegándolo en Word y con la función de remplazar (ctrl + B ) ,se escribe que remplace &h  por 0x  .Los datos ya corregidos de la imagen se pegan en el código dentro de la tabla de asignación de constantes  correspondiente en la rutina de despliegue de imagen " la tabla mencionada y que esta al final del anterior capitulo".

Las subrutinas Void  que genera la imagen en el despliegue  se muestran a continuación: 

void glcd_imagen()
{
   CHAR i, j;
   SIGNED char k;
   FOR (i = 0; i < 64; i ++)
   {
      FOR (j = 0; j < 16; j ++)
      {
         FOR (k = 7; k > - 1; k--)
         {
            IF (bit_test (imagen[i][j], 7 - k) )
            glcd_pixel (j * 8 + k, i, ON) ;
         }
      }
   }
}

Estas rutinas se encargan de desplegar los datos que están en las tablas imagen   por medio de los for que en resumen cargan los datos primero en grupos de 8 bits bit por bit y luego arma la imagen.
La imagen simulada y real se ve en la imagen:


  
Es de esta manera que se despliegan las imágenes seleccionadas de el logo de la marca , la universidad para este caso y otra imagen adicional estas rutinas se llaman en el código principal para generarlas para luego entrar al modo en el menú principal a espera de seleccionar función.

Las entradas del dispositivo son los pulsadores y el boton de encoder con el cual se puede incrementar o decrementar los valores deseados de temperatura o flujo de aire o lo que se desee según la función en que se encuentre.

ENCODER



Este es un Encoder Rotatorio de 24 pulsos por giro , las características técnicas se encuentran en la hoja del fabricante  la cual se muestra de la cual lo mas importante para la implementación se muestra en la imagen este se usa para incrementar y decrementar los valores de temperatura y programación del sistema . 

Al no haber una librería directa para su manejo, se realizó el código en una rutina dentro de un Void especifico basándose en las especificaciones de giro en ambos sentidos, usando la tabla de datos extraida del datsheet del fabricante:



ENCODER
Sentido de giro
CW

CCW

Pines de salida
B7

B6

DATOS
00

00

01

10

11

11

10

01

Siguiendo esta secuencia se creó el código dentro de un void para usarlo cuando se requiera dentro del main

void delay_encoder ()
{
   delay_ms (10);
}

/////////BOTON ENCODER/////////
void bot_encoder ()
  {
   IF (input (PIN_B7,) == 0&&input (PIN_B6) == 0)
   {
      delay_encoder ();

      IF (input (PIN_B7,) == 0&&input (PIN_B6) == 1)
      {
         ENCODER = 0x01; //pone encoder con uno para decir up
         delay_encoder ();
      }

      IF (input (PIN_B7,) == 1&&input (PIN_B6) == 0)
      {
         ENCODER = 0x02; //pone encoder con dos para decir down
         delay_encoder ();
      }
   }

   //-----------------------------------------------------------------------------
   IF (input (PIN_B7,) == 0&&input (PIN_B6) == 1)
   {
      delay_encoder ();

      IF (input (PIN_B7,) == 1&&input (PIN_B6) == 1)
      {
         ENCODER = 0x01; //pone encoder con uno para decir up
         delay_encoder ();
      }

      IF (input (PIN_B7,) == 0&&input (PIN_B6) == 0)
      {
         ENCODER = 0x02; //pone encoder con dos para decir down
         delay_encoder ();
      }
   }

   //-----------------------------------------------------------------------------
   IF (input (PIN_B7,) == 1&&input (PIN_B6) == 1)
   {
      delay_encoder ();

      IF (input (PIN_B7,) == 1&&input (PIN_B6) == 0)
      {
         ENCODER = 0x01; //pone encoder con uno para decir up
         delay_encoder ();
      }

      IF (input (PIN_B7,) == 0&&input (PIN_B6) == 1)
      {
         ENCODER = 0x02; //pone encoder con dos para decir down
         delay_encoder ();
      }
   }

   //-----------------------------------------------------------------------------
   IF (input (PIN_B7,) == 1&&input (PIN_B6) == 0)
   {
      delay_encoder ();

      IF (input (PIN_B7,) == 0&&input (PIN_B6) == 0)
      {
         ENCODER = 0x01; //pone encoder con uno para decir up
         delay_encoder ();
      }

      IF (input (PIN_B7,) == 1&&input (PIN_B6) == 1)
      {
         ENCODER = 0x02; //pone encoder con dos para decir down
         delay_encoder ();
      }
   }
  }


La función delay encoder se creo para dar el retardo y sensibilidad del encoder ,el estado si es incremento del dato o decremento se guarda en la variable ENCODER con el estado 0x01 para incremento y 0x02 para decremento cuando se lea el estado se debe borrar esta variable 
Con este código se conecta el encoder por los puertos B6 y B7 , en la simulación al no encontrarse dentro del Proteus y se requiere para realizar la simulación se remplazo por un motor encoder y solo se adicionan para fines de la simulación los switches para accionar el movimiento de este encoder.



Bueno hasta acá este capitulo en el siguiente se mostrara como se hizo la botonera , y el inicio al diseño de la etapa de cautín.

Si les parece útil esta información, compártanla,   síganme en facebook,  youtube y dejen mensaje acá .

No olviden suscribirse al canal de you tube y  darle a Me gusta y podrán seguirnos en Faceboock.

 Ir a Audio y Tv      

Escrito y creado por JASP Se reservan todos los derechos.





No hay comentarios:

Publicar un comentario