Selección de los microcontroladores adecuados para este proyecto (basado en Arduino)

3

Estoy pensando en comprar algunos kits de desarrollo de Arduino para migrar de mi plataforma de desarrollo real (picaxe) a Arduino. Quiero comprar solo lo que necesito para desarrollar mi próximo proyecto, pero teniendo en cuenta que ignoro por completo las capacidades de Arduino, tengo algunos problemas para decidir qué comprar. Así que decidí explicarle lo que quiero hacer y lo que creo que necesito (en términos de hardware) con la esperanza de recibir 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 están compuestos de varios bits (definidos en mi propio protocolo); de todos modos, después de que mi Arduino haya recibido estos comandos, tomará algunas medidas, en este momento, la única acción que importa es enviar una palabra a otros Arduinos conectados a un bus de comunicación (es necesario 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).

En resumen, esto es lo que haré:

Porejemplo,desdelaPC,envíoelcomandoatravésdelcableserie:110110111010101010011…….01101.EstovaalaplacaArduinoqueloreenvíaalbusdecomunicacióndondetodoslosotrosmicrocontroladoresestánsiempreescuchandoelbus,leeránlosprimeros8bitsyloscompararánconsupropiadirección:sicoincideconladireccióndelmicrocontrolador(almacenadaenunavariable),almacenarálossiguientesbitsenlamemoria(siseapagalaalimentación,nonecesitoguardarlasinformaciones,porloquepodríaserunamemoriavolátil).

Despuésdeeso,elmicroestaráesperandouncomandofuturoquefinalmentelediráqueenvíelosbitsdedatosatravésdeunpindesalida.Todoslosmicrosologuardaránunapalabrade1000menos8bitsalavez,porloquelamemoriaestáfijaparasolo9992bits.

Tengoproblemasparadecidirquépequeñomicrocontroladorusar,quéprotocolodecomunicaciónusaryalgunosproblemasconelsoftware.Teniendoencuentaqueladistanciaentreelprimermicroyelúltimopodríaserdehasta7metros,creoqueI2Cnoeselcaminoaseguir,laserieseráexcelente,peroesosignificaquenecesitaréunconvertidorserialattlencadamicro(tengaencuentaquepodríanserdehasta128micros)paraqueelproyectosalgademipresupuesto,TTLseráexcelente,peronuncaprobéunacomunicaciónatravésdeTLLdemásde7metros,¿quécree?Creoqueunbuencablenodejarácaertantovoltajeen7metros,tambiénlavelocidadquepiensousaresde19200bits/s.Máx.

Acercadelosmicros,mimayorpreocupacióneselegirlaalternativamásbarataporquesolorecibirándatosenunpin(datosseriales)guardadosenunamemoriavolátil,yluegoemitiránesosdatosaunatasafijasobreunpindesalida(paraencenderyapagarunledporejemplo).VieninternetquepodríasprogramarelATtinyconlaplacaarduino,¿estechipescapazdehacerloquenecesito?¿Necesitounamemoriaexternaparaalmacenarlosdatos?¿Opuedoguardarloenunavariable?(¿quémemoriasugieres?)

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 sobre una entrada en serie, simplemente 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 se fija 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 el Attiny puedo almacenar esa cantidad de datos en un programa var? ¿Cuál es el máximo que puedo almacenar? En este punto, ¿todavía crees que el camino es el camino a seguir?

¡Muchas gracias por cualquier comentario y sugerencia!

    
pregunta DomingoSL

4 respuestas

1

La mayoría de los microcontroladores pequeños serán capaces de hacer lo que necesitas. Incluso puedes deshacerte del "envoltorio" Arduino y usar un micro compatible con USB en su lugar.

Microchip, Atmel, TI, ST, etc. tienen uC de 8, 16, 32 bits de RAM / FLASH / EEPROM variables para elegir. Todas las unidades de usuario modernas vienen con al menos periféricos UART, SPI, I2C que se pueden usar para sus comunicaciones.
Realmente no hay mucho en ellos, solo escogería uno y vería cómo te gusta.
Yo (actualmente) uso los ARM de 32 bits de ST y los PIC de 8, 16 y 32 bits de Microchip.
Probablemente usaría unos pocos PIC12F o 16Fs para los uCs esclavos y un PIC18F o PIC24F para el maestro.

Mencionas que necesitas ~ 10kbits de memoria (aunque no tengo muy claro qué tipo o qué uC lo necesita de tu descripción)
Sin embargo, es fácil determinar lo que es adecuado, solo revise las especificaciones de RAM / ROM / EEPROM de cada uC que vea.
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 del programa es más que suficiente 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) 10kbits no caben en la RAM. sin embargo, a 1024 * 8 = 8192 bits.
Sin embargo, el 16F1527 tiene 1536 bytes de RAM, por lo que puede usarlo si es necesario.

Para el maestro (alternativas a Arduino) hay algo como 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 comenzar a utilizar USB.
Si necesita algo más poderoso para el maestro, eche un vistazo a serie PIC24 con hasta 256K de Flash y 96K de RAM. O incluso el PIC32 que es de 32 bits y hasta 80MIPS. El PICKit3"> es un programador de precios bajos que va a 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 y el direccionamiento maestro / esclavo fácilmente. Todo lo que tiene que preocuparse es enviar los datos. Los 7 metros no deberían ser un problema con un entorno razonablemente silencioso y la configuración correcta (pullups de bajo valor, por ejemplo, 2.2k, cable de baja capacidad)

    
respondido por el Oli Glaser
3

Como ya estás planeando usar un Arduino, ¿por qué no atenerse a Arduino's? O consígase un programador AVR y use chips ATMega328 simples.

En cuanto a la comunicación: RS485 es un bus muy confiable, y los chips transciever son baratos. Por un costo aún menor, puede enviar una señal de nivel TTL y regenerarla en cada nodo .

    
respondido por el Wouter van Ooijen
1

Eche un vistazo a la serie TI MSP430. Son realmente de bajo costo (comienzan en menos de $ 1.00) y las características aumentan con el precio hasta los pequeños dispositivos SoC bastante potentes.

    
respondido por el spearson
0

Con respecto a sus problemas de distancia, consulte estos chips: Extensores de bus I2C . Están fabricados por diferentes fabricantes, puede encontrar uno que se ajuste a sus necesidades y presupuesto.

Creo que I2C es una buena opción para el protocolo aquí dado que desea un esquema direccionable. Parece que Arduino puede hacer lo que quieras (ya que todos tienen la capacidad de UART e I2C), pero en realidad cualquier microcontrolador con esos periféricos hará el truco.

Como mencionó @Oli Glaser, usar una resistencia de pull-up más fuerte (más pequeña) también ayudará, pero si eso solo puede llevarlo hasta el final, definitivamente revise los extensores de bus, ya que he tenido éxito con ellos antes.

Con respecto a sus problemas de tamaño, consulte las especificaciones del microcontrolador que está viendo. Específicamente, desea ver la cantidad de SRAM que tiene. Usted mencionó que desea almacenar 1000 bits en búfer == 125 bytes. La especificación de SRAM se suele dar en KB (Kilo-Bytes), así que asegúrese de elegir una que sea más grande que eso. Si también está utilizando más buffers en su código, o su programa es algo complejo (llamadas grandes y muchas funciones), es probable que desee 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 dentro y fuera de la EEPROM.

    
respondido por el Jon L

Lea otras preguntas en las etiquetas