ESP8266: wifi para nuestros micros

Avatar de Usuario
Taburoto
Mensajes: 1281
Registrado: 15 Mar 2011 00:40
Agradecido : 17 veces
Agradecimiento recibido: 83 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor Taburoto » 09 Nov 2015 21:24

Último mensaje de la página anterior:

Y luego un soft multisistema,con chat y algo mas. Chatear desde el MSX con alguien que está en un CPC o un Spectrum......Conectar el Symbos de CPC con el del MSX....

Avatar de Usuario
duca750
Mensajes: 1396
Registrado: 19 May 2015 10:52
Ubicación: Olivenza (Badajoz)
Agradecido : 328 veces
Agradecimiento recibido: 73 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor duca750 » 10 Nov 2015 00:48

Increible y sin palabras, trabajazo y darte mi enhorabuena de como has conseguido configurar ese aparato y que encima lo hagas funcionar en distintos sistemas-
-4mstr4d CPC464(7),472 Y 6128 (2) -sp3zy 16K&48K GOMAS,+2,+2A/2B +3 -cocbm1 64 Y -coam1** -0r1c 1 (2ud) y ATMOS** -m3s3x CANON V20, SPECTRAVIDEO 728,TOSHIBA HX10, PHILIPS VG8020,2 NMS 8250+GOTEK -j4tar1 STFM 800XL -3nt3r 64-ACORN ELECTRON -codrg1 32

retrolab
Mensajes: 369
Registrado: 10 May 2014 18:06
Agradecido : 1 vez
Agradecimiento recibido: 8 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor retrolab » 10 Nov 2015 09:48

Buen trabajo y magnifica idea para aplicar a nuestros cacharros!!

Yo estoy pensando en combinar ESP8266 y el MAX232 para poder conectarlo a un puerto RS232 estàndard. De esta forma podria usarlo en los spectrum con interface1, pc antiguos, mis alphatronic, etc.

Pero me surge una duda: la alimentacion de los dos modulos puede ser de 3.3v? Y los voltajes del resto de lineas son a 5v TTLo a 3.3v?

Avatar de Usuario
Gatuso
Mensajes: 145
Registrado: 06 Ene 2014 11:55
Agradecido : 1 vez
Agradecimiento recibido: 15 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor Gatuso » 10 Nov 2015 22:08

El MAX232 no lo he usado nunca, pero el ESP8266 si que necesita 3.3 voltios de alimentación y los voltajes de sus líneas son también de 3.3v. En muchas páginas dedicadas a este chip inciden bastante en lo tener cuidado de no enchufarlo directamente a líneas con 5 voltios por lo que pudiera pasarle. En el circuito del CPC tengo puesto un divisor de tensión entre la patilla TX de la UART (que funciona a 5v) y la RX del ESP8266 para curarme en salud (en el sentido contrario no hace falta nada y la UART entiende bien los 3.3v del chip).

Con un circuito inversor/adaptador de niveles como el de la página anterior doy fé que el ESP8266 funciona perfectamente con puertos RS232 clásicos (como el del Amiga), así que con el MAX232 también irá de lujo.

Avatar de Usuario
Gatuso
Mensajes: 145
Registrado: 06 Ene 2014 11:55
Agradecido : 1 vez
Agradecimiento recibido: 15 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor Gatuso » 15 Nov 2015 20:58

Un par de ejemplos mas esta semana. En primer lugar el ZX81, que es el que mas trabajillo me dio. En primer lugar porque su Basic no tiene instrucciones IN y OUT, que me venían de perlas para el programilla de test que suelo usar. Así que en lugar de usar puertos de E/S intenté utilizar la propia memoria a base de POKEs y PEEKs, buscando algún rango de direcciones que no se utilizara realmente. Empecé probando con direcciones por encima de &7000, usando A14=A13=A12=1 (como sé que A15 lo usa la ULA para pintar no quería meterlo en la ecuación por si las moscas) y como vi que funcionaba y parecían no interferir con nada seguí por ahí. Y en lugar de /IOREQ utilicé /MEMREQ, para detectar cuando se accedía a esas posiciones. Solo faltaba deshabilitar la propia memoria del ZX81 en ese caso, para que no hubiera colisión entre la UART y la propia RAM. Para eso encontré este circuito donde se utiliza un transistor para poner a alta la línea /RAMCS, que deshabilita el acceso a la memoria interna del ordenador en esos casos.

Al final la modificación que tuve que hacer sobre la placa fue esta:

Imagen

Y el circuito real quedó tal que así:

Imagen

Modifiqué el programa para usar las direcciones &7000-&70005 en lugar de los puertos originales del CPC y me encontré con la segunda traba: el ZX81 no usa ASCII para almacenar los caracteres. Después de un par de IFs para convertirlos a un formato representable lanzo un pequeño programa para probar la recepción, enviando los comandos desde el PC (con el USB-232 pinchado en la placa):

https://www.youtube.com/watch?v=AHENuoHnl_A

A 150 baudios el programa perdía caracteres, simplemente por ese par de IFs que tenía para convertir de ASCII a caracteres del ZX81. El ESP8266 ya no me dejaba bajar a 75 baudios y por mucho que intenté optimizar el código no hubo manera de recibir todos los caracteres. Eso si, en modo FAST no perdía ni uno, pero claro, no veías un carajo hasta que parabas el programa -no

Imagen

Así que directamente ya no probé la parte de transmisión y di la prueba como moderadamente satisfactoria. El Basic del ZX81 no es capaz de procesar los datos que recibe a esas velocidades (en modo SLOW) pero el esquema parece válido y en ensamblador se podrían hacer cosas mucho mas eficientes (que ya escapan a mis conocimientos).

Y hace un rato he terminado de probar lo mismo con el Dragon. Podría haber sido algo mucho mas sencillo si yo fuera el afortunado poseedor de un Dragon 64 con su puerto serie "de serie", pero como solo tengo un humilde 32 le he tenido que conectar el pack completo. Aquí el reto era comprobar si la idea general funcionaba también en algo distinto a un Z80 sin grandes modificaciones. Y ha resultado mucho mas fácil de lo que imaginaba al principio.

Mirando el mapa de memoria para utilizar algo parecido a lo del ZX81 he visto que hay un rango (&FF40-&FF5F) reservado a la controladora de discos, que podía utilizar para esta prueba. Además cuando se accede a estas posiciones se activa la línea /P2 del puerto de expansión, reservada para una tercera PIA. Según el libro "Inside the Dragon":

(2) P2*

There is provision in the address decode logic
for a third device select signal similar to the
ones that select PIAO and PIA1. P2* goes LO
whenever an address is specified in the range
FF40-FF5F.


Lo que me venía de perlas, al tener directamente el Chip Select de la UART sin añadir lógica adicional. El único cambio real ha sido pasar de las señales /RD /WR del Z80 a una única línea R/W. Ahí la UART está muy bien pensada porque tiene dos entradas para cada una (negada y sin negar), pero como ya lo tenía todo soldado he usado una simple puerta NOT para llevar esa señal a la entrada /RD del chip:

Imagen

Imagen

Y ahora si, programita completo al canto y a navegar (a 150 baudios, porque a 300 también perdía algún carácter):

https://www.youtube.com/watch?v=3R49y5T835k

Avatar de Usuario
ron
Mensajes: 18440
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1608 veces
Agradecimiento recibido: 1337 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor ron » 15 Nov 2015 21:03

gatuso, a más de uno nos has petao de todo, te sales, lo que estás haciendo mola muchísimo, a ver si pronto lo catamos !!!!

Avatar de Usuario
Chema
Mensajes: 2234
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1811 veces
Agradecimiento recibido: 584 veces
Contactar:

Re: ESP8266: wifi para nuestros micros

Mensajepor Chema » 15 Nov 2015 22:11

ya te digo... es realmente impresionante!

mcleod_ideafix
Mensajes: 925
Registrado: 13 Ene 2012 09:45

Re: ESP8266: wifi para nuestros micros

Mensajepor mcleod_ideafix » 16 Nov 2015 01:01

Yo ya lo estoy probando en el ZX-Uno. Para ello me he escrito una UART para que se comunique con este módulo. Como ambos chismes van a 3.3V no hay problema por ello. La cosa es: ¿esto permite control de flujo por RTS/CTS? Porque si fuera así, todos los problemas de pérdida de caracteres se solucionaban de un plumazo. Si no lo permite, ¿cómo leches se supone que puede funcionar este módulo con cualquier hardware?
Cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista.

Avatar de Usuario
Gatuso
Mensajes: 145
Registrado: 06 Ene 2014 11:55
Agradecido : 1 vez
Agradecimiento recibido: 15 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor Gatuso » 16 Nov 2015 08:00

Pues parece que el chip sí lo soporta, pero depende de la versión de firmware que tenga instalada y sobre todo de la placa que se use. En la ESP-01 que tengo yo apenas están disponibles los pines TX, RX, reset y el de activar el modo flasheo, pero en otros modelos sí que hay conexiones con todos los GPIOs del chip y las señales RTS/CTS sí están disponibles:

Imagen

Sería genial poder usarlo y no depender de la velocidad de proceso de cada micro.

Avatar de Usuario
Gatuso
Mensajes: 145
Registrado: 06 Ene 2014 11:55
Agradecido : 1 vez
Agradecimiento recibido: 15 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor Gatuso » 08 Dic 2015 23:37

Un par de pruebas más durante el puente con sendos micros basados en el 6502, aprovechando que ambos tienen puerto de expansión de 25+25 contactos y me servía el cable que me hice para el CPC. El 6502 me es mucho menos familiar que el Z80, de ahí que el primero (Atari 800XL) me costó hacerlo andar, pero el segundo (Acorn Electron) salió rodado casi a la primera con lo que había aprendido antes.

El Atari ya lo había conectado a un PC usando el interfaz SIO2PC, con lo que podía pinchar ahí el ESP8266 y controlarlo a través de algún emulador de terminal. Pero quería hacerlo a mas bajo nivel y empecé a ver si podía usar directamente el puerto SIO para comunicarme con el módulo wifi. Cuando vi que aquello no era tan sencillo como pensaba desistí y me fui a por el puerto de expansión como en las otras pruebas.

Lo primero era estudiar un poco el mapa de memoria de cada uno para buscar algún rango de direcciones que pudiera usar para acceder a la UART, ya que el 6502 no maneja puertos de E/S directamente como hace el Z80 y su bendita señal /IORQ. Para el Atari encontré unas direcciones prometedoras en D5xx, D6xx y D7xx, dedicadas al manejo del cartucho y los periféricos que me podían valer para las pruebas. Para el Electron encontré el rango FCxx también dedicado a periféricos y expansiones, así que monté un pequeño ciruito a base de puertas AND y NOT (la protoboard blanca de las fotos) para decodificar esos rangos y obtener la señal CS0 que habilitaría la UART.

Con el analizador lógico en la mano vi que esa señal se activaba también de vez en cuando sin acceder explícitamente a esas direcciones, e imaginé que sería cosa del refresco de la memoria dinámica. Aquí es donde dí palos de ciego con el Atari intentando encontrar otra señal que me asegurase que se estaba haciendo una operación de lectura/escritura en esa zona, hasta que dí con la propia señal de reloj PHI2 que ambos micros sacan también por el bus de expansión. Mirando los diagramas de timing parece que el acceso a la memoria se produce cuando PHI2 está en alto, así que lo usé directamente como CS1 de la UART. Y funcionar funciona, aunque todavía quiero comprobar si esto es totalmente correcto o no.

Probando el Atari:

Imagen

https://www.youtube.com/watch?v=9B7ZSIGpW1Q

Y el pequeño Acorn:

Imagen

https://www.youtube.com/watch?v=rS2BJxlD8q0

Por cierto que descubrí para mi desgracia que el BASIC del Atari no tiene la función INKEY$ -banghead por lo que le fui mandando los comandos AT directamente desde el PC que tenía enganchado también a la placa. El BASIC del Electron por contra es igual de delicioso de usar que el de su hermano mayor el BBC Micro, y ya me tienen enamoradito los dos -give_heart

También tengo de camino una placa de evaluación ESP-12 como esta que tiene accesibles todos los GPIOs del chip, porque quiero trastear con la línea RTS y el control de flujo que comentaba macleod. A ver si así nos despreocupamos por el tema de la velocidad y ponemos el ZX81 a 115200 baudios -grin

Imagen

Avatar de Usuario
Gatuso
Mensajes: 145
Registrado: 06 Ene 2014 11:55
Agradecido : 1 vez
Agradecimiento recibido: 15 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor Gatuso » 20 Dic 2015 19:49

Un par de pequeñas actualizaciones en esta jornada electoral. La semana pasada me puse a trastear con el Commodore 64 y descubrí una vez mas el total desconocimiento que tengo de este sistema. Después de empollarme las señales del bus y tener medio slot de expansión conectado al analizador lógico descubro que el C64 ya incluye capacidades de comunicaciones serie a través del puerto de usuario -banghead Si es un perro me muerde, desde luego... La conexión no puede ser mas sencilla: TX es el pin M y RX son los pines B y C juntos:

Imagen

Como son niveles TTL podemos usarlos casi tal cual con el ESP8266, tan solo un divisor de tensión en la línea de TX del C64 para bajar el nivel hasta los 3.3v del chip. Cuatro cables y tenemos ya operativo el wifi:

Imagen

El capítulo dedicado al RS-232 del C64 Programmers Reference Guide contiene información exhaustiva sobre como configurar el puerto y establecer la comunicación con otros dispositivos, incluyendo programas de ejemplo. Con apenas unas pocas líneas de BASIC tenemos montado el terminal minimalista que nos permite hablar con el ESP8266 y probar la comunicación. Un 10 para míster Tramiel -thumbup

https://www.youtube.com/watch?v=c899r0pQpbM

Y hoy mismo estaba probando la plaquita que me llegó desde el lejano oriente esta misma semana, y que pedí a raiz del comentario de mcleod sobre el control de flujo. Se trata de una pequeña placa de desarrollo que da acceso a muchos mas GPIOs que la que tenía hasta ahora, además de montar un led RGB y hasta una fotorresistencia para experimentar con esto del Internet of Things (aquí y aquí podeis ver unas pequeñas reviews de la misma).

Según los esquemas el GPIO13 corresponde a la entrada CTS y el GPIO15 a la salida RTS, y la idea era comprobar si activando y desactivando el primero conseguíamos detener y reanudad la transmisión del chip hacia el ordenador. Con el comando AT utilizado para configurar la comunicación es posible elegir si queremos habilitar el control de flujo hardware:

Imagen

Cuando el chip tiene datos para transmitir hacia el ordenador activa el pin RTS (poniéndolo a 0), y si el ordenador está en condiciones de recibir los datos lo confirma poniendo a 0 también el pin CTS. En una primera aproximación conecté el CTS a un switch que me permitía activarlo y desactivarlo, y desde el mismo PC comprobé que la transmisión se paraba en cuanto el pin se ponia a nivel alto.

El siguiente paso era conectar esta entrada CTS del ESP8266 a la salida RTS de la UART 16550, de forma que fuera la propia UART quien ordenara transmitir o no al chip wifi a voluntad para evitar la pérdida de datos por desbordamiento de sus colas FIFO internas, sobre todo en el caso de las pruebas en BASIC. La conexión es a través de otro divisor de tensión, para adaptar los 5V de la UART a los 3.3V del chip wifi (la mini protoboard amarilla):

Imagen

La activación y desactivación de la señal RTS de la UART se hace escribiendo en el bit 1 del registro 4, Modem Control Register (MCR). Y como no tengo ni idea de como implementar un control de flujo de verdad he hecho una prueba de lo mas moñas con el pequeño programa que uso de test. En el bucle principal activo la línea RTS durante un brevísimo espacio de tiempo (tan breve como permite un OUT &FBD4, 2: OUT &FBD4, 0 en la misma línea). Durante ese intervalo la UART recibe datos del chip wifi, pero no los suficientes como para sobrepasar los 16 bytes de la cola FIFO (al menos a 57600 baudios). Una vez desactivada la transmisión ya puedo leer e imprimir en pantalla tranquilamente los datos recibidos y comprobar si se ha pulsado alguna tecla, para volver otra vez al comienzo del bucle y repetir la operación.

Con esa chorrada ya se puede configurar ambos extremos a 57600 baudios sin perder ningún carácter, mientras que sin usar RTS/CTS solo podía llegar a 300 baudios con el test en BASIC:

https://www.youtube.com/watch?v=U_2ebgnOMJo

Avatar de Usuario
duca750
Mensajes: 1396
Registrado: 19 May 2015 10:52
Ubicación: Olivenza (Badajoz)
Agradecido : 328 veces
Agradecimiento recibido: 73 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor duca750 » 20 Dic 2015 22:35

Sigo sorprendiéndome con tu curro, enhorabuena. Como me encantaría tener mas tiempo libre...Una vida en la mayoría de los casos actuales no da para vivir la actualidad y los aparatos de nuestros tiempos, que pena.
-4mstr4d CPC464(7),472 Y 6128 (2) -sp3zy 16K&48K GOMAS,+2,+2A/2B +3 -cocbm1 64 Y -coam1** -0r1c 1 (2ud) y ATMOS** -m3s3x CANON V20, SPECTRAVIDEO 728,TOSHIBA HX10, PHILIPS VG8020,2 NMS 8250+GOTEK -j4tar1 STFM 800XL -3nt3r 64-ACORN ELECTRON -codrg1 32

Avatar de Usuario
ron
Mensajes: 18440
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1608 veces
Agradecimiento recibido: 1337 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor ron » 21 Dic 2015 08:22

Gatuso, el 23 nos vemos en la retroparla de benKenobi !!!, estás haciendo un trabajo estupendo y muy útil e instructivo. Muchas gracias tío

Ben-kenobi
Mensajes: 513
Registrado: 01 May 2014 23:06
Agradecido : 8 veces
Agradecimiento recibido: 26 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor Ben-kenobi » 21 Dic 2015 22:12

ron escribió:Gatuso, el 22 nos vemos en la retroparla de benKenobi !!!, estás haciendo un trabajo estupendo y muy útil e instructivo. Muchas gracias tío


23 ron , el 23 sabado!

Imagen

Avatar de Usuario
Gatuso
Mensajes: 145
Registrado: 06 Ene 2014 11:55
Agradecido : 1 vez
Agradecimiento recibido: 15 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor Gatuso » 04 Ene 2016 19:41

Sirva como pequeña aportación al homenaje iniciado por ron al gran C128. Misma conexión y mismo programa de test que el C64, conectando para mas morbo a una BBS corriendo en otro C128 también.

https://www.youtube.com/watch?v=uhhORWOc21s

Avatar de Usuario
Gatuso
Mensajes: 145
Registrado: 06 Ene 2014 11:55
Agradecido : 1 vez
Agradecimiento recibido: 15 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor Gatuso » 07 Feb 2016 21:09

Todavía andaba con la resaca de la RetroParla de hace quince días y no había sacado tiempo para seguir toqueteando este tema. Salieron muchos comentarios e ideas después de la presentación y tenía ganas de ponerme sobre todo a investigar el control de flujo. Para eso he conectado la segunda placa que compré, que tiene todos los pines disponibles para usarse externamente, al zócalo donde pinchaba la primera placa tirando cables. He añadido una conexión mas desde el pin RTS del chip UART al pin CTS del ESP8266, pasando por un divisor de tensión montado en una pequeña protoboard para bajar la tensión a 3.3 voltios. El resultado es el siguiente:

Imagen

He modificado también el programa que estoy usando para probar todo esto, una pequeña navaja suiza compilada con la CPCtelera que me permite usar el Amstrad como terminal del propio ESP8266 o conectarme a servidores externos cómodamente (aparte de un par de cosillas extra que ahora detallaré). Básicamente en el bucle de recepción de datos activo el RTS y me quedo esperando a que llegue algún dato. En cuanto hay uno disponible desactivo el RTS, lo proceso y vuelvo otra vez a activarlo en la siguiente iteración. Es un control de flujo sumamente rudimentario pero me aseguro que mientras estoy procesando el dato no me llegan mas desde el chip wifi que me puedan desbordar la cola FIFO de la UART (que solo tiene 16 bytes de capacidad). Sigo haciendo polling en lugar de usar las interrupciones, leyendo un byte en cada operación de lectura.

El resultado es que a 57600 baudios ya no perdemos ni un solo byte. En la RetroParla vimos un pequeño ejemplo donde cargábamos una pantalla desde el PC a 1200 baudios, y aquello era lento como cargar desde la propia cinta. Ahora a 57600 baudios la cosa mejora una mijita:

https://www.youtube.com/watch?v=54jEblBo5-E

En las conexiones a servidores remotos en modo terminal la mejoría es notable también, aunque a partir de cierta velocidad (9600 baudios en adelante) ya no se nota mas velocidad mostrando los caracteres en pantalla porque es el propio programa el que hace de cuello de botella a la hora de procesarlos e imprimirlos.

Una vez que tenía un control de flujo básico implementado se me ocurrió mirar si era capaz de cargar algún programa, como comentó el compañero Blackhole en la reunión. La idea es la misma que con la carga de pantalla: un pequeño script en python corriendo en el pc abre un socket en un puerto determinado y espera a que el CPC se conecte a él, para acto seguido chutarle el archivo que le hayamos dicho. Busqué algún jueguecillo que estuviera compuesto por un único archivo .BIN, y me puse a mirar la cabecera AMSDOS para ver donde tenía que cargarlo en memoria. Afortunadamente hay bastante documentación por internet:

Código: Seleccionar todo

Byte 00: User number
Byte 01 to 08: filename
Byte 09 bis 11: Extension
Byte 18: type-byte
Byte 21 and 22: loading address
Byte 24 and 25: file length
Byte 26 and 27: execution address for machine code programs
Byte 64 and 65: (file length)
Byte 67 and 68: checksum for byte 00 to byte 66


Así que añadí una opción mas a mi programilla de test para conectarme al PC y recibir el archivo, leer sus primeros 128 bytes y de ahí sacar el nombre del fichero, su longitud y el punto donde debía almacenarlo en memoria. Con esos datos el resto es un bucle leyendo bytes del puerto serie y guardándolos en esa zona de la memoria, para finalizar con una llamada a la rutina del firmware MC_START_PROGRAM (0xBD16) que se encarga de ejecutar el programa desde la dirección que le digamos. Busqué algunos ejemplos válidos y la cosa pareció funcionar:

https://www.youtube.com/watch?v=Qj7rKQWZfv4

Evidentemente esto tiene una limitación muy grande, ya que solo vale para juegos y programas que estén contenidos en un único archivo. Pero como prueba de concepto ha sido de lo mas divertido e instructivo a la vez, que es de lo que se trata -grin

Ben-kenobi
Mensajes: 513
Registrado: 01 May 2014 23:06
Agradecido : 8 veces
Agradecimiento recibido: 26 veces

Re: ESP8266: wifi para nuestros micros

Mensajepor Ben-kenobi » 07 Feb 2016 21:12

Muy bueno! Deseando segir tus avances...


Volver a “Lenguajes de Programación y herramientas Dev”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado