[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