[Linux-Biella] Software veloce su Arduino
Jumping Jack
jumpingjack a mclink.it
Mer 5 Feb 2014 16:25:38 CET
Di già che ci sono aggiungo alcuni elementi che velocizzano l'uso di
Arduino ovviamente non usando le librerie standard Arduino.
L'implementazione di IO digitale su arduino è lentissima (quella
analogia è proprio lenta a livello di microntroller quidi non si può
fare nulla) si può rendere la lettura e scrittura velocissima utilizzando
#include <digitalWriteFast.h>
inizializzando le porte con
pinModeFast(pin,mode)
e leggendo o scrivendo con
digitalWriteFast2(pin,state)
digitalReadFast2(pin)
ci sono altre funzioni (con e senza 2) che servono per poter usare i
timer o la funzione PWM, digitalWriteFast è più lenta di digitalWriteFast2.
Per avere un delay invece preciso ma non precisissimo
#include <util/delay_basic.h>
e
_delay_loop_2(n)
dove n è il numero di cicli di loop, ogni ciclo di loop è circa 4 colpi
di clock. Circa perchè bisogna includere la chiamata alla funzione che
ha un tempo variabile ma sempre identico per un ugual numero di iterazioni.
Comunicazione seriale.
Arduino funziona a 16Mhz (di base se non si mette un oscillatore
diverso), questa non è una frequenza adatta alla velocità stardard
seriali (9600, 57600,115200 ecc...). L'IDE fornito purtroppo ha solo
questi valori preimpostati, ma il PC non ha alcun problema a collagarsi
ad altre velocità.
Utilizzando un numero divisore di 16M ci si può collegare
tranquillamente fino a 1.000.000 di baud (2.000.000 impostando la
modalità Double). Per cui invece che scrivere Serial.begin(115200), che
non funziona perchè genera troppi errori, usate Serial.begin(100000) o
Serial.begin(200000).
JJ
Maggiori informazioni sulla lista
Linux