che mi restituisce il byte contenente lo stato dei 3 (00000111) pin senza leggerli in maniera sequenziale come sopra ovviamente.
E magari se c'è un modo anche per settarli nella stessa maniera.
erpomata:
Vorrei sapere se c'è un modo per leggere lo stato dei pin in maniera "parallela".
Basta che leggi/scrivi direttamente il registro della porta, PINB o PORTB per esempio, mascherando i pin che non ti interessano, in questo modo puoi leggere/scrivere 8 bit per volta.
erpomata:
DDRB: serve per indicare se il pin è input o output ??
PORTB: ??
PINB: ??
DDRB specifica la direzione del pin.
PORTB è il registro per scrivere sulla porta.
PINB è il registro per leggere la porta.
Ci sono due registri diversi per leggere e scrivere per ovviare ad un problema che affligge tutti i micro/mcu dotati di un solo registro per accedere ai pin, si tratta del "Read Modify Write Problem" che in certe circostanze può portare a errori di i/o su i pin se non se ne tiene debito conto nel proprio software.
Puoi trovare una spiegazione, con esempio, del "RMW" [http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/pic/help/rmw.htm]qui](http://), è riferito ai pic, ma valido per tutti i micro dotati di singolo registro per accedere in lettura/scrittura della porta.
Interessante articolo, ma non ho capito se il problema persiste solo se al pin è collegato un condensatore.
Nel mio caso uso un semplice partitore di tensione e non dovrebbe presentarsi.
erpomata:
Interessante articolo, ma non ho capito se il problema persiste solo se al pin è collegato un condensatore.
Quello del condensatore è solo un esempio per evidenziare il problema, in realtà esistono diversi casi in cui l'RMW crea errori, tutti aggirabili da software se uno è cosciente della cosa, però questo non è un problema che affligge le mcu utilizzate su Arduino proprio perché usano due distinti registri per leggere/scrivere i pin.
Ho citato la cosa solo per farti capire perché si usa PORTB e PINB invece di avere un singolo registro PORTB sia per leggere che per scrivere la porta.