Buongiorno.
Volevo chiedere una informazione. Devo inviare il valore di due variabili di tipo Byte (A e B) a due shift register di tipo 74HC595. Utilizzo Arduino UNO rev3
Volevo utilizzare questa istruzione per l'invio dei dati:
shiftOut(pinOut1, DataClock, LSBFIRST, A);
L'invio della variabile A e di B non è consecutivo. In alcuni casi devo inviare una sola variabile (A o B) e in altri casi devo inviare A e B consecutivamente.
Siccome sto un po a corto di in/out disponibili, volevo chiedervi se era possibile utilizzare come pin di clock un pin unico in comune tra i due shift register e ovviamente due pin distinti per l'invio dei dati.
Grazie mille
Invio di 2 varibali tipo byte a due shift register
7 messaggi
• Pagina 1 di 1
1
voti
Gli HC595 li puoi mettere in cascata in modo da ottenere uno shift register lungo a piacere (in multipli di otto bit).
- I clock (pin 11) tutti insieme, ovviamente.
- Il serial out di uno (pin 9) nel serial in del successivo (pin 14)
- Master Reset (pin 9) a 1, altrimenti nonti funziona
- Output Enable (pin 13) a 0 altrimenti niente uscite.
- Storage Clock (pin 12) lo mandi a 1 quando hai finito il caricamento e subito dopo lo riporti a 0. Un impulso piccolo a piacere >25ns.
In questo modo ti ritrovi con una linea di clock, una linea di dati ed una linea per trasferire il contenuto dei registri a scorrimento dentro i buffer di uscita.
- I clock (pin 11) tutti insieme, ovviamente.
- Il serial out di uno (pin 9) nel serial in del successivo (pin 14)
- Master Reset (pin 9) a 1, altrimenti nonti funziona
- Output Enable (pin 13) a 0 altrimenti niente uscite.
- Storage Clock (pin 12) lo mandi a 1 quando hai finito il caricamento e subito dopo lo riporti a 0. Un impulso piccolo a piacere >25ns.
In questo modo ti ritrovi con una linea di clock, una linea di dati ed una linea per trasferire il contenuto dei registri a scorrimento dentro i buffer di uscita.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
grazie HattoriHanzo.
Volevo chiederti un'altra cosa: con la modalità che mi hai indicato (in cascata) sono costretto ogni volta ad inviare sempre la sequenza delle due varibili ai register anche se ad esempio è cambiata solo una delle due. Queste varibili a loro volta mi vanno a comandare lo stato fisico di alcuni scambi (fermodellismo).
Per la precisione ogni variabile comanda 4 scambi. ogni coppia di bit della variabile rappresenta lo stato di uno scambio. I valori consentiti per ogni coppia sono 10 oppure 01 (in pratica mi indicano quale delle due bobine dello scambio devo andare ad attivare). Detto questo ritornando al nostro discorso, ritrasmettendo tutto l'intero pacchetto (A e B) sono costretto a dover "rieseguire" l'attivazione delle bobine del gruppo B anche se queste non hanno subito variazione e già sono nella loro posizione (nell'ipotesi che sia variata solo A).
Questo non è che comporta un "problema". era solo per evitare di sollecitare inutilmente la bobina.
Perciò avevo chiesto se era possibile inviare i dati in modo separatato ai due register mettendo in comune il clock (o anche altro se possibile)
grazie ancora.
Volevo chiederti un'altra cosa: con la modalità che mi hai indicato (in cascata) sono costretto ogni volta ad inviare sempre la sequenza delle due varibili ai register anche se ad esempio è cambiata solo una delle due. Queste varibili a loro volta mi vanno a comandare lo stato fisico di alcuni scambi (fermodellismo).
Per la precisione ogni variabile comanda 4 scambi. ogni coppia di bit della variabile rappresenta lo stato di uno scambio. I valori consentiti per ogni coppia sono 10 oppure 01 (in pratica mi indicano quale delle due bobine dello scambio devo andare ad attivare). Detto questo ritornando al nostro discorso, ritrasmettendo tutto l'intero pacchetto (A e B) sono costretto a dover "rieseguire" l'attivazione delle bobine del gruppo B anche se queste non hanno subito variazione e già sono nella loro posizione (nell'ipotesi che sia variata solo A).
Questo non è che comporta un "problema". era solo per evitare di sollecitare inutilmente la bobina.
Perciò avevo chiesto se era possibile inviare i dati in modo separatato ai due register mettendo in comune il clock (o anche altro se possibile)
grazie ancora.
0
voti
Non comporta nessun problema. Se un'uscita è già alta non subirà variazioni, neanche per pochi ns.
Ho appena finito di cablare un'attrezzatura di collaudo che usa questo sistema: il microcontrollore contiene nella sua FLASH tutta la procedura di self test ma non ha abbastanza I/O. Ho usato questi integrati per le uscite e gli HC165 per gli ingressi e così sono riuscito ad avere tutti gli I/O necessari per l'autotest.
Ovviamente questi I/O sono disponibili solo se la scheda da collaudare è collegata all'attrezzatura di collaudo. Ovviamente ho realizzato unsistema per far si che la scheda si accorga di avere l'attrezzatura collegata.
Ho appena finito di cablare un'attrezzatura di collaudo che usa questo sistema: il microcontrollore contiene nella sua FLASH tutta la procedura di self test ma non ha abbastanza I/O. Ho usato questi integrati per le uscite e gli HC165 per gli ingressi e così sono riuscito ad avere tutti gli I/O necessari per l'autotest.
Ovviamente questi I/O sono disponibili solo se la scheda da collaudare è collegata all'attrezzatura di collaudo. Ovviamente ho realizzato unsistema per far si che la scheda si accorga di avere l'attrezzatura collegata.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
ok. grazie per la risposta. farò delle prove perché proprio oggi sono arrivati gli shift register.
Gia che mi trovo volevo farti una domanda. Sarà pure banale ma a quest'ora mi si sono "incartate le cervella" e sicuramente la soluzione ce l'ho davanti ma non riesco a trovarla:
come detto fino ad ora io ho delle variabili di tipo byte. supponiamo ad esempio che una di queste abbia il seguente valore:
10101001
devo per esempio impostare la seconda coppia di valori (valori in rosso) con 01 lasciando gli altri invariati indipendentemente dal valore che possono assumere.
Risultato finale: 10011001
Quale istruzione devo scrivere a livello di codice nello sketch?
grazie mille.
Gia che mi trovo volevo farti una domanda. Sarà pure banale ma a quest'ora mi si sono "incartate le cervella" e sicuramente la soluzione ce l'ho davanti ma non riesco a trovarla:
come detto fino ad ora io ho delle variabili di tipo byte. supponiamo ad esempio che una di queste abbia il seguente valore:
10101001
devo per esempio impostare la seconda coppia di valori (valori in rosso) con 01 lasciando gli altri invariati indipendentemente dal valore che possono assumere.
Risultato finale: 10011001
Quale istruzione devo scrivere a livello di codice nello sketch?
grazie mille.
0
voti
Non ne ho la più pallida idea.
Non uso arduino.
Di solito ho qualche pin di I/O disponibile e scrivo una SPI software.
Non uso arduino.
Di solito ho qualche pin di I/O disponibile e scrivo una SPI software.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
1
voti
Agatino ha scritto:... I valori consentiti per ogni coppia sono 10 oppure 01....
se questo è vero davvero
A meno che invece tu non debba tenere le due bobine normalmente off 00, per dare un breve impulso 01 o 10 per cambiare direzione...
Se ti serve il valore di beta: hai sbagliato il progetto!
7 messaggi
• Pagina 1 di 1
Chi c’è in linea
Visitano il forum: Nessuno e 5 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)

