Forum: Mikrocontroller und Digitale Elektronik inkrementelles Lauflicht mit 160 LEDs


von Kay R. (kay2204_62)


Lesenswert?

Hallo,

ich habe früher in der Ausbildung schon mal mit Arduinos gearbeitet, was 
allerdings schon lange her ist, und die Suchfunktion half mir auch nicht 
weiter.

Mein Ziel ist es, per Taster immer eine LED dazuzuschalten.
Die Idee war, per 74HC595 die LEDs anzuschließen und dann über den 
Arduino in einer Schleife den Taster abzufragen, welche die 
Tastenanschläge speichert und diese dann an die Schieberegister weiter 
gibt.

meine erste Variante war ein Array weiterzugeben, welches sich selbst 
erweitert und die Werte ändert. Ich bekomme aber immer nur eine Stelle 
im Array geändert.

meine zweite Variante war, einen Binärzähler immer in den 2^n Schritten 
zählen zu lassen. Das hat aber überhaupt nicht funktioniert.

meine letzte Überlegung ging dahin 160 Arrays mit jeweils 160 Werten zu 
erstellen und dann den Wert des Tastenzählers einem jeweiligen Array 
zuzuordnen.

gibt es noch eine einfachere Lösung, die mir nicht einfallen will?

von Teo D. (teoderix)


Lesenswert?

Oje, ziemlich Wirr das Ganze....
Nimm ne "Intelligente" LED-Strippe (zB: WS2812 oä.) und das ganze wird 
für dich wesentlich einfacher! .... PS: Und Bunt ;)

: Bearbeitet durch User
von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

>  hat aber überhaupt nicht funktioniert.

Ein bisschen knapp für eine Fehler Beschreibung

von Falk B. (falk)


Lesenswert?

Kay R. schrieb:

> Mein Ziel ist es, per Taster immer eine LED dazuzuschalten.
> Die Idee war, per 74HC595 die LEDs anzuschließen und dann über den
> Arduino in einer Schleife den Taster abzufragen, welche die
> Tastenanschläge speichert und diese dann an die Schieberegister weiter
> gibt.

Genau so.

> meine erste Variante war ein Array weiterzugeben, welches sich selbst
> erweitert und die Werte ändert.

Hää? Ein Array ändert sich nicht selber, das macht bestenfalls die CPU 
durch DEIN Programm.

> Ich bekomme aber immer nur eine Stelle
> im Array geändert.

Das reicht ja. Du willst ja immer nur eine neue LED anschalten.

> meine zweite Variante war, einen Binärzähler immer in den 2^n Schritten
> zählen zu lassen. Das hat aber überhaupt nicht funktioniert.

Ist auch nicht sinnvoll.

> meine letzte Überlegung ging dahin 160 Arrays mit jeweils 160 Werten zu
> erstellen und dann den Wert des Tastenzählers einem jeweiligen Array
> zuzuordnen.

Totaler Käse.

> gibt es noch eine einfachere Lösung, die mir nicht einfallen will?

Dein 1. Ansatz. Man muss ihn halt richtig und komplett machen. Und ja, 
das fällt nicht vom Himmel und das kann man auch nicht immer googlen.
Leg los.

Für 160 einfach LEDs braucht es 160 Bit, welche in 20 Bytes locker Platz 
haben. Das ist dein Array. Dort musst du per Bitmanipulation 
schrittweise immer eins setzen und die Daten auf die Schieberegister 
ausgeben.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Kay R. schrieb:
> meine erste Variante
Meine erste Variante wäre ein Zähler, der pro Tastendruck um 1 
hochzählt. Da kann man dann auch noch so Gimmicks wie Entprellung und 
Autorepeat mit einbauen.

Und dann brauche ich noch eine Hardware, die ich so ansteuern kann, dass 
die dem Zählerstand entsprechende Anzahl LEDs aufleuchtet.

Wie sieht deine Hardware aus?

> Ich bekomme aber immer nur eine Stelle im Array geändert.
Das kann man am angefügten Code klar erkennen.

: Bearbeitet durch Moderator
von Peter D. (peda)


Lesenswert?

Bis 160 zählen kann man doch prima in einem Byte.
Bei der Ausgabe vergleichst Du den Schiebezähler i mit dem Tastenwert t. 
Bei i < t schiebst Du eine 1 raus, sonst 0. Fertig.

von Jens M. (schuchkleisser)


Lesenswert?

Nimm ein Schieberegister aus ICs und lege den Dateneingang fest auf 1.
Der Taster kommt (mit einer Entprellschaltung) an den Takteingang.
Wenn du einen Chip aussuchst, der ein Resetsignal hat das auch den 
Datenspeicher zurücksetzt hast du einen Null-Taster und einen 
Weiter-Taster.
Ganz ohne Software...
Das 74164 scheint z.B. zu gehen.

von MaWin (Gast)


Lesenswert?

Kay R. schrieb:
> Mein Ziel ist es, per Taster immer eine LED dazuzuschalten.
> Die Idee war, per 74HC595

Gute Idee.

Lass den Arduino, von dessen Programmierung du nichts verstehst, einfach 
weg.

Der 595 kann von selbst immer eine LED mehr leuchten lassen. Der 
Dateneingang kommt dazu auf 1, und der Taster schiebt. Dazu muss der 
Tastimpuls entprellt sein und beim Drücken schiebt er, beim loslassen 
latcht er. Eventuell noch einen Taster zum ausschalten der Lichterkette. 
Bei 10mA pro LED brauchst du ein Netzteil von 5V/1.6A und 160 
Vorwiderstände. Ein CAT4016/DM13 o.ä. reduziert das auf 10 Chips und 10 
Widerstände.

von Kay R. (kay2204_62)


Lesenswert?

1
#define PIN_SHIFT 8 //SHCP
2
#define PIN_STORE 9 //STCP
3
#define PIN_DATA  10 //DS
4
5
int Taster = 19; // Eingang Taster
6
int Zaehler = 0;
7
int X = 0; 
8
byte b = 0b11111;
9
10
void setup()
11
{
12
  pinMode(PIN_STORE, OUTPUT);
13
  pinMode(PIN_SHIFT, OUTPUT);
14
  pinMode(PIN_DATA, OUTPUT);
15
16
  digitalWrite(PIN_STORE, LOW);
17
  shiftOut(PIN_DATA, PIN_SHIFT, LSBFIRST, b);
18
  digitalWrite(PIN_STORE, HIGH);
19
20
  delay(4000);
21
  Serial.begin(9600);
22
  pinMode(Taster, INPUT); 
23
  digitalWrite(Taster, HIGH); 
24
}
25
26
27
void loop()
28
{
29
 
30
  if (digitalRead(Taster) == LOW && X == 0) {
31
    Zaehler++;
32
    X=1;
33
  }
34
 
35
  if (digitalRead(Taster) == HIGH && X == 1) {
36
    delay(250);
37
    X=0;
38
  }
39
40
   digitalWrite(PIN_STORE, LOW);
41
  shiftOut(PIN_DATA, PIN_SHIFT, LSBFIRST, b);
42
  digitalWrite(PIN_STORE, HIGH);
43
  delay(100);
44
45
 b << Zaehler;
46
 Serial.println(Zaehler);
47
 Serial.println(b);
48
}

Das war mein letzter Versuch

von Kay R. (kay2204_62)


Lesenswert?

Das war mein erster Versuch mit den 4015. das habe ich aber auch nicht 
zum laufen bekommen. Da haben nur die Ausgänge B1-4 in aufsteigender 
Reihenfolge geleuchtet und auch nur mit einer Blinker LED am 
Takteingang. Sobald ich die Blinker-LED gegen den Taster mit Kondensator 
gewechselt habe, ging es nicht mehr.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Kay R. schrieb:
> Sobald ich die Blinker-LED gegen den Taster mit Kondensator
> gewechselt habe, ging es nicht mehr.
Und jetzt kommt der Knackpunkt: Was ging nicht? Und warum ging es 
nicht?
Du solltest nicht blind was zusammenkopieren und drauflosbasteln, 
sondern mal die Ursache für dieses "Fehlverhalten" analysieren.

Dazu musst du mit einem geeigneten Messgerät (Oszilloskop) mal die Pegel 
an diesem Pin messen und nachschauen, ob das tatsächlich brauchbare 
Digitalpegel sind. Die braucht der µC nämlich, dass er damit was 
anfangen kann.

von MaWin (Gast)


Lesenswert?

Kay R. schrieb:
> Sobald ich die Blinker-LED gegen den Taster mit Kondensator gewechselt
> habe, ging es nicht mehr.

Tja, vermutlich bist du dem Problem begegnet, dass Taster erst mal 
prellen und entprellt werden müssen, was dein Kondensator nicht 
geschafft hat.

von oszi40 (Gast)


Lesenswert?

Taster entprellen ist ein Grund,
dass 160 LEDs auch etwas Strom brauchen, ist Dir sicher auch schon 
aufgefallen? Gerechnet, gemessen? Stütz-Cs am IC?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.