Forum: Mikrocontroller und Digitale Elektronik Zufallsgenerator 9 LEDs


von Markus E. (rowerer60)


Lesenswert?

Hallo,
Ich bin auf der suche nach einen Baustein der zufällig seine Ausgänge 
(hintereinander) ansteuert.
Hintergrund: Möchte gern ein Reaktionsfeld bauen.
Immer wenn eine Led leuchtet muss auf dieses feld geschlagen werden ( 
Boxtraining) 9 Felder wärn optimal
Die Frequenz des Wechsels der Leds sollte einstellbar sein (über ein 
Poti?)
Kann mir jmd weiterhelfen oder gibt es sowas ähnliches schon komplett 
was nur umgebaut werden müsste?
Danke

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Markus E. schrieb:
> Kann mir jmd weiterhelfen oder gibt es sowas ähnliches schon komplett
> was nur umgebaut werden müsste?

 Vielleicht ein uC, da du im mikrocontroller-elektronik Forum
 nachfragst ?

von Martin K. (Gast)


Lesenswert?

Markus E. schrieb:
> Reaktionsfeld

Sollen Treffer (in einer Zeit) gezählt werden? Oder soll Zeit bis zum 
Treffer ermittelt werden + Statistik? Soll die folgende Zufallszahl nach 
einem Treffer erscheinen oder nach einer Zeit (Takt)?
Schreibe mal ein Pflichtenheft.

von TM F. (p_richner)


Lesenswert?

Markus E. schrieb:
> Die Frequenz des Wechsels der Leds sollte einstellbar sein (über ein
> Poti?)

Such mal nach Inkrementalgeber. Ist einiges einfacher als ein Poti.

Markus E. schrieb:
> zufällig

Zufällig gibt es nicht in der Elektronik:)

von Dennis S. (eltio)


Lesenswert?

Martin K. schrieb:
> Sollen Treffer (in einer Zeit) gezählt werden? Oder soll Zeit bis zum
> Treffer ermittelt werden + Statistik? Soll die folgende Zufallszahl nach
> einem Treffer erscheinen oder nach einer Zeit (Takt)?
Steht doch da.

> Schreibe mal ein Pflichtenheft.
Echt jetzt? Für einen Zufallsgenerator?

Markus E. schrieb:
> Hallo,
> Ich bin auf der suche nach einen Baustein der zufällig seine Ausgänge
> (hintereinander) ansteuert.
Aus Gründen der Erweiterbarkeit würde ich persönlich einen kleinen AVR 
nehmen. Das hat den Vorteil, dass du alle nötigen Infos hier im Tutorial 
findest.
Du kannst hier und bei Google auch nach "Pseudozufallsgenerator" suchen. 
Das reicht für deine Zwecke. Es finden sich hier auch fertige Lösungen. 
Z.B.
Beitrag "Quellcode für Pseudozufallsgenerator"

> Die Frequenz des Wechsels der Leds sollte einstellbar sein (über ein
> Poti?)
Dafür nimmst du den ADC des Controllers. Stichwort 
Analogwertverarbeitung.

Gruß
Dennis

von Martin K. (Gast)


Lesenswert?

Dennis S. schrieb:
>> Schreibe mal ein Pflichtenheft.
> Echt jetzt? Für einen Zufallsgenerator?

Vermutlich soll der Erfolg des Trainings dokumentiert werden. Und wie 
das aussehen soll, gehört ins Pflichtenheft.
Wir wissen nicht, ob der TO das Problem nur mit Hardware + Löten 
erledigen möchte oder ob er einen µC programmieren möchte/kann.
Unklar ist mir auch, ob die 9 Felder gleiche Priorität haben sollen. 
Aber sicherlich denke ich schon wieder zu kompliziert.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Ein einfacher Pseudozufallsgenerator geht mit Schieberegister, das kann 
auch in einem µC programmiert sein, aber auch in TTL-Technik gebaut 
werden:
https://de.wikipedia.org/wiki/Linear_r%C3%BCckgekoppeltes_Schieberegister
neun LED ist etwas ungünstig, 8 oder 16 wäre einfacher. Ein 
1-aus-8-Decoder am Schieberegister sorgt dafür dass nur eine LED 
leuchtet

von Der Andere (Gast)


Lesenswert?

TM F. schrieb:
> Zufällig gibt es nicht in der Elektronik:)

Was ist denn zufälliger als thermisches Rauschen?

von Dennis S. (eltio)


Lesenswert?

Martin K. schrieb:
> Vermutlich [...]
> Wir wissen nicht [...]
> Unklar ist mir auch [...]
Richtig... ich halte nichts von Spekulationen. Er möchte einen 
(Pseudo-)Zufallsgenerator, also liegt es doch nahe ihm Wege aufzuzeigen 
wie das realisiert werden kann. Wozu über Gott und die Welt 
philosophieren?

> Aber sicherlich denke ich schon wieder zu kompliziert.
Konzentration aufs Wesentliche kann man trainieren.. :-P

Gruß
Dennis

P.S.: Ich weiß mein Zynismus ist an der Grenze für zartbesaitete 
Mitmenschen. Nicht zu Ernst nehmen bitte. :-)

von Markus (Gast)


Lesenswert?

Hallo danke für die ganzen Antworten!
Ich möchte nichts erfassen.
Es sollten nur 9 LED durcheinander blinken und die Abstände des Blinkens 
sollten einstellbar sein..
Wegen mir 1 ms - 1 s...
uC Erfahrung habe ich leider keine...
Nur ein wenig Erfahrung mit Arduino in der Berufsschule..
Freu mich auf eure Antworten
Vielen Dank

von Dennis S. (eltio)


Lesenswert?

Markus schrieb:
> Nur ein wenig Erfahrung mit Arduino in der Berufsschule..
Das ist doch ein Anfang.. und für so eine einfache Aufgabe vermutlich 
auch ausreichend. Ein bisschen Transferleistung musst du natürlich 
erbringen. Schau doch mal hier:
http://deskfactory.de/arduino-led-wuerfel-mit-zufallszahlen-generator

Gruß
Dennis

von Der Andere (Gast)


Lesenswert?

Markus schrieb:
> Nur ein wenig Erfahrung mit Arduino in der Berufsschule..

Das sollte doch reichen.
Du brauchst für zwei Dinge jeweils ein Zufallswert:

1. Die Zeit bis zur nächsten Led umgeschaltet wird.
2. Welche Led dann eingeschaltet wird

Also schau dir an wie man beim Arduino einen Zufallswert erhält.
Normiere den Wert auf den Bereich den du brauchst.

Beispiel: Der Zufallswert ist zwischen 0 und 1. Du willst aber eine von 
9 Leds auswählen.
Also nimmst du den Zufallswert mal 9 und rundest auf (oder ab). Dann 
hast du einen Zufallswert zwischen 1 und 9 (oder 0 - 8).

Der Rest ist dann einfach Ports mit Led ein und ausschalten.

von Markus (Gast)


Lesenswert?

Passt das so?
Sollte noch was hinzugefügt werden?
Das hat ein Kumpel von mir gemacht...
Danke!

#define VERZOEGERUNGSOFFSET 0

void setup() {

  // Arduino Pin für Poti zum Zeit einstellen
  pinMode(A0,INPUT);

  // Arduino Pin für Zufallszahlen, muss offen gelassen werden
  pinMode(A1,INPUT);

  // Arduino Pins 2 bis 7 als Ausgang für LEDs
  DDRD |= 0xFC;

  // Arduino Pins 8 bis 10 als Ausgang für LEDs
  DDRB |= 0x07;

  // Zufallsgenerator vorbereiten
  // (muss nicht unbedingt sein; dadurch werden die Zufälle noch 
"zufälliger")
  randomSeed(analogRead(A1));
}

void loop() {

  // Zufallszahl zwischen 2 und 9 erzeugen
  uint8_t ZufallsLED = (uint8_t)(0xFF & random(2,10));

  // Zeitverzögerung von der Potistellung auslesen
  uint16_t Verzoegerung = analogRead(A0) + VERZOEGERUNGSOFFSET;

  // alle LEDs ausschalten
  DDRD &= 0x03;
  DDRB &= 0xF8;

  // ZufallsLED einschalten
  digitalWrite(ZufallsLED,HIGH);

  // eingestellte Zeitverzögerung abwarten
  for(int i=0;i<Verzoegerung;i++) delay(1);

}

von Max D. (max_d)


Lesenswert?

https://xkcd.com/221/ Das war leicht

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.