¿Se puede programar un AT90S8515 con Arduino?

Hola foreros!! Básicamente la cuestión es la que indica en el título del hilo. Tengo por aquí, desde hace muchos años, y abandonada, debido a inexperiencia e ignorancia de para qué se utilizaba anteriormente, una tarjeta de desarrollo con los microcontroladores extraibles que procedía de un vecino. Esta tarjeta tiene, como digo, el Atmel AT90S8515.

Le acompaña una EEPROM de 256Kb, una 24LC256 que tiene conectados los pines 5, 6 y 7 directamente al Atmel.

No sé si se verá bien la foto. Si no, es un 24LC256. Por el tamaño de la memoria, intuyo que esta tarjeta fue diseñada para alojar programas grandes que la memoria del AT90S8515 no podía alojar.

Aquí se ve un arreglo de condensadores similar al que usan los más habituales 328P, aunque le falta el cristal. Ignoro totalmente el valor original de este componente.

Por la parte de atrás de esta tarjeta, unas conexiones a la placa de este microcontrolador. El primer pin es el situado abajo a la derecha.

Aquí se puede ver cómo los pines 37, 38 y 39 están conectados directamente a los pines 5, 6 y 7 de la EEPROM y el número 40 al pin 8 de la EEPROM.

He estado indagando en la hoja de especificaciones del AT90S8515 y veo cosas que me resultan familiares, pero al no saber inglés, no entiendo todo. Una de ellas es que la tensión de funcionamiento es entre 4v y 6v, lo cual posibilita una conexión directa con el Arduino. Este microcontrolador tiene una velocidad de 8Mhz, pero no sé si podrá subirse a 16Mhz. Tiene 32 pines de E/S digitales y se habla de PWM, pero no llego a identificar qué pines son.

Hoja de características del AT90S8515

Imagen de la distribución de pines del AT90S8515:

Tiene también pines MISO, MOSI, RESET, SCK, VCC y GND, los mismos del conector ICSP que tienen nuestras placas UNO. Tal vez por ahí pueda programarse esta "maravilla de la corrosión". :smiley:

Al no tener el nivel necesario para saber si se puede programar mediante este puerto, pregunto si es posible. Mis búsquedas han sido infructuosas, ya que he ido a respuesta distinta por búsqueda. Unos dicen que es imposible, porque Arduino no tiene instrucciones para este bicho, otros que no creen que funcione, otros que sería posible, aunque no se podría cargar el bootloader y otros aseguran que, aunque la gente diga que no, sí se puede. Ante este cuadro, no tengo una información clara de si se puede o no.

¿Se podría programar esto con un Arduino UNO conectando los pines ICSP y poder cargar algo? Soy consciente de la antigüedad de semejante integrado, y no espero hacer cosas grandes, sino aprender a hacerlo funcionar, que ya sería suficiente.

En caso de que NO se pueda programar:

Está claro que este bicho tuvo que poderse programar con alguna herramienta, programador o cacharro en aquella época, hace más de quince años. ¿Qué se usaba antes para programarlo? Recuerdo que este vecino sacaba el integrado y lo ponía en una placa con un conector COM directo al ordenador cada vez que tenía que programarlo. ¿Qué programa se usa para programar un ATMEL? Recuerdo que con los PIC se usaba el ICPROG, pero era todo hexadecimal y no entendía nada. :smiley:

Saludos!!

ATMEL STUDIO 7 (la 6 debería funcionar tmb) es tu solución.

Si tienes un código para un UNO ATmel328P, te va a pedir la ruta al .ino y cuando te pida un procesador usas un ATmega328P.
Entonces podrás crear (build) una solución y tener código para el ATMEGA328P.
Aquí viene la magia, el ATMEL STUDIO te permite recrear o rebuild la solución cambiando de procesador entonces ahi eliges el AT90S8515 y tiene que funcionar.
Tendras que tener cuidado con pines, ADC, timers. Aunque el 8515 si mal recuerdo tenia 8 ADC o sea se parece mucho al 328P (versión NANO)

Y claro siempre te queda la alternativa de usar ATMEL STUDIO directo usando el estilo AVR y con librerias igual de completas como las de Arduino como AVRlib.

Hola. He estado hace un rato cacharreando sobre el asunto. Lamentablemente, Atmel Studio 7 no está disponible para Mac, y el PC más cercano donde puedo instalarlo está a 20km, una distancia a tener en cuenta. El ordenador en cuestión tiene Windows 7 a 32bit y la instalación ha sido tediosa y ha durado alrededor de dos horas. Instalación fallida, requiere actualizaciones específicas de Windows, bloqueos a la hora de instalar los controladores, el servicio de instalación de Windows se bloqueaba... Pero tras instalarlo, ha echado a andar. Va fatal, extremadamente lento, pero al menos está funcionando. La decepción me la he llevado cuando tras dos horas de tediosa manipulación de la máquina, me doy cuenta de que el AT90S8515 no está disponible para programar: todos los esfuerzos, y prácticamente toda la tarde invertida, para nada. Por internet aparece un comentario de que este micro está en la sección "mature" pero que no se puede usar. :frowning:

He buscado en internet y es un tema hablado, pero está todo en inglés. Por lo que he leído, a este microcontrolador se le ha dado soporte hasta la última versión 4. A partir de la 5, ya no lo tiene.

Por suerte, esta versión sí ha instalado en mi máquina, que es un Mac y tiene una emulación de Windows. Puedo seleccionar el AT90S8515 pero ahora me asaltan las siguientes dudas: cómo pasar el programa al microcontrolador y lo más importante, ¿cómo se programa en este software? Tenía la idea de poder programar este bicho a través de los puertos MISO/MOSI o serial del Arduino UNO pero por lo que estoy viendo, me temo que no va a ser posible y va a hacer falta un hardware especial. Si este hardware va a ser caro, directamente desistiría en intentar programarlo, ya que únicamente quería programarlo para aprender y no por necesidad. Si hubiese necesidad de sacar un programa a un microcontrolador, el mismo ATMEGA328P daría la talla, es actual y tiene mucho soporte, y ya puestos, que no nos salimos del entorno Arduino. :smiley:

Según tenga tiempo, investigaré cómo programar en este software, que es totalmente nuevo para mí y buscar la viabilidad de programar este dinosaurio por el mero hecho de aprender, poder crearme una especie de arduino "creado por mí" y satisfacción personal de haber completado un proyecto, siempre y cuando sea viable.

Seguiré informando. :wink:

Hola. Estoy de vuelta tras unos días investigando cómo echar a andar semejante "dinosaurio", y he vuelto con un rotundo fracaso. Prácticamente me lo esperaba. :smiley:

Probé ATMEL Studio 7 como dije anteriormente con su tediosa instalación con múltiples fallos y bloqueos, y como dije anteriormente, el dinosaurio no está disponible para programar. Leyendo, descubrí que el AS 4 sí podía programarlo. Lo descargué, lo instalé y sí, ahí está el dinosaurio como opción para programarlo!! :smiley:

Como con el Arduino UNO no conseguía hacer nada, ni tan siquiera quemar el bootloader (esto ya me lo esperaba, pero probar era cuestión de un par de clics :D). Por ello, me compré un programador por USB y micros AVR para conectar los pines MISO, MOSI, SCK, etc directamente al dinosaurio. Primero empecé a aprender a usar el programador con el 328P, y una vez, después de varios cabezazos y casi romper el UNO :o , ya conseguí programarlo si usar el conversor USB de la propia placa Arduino. Avanzamos un paso. :wink:

Ahora vienen los impedimentos y las dificultades con las que me he encontrado:

-AS 7 tiene soporte para el programador AVR-ASP, pero no tiene soporte para el dinosaurio
-AS 4 tiene soporte para el dinosaurio pero no para el programador USB
-Arduino no quiere ni olerlo, ni con programador ni sin él, ya que para subir un programa, hay que seleccionar el µC, y obviamente, el dinosaurio no aparece :frowning:

Ahora mismo estoy en una situación estancada, porque lo que me da un programa no me lo da el otro, y dudo que se pueda pasar un proyecto de AS 4 a AS 7 para programarlo, entre otras cosas porque AS 7 no soporta el dinosaurio. Me da que no voy a poder programarlo y lo enmarcaré en algún sitio como recuerdo, porque me da que me va a costar dinero, DINERO, programarlo cuando mi intención no va más allá de la curiosidad y aprendizaje a programar otra cosa fuera de Arduino aunque con su ayuda. :frowning:

Para matar el gusanillo, he comprado recientemente, aunque aún no ha llegado, un ATtiny85, un micro de tamaño micro :smiley: con el que espero tener algún éxito y llegar a programar algo pequeño, y si procede, a hacer una guía detallada para el foro. :wink:

Para terminar, enlazo al AVR ASP que adquirí recientemente y que funciona perfecto. Como extra, tiene voltaje conmutable de 5v o 3,3v: Programador AVR ASP

Busca un ATMEL STUDIO mas viejo. las versiones anteriores estan disponibles.
No sabía que el 7 habia quitado el soporte de dicho micro.
Prueba con 6 y si vas mas abajo recuerda que empiezas a tener conflicto con Windows y su versión asi que tendrias que montar un vesión virtual de Win XP o 7 (como máximo 7) y ver si corre.

Respecto al programador, hay esquemas de programadores para ATMEL AT90SXXXX que usaban puerto serie RS232 transistores y nada mas. O algunas compuertas si mal recuerdo. Y hasta una versón que lo programaba con el LPT que fue de mis primeros triunfos y pruebas con los ATMEL.

LPT... Quizás pueda rescatar un viejo Pentium 4 que tengo con Windows XP instalado al que no le funcionan los puertos de comunicaciones pero sí le funciona el LPT. Tampoco tiene USB (se quemaron los ocho puertos) así que si me sirve para algo, bienvenido sea!! :smiley:

Seguiré investigando poco a poco sobre cómo puedo echarlo a andar y probaré también versiones intermedias del AS hasta dar con la más moderna que me permita programar al dinosaurio. :wink:

Hola
Te explico lo que yo he hecho, y espero que te sea útil. He logrado que el Arduino IDE 1.8.5 compile blink.ino para el microprocesador AT90S8515. Pero como no tengo un AT90S8515, no puedo afirmar que te vaya a funcionar a tí también.

Supongo que el programador que te haz comprado es el USBasp y que el cristal que le haz puesto a esa placa, es un cristal de 8MHz. Por cierto, esa placa parece una Funcard.

Al final del archivo boards.txt añade las siguientes líneas:

##############################################################

s8515.name=AT90S8515-8PC

s8515.upload.tool=avrdude
s8515.upload.maximum_data_size=8192
s8515.upload.protocol=usbasp
s8515.upload.speed=9600
s8515.upload.using=USBasp

s8515.build.mcu=at90s8515
s8515.build.f_cpu=8000000L
s8515.build.board=AVR_8515
s8515.build.core=arduino
s8515.build.variant=standard

Estas líneas crearán una placa con el nombre AT90S8515-8PC. Junto con tu programador USBasp, creo que podrías compilar y luego subir el archivo binario al procesador, todo desde el Arduino IDE.

Lo que estás haciendo con el AT90S8515-8PC es muy parecido a lo que tendrás que hacer con el ATtiny85.

Para terminar, los bootloader no funcionan con el AT90S8515-8PC. Este microprocesador no se puede autoprogramar.

Suerte

Muchas gracias!! Pues sí, al darle a compilar, compila!! :smiley: pero no llega a programar. :frowning: He seleccionado como programador el USBasp y cargando el programa mediante la opción de "Subir usando programador" pero no ha habido éxito.

Lo del cristal es un tema interesante, porque no tengo conectado ninguno, pero según hoja de características, lleva un oscilador interno de 8Mhz, por lo que debería funcionar, a no ser que lo esté entendiendo mal. ¿Necesita sí o sí un oscilador este micro para funcionar o tiene uno interno? Este es el error que me suelta:

avrdude: Version 6.3, compiled on Jan 17 2017 at 12:01:35
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf"
         User configuration file is "/Users/inakimolero/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : usb
         Using Programmer              : usbasp
         AVR Part                      : AT90S8515
         Chip Erase delay              : 20000 us
         PAGEL                         : P00
         BS2                           : P00
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom         4    12   128    0 no        512    0      0  4000  9000 0x80 0x7f
           flash          4    12   128    0 no       8192    0      0  4000  9000 0x7f 0x7f
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
           fuse           0     0     0    0 no          1    0      0     0     0 0x00 0x00
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00

         Programmer Type : usbasp
         Description     : USBasp, http://www.fischl.de/usbasp/

avrdude: auto set sck period (because given equals null)
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: error: program enable: target doesn't answer. 1 
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.


avrdude done.  Thank you.

el puerto seleccionado 
 no existe o tu placa no esta conectada

Si necesita oscilador, a lo largo de la semana me acercaré a la tienda de electrónica y cogeré un cristal y los dos condensadores necesarios. :wink:

Me imagino que el microprocesador estará configurado para utilizar un cristal. Según la configuración de los fusibles del microprocesador se utilizará un cristal o el oscilador interno.

Puedes leer sobre los fuses de los microprocesadores atmel aquí y aquí .

Yo creo que vas a necesitar un cristal de 8MHz. También podría ser uno de 4MHz.

Por si acaso, todavía no trates de modificar los fusibles sin estar totalmente seguro de lo que haces.

¿Haz seleccionado el puerto USB al que está conectado tu programador USBasp? No estoy totalmente seguro de si es necesario hacer esto.

MUY BUENAS NOTICIAS!! He conseguido programarlo!! :smiley:

En la imagen, aunque estática, se puede ver que el LED 0 está encendido y tiene cargado el parpadeo del LED. En la siguiente, se puede ver el programador en el conector USB y la ristra de cables utilizados.

Aquí se puede ver una foto del osciloscopio recogiendo la forma de onda. Como se puede ver, tiene pulsos de medio segundo, que es el programa que le he metido:

void setup() {
  
  pinMode(0, OUTPUT);
}

void loop() {
  digitalWrite(0, 1);
  delay(500);
  digitalWrite(0, 0);
  delay(500);
}

Aquí se puede ver el registro de la carga. He de decir que la carga es bastante lenta, más de lo habitual, pero termina subiendo. :wink:

avrdude: Version 6.3, compiled on Jan 17 2017 at 12:01:35
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf"
         User configuration file is "/Users/inakimolero/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : usb
         Using Programmer              : usbasp
         AVR Part                      : AT90S8515
         Chip Erase delay              : 20000 us
         PAGEL                         : P00
         BS2                           : P00
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom         4    12   128    0 no        512    0      0  4000  9000 0x80 0x7f
           flash          4    12   128    0 no       8192    0      0  4000  9000 0x7f 0x7f
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
           fuse           0     0     0    0 no          1    0      0     0     0 0x00 0x00
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00

         Programmer Type : usbasp
         Description     : USBasp, http://www.fischl.de/usbasp/

avrdude: auto set sck period (because given equals null)
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9301 (probably 8515)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: auto set sck period (because given equals null)
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: reading input file "/var/folders/pb/btgym11s7jv3_vnm49dyvrkw0000gp/T/arduino_build_303102/Blink.ino.hex"
avrdude: writing flash (720 bytes):

Writing | ################################################## | 100% 4.21s

avrdude: 720 bytes of flash written
avrdude: verifying flash memory against /var/folders/pb/btgym11s7jv3_vnm49dyvrkw0000gp/T/arduino_build_303102/Blink.ino.hex:
avrdude: load data flash data from input file /var/folders/pb/btgym11s7jv3_vnm49dyvrkw0000gp/T/arduino_build_303102/Blink.ino.hex:
avrdude: input file /var/folders/pb/btgym11s7jv3_vnm49dyvrkw0000gp/T/arduino_build_303102/Blink.ino.hex contains 720 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.86s

avrdude: verifying ...
avrdude: 720 bytes of flash verified

avrdude done.  Thank you.

Se ha subido, como se puede ver en las imágenes, con un programador AVRasp por USB. La clave para poder programarlo es el oscilador. O bien el oscilador interno no vale, o bien no tiene (no he podido averiguarlo), por lo que he comprado un cristal de 8Mhz con sus pequeños condensadores y ha cargado el programa a la primera y sin ningún problema. El máximo problema que he tenido es el de encontrar el pin 0. :smiley:

Agradecer la ayuda recibida de todos vosotros. Han sido puntos clave el modificar el archivo boards.txt con esta información extra y el oscilador externo, obligatorio para echar a andar la placa. :wink:

Me gustaría invertir tiempo en este micro para hacer un tutorial aquí en el foro sobre cómo programar este dinosaurio, el funcionamiento de sus pines, identificación de ellos y demás. No es una cosa que se haga actualmente pero si buscas, hay bastante gente que pregunta cómo programar esto hoy. Si se me permite, haré un tutorial lo más detallado posible. :wink:

Este es el que tiene 8 canales AD no es cierto o era el 8535?
Creo que este tenia solo entradas/salidas digitales claro con sus PWM y input capture pero sin AD. Creo que tenia Analog Compare.

Creo que sí, que es de 16 E/S digitales y ocho entradas analógicas, si entendemos "AD" como un pin Analógico-Digital a partir de este esquema del dinosaurio. El pin 10 es el pin 0 (este sí está comprobado), e imagino que será creciente hasta el pin 28. :wink:

Aún me queda invertirle tiempo e intentar dar salida PWM a todos los pines digitales, a ver cuál es cual y si realmente tiene salida PWM, pero intuyo que los puertos C y D son E/S digitales y el puerto B entradas analógicas. También probaré multitud de funciones, por ver si hubiese algún conflicto con alguna o que no esté disponible en este microcontrolador. :wink:

Te repito el AT908515 no tiene ADs el AT90S8535 tiene 8 y es similar al 8515 en todo lo demas.

Tengo una cantidad infinita de estos integrados, todas sus versiones aTS904414 inclusive, 8515, 8535 y otros que no recuerdo.

Los compraba en Ebay.com como si fueran surplus a pocos dolares de a 100's luego el trabajo que los requirió cambio y no los use.. mala pero muy mala suerte.
Quedaron a la espera de algo y como apareció arduino todo cambió.

Voy echándole tiempo a ratos. :smiley:

Ahora mismo tengo lo siguiente. Me he puesto a probar salidas digitales para ver cuál es cuál y puedo acceder a 20 salidas. Digo salidas porque de momento solo he probado a dar salida.

La salida 0 corresponde al pin PD0 en la pata 10. Hasta el PD7 pata 17 va sumando salidas, de modo que el PD5, por ejemplo, es la salida 5. Cuando viene la salida 8 no se activa la salida PC0 pata 21, sino que se activa la salida PB0 pata 1, así hasta la salida 13 que corresponde al PB5 MOSI para 6. La salida 14 pasa a ser el pin PC0 pata 21 hasta la salida 19, que corresponde al pin PC5 pata 26. No he conseguido hacer funcionar las salidas PC6 ni PC7 con salidas 20 y 21, por lo que, o no son accesibles, cosa que dudo, o bien que por el IDE de Arduino genere algún fallo y no sean accesibles esas salidas. Imagino que usando el código interno de Atmel (manejo directo de puertos) podrán usarse esas salidas, y los pines marcados como "AD" de la pata 32 a la pata 39 no he conseguido aún que generen una salida. Posiblemente recurriendo a la solución de antes se puedan manejar las salidas.

En otro rato pruebo estos pines accesibles desde el IDE de Arduino como entradas, a ver si dan la orden de encender un LED, y también miraré cómo usar los grupos de pines, escribiendo lo de "DDRB 0x11111111" o similar (no sé cómo funciona este código). Lo buscaré por ahí a ver cómo se usa esto. :wink:

Otra cosa que he visto es que la salida no da 5v, sino que se queda en unos 2,2v o similar, cosa que no esperaba. Lo bueno, es que se pueden conectar LEDs directos al microcontrolador sin temor a que se queme o quemen. ???

Los pines ADx son para direccionamiento de memorias. No olvides la época.

Acabo de echarle otro rato al dinosaurio. :smiley:

Todas las salidas digitales que pude usar el otro día se comportan como entradas, incluso con su resistencia interna usando "INPUT_PULLUP", y lo respeta. Lo que no he conseguido es obtener salida PWM por ninguno de los pines. Posiblemente no tenga este tipo de salidas o el PWM se use solo para reloj o similar. Lo que no encuentro es una referencia para activar los pines del puerto A, porque lo poco que encuentro es la instrucción en sí pero no la descripción ni cómo se usa. Lo poco que encuentro es en inglés y para un resultado que encuentro en español, me entero menos. :grin: Tampoco sé si se podrá usar el puerto A como E/S normales y corrientes. ::slight_smile:

Al revisar de nuevo la hoja de especificaciones, sí, el 8515 tiene puertos "AD" mientras que el 8535 tiene puertos "ADC", que esto da más pie a pensar en conversor analógico-digital.

He probado también a mandar texto por Serial pero al compilar directamente no me ha dejado. Creyendo haberlo escrito mal, pese a estar coloreado en naranja, he seleccionado otra placa Arduino y me ha compilado, así que, de alguna manera, sabe que no tiene puerto serie o no lo puede usar, teniendo dos pines para comunicación.

Delay, for, millis, if, else, digitalWrite, pinMode y demás funciones las acepta, incluso analogWrite, aunque luego no tenga salidas PWM.

Creo que me queda solamente poder acceder a los puertos desde ¿lenguaje Ensamblador? (pregunto porque no lo sé) y ver si todos los puertos son accesibles. :wink:

Tendrias qeu ver que código assembler esta generando y comparar con el datasheet del AT90S8515.

Te vuelvo a repetir, las salidas AD no tienen nada que ver con ADC son ADdress. El 8515 no tenia AD, 8535 si, tenia 8 ad de 8 bits si mal recuerdo. Bueno esa en el datasheet.

Los timers : dice tener uno de 8 bits que podemos suponer Timer0 y otro de 16 bits que puede ser Timer1

Tiene un solo 2 pines dedicado a PWM y es PD5 (OC1A) y P29 (OC1B)
Tiene dos ANALOG COMPARE en PB2 y PB3
Dos interrupciones en PD2 y PD3
Puerto serie que ya lo encontraste en PD0 y PD1
Puerto SPI.

No tiene pines para I2C

Ahora hay que encontrarle utilidad.

Estoy de vuelta. :smiley:

Sí, no tiene entradas analógicas, me lo dijiste un par de veces y lo confirmé con la hoja de especificaciones del 8535. :wink: Una pena, porque de tener al menos una entrada analógica, el dinosaurio ya tenía destino. :frowning:

He tardado en escribir por dos motivos. Uno de ellos es la ausencia de avances (hasta hoy) y otro es el infernal calor que hace por aquí, aguantando temperaturas de 37 grados… ¡¡a las cinco de la mañana!! :disappointed_relieved: “Imposible” ponerse a trabajar con estas temperaturas.

Como digo, he hecho algún avance con el acceso a los puertos del dinosaurio y es que he logrado acceder a los 32 pines de E/S pero no por medio de lenguaje C, sino de programación de bajo nivel con DDR, PORT y PIN (me ha costado mucho encontrar esta información).

Para declarar pines de entrada en un puerto entero con DDR hay que poner lo siguiente, donde la A es el nombre del puerto que variará dependiendo del µC que se use:

DDRA = B00000000;

mientras que para declararlos como salida, hay que poner:

DDRA = B11111111;

Se pueden declarar algunos como entrada y otros como salida. Un ejemplo aleatorio:

DDRA = B00110010;

Para leer el estado de un puerto se usa PIN seguido del pin que queramos consultar de una manera no habitual para los que usamos Arduino con C:

PINC & (1<<PC0);

-PIN es la función
-C es el puerto a consultar
-& es un booleano
-1 es el estado que queremos leer (1 para alto, 0 para bajo)
-<< operador bit a bit necesario
-PC0 es el pin a consultar (consultar hoja de especificaciones del µC en cuestión para saber qué pin quieres usar). La C es el puerto y debe coincidir con PIN.

También se puede consultar el estado de todo el puerto con PIN a secas (PINA si el puerto es el A, PINC si el puerto es el C).

Mis conocimientos están empezando a tocar techo, de hecho, encontrar esta información y ponerla en práctica me la llevado bastante tiempo, más del que creía, y no entiendo del todo, por ejemplo, la función de lectura de pin. Tengo localizados los pines de interrupciones por hardware que pondré a prueba (que eso vendrá en otro fascículo, será la primera vez que practique con interrupciones). Los pines de puerto serie los tengo localizados, pero por algún motivo, Arduino no compila si incluyo la línea “Serial.begin”. Nunca he tocado los temporizadores y no estoy seguro de tener éxito a la hora de acceder al pin OC1B, ya que no está en ningún puerto específico. Ignoro por completo qué utilidad tiene el comparador analógico, por ello, no sé cómo se usa y no puedo hacer pruebas por ahora.

Un pequeño resumen de lo conseguido hasta ahora:

A nivel de software:

-Con C se puede acceder a 20 E/S
-Con Ensamblador se puede acceder a las 32 E/S
-Funciona INPUT_PULLUP
-Funciona analogWrite, pero no sirve de nada ya que obtendremos una salida de 1 o 0
-Funciona digitalRead
-Funciona FOR
-Funciona IF y ELSE
-Funciona millis
-Funciona delay
-Aunque tenga puerto serie, no acepta la función Serial.begin, no compila

A nivel de hardware:

-Funciona a 5v
-Necesita SÍ o SÍ un cristal de 8Mhz para poder ser utilizado. Sin cristal, no funciona
-Las salidas ofrecen unos 2,2v. Se puede conectar un LED directo sin riesgo
-No tiene entradas analógicas
-Las entradas normales (INPUT) necesitan, de igual manera, una resistencia mínimo de 2200Ω. Recomendada resistencia de 10KΩ a masa
-Tiene puerto serial pero, hasta el momento, no se puede usar en este entorno
-Se programa con los puertos MISO, MOSI, SCK, RESET y tensión, por lo que hay que usar un programador externo SÍ o SÍ
-No tiene protocolo I2C
-No es autoprogramable, por lo que no se le puede quemar el bootloader

IMPORTANTE: Recientemente ha habido una actualización de tarjetas, concretamente la versión 1.6.21. Con esta versión el dinosaurio no se puede seleccionar, no aparece en la lista. Hay que instalar la versión 1.6.20.

Espero que mis conocimientos puedan ampliarse y al menos terminar de acceder a la mayoría de sitios interesantes de este dinosaurio para poder empezar a redactar el tutorial!! :wink:

Otro pequeño avance más: las interrupciones funcionan. Funcionan todos los modos que funcionan en la UNO y no funciona el modo HIGH, tal y como se detalla en la referencia de uso de la web de Arduino. RISING, FALLING, CHANGE y LOW funcionan. El funcionamiento del LED que tenía conectado era errático, funcionaba a veces, pero creo que eso es culpa de la placa de prototipos y los falsos contactos microscópicos. :wink: