Presentación

Presentación

Mi trabajo y mis hobbies están muy relacionados con el uso de dispositivos electrónicos de todo tipo, así que suelo apuntarme en ficheros Le...

jueves, 20 de septiembre de 2018

Adafruit Feather WICED

En al búsqueda de una plataforma óptima para una cámara especial con transmisión WiFi he podido analizar la tarjeta Adafruit Feather WICED.

Enlaces
La tarjeta tiene el micro por un lado (¨STM32F205RG ) y el WiFi por otro (BCM43362). Aunque son chips separados, la placa ocupa muy poquito. Es interesante tener ambas cosas separadas pues, en otros que lo llevan todo junto, como los ESP8266 y ESP32 de Espressif, mezclan unas cosas con otras y el WiFi acaba influyendo en varios periféricos, como el ADC, lo que complica ciertas aplicaciones donde quieres usarlo todo. Me da la sensación igualmente que la radio integrada en el chip introduce bastante ruido en la parte analógica.

WiFi

La librería no es directamente compatible con Arduino aunque incluye funciones muy similares y cambiar de una a otra es absolutamente inmediato. Los experimentos de velocidad en transmisión alcanzan los 1.6 Mbytes/s en TCP y 3.2 Mbytes/s en UDP, si bien en modo UDP se producen paradas aleatorias que van desde los 20 segundos hasta los dos o tres minutos, lo que la convierte en inútil para este protocolo. Todavía no he conseguido saber por qué falla esto. Si se baja la tasa de envío el problema parece que desaparece, pero entonces ya vale la pena usar TCP.

WiFi Enterprise no parece estar soportado de ninguna manera.

GPIO

Utilizando las funciones de Arduino, el pulso más corto que se podía producir era de 250 ns!! lo que resulta inútil para generar relojes a alta velocidad. Con PWM se pueden alcanzar pulsos de tan solo 16 ns, pero para mi caso son complicados de usar. Después de muchas pruebas, parece que mucho del retraso en poner los pines a cero o uno se debe al propio código. Escribiendo directamente sobre los registros de puesta a uno o cero se consigue un pulso mínimo de unos 40 ns:

GPIOC->regs->BSRRL=BIT(3); // esto lo hace a 40 ns, ya es algo, pero lo hace al reves (L pone a alto y H a bajo...)
GPIOC->regs->BSRRH=BIT(3);

También se puede escribir directamente sobre ODR el valor de lo que quiera, pero tarda un poco más (75 ns).

No son los 25 ns que se consigue con los ATSAM de Atmel, pero casi es suficiente.

ADC

El ADC de este micro es una maravilla. Puede alcanzar los 6 MSPS en modo encauzado, pero ya sólo con la llamada asíncrona de Arduino (analogRead) el retraso es de tan solo de 1.5 us (666 KSPS) que ya puede ser útil en muchas circunstancias. La señal parece estable y bastante lineal en todo el rango.









No hay comentarios:

Publicar un comentario