Pages: [1]   Go Down
Author Topic: problemi hc595+uln2804+rele  (Read 623 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti dopo tanto tempo sono riuscito a ricominciare il mio progetto di aumntare le porte arduino mega 256.
Mi trovo solo un problema quando faccio il test del sistema tramite il listato che trovo proprio qui sul playground:
Durante l'esecuzione del programma  vedo dei leggeri flash dei led che in quel momento non dovrebbero essere accesi.
Ora potrebbe anche essere trascurabile se non fosse che dopo un po che va il flash diventa sempre più insistente....
Ps ho provato sia con il condensatore che senza ma dopo un po il problema si ripresenta.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Up!!!!!!!!!
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20193
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sai una cosa, se ci dai piú informazioni, per esempio quale sketch stai usando, Ti si potrebbe anche aiutare.
Non mi piace che dopo 4,5 ore giá ci vuoi fare fretta.  smiley-twist smiley-twist
Ciao Uwe
Logged

Offline Offline
Edison Member
*
Karma: 24
Posts: 2032
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sai una cosa, se ci dai piú informazioni, per esempio quale sketch stai usando, Ti si potrebbe anche aiutare.
Non mi piace che dopo 4,5 ore giá ci vuoi fare fretta.  smiley-twist smiley-twist
Ciao Uwe
4,5 ore molto matematico  smiley-mr-green
ti invito alla lettura di questo topic http://arduino.cc/forum/index.php/topic,149082.0.html
Logged

"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Innanzi tutto voglio scusarmi se sono sembrato maleducato(non era assolutamente mia intenzione).Detto quest il programma di test utilizzato è :Code Sample 2.3 - Dual Defined Arrays esattamente copiato e incollato nell'ide.e il circuito utilizzato ovviamente è lo schema riportato poco sopra con l'unica differenza che invece di avere un led ho un uln2804 con a valle di ogni uscita un relè opportunamente collegato.
questo è lo schema utilizzato con però un led e relativa resistenza applicati direttamente sulla parte 12v dei relè utilizzati :



* 74_1234328797.jpg (95.36 KB, 920x897 - viewed 9 times.)
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20193
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Innanzi tutto voglio scusarmi se sono sembrato maleducato(non era assolutamente mia intenzione).Detto quest il programma di test utilizzato è :Code Sample 2.3 - Dual Defined Arrays esattamente copiato e incollato nell'ide.e il circuito utilizzato ovviamente è lo schema riportato poco sopra con l'unica differenza che invece di avere un led ho un uln2804 con a valle di ogni uscita un relè opportunamente collegato.
questo è lo schema utilizzato con però un led e relativa resistenza applicati direttamente sulla parte 12v dei relè utilizzati :
per favore link allo Sketch o incollalo.
IL ULN2804 non é adatto per essere pilotato da uscite a 5V; devi usare il ULN2803.
Ciao Uwe
Logged

Selvazzano Dentro - Padova
Offline Offline
God Member
*****
Karma: 28
Posts: 930
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La libreria SPI per default ha un clock a 4Mhz (16Mhz di Arduino diviso 4).

Questa velocità va bene per collegamenti relativamente brevi con i 595.

Se invece usi collegamenti più lunghi, potresti provare ad abbassare la velocità usando il comando SPI.setClockDivider(SPI_CLOCK_DIV8) (oppure SPI_CLOCK_DIV16), che riducono la velocità a 2 ed 1 MHz rispettivamente.

In qualsiasi caso, nel tuo schema dovresti inserire dei condensatori da 100nF montati vicini al pin 16 dei 595 e con l'altro terminale a massa.

Inoltre, coma ha già detto Uwe, non puoi assolutamente usare i 2804 perché lavorano a partire da 6V.
« Last Edit: February 28, 2013, 06:29:23 am by cyberhs » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie mille anzi diecimila....
Adesso provo e vi dico...
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

il codice usato è questo:
Code:
//**************************************************************//
//  Name    : shiftOutCode, Predefined Dual Array Style         //
//  Author  : Carlyn Maw, Tom Igoe                              //
//  Date    : 25 Oct, 2006                                      //
//  Version : 1.0                                               //
//  Notes   : Code for using a 74HC595 Shift Register           //
//          : to count from 0 to 255                            //
//****************************************************************

//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;

//holders for infromation you're going to pass to shifting function
byte dataRED;
byte dataGREEN;
byte dataArrayRED[10];
byte dataArrayGREEN[10];

void setup() {
  //set pins to output because they are addressed in the main loop
  pinMode(latchPin, OUTPUT);
  Serial.begin(9600);

  //Arduino doesn't seem to have a way to write binary straight into the code
  //so these values are in HEX.  Decimal would have been fine, too.
  dataArrayRED[0] = 0xFF; //11111111
  dataArrayRED[1] = 0xFE; //11111110
  dataArrayRED[2] = 0xFC; //11111100
  dataArrayRED[3] = 0xF8; //11111000
  dataArrayRED[4] = 0xF0; //11110000
  dataArrayRED[5] = 0xE0; //11100000
  dataArrayRED[6] = 0xC0; //11000000
  dataArrayRED[7] = 0x80; //10000000
  dataArrayRED[8] = 0x00; //00000000
  dataArrayRED[9] = 0xE0; //11100000

  //Arduino doesn't seem to have a way to write binary straight into the code
  //so these values are in HEX.  Decimal would have been fine, too.
  dataArrayGREEN[0] = 0xFF; //11111111
  dataArrayGREEN[1] = 0x7F; //01111111
  dataArrayGREEN[2] = 0x3F; //00111111
  dataArrayGREEN[3] = 0x1F; //00011111
  dataArrayGREEN[4] = 0x0F; //00001111
  dataArrayGREEN[5] = 0x07; //00000111
  dataArrayGREEN[6] = 0x03; //00000011
  dataArrayGREEN[7] = 0x01; //00000001
  dataArrayGREEN[8] = 0x00; //00000000
  dataArrayGREEN[9] = 0x07; //00000111

  //function that blinks all the LEDs
  //gets passed the number of blinks and the pause time
  blinkAll_2Bytes(2,500);
}

void loop() {


  for (int j = 0; j < 10; j++) {
    //load the light sequence you want from array
    dataRED = dataArrayRED[j];
    dataGREEN = dataArrayGREEN[j];
    //ground latchPin and hold low for as long as you are transmitting
    digitalWrite(latchPin, 0);
    //move 'em out
    shiftOut(dataPin, clockPin, dataGREEN);   
    shiftOut(dataPin, clockPin, dataRED);
    //return the latch pin high to signal chip that it
    //no longer needs to listen for information
    digitalWrite(latchPin, 1);
    delay(300);
  }
}



// the heart of the program
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
  // This shifts 8 bits out MSB first,
  //on the rising edge of the clock,
  //clock idles low

  //internal function setup
  int i=0;
  int pinState;
  pinMode(myClockPin, OUTPUT);
  pinMode(myDataPin, OUTPUT);

  //clear everything out just in case to
  //prepare shift register for bit shifting
  digitalWrite(myDataPin, 0);
  digitalWrite(myClockPin, 0);

  //for each bit in the byte myDataOut�
  //NOTICE THAT WE ARE COUNTING DOWN in our for loop
  //This means that %00000001 or "1" will go through such
  //that it will be pin Q0 that lights.
  for (i=7; i>=0; i--)  {
    digitalWrite(myClockPin, 0);

    //if the value passed to myDataOut and a bitmask result
    // true then... so if we are at i=6 and our value is
    // %11010100 it would the code compares it to %01000000
    // and proceeds to set pinState to 1.
    if ( myDataOut & (1<<i) ) {
      pinState= 1;
    }
    else {
      pinState= 0;
    }

    //Sets the pin to HIGH or LOW depending on pinState
    digitalWrite(myDataPin, pinState);
    //register shifts bits on upstroke of clock pin 
    digitalWrite(myClockPin, 1);
    //zero the data pin after shift to prevent bleed through
    digitalWrite(myDataPin, 0);
  }

  //stop shifting
  digitalWrite(myClockPin, 0);
}


//blinks the whole register based on the number of times you want to
//blink "n" and the pause between them "d"
//starts with a moment of darkness to make sure the first blink
//has its full visual effect.
void blinkAll_2Bytes(int n, int d) {
  digitalWrite(latchPin, 0);
  shiftOut(dataPin, clockPin, 0);
  shiftOut(dataPin, clockPin, 0);
  digitalWrite(latchPin, 1);
  delay(200);
  for (int x = 0; x < n; x++) {
    digitalWrite(latchPin, 0);
    shiftOut(dataPin, clockPin, 255);
    shiftOut(dataPin, clockPin, 255);
    digitalWrite(latchPin, 1);
    delay(d);
    digitalWrite(latchPin, 0);
    shiftOut(dataPin, clockPin, 0);
    shiftOut(dataPin, clockPin, 0);
    digitalWrite(latchPin, 1);
    delay(d);
  }
}
l'integrato usato effettivamente era il 2803,
ora appena posso provo il condensatore sull'alimentazione....
a cosa dovrebbe servire?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21625
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ora appena posso provo il condensatore sull'alimentazione....
a cosa dovrebbe servire?
E' un condensatore di disaccopiamento, serve per filtrare disturbi ad alta frequenza sulla linea di alimentazione e come serbatoio di energia per sopperire ai microsalti nell'alimentazione stessa dovuti alle commutazioni interne del micro. Un C da 0.1uF (100nF) sarebbe sempre da mettere fra il pin VCC e GND a tutti i componenti attivi di un circuito.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quindi dovrei metterlo anche sull'uln2803?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21625
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quindi dovrei metterlo anche sull'uln2803?

Il consiglio è: mettilo sempre sui pin VCC di tutti gli integrati, risolvono problemini tipo instabilità o altro.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non vedo l'ora di tornare a casa per fare questi test allora
Logged

Pages: [1]   Go Up
Jump to: