74hc595 Oe naar arduino

Arduino specifieke Software
Berichten: 82
Geregistreerd: 27 Feb 2019, 11:19

Re: 74hc595 Oe naar arduino

Berichtdoor Jeroentjevrij » 17 Apr 2019, 21:41

Lukt me helaas niet om me pcb schema toe te voegen die is blijkbaar te groot
Code: Alles selecteren
#include <Shifty.h>                //// dit is de benodige bibliotheek/////

Shifty shift;

void setup() {
                                        // Aantal Bits 8x aantal shuifregisters//
  shift.setBitCount(48);

                                        //  de ds, sh, en st pins die je gebruikt//
                                        // deze zet gelijk de pinMode////
  shift.setPins(11, 8, 12);
}
void Layer(int range)
{
  switch (range) {
    case 0:
      shift.writeBit(7, 0);
      shift.writeBit(15, 0);
      shift.writeBit(23, 0);
      shift.writeBit(31, 0);                    ///zet 1 layer aan andere 5 uit//////
      shift.writeBit(39, 0);
      shift.writeBit(47, 0);
      break;
    case 1:
      shift.writeBit(47, 0);
      shift.writeBit(39, 0);
      shift.writeBit(31, 0);
      shift.writeBit(23, 0);
      shift.writeBit(15, 0);
      shift.writeBit(7, 1);
      break;
    case 2:
      shift.writeBit(47, 0);
      shift.writeBit(39, 0);
      shift.writeBit(31, 0);
      shift.writeBit(23, 0);
      shift.writeBit(7, 0);
      shift.writeBit(15, 1);
      break;
    case 3:
      shift.writeBit(47, 0);
      shift.writeBit(39, 0);
      shift.writeBit(31, 0);
      shift.writeBit(7, 0);
      shift.writeBit(15, 0);
      shift.writeBit(23, 1);
      break;
    case 4:
      shift.writeBit(47, 0);
      shift.writeBit(7, 0);
      shift.writeBit(23, 0);
      shift.writeBit(39, 0);
      shift.writeBit(15, 0);
      shift.writeBit(31, 1);
      break;
    case 5:
      shift.writeBit(7, 1);
      shift.writeBit(47, 1);
      shift.writeBit(31, 1);
      shift.writeBit(23, 1);
      shift.writeBit(15, 1);
      shift.writeBit(39, 0);
      break;
    case 6:
      shift.writeBit(7, 0);
      shift.writeBit(15, 0);
      shift.writeBit(23, 0);
      shift.writeBit(31, 0);
      shift.writeBit(39, 0);
      shift.writeBit(47, 0);
      break;
  }
}

void Col(int X, int state)
{
                                     //// formule x nog berekenen 1-6= -0//  7-12= +2 enz enz//////
 
      shift.writeBit(X , state);
}
 
void Led(int L, int state)                               
{
                               
    Col(L, state);                   //// Formule Lvoor Col nog berekenen 1 tot 36= -0////
    Layer((L+35)/36);                //// 37 to 73= -36 enz enz////////     
  }                                  //// formule Layer werkt////
 
void Yas(int Y, int state1, int state2, int state3, int state4, int state5, int state6)
{
  Led(Y, state1);
  Led(Y + 6, state2);               /// Yas(1,0,1,1,1,1,0); zet 4 leds aan op eerste Yas
  Led(Y + 12, state3);
  Led(Y + 18, state4);
  Led(Y + 24, state5);
  Led(Y + 30, state6);
}
void Xas(int X, int state1, int state2, int state3, int state4, int state5, int state6)
{
  Led(1 + (X - 1) * 6, state1);
  Led(2 + (X - 1) * 6, state2);
  Led(3 + (X - 1) * 6, state3);        ////Xas(1,0,1,1,1,1,0); zet 4 leds aan op eerste Xas string
  Led(4 + (X - 1) * 6, state4);
  Led(5 + (X - 1) * 6, state5);
  Led(6 + (X - 1) * 6, state6);
}



void loop()
{
  for (int A = 0; A <= 5; A += 1)            ////moet nog testen wil dat hij de gehele 10x uitvoert/////
  {
    for (int i = 1; i <= 10; i++)            ///dan +1 en dan weer 10x enz enz tot aan +5 //////
    {
      Yas(7 + A, 0, 1, 1, 1, 1, 0);
      delay(1);
      Yas(13 + A, 1, 0, 0, 0, 0, 1);
      delay(1);
      Yas(19 + A, 0, 1, 1, 1, 1, 0);
      delay(1);
      Yas(25 + A, 1, 0, 0, 0, 0, 0);
      delay(1);
      Yas(31 + A, 0, 1, 1, 1, 1, 1);
      delay(1);
    }
  }
}

Advertisement

Berichten: 82
Geregistreerd: 27 Feb 2019, 11:19

Re: 74hc595 Oe naar arduino

Berichtdoor Jeroentjevrij » 17 Apr 2019, 23:48

void Led is overigens al aangepast maar kan me vorige niet wijzigen hier.

Code: Alles selecteren
 
void Led(int L, int state)
{
Col(L %36, state); ///1-36=1-36 37-72=1-36 enz enz//
Layer((L +35)/36);//1-36=1 37-72=2 e z enz//


Wou de x en y as ook nog naar 1 regel brengen met een
[code]
Y(int Y, state1, state2, state3, state4, state5, state6) {
for (i=0; i<=6; i +=1)
{
Led(Y +iState[1 +i= 1 of 0]) ;
Dat ik wel in vul Y(1,0,1,1,1,1,0)
maar weet niet hoe ik dat oplos met de state.

Weet niet of ik de state zo kan maken.

Berichten: 82
Geregistreerd: 27 Feb 2019, 11:19

Re: 74hc595 Oe naar arduino

Berichtdoor Jeroentjevrij » 18 Apr 2019, 01:06

Zag trouwens ook nog dat ik de < en > verkeerd om heb bij de if else

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: 74hc595 Oe naar arduino

Berichtdoor shooter » 18 Apr 2019, 11:34

je bent dus de hele sequence met de hand aan het maken, leuk veel werk en je komt dadelijk vanzelf in de knoei, beter is een algemeen schrijfprogramma en een array met de juiste leds en timing.
en state is altijd een integer
paul deelen
shooter@home.nl

Berichten: 82
Geregistreerd: 27 Feb 2019, 11:19

Re: 74hc595 Oe naar arduino

Berichtdoor Jeroentjevrij » 18 Apr 2019, 12:03

Ik heb een programma thuis dat ik de leds in een kubus invul.
En die mij een code geeft.

Voorbeeld.
{b10010101, b10010101, b11111111, enz.}
Maar weet niet hoe ik de setup dan moet maken om het zo te doen.

En wat betreft array.
Ik weet hoe een array aan te maken.
Int Leds[] ={1,2,3,4,5,6} maar weet niet hoe hem aan te sturen.

Ik kom momenteel niet verder dan digitalWrite.
Of in het geval van shifty tot shift.writeBit maar dat levert met sr's problemen op omdat ik steeds per bit aan stuur je soms tussen 2 acties leds ziet knipperen.
Ik probeer dat latchen te doen maar dat lukt me nog niet echt.

Berichten: 82
Geregistreerd: 27 Feb 2019, 11:19

Re: 74hc595 Oe naar arduino

Berichtdoor Jeroentjevrij » 18 Apr 2019, 17:51

Er is niet veel van over maar werking is hetzelfde.
Hij is getest en werkt.
Mits led 36 op pin0 gezet word.
En 1-35 op 1-35.
En de layers van 41 tot 46.

Tevens heb ik een switch gemonteerd op de oe dat als ik de spanning in schakel.
De oe 5v krijgt.
Als het programma start zet de arduino een led op de behuizing aan, zodra die aan is kan ik de switch uit zetten en gaat de spanning van de oe af.
Zo heb ik geen pieken bij het opstarten.
Want er zitten nu 8 leds op sommige ic's
Kan nu aan de effecten gaan bouwen.

Hier de code voor 216 leds.
Setup is net 50 regels.
;)
Code: Alles selecteren
 
#include <Shifty.h>


Shifty shift;
///// kolom 1-35 op pin 1-35 kolom 36 op pin 0!!!!!!///////
///// Layers 1-6 op pin 41-46
void setup() {
  // Aantal bits minimaal 8x aantal shuifregisters////
  shift.setBitCount(48);

  // 11=ds 12=sh 8=st pin //

  shift.setPins(11, 12, 8);
  pinMode(7,OUTPUT);

}
void Layer(int L)
{
  for (int i = 1; i <= 6; i++)
  {
    shift.writeBit(i + 40, LOW);
    if (i == L)
    {
      continue;
    }
  }
  shift.writeBit(L+ 40, HIGH);
}
void Led(int L, int state)
{
  shift.writeBit(L % 36, state);
  Layer((L + 35) / 36);
}
void Yas(int Y, int state1, int state2, int state3, int state4, int state5, int state6)
{
  Led(Y % 36, state1);
  Led((Y + 6) % 36, state2);
  Led((Y + 12) % 36, state3);
  Led((Y + 18) % 36, state4);
  Led((Y + 24) % 36, state5);
  Led((Y + 30) % 36, state6);
}
void Xas(int X, int state1, int state2, int state3, int state4, int state5, int state6)
{
  Led(X % 36, state1);
  Led((X + 1) % 36, state2);
  Led((X + 2) % 36, state3);
  Led((X + 3) % 36, state4);
  Led((X + 4) % 36, state5);
  Led((X + 5) % 36, state6);
}


void loop()
{
   digitalWrite(7, HIGH);
  for (int i = 1; i <= 216; i += 6)
  {
    Xas(i, 1, 1, 1, 1, 1, 1);
    delay(200);
    Xas(i, 0, 0, 0, 0, 0, 0);
    delay(200);
  }
  for (int i = 1; i <= 216; i++)
  {
    Led(i, 1);
    delay(200);
    Led(i, 0);
  }
  for (int i = 1; i <= 36; i++)
  {
    Yas(i, 1, 1, 1, 1, 1, 1);
    delay(200);
    Yas(i, 0, 0, 0, 0, 0, 0);
    delay(200);
  }
}


10 regels om alle 216 leds aan te sturen inc de layers.
Heel veel korter zal niet lukken.

De Y en Xas stuur je aan door de eerste Led tussen de haakje te vermelden.
En dan 6x 0 of 1 om desbetreffende aan of uit te zetten

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: 74hc595 Oe naar arduino

Berichtdoor shooter » 18 Apr 2019, 19:10

de bedoeling van dat 595 is eigenlijk dat je een hoop bitjes verstuurt achter elkaar en als alle bitjes goed staan je een move doet dat alle bitjes doorgestuurd worden naar de uitgangen. zoals je ziet zitten er flipflops voor elke uitgang om eerst alle bits in te lezen en dan met een commando alle uitgangen in een keer goed te zetten.
op die manier kun je dus heel snel een beweging laten zien zelfs van elk bitje apart.
zet eens een filmp[je neer wat je nu hebt, en wat je eigenlijk wilt?
paul deelen
shooter@home.nl

Berichten: 82
Geregistreerd: 27 Feb 2019, 11:19

Re: 74hc595 Oe naar arduino

Berichtdoor Jeroentjevrij » 18 Apr 2019, 19:30

Dat word lastig heb net me breadboard afgebroken om de print te gaan bouwen.
Shifty.h
Is gemaakt om per bit te verzenden.
Omdat ik niet weet hoe ik moet latchen.
En zo.

Ik heb er 1 gevonden ga hem. Nu uitwerken.
Maar na mijn idee blijven de transistors spanning vasthouden duurt een seconde voor ze uit gaan nadat de spaning van de base is.
Wat kan ik daar aan doen

Berichten: 82
Geregistreerd: 27 Feb 2019, 11:19

Re: 74hc595 Oe naar arduino

Berichtdoor Jeroentjevrij » 18 Apr 2019, 20:34

En krijg onderstaande code niet door de compile.
Code: Alles selecteren
 
/*
  ShiftRegister74HC595 - Library for simplified control of 74HC595 shift registers.
  Created by Timo Denk (www.timodenk.com), Nov 2014.
  Additional information is available at http://shiftregister.simsso.de/
  Released into the public domain.
*/

#include <ShiftRegister74HC595.h>

// create a global shift register object
// parameters: (number of shift registers, data pin, clock pin, latch pin)
ShiftRegister74HC595 sr (2, 11, 12, 8);
 
void setup() {
}

void loop() {

  uint8_t pinValues[] = { B11111111, B10000001  };
  sr.setAll(pinValues);
  delay(200);
  uint8_t pinValues[] = { B11111111, B10000010  };
  sr.setAll(pinValues);
  delay(200);
  uint8_t pinValues[] =  { B11111111, B10000100  };
  sr.setAll(pinValues);
  delay(200);
}

Als ik er 1 verzend naar de arduino gaat het goed.
Nu zegt hij redeclaration of uint8_t

Berichten: 82
Geregistreerd: 27 Feb 2019, 11:19

Re: 74hc595 Oe naar arduino

Berichtdoor Jeroentjevrij » 19 Apr 2019, 12:41

Bovenstaand probleem is opgelost
Die uint8

VorigeVolgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 21 gasten