Per "il solito" progetto che piano piano quando ho tempo sviluppo, dopo aver affrontato un po' di problemi hw, ora sono al lato sw....
Riassunto delle puntate precedenti: ho 12 coppie di relè, (1-12) e per ciascuna coppia ho un relè A e uno B (24 totali). Il sistema prevede di scegliere quali coppie attivare, e poi con un comando finale scegliere se di queste coppie attivare tutti i relè "A" o tutti i "B".
- Per questioni di carico, qualunque siano i relè attivati, vengono eccitati a distanza di 250msec.
- Per questioni realizzazione pratica, i 24 relè sono divisi su 3 pcb, quindi 8 relè (4 coppie) su ogni pcb.
- Per questioni di pin/cablaggio, i 3 pcb sono comandati da 3 shift register (74HC595) collegati in cascata.
E veniamo al problema sw: trasmettere alla cascata di pcb/shiftregister un treno di 24 comandi ogni 250msec.
Poniamo che ho un array di 12 0/1 (integer?) che corrispondono alle coppie. A seconda che voglio attivare gli "A" o i "B", questo viene poi trasformato in un array di 24 posti, costituito da 0 nelle posizioni pari (per gli A) o dispari (per i B) alternati ai valori del primo array.
Ok, fin qua (come teoria) ci siamo con un po' di if e for.
Prima domanda: ma 'sto array di 24 0/1 occupa 3 byte, o è una obesa stringa di 24 byte? mi sa la seconda, vero? specie se lo dichiaro integer. Ma ho letto che anche i boolean sono memorizzati come byte e non bit... sono confuso.
Secondo tema: per come è fatto in sè uno shift register, per come sono collegati 3 in cascata, e per come sono collegati ai relè, l'ordine di trasmissione dei dati non è sequenziale, ma i bit vanno trasmessi in ordine particolare. In pratica dei 24 bit (o 24 byte?!?) devo trasmettere prima il 3° "byte" (posizioni da 17 a 24), poi il 2°(da 9 a 16) e infine il 1° (da 1 a 8).
Quindi: l'array di 24 0/1 che temo siano 24 byte integer e non 24 bit boolean, può essere convertito (e spezzato) in 3 byte cioè 24 bit?
posso applicare robe tipo highByte() o lowByte()?
Se me ne fregassi e passassi un array di 8 integer ad uno ShiftOut() per comandare il 74HC595, questo li piglia come 8 bit o come 64 bit (cioè 8 byte)? cioè piglia l'integer "0" (00000000) come 0 e l'integer "1" (00000001) come 1, o dopo il primo integer dell'array è già "saturo" e gli altri 7 elementi lo incasinano?
non posto codice perchè per ora sono alla fase di "bozza logica" a base di "qui fa questo e qua fa quell'altro", tipo dei dati, come li deve manipolare, ecc, e quindi sintatticamente "non c'è".
Grazie dei chiarimenti