miércoles, 30 de septiembre de 2020

ARDUINO LTC6904 - LTC6903 Generador de frecuencia 1KHz a 68MHz

  Página principal

ARDUINO
LTC6904
- LTC6903
Generador de frecuencia
1KHz a 68MHz


Hace un año realicé un generador de frecuencia con el CHIP DS1077. Junto con este Chip había pedido el LTC6904 / LTC6903, otro generador de frecuencia.
El LTC6904 es Programmable Oscillator 1kHz to 68MHz .
El problema de este chip es el encapsulado, 8-Lead Plastic MSOP, es diminuto, de los chip más difíciles que he soldado.
Después de mucho trabajo, he realizado un adaptador a DIP-8 normal.
El segundo problema es descubrir el modelo, I2C o  SPI, en mi caso es LTAES , que corresponde al bus I2C. LTC6904.







En teoría admite direcciones I2C ,   22 o 23 seleccionado por el pin ADR.
En mi caso solo funciona con el pin ADR a Vcc y con la dirección 22, o está estropeado el chip, o tengo un error en algún sitio.
Para controlar la placa he creado dos programas, en GAMBAS (VB para Linux) y con la librería Wxwidgets, que funciona en Linux y Windows. Además he creado un portable Linux que funciona bajo cualquier distribución Linux (32bits o 64bits) .


Realizado en GAMBAS (VB para Linux)


Librería Wxwidgets -Linux


Librería Wxwidgets - Windows 10

El programa del arduino reconoce la orden FREQ frecuencia , transmitida por el PC a través del puerto serie.
Existe dos rutina, la creada por mi que no utiliza coma flotante, y otra que utiliza coma flotante, de donde he sacado la mía.
El resultado es bastante bueno, y tenemos un oscilador programable mucho mejor que se utilizamos el DS1077.
Como he dicho anteriormente, lo más difícil de este montaje es soldar el chip.


PROGRAMA


Bibliografía:

https://digibird1.wordpress.com/arduino-controlled-frequency-generator-1khz-68-mhz/
http://www.kerrywong.com/2012/04/11/interfacing-ltc6904-with-arduino/
https://www.polaxis.be/2011/11/sp0256-al2-pitch-control/

Saludos.
Juan Galaz




miércoles, 9 de septiembre de 2020

Multi ROM para ZX Spectrum con EEPROM 49F002 o 39SF020


Multi ROM
ZX Spectrum

49F002 o 39SF020


El el anterior artículo había diseñado un grabador de EEPROM ardrom.html.
Este artículo se basa en:  http://trastero.speccy.org/cosas/droy/cartuchos/cartuchos_s.htm
En este caso voy a utilizar unas EEPROM de 256 Kytes (49F002 o 39SF020), por lo cual se conseguirán 16 páginas de 16 Kbytes, que serán las que sustituyan a la ROM original del Spectrum.
Las diferentes páginas (16) se van a seleccionar mediante 4 microinteruptores.
Estos microinterruptores tienen lógica inversa, por lo que para la página cero  debemos tener en ON los cuatro microinterruptores.
Cuando se inserta el cartucho se deshabilita la ROM interna del ZX Spectrum, mediante la colocación de la línea /ROMCS a 1.
El circuito detecta cuando las direcciones A14-A15 están a 0, además de que MREQ esta a 0 (acceso a memoria, tiene lógica inversa). En este caso se habilita la EEPROM, donde sustituye a la ROM original.


Esquema del circuito.




Circuito impreso, donde solo existe un puente con cable.



En mi caso he grabado 5 ROMS.

1111 -Rom original.
0111 -Rom gw03v33.rom , en esta ROM debemos teclear todos los caracteres del lenguaje Basic.
1011 -Rom 48-plus4.rom , ROM amstrad donde debemos teclear todos los caracteres del lenguaje Basic.
0011 -Rom CHESS.ROM .
1101 -Rom JETPAC.ROM .


Este pequeño ordenador me da aún juego después de 35 años, algo debe tener este ordenador.

Dibujo de pista C.I.


Bibliografía:

http://trastero.speccy.org/cosas/droy/cartuchos/cartuchos_s.htm

http://trastero.speccy.org/cosas/droy/droy.htm#cartuchos
https://k1.spdns.de/Vintage/Sinclair/82/Doityourself/IF2%20cartridges/
http://trastero.speccy.org/cosas/JL/InterfazROMexterno/InterfazROM.html



Saludos.
Juan Galaz




martes, 8 de septiembre de 2020

ARDUINO - Grabador de EEPROM , 49F002 o 39SF020



ARDUINO
Grabador de EEPROM

49F002 o 39SF020



He desempolvado el viejo ZX Spectrum y he visto algún artículo sobre como realizar cartuchos ROM para instalar en el Interface 2.
http://trastero.speccy.org/cosas/droy/cartuchos/cartuchos_s.htm
Yo poseo muchas memorias EEPROM procedentes de BIOS de placas base estropeadas.
En este caso voy a utilizar unas EEPROM de 256 Kytes (49F002 o 39SF020), por lo cual se conseguirán 16 páginas de 16 Kbytes, que serán las que sustituyan a la ROM original del Spectrum.
El caso es que no poseo ningún grabador de EEPROM, y no me quiero gastar 50€ en comprar uno a China.
Hace unos 10 años había realizado un programador EPROM utilizando un 8255 y que se conectaba al PC mediante el puerto paralelo.
En este montaje he utilizado un arduino junto con dos contadores 4040 para realizar este grabador EEPROM.
El coste de este proyecto si ya disponemos del arduino, no supera los 2 Euros, en mi caso ya tengo los 4040.
Debemos tener mucha paciencia en conectar todos los cables, de momento no he realizado el circuito impreso.


Versión 6


Como había comentado en la primera versión del grabador, el tiempo de lectura y escritura de la EEPROM era bastante alto.
Mi meta en esta versión era reducir los tiempos y hacer el programa muchos más sencillo.
Y como veréis lo he conseguido, ahora los tiempos de lectura se reducen a menos de 4 segundos, y los de escritura de 16 Kbytes, están entre los 35 segundos y los 60 segundos, dependiendo de la página de memoria que se escriba.
Para conseguir esto, he modificado las conexiones  A8-A17 y se las he conexionado al contador U2 del esquema.
Además la comunicación entre el PC y el arduino se realiza en bloques de 32 bytes.
También se puede reducir aún mas los tiempos, cambiando los tiempos entre pasos y aumentando la velocidad en Baudios, pero me conformo con los que he obtenido.
A modo de detección de errores he creado una especie de número de chequeo, no es el más preciso, pero para este pequeño proyecto funciona bien.
Cuando escribe la memoria EEPROM, vuelve a leerla devolviendo el numero de chequeo, que debe ser el mismo que el que se escribió.

Versión 6.





Diferentes paso en la creación del circuito.


Versión 6 del programa realizado en Gambas y funcionando en Linux Debian10.

Lo único que me falta es realizarlo para Windows, pero eso será otro rato.
Ahora estoy bastante contento con este montaje que me sirve para grabar las 16 ROM del spectrum que se seleccionaran mediante microinterruptores.

PROGRAMA VERSIÓN 6

 


VIDEO

 

 
Programa para Windows

El programa está realizado en Visual Basic 6 , por lo cual tiene una serie de problemas.
En Windows XP funciona perfectamente sin hacer ningún tipo de acciones.
Tanto en Windows 7 como Windows 10 debemos de realizar unos pasos previos.

En windows 32 bit copiar los dos archivos en system32 y luego registrarlos como administrador con la orden
regsvr32 c:\windows\System32\MSCOMM32.OCX
regsvr32 c:\windows\System32\COMDLG32.OCX

En windows 64 bit copiar los dos archivos en c:\windows\syswow64 y luego registrarlos como administrador con la orden
regsvr32 c:\windows\syswow64\MSCOMM32.OCX
regsvr32 c:\windows\syswow64\COMDLG32.OCX

Para hacer todo esto debemos abrir la consola en modo administrador.
Además de esto, si no reconoce el grabador a la primera, debemos deshabilitar los demás puertos COM.


Programa realizado en Visual Basic 6.

PROGRAMA WINDOWS


 

 

 



Versión 1



Esquema del grabador.


Circuito montado.

El circuito lee las ordenes que se le mandan desde el PC, y según la orden lee, escribe, direcciona y borra el CHIP.

DI n  -Coloca la dirección n para leer o escribir.
      -Devuelve DK y la dirección actual.

R     -Lee la dirección actual e incrementa el registro de direcciones.
      -Devuelve R n, donde n es el dato devuelto.

W n   -Escribe el dato n en la dirección actual e incrementa el registro de direcciones.
      -Devuelve W y el dato escrito.

ERASECHIP -Borra todo el CHIP

          -Devuelve ERASECHIP_OK


El programa en el PC esta escrito en Gambas, una especie de Visual Basic para Linux.
Para lo que no funcionen con Linux tendrán que esperar a que lo realice en wxwidgets que funciona en Windows y Linux.

Programa realizado en Gambas.

El programa solo graba bloques de 16384 bytes (el tamaño de la ROM del Spectrum), y la dirección de grabación se seleccionará desde las 16 posibles páginas.

El tiempo de lectura de los 16 Kbytes es de 55 segundos, y el tiempo de escritura es inferior a 6 minutos.
La mayor parte del tiempo es el proceso de comunicación entre el PC y el Arduino. La transferencia de datos es byte a byte con confirmación de transmisión, esto lo hace muy lento. Entre las cosas que quiero cambiar es la comunicación por bloques a 256 bytes, de esta forma se reducirá mucho el tiempo. Pero eso es para otro rato.
Como curiosidad debemos entender que para grabar este tipo de memoria, tenemos que mandar al CHIP una secuencia de 4 bytes.
También la forma en que he construido el grabador influye mucho en el tiempo de grabación, para direccionar una determinada dirección, debemos colocar la dirección en los contadores 4040, y esto se consigue contado hasta esa determinada dirección.
Otra forma mucho más rápida hubiese sido colocar tres 74LS373 para obtener  la dirección, pero deberíamos cablear mucho mas.
Y la forma más simple era usar un arduino Mega con suficientes entradas y salidas, pero esa no era mi meta.

En el próximo montaje veremos como podemos cargar diferentes páginas de EEPROM en el spectrum.



PROGRAMA

VIDEO



Bibliografía:

http://trastero.speccy.org/cosas/droy/cartuchos/cartuchos_s.htm



Saludos.
Juan Galaz





miércoles, 26 de agosto de 2020

ARDUINO -Trazador curvas de transistores

  Página principal

ARDUINO
Trazador curvas de transistores



 Versión  posterior realizada en Gambas (VB linux)

https://seta43.blogspot.com/2020/10/trazador-de-curvas-de-transistores.html

_____________________________________

Hace muchos años en la revista Elektor salió un artículo explicaba como realizar un trazador de curvas de transistores.
Las curvas se podían visualizar en un osciloscopio, y era bastante sencilla su realización.
Como era sencilla su realización, lo monté y pude ver las curvas en mi osciloscopio.

Circuito de la revista Elektor.

Han pasado muchos años desde entonces, pero su diseño sencillo me cautivó.
El problema de visualizar las curvas en el osciloscopio es que no se podían comparar unas con otras, además no se podían imprimir.
Ahora es fácil con los microcontroladores capturar los datos y poder guardarlos.
Me puse manos a la obra y adapté el circuito para poder capturar los datos con el arduino.

Circuito trazador de curvas de transistores con arduino.

Voy a explicar un poco el funcionamiento del circuito.
El transistor Q2 produce una corriente constante que hace cargar linealmente el condensador C1, una señal de diente de sierra lineal.
Esta señal que toma valores desde 0 a 5 V, se aplica al colector del transistor a probar mediante el transistor Q1.
Para descargar la carga del condensador se utiliza el transistor Q3.
La carga y descarga del condensador se realiza con el Pin  D13 del arduino.
Para generar las diferentes intensidades que se le aplica a la base del transistor de prueba, utilizamos los Pin D2-D3-D4 del arduino.
Con las diferentes combinaciones de los Pin D2-D3-D4 podemos mediante resistencias y diodos aplicar una intensidad al transistor de prueba. Al ser 3 bits las combinaciones el número de curvas son 8.
La intensidad se mide mediante la resistencia R6, y es capturado  con el Pin A0.

Circuito montado.

En la parte de programación en el Arduino el funcionamiento es el siguiente:
-El Pin 13 se pone a 1, con lo que conseguimos dos cosas, descargar el condensador C1 y anular el generador de intensidad constante.
-El pin 13 se pone a 0, anulamos la puesta a cero del condensador, y activamos la cargar linealmente el condensador C1 .
-Mediante el Pin A0 medimos la corriente en el transistor 10 veces durante la carga del condensador.
-El paso anterior se repite 8 veces, con las diferentes intensidades en la base del transistor de prueba.
-Terminadas la medidas se mandad mediante el puerto serie.

Para representar las curvas se me ocurrió hacer un programa, pero me lo pensé dos veces y he utilizado una hoja de cálculo con representación gráfica. Solo tienes que copiar datos procedentes del arduino y pegarlos en la hoja de cálculo. Es fácil y quedan bastante bonitas, además de ahorrarme unas horas de programación.


Copiado de datos desde el terminal.


Pegado de datos a la hoja de cálculo. (BC547)



Alta ganancia

Darlington



Conclusiones y notas.
Después de muchas medidas con diferentes transistores y con iguales modelos pero de diferentes fabricantes he obsevado que:
-Aunque sea el mismo tipo (BC547), las curvas son muy diferentes entre los diferentes fabricantes.
-Hay transistores bastante especiales, 2SD2375 con una ganancia enorme.
-Los Darlington como se puede ver tienen otro tipo de curvas, y su tensión B-E es de 1.4V.
Mi conclusión es que se fabrican lotes de transistores comunes, y dependiendo de los resultados en los test, los numeran con un numero que se adapte a las tablas standard. Eso creo que pasaba en el pasado, ahora creo que son más precisos a la hora de su fabricación.

Los transistores no funcionan igual con tensiones más altas  de 5V, pero no he querido complicar el circuito para poder alimentarlo a partir del Arduino.
También se podría hacer que la entrada A0 digitalizase más rápido además de con más ganancia, pero he querido usar técnicas normales del arduino.
Otra forma de medir la señal sería medir en la resistencia  R7 e invertir la señal, pero he creído no necesario complicar las cosas.

Es un sencillo montaje que permite observar el funcionamiento de los diferentes transistores, no se pretende mucho más, no se quiere hacer un instrumento de medida exacto.

PROGRAMA


Saludos.
Juan Galaz




jueves, 13 de agosto de 2020

O.T.L.A. Project Amplificador para ZXSpectrum

O.T.L.A. Project
Amplificador para ZXSpectrum


Todos tenemos un pasado, y en mi pasado está el ZXSpectrum, fue mi primer ordenador.
El estar cargando los programas desde las cintas es una experiencia que la gente joven desconoce.
En el  tiempo que tardaban los programas en cargar se podía uno hacer un bocadillo, y aún sobraba tiempo.
Y estábamos contentos si no se producía ningún error de carga, las cintas alguna vez daban problemas.
El caso que en estos días he estado cachareando con el Spectrum, y en mi anterior montaje había realizado un cargador de programas desde una SD. zxard.html
Como una cosa traen a otra, mirando por internet encontré un programa que prometía reducir el tiempo de carga de los programas del ZXSpectrum a 30 segundos. Esto me parecía bastante difícil, pero había que probarlo.
El proyecto se encuentra en: https://code.google.com/archive/p/otla/wikis/ProyectoOtla.wiki
Existe una página que explica bastante bien todos los pasos:
https://sites.google.com/site/hyperkingproject/tutoriales/modificaciones/compresiondejuegosdespectrumaaltavelocidadotla

Para crear el audio debemos utilizar el programa llamado O.T.L.A. que transforma diferentes formatos a un fichero de mp3.

El programa funciona en Windows, aunque yo lo he probado en Linux con Wine y funciona perfectamente.
Soporta varios formatos, pero el que menos problemas me ha dado fue el Z80, que es una imagen de memoria.
Como podéis observar no solo sirve para el Spectrum, funciona para MSX, CPC y Z81.
Existen numerosas opciones, pero yo no he tocado nada respecto a las que vienen prefijadas.
Cargamos el fichero en formato Z80 y luego lo transformamos en un fichero MP3.
El fichero ya lo podemos utilizar tanto con la salida de audio del PC como con un MÓVIL o TABLET.

Aquí me encontré el primer problema, los niveles de audio.
En algunos modelos de PC o MÓVIL  las salidas de audio no suele superar 1V, esto ya pasaba con algunos cassetes que no servían para los Spectrum. He tenido que crear un adaptador/amplificador de niveles de audio, solo emplea un transistor, condensadores y resistencias, es el típico amplificador.
Para la alimentación he utilizado un conector USB, de esta forma puedo utilizar un cargador común de Red,  o una POWER-BANK como en mi caso.




Circuito montado.


También podéis mirar en otros modelos de móvil si la salida tiene suficiente nivel de audio, yo he encontrado uno que tenía retirado. WIKO lubi3 , se puede encontrar desde 15€ y funciona de maravilla para reproducir MP3.


Las pruebas son sorprendentes, nunca pensé que se pudiera cargar tan rápido los programas, 30 segundos.
No he probado a modificar ninguna opción, me he quedado paralizado por la sorpresa, me sobra cualquier otra prueba.
He reproducido los MP3 generados tanto en el PC como en un MÓVIL funcionando perfectamente, eso sí, debemos de ajustar los niveles de audio, pero eso ya nos pasaba cuando utilizábamos las cassettes.
LARGA VIDA AL ZX SPECTRUM

 


otla_bin_win_2.2.0.zip

VIDEO DE LA PRUEBA

Saludos.
Juan Galaz


Bibliografía:

https://code.google.com/archive/p/otla/wikis/ProyectoOtla.wiki
https://sites.google.com/site/hyperkingproject/tutoriales/modificaciones/compresiondejuegosdespectrumaaltavelocidadotla

domingo, 2 de agosto de 2020

TZXDuino Arduino - ZXSpectrum


TZXDuino
Arduino - ZXSpectrum


En los años 80 compré mi primer ordenador, el ZXSpectrum.
Era mi primer contacto con los ordenadores, y después de muchos años aún sigo con la programación.
Aprendí  a programar en Basic, por lo cual tengo mucho cariño al Basic y sigo pensando que es muy buen lenguaje de programación.
El oír el audio de los programas cargando en el ordenador, aún me emociono.
El otro día descubrí el proyecto TZXDuino, era una especie de casete que transforma los ficheros TAP en audio que lee el Spectrum.
Es fácil de realizar y bastante barato.  Se necesita un arduino, LCD, SD, 5 botones, y algunos componentes mas.
El proyecto original utiliza un amplificador LM386, como no tenía este Chip, he modificado el esquema y utilizo un transistor común.
El proyecto original está en: https://github.com/sadken/TZXDuino
También se han creado muchos proyectos paralelos para cargar programas de MSX,  Amstrad, C64, etc...
Este montaje solo lo he probado en ZXSpectrum, funcionando perfectamente.
También he cambiado el módulo adaptador SD por unas resistencias que adaptan los niveles de la SD al Arduino.
Como podéis ver lo he modificado para ser lo más simple y batato posible.



Con el adaptador SD







Con las resistencias adaptadoras de voltajes.
Se  repite el esquema debido a que los esquemas que se hacen con  Tritzing son bastante malos.

He colocado un puente con un condensador para filtrar la señal de salida, en el caso de Spectrum utilizado funciona igual, pero en otros modelos puede ayudar a leer mejor los programas.
Me hubiese gustado colocar un potenciómetro en vez de las dos resistencias, pero no he querido complicar el circuito.

Con el filtro.

sin el filtro.


Montado todo en un circuito impreso.


Funcionando el circuito.

Tenemos que colocar todos los ficheros TAP en el directorio raíz de la tarjeta SD.
Con los pulsadores de circuito seleccionaremos el fichero correspondiente que se quiere reproducir.
Existe un menú con opciones que podremos seleccionar para las diferentes configuraciones.
Como hay varias versiones del TZXDuino, incluyo los que he utilizado en este montaje, y es la que he probado en el Spectrum..
La alimentación se puede realizar de diferentes formas, desde el USB del arduino, con adaptador de un cargador común a la Red,  con una POWER-BANK como en mi caso. También mediante una pila de 9V colocada al pin  del arduino Vin,  (admite entre 5 y 12V).
El consumo del circuito está entre los 30 a 35 mA.

PROGRAMA





VIDEO

Saludos.
Juan Galaz


Bibliografía:

https://github.com/sadken/TZXDuino
https://github.com/rcmolina/MaxDuino_v1.56
https://auamstrad.es/hardware/conoce-el-maxduino/
Colección de ficheros TAP  http://biotoxin.speccy.org/p.html