[RISOLTO]Sostituire digitalWrite

ciao a tutti in alcuni post si accennava alla possibilità di sostituire la digitalWrite con la gestione delle porte per velocizzare il programma. Avete qualche link da propormi? grazie Franco

http://www.arduino.cc/en/Reference/PortManipulation http://tronixstuff.com/2011/10/22/tutorial-arduino-port-manipulation/ https://hekilledmywire.wordpress.com/2011/02/23/direct-port-manipulation-using-the-digital-ports-tutorial-part-3/ ecc. Ciao Uwe

Frankq_it: ciao a tutti in alcuni post si accennava alla possibilità di sostituire la digitalWrite con la gestione delle porte per velocizzare il programma.

Non serve nessun link usa queste due macro per settare e resettare i singoli bit di un registro macchina:

#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))

cbi() pone a zero il bit, sbi() pone a 1 il bit, al posto di sfr metti il nome del registo, p.e. PORB, e al posto di bit la posizione del bit che vuoi modificare, valore da 0 a 7. Per cambiare lo stato di un pin di Arduino devi verificare a quale bit del port corrisponde, p.e. il pin 2 della UNO è il bit 2 di PORTD pertanto per portarlo a 1 devi usare "sbi(PORTD,2)". Queste macro usano solo due cicli macchina per concludere l'operazione, ovvero solo 125 ns contro i 2-3 us richiesti dalla digitalwrite, inoltre il tempo impiegato da cbi/sbi è fisso mentre quello digital write è variabile a seconda del port interessato, del pin e del modello di micro.

Splendido, grazie Franco