Sostieni il forum con una donazione! Il tuo contributo ci aiuterà a rimanere online!
Immagine

..un altro switcher programmabile [Arduino]

Tutto ciò che riguarda l'elettronica digitale, dalla porta not al protocollo midi... e oltre!
Rispondi
Cap
Neutrino
Neutrino
Messaggi: 20
Iscritto il: 26/04/2010, 19:32

..un altro switcher programmabile [Arduino]

Messaggio da Cap » 19/02/2012, 20:36

Ciao a tutti! ho deciso di aprire un nuovo thread un po' per farmi un punto della situazione e per esporre i miei dubbi..lo so che è molto simile al progetto di Jackson che tra l'altro ringrazio per gli spunti :salu: , però non volevo riempire il suo thread di domande :mart:
L'idea:
Sto provando, come da titolo, a fare una sorta di switcher per una serie di effetti autocostruiti che andranno tutti in un rack unico: niente scatolette, tonnellate di jack, 3pdt ecc..basta.. solo schede e componenti per un sistema modulare sul quale si possa sperimentare anche!

ho pensato di predisporre:(lista da leggere alla Fantozzi :face_green: )
1) scheda con microcontrollore..ovvio :yes:
2) scheda di controllo effetti con relè DPDT e 74HC595 per pilotare gli ULN2003.I cablaggi degli effetti tutti su morsetti o connettori.
3)un'interfaccia esterna=pedaliera con tutti i pulsanti+led+lcd

e fino a qui ci siamo...forse...ma ho ancora alcuni dubbi:
L'interfaccia è composta da 16 pushbutton e due led per ognuno, quindi per i led (e i relè) pensavo di usare i 595, e per i pulsanti i 74HC165N.
Ammettendo di occupare 6 pin per un LCD, 3 pin per mettere in cascata i 595 e altri 3 pin per i 165 arrivo a 12 I/O digitali! e ci sto con l'arduino.(non usando i pin 0 e 1)

problema 1:74HC165N o CD4021??? 3 o 4 pin per pilotarli??
mi sono perso qualcosa qui? http://www.diyitalia.eu/forum/viewtopic ... =30#p69182

problema 2: visto che fisicamente la pedaliera sarà connessa al rack con un cavo (a più fili) mettiamo di max 5 metri, sono possibili problemi con la trasmissione dei dati in ingresso e uscita con i registri a scorrimento e con il display LCD??

spero di aver formulato decentemente le domande..magari butto giù uno schema di tutto per essere più chiaro..soprattutto per le connessioni..

Intanto qualche preview con l'Lcd :dance_1:
Immagine
Immagine

Ciao!

Avatar utente
jackson
Diyer Esperto
Diyer Esperto
Messaggi: 402
Iscritto il: 24/01/2010, 12:44
Località: Curno (BG)

Re: ..un altro switcher programmabile [Arduino]

Messaggio da jackson » 02/05/2012, 21:18

Ciao Cap, come và? Stai portando avanti questo tuo progetto, o sei in standby? Comunque:
Cap ha scritto:L'idea:
Sto provando, come da titolo, a fare una sorta di switcher per una serie di effetti autocostruiti che andranno tutti in un rack unico: niente scatolette, tonnellate di jack, 3pdt ecc..basta.. solo schede e componenti per un sistema modulare sul quale si possa sperimentare anche!
Ottima idea direi, in modo di avere tra i piedi solo il necessario :numb1:
Cap ha scritto:problema 1:74HC165N o CD4021??? 3 o 4 pin per pilotarli??
Se guardi il mio schema, per il 74HC165N, uso 4 pin (I/O dell'ATMega), e guardando il datasheet del 74HC595 credo te ne servano altri 4. Però, se non ho capito male la spiega di Davidefender, se necessiti di più degli 8 In/Out che ti danno i 2 integrati, basta collegarne altri in cascata, senza dover usare altri pin del uC.

:salu:
Jack!
Immagine
Immagine

Cap
Neutrino
Neutrino
Messaggi: 20
Iscritto il: 26/04/2010, 19:32

Re: ..un altro switcher programmabile [Arduino]

Messaggio da Cap » 02/05/2012, 23:23

Ciao Jackson!Grazie per il reply..attualmente ho davvero pochissimo tempo causa università..comunque qualche progresso arriva.
Ho fatto un paio di protoboard:
-interfaccia per l'input con CD4021 (ho trovato questo)
-interfaccia per l'output con i '595 e dei led per vedere lo stato

Immagine

ho occupato in tutto 6 pin I/O più ovviamente i pin di alimentazione come da tutorial di arduino.
Quindi ora riesco a gestire ingressi e uscite (notare che per ora ho solo 8 ingressi ovvero pulsanti, che amplierò a 16 e in uscita il secondo 595 replica il primo per questo motivo).
Ora ho in programma di fare una scheda con i relè pilotati dai 74hc595 (e uln2803) e poi basta "solo" gestire via software l'input dei pulsanti a seconda del tipo di switching che voglio..e l'idea è che non servano solo per commutare il canale corrispondente ma anche muoversi nelle funzioni interne del software.
Questo è tutto quello che sono riuscito faticosamente a fare

L'unica incertezza la riscontro nella velocità del sistema: quando voglio che a pulsante premuto si attivi l'uscita corrispondente, ad esempio premo il pushbutton 1 e attivo la prima uscita del '595, noto una leggera latenza. Credo dipenda dal programma e dal fatto che non uso la trasmissione seriale nativa del microcontrollore(spero di non aver detto c****e).
..ecco perchè sono bloccato.
Prometto di fare un post piu chiaro appena ho più tempo!!


per riferimento allego lo sketch

Codice: Seleziona tutto

//define where your pins are
int clockPin = 7;
int latchPin = 8;
int dataPin = 9;
//Pin connected to 74HC595
int OclockPin = 10;
int OlatchPin = 11;
int OdataPin = 12;
byte buttonVar = 0;
byte buttonVarold = 1;
byte switchVar = 0;



void setup() {
  //start serial
//  Serial.begin(9600);

  //define pin modes
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT); 
  pinMode(dataPin, INPUT);
  
  pinMode(OlatchPin, OUTPUT);
  pinMode(OclockPin, OUTPUT);
  pinMode(OdataPin, OUTPUT);

}

void loop() {

  //Pulse the latch pin:
  //set it to 1 to collect parallel data
  digitalWrite(latchPin,1);
  //set it to 1 to collect parallel data, wait
  delayMicroseconds(20);
  //set it to 0 to transmit data serially  
  digitalWrite(latchPin,0);
  //while the shift register is in serial mode
  //collect each shift register into a byte
  //the register attached to the chip comes in first 
  switchVar = shiftIn(dataPin, clockPin);
  //campionamento del valore corrispondente alla pressione del pulsante:
    if (switchVar != 0){
    buttonVar = switchVar;
    }
    
    if (buttonVar != buttonVarold){
    digitalWrite(OlatchPin, LOW);
    // shift out the bits:
    shiftOut(OdataPin, OclockPin, MSBFIRST, buttonVar);
    shiftOut(OdataPin, OclockPin, MSBFIRST, buttonVar);    
    //take the latch pin high so the LEDs will light up:
    digitalWrite(OlatchPin, HIGH);
    buttonVarold = buttonVar;
    }  
}

//------------------------------------------------end main loop

////// ----------------------------------------shiftIn function
///// just needs the location of the data pin and the clock pin
///// it returns a byte with each bit in the byte corresponding
///// to a pin on the shift register. leftBit 7 = Pin 7 / Bit 0= Pin 0

byte shiftIn(int myDataPin, int myClockPin) { 
  int i;
  int temp = 0;
  int pinState;
  byte myDataIn = 0;

  pinMode(myClockPin, OUTPUT);
  pinMode(myDataPin, INPUT);
//we will be holding the clock pin high 8 times (0,..,7) at the
//end of each time through the for loop

//at the begining of each loop when we set the clock low, it will
//be doing the necessary low to high drop to cause the shift
//register's DataPin to change state based on the value
//of the next bit in its serial information flow.
//The register transmits the information about the pins from pin 7 to pin 0
//so that is why our function counts down
  for (i=7; i>=0; i--)
  {
    digitalWrite(myClockPin, 0);
    delayMicroseconds(0.2);
    temp = digitalRead(myDataPin);
    if (temp) {
      pinState = 1;
      //set the bit to 0 no matter what
      myDataIn = myDataIn | (1 << i);
    }
    else {
      //turn it off -- only necessary for debuging
     //print statement since myDataIn starts as 0
      pinState = 0;
    }

    //Debuging print statements
    //Serial.print(pinState);
    //Serial.print("     ");
    //Serial.println (dataIn, BIN);

    digitalWrite(myClockPin, 1);

  }
  //debuging print statements whitespace
  //Serial.println();
  //Serial.println(myDataIn, BIN);
  return myDataIn;
}

edit: dimenticavo..tutti i led vari saranno gestiti da un max 7219..appena mi arriverà..anche se ormai temo lo abbiano perso per strada le poste...

Rispondi