Estoy pensando en comprar algunos kits de desarrollo de Arduino para migrar de mi plataforma de desarrollo actual (picaxe) a Arduino. Quiero comprar justo lo que necesito para desarrollar mi próximo proyecto, pero teniendo en cuenta que soy un total ignorante de las capacidades de Arduino, tengo algunos problemas para decidir qué comprar. Así que decidí explicarles lo que quiero hacer y lo que creo que necesito (en términos de hardware) con la esperanza de tener algunos comentarios.
Ok, la idea es simple, a través del cable serial de mi computadora (o USBtoserial) enviaré algunos comandos a mi placa Arduino Uno: estos comandos se componen de varios bits (definidos en mi propio protocolo); de todos modos, después de que mi Arduino haya recibido estos comandos, tomará algunas acciones, por el momento, la única acción que importa es enviar una palabra a otros Arduinos conectados a un bus de comunicación (necesito decidir si I2C, serie o TTL). Esta palabra se compone de 1000 bits, los primeros 8 bits son solo el encabezado (que contiene la dirección del chip que recibirá los datos) y el resto son solo datos (la longitud real de esta palabra siempre se fija en 1000 bits).
Así que en resumen esto es lo que haré:
Por ejemplo, desde la PC, envío el comando por el cable serial: 11011011 1010101010011…….01101. Esto va a la placa Arduino que lo reenvía al bus de comunicación donde todos los demás microcontroladores siempre están escuchando el bus, leerán los primeros 8 bits y los compararán con su propia dirección: si coincide con la dirección del microcontrolador (almacenada en una variable), almacenará los siguientes bits en la memoria (si se corta la alimentación, no necesito guardar la información, por lo que podría ser una memoria volátil).
Después de eso, el micro estará esperando un comando futuro que eventualmente le indicará que envíe los bits de datos a través de un pin de salida. Todo el micro solo guardará una palabra de 1000 menos 8 bits en ese momento, por lo que la memoria está fijada para solo 9992 bits.
Tengo problemas para decidir qué microcontrolador pequeño usar, qué protocolo de comunicación usar y algunos problemas con el software. Teniendo en cuenta que la distancia entre el primer micro y el último podría ser de hasta 7 metros, creo que I2C no es el camino a seguir, la serie será excelente, pero eso significa que necesitaré un convertidor de serie a ttl en cada micro. (tome en cuenta que pueden ser hasta 128 micros) por lo que puede hacer que el proyecto se salga de mi presupuesto, TTL será genial pero nunca probé una comunicación vía TLL sobre 7 metros, ¿ustedes que opinan? Creo que un buen cable no dejará caer tanto voltaje en 7 metros, también la velocidad que pienso usar es de 19200bits/s como máximo.
Acerca de los micros, mi mayor preocupación es elegir la alternativa más barata porque solo recibirán datos en un pin (datos en serie) guardados en una memoria volátil, y luego enviarán esos datos a una velocidad fija a través de un pin de salida (para encender y de un led por ejemplo). Vi en internet que se podia programar el ATtiny con la placa arduino, este chip es capaz de hacer lo que necesito? ¿Necesito una memoria externa para almacenar los datos? ¿O puedo guardarlo en una variable? (¿Qué memoria sugieres?)
Y mi pregunta final es sobre el software, cuando estaba usando PicAxe, un kit de desarrollo muy simple para microcontroladores cuando necesito almacenar una palabra en una entrada en serie, solo hago esto:
serin serpin,N2400,(27),seraddr, b4,b5
Donde serin es el comando para comenzar la adquisición en serie, serpin es el número del pin de entrada que quiero usar y b4 y b5 son variables de cuatro bits, por lo que al usarlas tengo una palabra de 8 bits. La plataforma PicAxe está fijada con 10 vars de 4 bits (b0,b1…….b9) por lo que será imposible almacenar una palabra de 1000 bits sin pasar la información a una memoria externa. Con Attiny puedo almacenar esa cantidad de datos en un programa var? ¿Cuál es el máximo que puedo almacenar? En ese momento, ¿sigues pensando que el attiny es el camino a seguir?
¡Muchas gracias por cualquier comentario y sugerencia!
La mayoría de los microcontroladores pequeños serán capaces de hacer lo que necesites. Incluso podrías deshacerte del "envoltorio" de Arduino y usar un micro USB en su lugar.
Microchip, Atmel, TI, ST, etc., todos tienen uC de 8, 16 y 32 bits de diferentes tamaños de RAM/FLASH/EEPROM para elegir. Todos los uC modernos vienen con al menos periféricos UART, SPI, I2C que se pueden usar para sus comunicaciones.
Realmente no hay mucho en ellos, solo elegiría uno y vería si te gusta.
Yo (actualmente) uso ARM de 32 bits de ST y PIC de Microchip de 8, 16 y 32 bits.
Probablemente usaría algunos PIC12F o 16F para los uC esclavos y un PIC18F o PIC24F para el maestro.
Usted menciona que necesita ~ 10kbits de memoria (sin embargo, no está muy claro qué tipo o qué uC lo necesita según su descripción). Sin embargo, es
fácil determinar qué es adecuado, solo verifique las especificaciones de RAM / ROM / EEPROM de cada uC que mira.
Por ejemplo, el PIC16F1938 tiene:
Parameter Name Value
Program Memory Type Flash
Program Memory (KB) 28
CPU Speed (MIPS) 8
RAM Bytes 1,024
Data EEPROM (bytes) 256
Por lo tanto, 28 KB de memoria de programa son más que suficientes para almacenar datos no volátiles si su programa es lo suficientemente pequeño (en los PIC más nuevos, también puede leer/escribir en la memoria del programa en tiempo de ejecución). 1024 * 8 = 8192 bits.
Sin embargo, el 16F1527 tiene 1536 bytes de RAM, por lo que podría usar esto si es necesario.
Para el master (alternativas a Arduino) hay algo como el 18F25J50 o similar, que tiene un periférico USB 2.0. Microchip proporciona una pila USB con un montón de firmware de ejemplo para que pueda comenzar con USB.
Si necesita algo más potente para el maestro, eche un vistazo a la serie PIC24 con hasta 256 K de Flash y 96 K de RAM. O incluso el PIC32 que es de 32 bits y hasta 80MIPS. El PICKit3 es un programador de bajo precio que programará todos los PIC mencionados anteriormente, y MPLAB (o MPLABX) es un IDE gratuito para el desarrollo de firmware.
La comunicación se puede realizar con I2C, que se ocupa de la configuración maestro/esclavo y el direccionamiento fácilmente. De lo único que tienes que preocuparte es de enviar los datos. 7 metros no deberían ser un problema con un entorno razonablemente silencioso y la configuración correcta (pulgadas de bajo valor, digamos 2.2k, cable de baja capacitancia)
Como ya está planeando usar un Arduino, ¿por qué no seguir con el de Arduino? O consiga un programador AVR y use chips ATMega328 desnudos.
En cuanto a la comunicación: RS485 es un bus muy confiable y los chips transceptores son baratos. Por un costo aún menor, podría enviar una señal de nivel TTL y regenerarla en cada nodo .
Eche un vistazo a la serie TI MSP430. Son realmente de bajo costo (desde menos de $ 1.00) y las características aumentan con el precio hasta llegar a pequeños dispositivos SoC bastante potentes.
Con respecto a sus inquietudes sobre la distancia, consulte estos chips: Extensores de bus I2C . Están hechos por algunos fabricantes diferentes, puede encontrar uno que se ajuste a sus necesidades y presupuesto.
Creo que I2C es una buena opción para el protocolo dado que desea un esquema direccionable. Parece que Arduino puede hacer lo que quieras (ya que todos tienen capacidad UART e I2C), pero en realidad cualquier microcontrolador con esos periféricos funcionará.
Como mencionó @Oli Glaser, usar una resistencia pull-up más fuerte (más pequeña) también ayudará, pero si eso solo puede llegar hasta cierto punto, definitivamente revise los extensores de bus, ya que he tenido éxito con ellos antes.
Con respecto a sus preocupaciones sobre el tamaño, consulte las especificaciones del microcontrolador que está viendo. Específicamente, desea ver cuánta SRAM tiene. Usted mencionó que desea almacenar en búfer 1000 bits == 125 Bytes. La especificación SRAM generalmente se proporciona en KB (Kilo-Bytes), así que asegúrese de elegir uno que sea más grande que eso. Si también está utilizando más búferes en su código, o su programa es algo complejo (grande y con muchas llamadas a funciones), entonces probablemente querrá al menos 512 bytes - 1 KB de SRAM. Es difícil determinar cuánto necesita sin saber más sobre la aplicación. Si no necesita todos los 125 bytes a la vez, también puede transmitirlos desde y hacia la EEPROM.
clabacchio
jon l