Mostrando entradas con la etiqueta VHDL. Mostrar todas las entradas
Mostrando entradas con la etiqueta VHDL. Mostrar todas las entradas

lunes, 14 de mayo de 2012

Impresora Térmica

Lo prometido es deuda y a continuación hablaré un poco sobre impresoras térmicas.


Las impresoras térmicas se componen básicamente de 4 bloques:

  • Cabeza térmica
  • Motor a pasos
  • Sensor de temperatura de cabeza térmica
  • Sensor de papel
Estos cuatro bloques conforman la impresora, teniendo cada uno una función bien definida y es responsabilidad del diseñador hacer la instrumentación y el control adecuado.



Las impresoras térmicas funcionan básicamente de la siguiente manera: El papel térmico se coloca en un rodillo haciendo que el sensor de papel envíe en '0' lógico (indicando la existencia del papel). Entonces, el motor a pasos hace girar dicho rodillo mediante un mecanismo compuesto de engranes, logrando una precisión milimétrica en el posicionamiento del papel. Cuando el papel está posicionado, se envía la información que se quiere imprimir usando el protocolo que especifique el fabricante (para la impresora que estamos usando, se usa una interfaz SPI). Finalmente se envían señales de encendido para la cabeza térmica, la cual está formada de pequeños puntos que se calientan y marcan el papel, imprimiendo un renglón. Entonces el proceso se inicia nuevamente, es decir, se hace girar nuevamente el rodillo y nuevamente se envía la información a la impresora para imprimir un nuevo renglón.
El sensor de temperatura, que puede ser un termistor, permite monitorear la temperatura de la cabeza térmica. Al imprimir se calienta la cabeza térmica  y si la impresión es continua, dicha cabeza se puede calentar hasta dañar de forma irreparable la impresora. Por lo tanto se debe evitar el sobrecalentamiento. El fabricante de la impresora que usamos especifica que no debe pasar de 70º C.

domingo, 16 de mayo de 2010

Puertos Bidireccionales en FPGAs (Continuación 2)

Para definir puertos bidireccionales, se utiliza el concepto de tres estados. Bajo esta definición, la salida es deshabilitada colocandola en alta impedancia, y, así, la lectura es independiente. El código se muestra en la siguiente figura:
Al igual que el ejemplo anterior. SWITCH, SWITCH2 y ENTRADA son definidos como in, SALIDA es out y LED es inout. El funcionamiento es basicamente el mismo: cuando SWITCH es '1', LED, funcionando como salida, tendra lo que tiene ENTRADA, sin embargo, cuando SWITCH es '0', LED se pondrá en alta impedancia. Esta condición provocará que el ISE infiera que se trata de un puerto bidireccional de tres estados. Siguiendo la explicación, cuando SWITCH2 es '1', entonces SALIDA tendrá lo que tiene LED funcionando como entrada.
Como se observa en la imagen inferior. Al igual que el ejemplo anterior, LED se encuentra en '1' siendo ENTRADA '1' y SWTICH '1'.

Sin embargo, en la siguiente imagen se muestra como, cuando SWITCH es '0', colocando en alta impedancia a LED (como salida), y SWITCH2 es '1', entonces SALIDA tendrá lo que tiene LED.


Concluyendo, si queremos utilizar puertos bidireccionales en un FPGA, entonces debemos colocar la condición de alta impedancia cuando el puerto funciona como entrada, provocando que el ISE lo defina como un puerto de tres estados bidireccinal.

viernes, 14 de mayo de 2010

Puertos Bidireccionales en FPGAs (Continuación 1)

El código mostrado en anteriormente no funcionará como puerto bidireccional. Como se muestra en las figuras siguientes, el puerto de salida estará conectado directamente al puerto de entrada. Es decir, el puerto inout lee (in) lo que tiene a la salida (out) y es útil cuando se desea monitorear el valor que se envía al  puerto, sin embargo, definido unicamente como tal, no sirve como puerto bidireccional.
La figura anterior muestra el código cargado en el FPGA. Dado que SWITCH es '1', LED tendrá el valor de ENTRADA (ambos '1' en la fotografía). Hasta aqui, el código trabaja como se desea.
Sin embargo, como muestra la figura anterior, cuando queremos que LED funcione como entrada, es cuando el código deja de funcionar como se desea. Cuando SWITCH2 es '1', SALIDA debe tener lo que tiene LED, que ahora debería ser de entrada. Sin embargo, se observa como SALIDA siempre es '1' sin importar que valor tenga LED.
En conclusión, el ejemplo anterior muestra como la definición inout no define un puerto como bidireccional. Puertos bidireccionales son comunes en memorias, protocolos seriales, pantallas, entre otros.
En la siguiente entrada, explicaré como hacer puertos direccionales a partir de un concepto llamado en VHDL Three State Inference.

miércoles, 12 de mayo de 2010

Puertos Bidireccionales en FPGAs

Los puertos bidireccionales en los FPGAs pueden ser un tanto confusos. No estamos hablando de definirlos como inout, sino de definirlos de tal forma que puedan enviar y recibir información.
Un puerto inout es normalmete utilizado para monitorear el valor de salida de un puerto, es decir, leer lo que estan enviando ó enviar a alguna otra salida lo que estan recibiendo, sin embargo, si desean leer y escribir información, esta única definición no será suficiente.
La imagen muestra un código utilizando la definición inout. Como mostraré en las imágenes del día de mañana, esto no funciona como se desea. El puerto LED es definido como inout, SWITCH, SWITCH2 y ENTRADA como in y SALIDA como out.