Go Down

Topic: apprendimento funzione shiftOut() (Read 1 time) previous topic - next topic

anto75

Ciao  a tutti!
  Vi espongo il mio quesito:

                      shiftOut(dataPin, clockPin, bitOrder, value)

clockpin:  posso prelevarlo dalla scheda arduino?
              attraverso un programma timer posso collegare il pin di uscita del clock così generato all'ingresso
              di un altro pin che andrò a settare come pin d'ingresso clockpin?

L'inglese lo so bene ,ma manco nel saper programmare a dovere..ringrazio chiunque mi voglia rispondere!

                                    Antonio nel fantastico mondo di Arduino

stefa24

ciao
ho lavorato un pò con shiftout, ma se ho capito bene ti stai confondendo il clock e la cadenza con cui vengono letti i bit in entrata
però anche io sono un neofita, quindi aspetta anche altri suggerimenti

stefano
https://sites.google.com/site/agritronica/
https://sites.google.com/site/t3chconcrete/
arduino UNO rev 3
ide 105

leo72

Il pin di clock è un pin su cui la funzione shiftOut spedisce il segnale di sincronismo per lo shift register a cui deve spedire il dato. Lo shift register è strutturato in modo che ad ogni segnale di clock ricevuto lo shift register legga un bit.
Puoi anche usare un timer però: 1) devi calcolarti la frequenza giusta; 2) poi la funzione shiftOut così com'è non la puoi più usare dato che essa esegue tutte operazioni di presentazione dei bit sul segnale dei dati, clocca il pin di clock per spedire i singoli bit. Devi rifare tutto a mano.

Quindi, a che ti serve fare tutto ciò se non a complicarti la vita?  :smiley-sweat:

anto75

Ciao e grazie della delucidazione.
Potresti cortesemente scrivere un esempio di uso di questa funzione?
Il registro a scorrimento menzionato è interno al microcontrollore?
Il mio obbiettivo è scrivere uno sketch avente la seguente logica:

      uscite : n°5 LED collegati dal pin2 al pin7;

     dalla costante intera 17 binaria 10000 eseguo uno scorrimento del bit piu' significativo sino ad arrivare
     a quello meno significativo;

     ogni scorrimento di bit voglio applicare una routime timer per aumentare la durata della stato alto
     di ogni pin ,

Sperando di essere stato chiaro Ti ringrazio anticipatamente del possibile aiuto.
Ciao!!
                                  Antonio nel fantastico mondi di Arduino


stefa24

ciao
io mi sono studiato questo

http://arduino.cc/en/Reference/ShiftOut

stefano
https://sites.google.com/site/agritronica/
https://sites.google.com/site/t3chconcrete/
arduino UNO rev 3
ide 105

igor10^12

aspetta, ma tu vuoi semplicemente controllare 5 led da arduino. tu hai parlato di shiftout che è cosa ben diversa. con lo shiftout di solito si controlla integrati detti registri a scorrimento. dato un byte inserito in modo seriale nell'ic, esso pilota 8 uscite corrispondneti ognuna a un bit della stringa.
spiegati meglio cosa vuoi fare

leo72

Tu hai confuso l'uso della shiftOut che, come ti ha detto Igor, serve per pilotare dei chip esterni detti "registri a scorrimento", o "shift register". Con il link di stefa puoi capire come pilotarli con detto chip e detta funzione.

Se invece vuoi pilotarli direttamente dall'Arduino hai 2 alternative:
1) la funzione digitalWrite, che cambia lo stato di un pin
2) la manipolazione delle porte del microcontrollore (livello avanzato)

igor10^12

sicuaremente avrai visto il port mapping che si puo dire simile allo shiftout ma si imposta solo un parametro ovvero il byte contenente i valori dei ripettivi pin, ma qui non si parla di clock.

anto75

Grazie  a tutti Voi! avendo io una formazione scolastica sullo storico Z80 di Zilog  certi concetti li ricordo bene : nonstante cio' HO BISOGNO DI TUTTI VOI per crescere nel fantastico manda del microcontrollore Arduino.

                               Antonio nel fantastico mondo di Arduino

igor10^12


Grazie  a tutti Voi! avendo io una formazione scolastica sullo storico Z80 di Zilog  certi concetti li ricordo bene : nonstante cio' HO BISOGNO DI TUTTI VOI per crescere nel fantastico manda del microcontrollore Arduino.

                               Antonio nel fantastico mondo di Arduino

noi siamo a disposizione, ma tu devi specificare meglio quello che cerhi. purtroppo sono finiti quei tempi dove c'era uwe con la sua sfera di cristallo, ormai qui o sei chiaro o nessuno ti risponde.
detto ciò cosa vuoi fare di preciso tu? pilotare led da arduino senza altro hardware aggiuntivo? capire come funziona il uControllore?
dicci pure

PaoloP


Il mio obbiettivo è scrivere uno sketch avente la seguente logica:

      uscite : n°5 LED collegati dal pin2 al pin7;

     dalla costante intera 17 binaria 10000 eseguo uno scorrimento del bit piu' significativo sino ad arrivare
     a quello meno significativo;

     ogni scorrimento di bit voglio applicare una routime timer per aumentare la durata della stato alto
     di ogni pin ,


Per accendere consecutivamente i diversi led con diversi intervalli potresti crearti una due array, o uno bidimensionale, dove all'interno registri il numero della porta dove sono connessi i led (che potrebbero essere anche non consecutivi) e l'intervallo di accensione.
Poi crei una funzione accendiled() dove all'interno tramite un contatore e la funzione millis passi in rassegna l'array e accendi il led in sequenza e per il tempo stabilito nell'array.

Go Up