Forum: Mikrocontroller und Digitale Elektronik Random Grafiktafel


von Erwin D. (erwin_d) Flattr this


Angehängte Dateien:

Lesenswert?

Entstehen soll ein Bild warauf max 16 Figuren zufällig gedreht werden.
Die Figuren überschneiden sich und so wird eine sich stehtig ändernde
Gesamtform erzeugt.

Ein Atini13A erzeugt eine Zufallszahl zwischen 1 und 255
Diese Zahl wird in das B-Register geschrieben.

Die Pins des Pregisters 0 1 2 und 3 werden mit einem 4 zu 16 Multiplexer
auf 16 Ausgänge gemultiplext. Es ist immer nur ein Ausgang aktiv.
CD74HC4067
Je 8 Leitungen werde mit 2 Darlington-Arrays ULN2803 ausgekoppelt.
Es gibt somit 16 belastbare Ausgänge zur Steuerung der Aktoren.
Weiter gibt es 16 LED's zur optischen Kontrolle.

Nicht nur die Aktoren sollen abwechselnd bewegt werden sondern auch die
Zeit wie lange das geschehen soll.

Software Studio 7 - hier der Code:
/*
 * Biotronic.cpp
 * Attiny13A
 * Created: 11.11.2023 16:08:24
 * Author : ED
 */
#include <avr/io.h>  //Holt Grundfunktionen des Atmega
#define F_CPU 1000000UL // 1 MHz
#include <util/delay.h>  //Bindet Wartefunktionen ein
#include <stdlib.h>
int i=0, pause=0 ;  //Variablen dekarieren
int main(void)    //Jedes Programm braucht diese Startfunktion
{
DDRB =  0b11111111;    //PORTB als Ausgang
PORTB = 0b00000000;    //alle PINS PORTB auf Low

       while (1) {
   //  Zufallszahl 0 bis 15 generieren
  int zahl = rand() % 16; // random int between 0 and 15
  PORTB  = zahl ;    // Zufallszahl in PortB schreiben

   // Zufallszeit 1000 bis 10000 generieren
  int pause = rand() % 30; // random int between 0 and 29
  for (i = 0; i < pause; ++i); {
  _delay_ms (1000);   //pause-mal durchlaufen
  }
    }
}
Die zufällige Ansteuerung der 16 Ausgänge funktioniert.
Die zufällige Verzögerung funktioniert nicht.
_delay_ms braucht eine Konstante. Um ein variables Delay zu erreichen
wird _delay_ms (1000) mit der Zufallszahl pause random-mal durchlaufen.
Genau das geht bei mir nicht :-(
Was mache ich falsch?
Mit freundlichem Gruss    ed

von Daniel S. (supernova01)


Lesenswert?

Worum gehts?

von Max D. (max_d)


Lesenswert?

Erwin D. schrieb:
> for (i = 0; i < pause; ++i); {

Wie im anderen Thread schon geschrieben: Was macht der Strichpunkt da ?

von Erwin D. (erwin_d) Flattr this


Lesenswert?

Genau das geht bei mir nicht :-(
Na ja :-))) die variable Verzögerung bis zum nächsten Ereignis bleibt 
sehr stabil bei 1 Sekunde statt sich zufällig zu ändern.

von Alexander (alecxs)


Lesenswert?


von Erwin D. (erwin_d) Flattr this


Lesenswert?

@ Max D.
Danke Max, der musste weg - und jetzt geht's wie gewünscht.
Ich werde noch weiter daran arbeiten. Drehrichtung wechseln, mechanische 
Rückkopplung auswerten etc.

von Flunder (flunder)


Lesenswert?

Erwin D. schrieb:
> Ich werde noch weiter daran arbeiten. Drehrichtung wechseln, mechanische
> Rückkopplung auswerten

- nix doppelt posten

von Martin S. (mmaddin)


Lesenswert?

Erwin D. schrieb:
> Entstehen soll ein Bild warauf max 16 Figuren zufällig gedreht werden

https://www.pinterest.de/marionorczewski/bilder-malen/

Erwin D. schrieb:
> Ein Atini13A erzeugt eine Zufallszahl zwischen 1 und 255
> Diese Zahl wird in das B-Register geschrieben.

Jo, und heute ist Dienstag.

: Bearbeitet durch User
von Thomas W. (goaty)


Lesenswert?

Jetzt verstehe ich es, das ist der Testaufbau um 16 Digitalausgänge 
zufällig high oder low zu schalten.
Später wird dann statt der LEDs entsprechende Aktuatoren angeschlossen, 
die irgendwelche Bildteile 'flippen' und so ein zufälliges Bild 
anzeigen.
Da sieht man, wie schwierig es ist, verständlich zu beschreiben, was los 
ist.

von Erwin D. (erwin_d) Flattr this


Lesenswert?

Thomas W. schrieb:
> Jetzt verstehe ich es, das ist der Testaufbau um 16 Digitalausgänge
> zufällig high oder low zu schalten.
und weiter
Martin S. schrieb:
> Jo, und heute ist Dienstag.

Hallo Thomas - und ich war mir sicher dass ich mein Vorhaben 
verständlich verfasst habe.
a) die beiden Bilder
b) der Text
--- Entstehen soll ein Bild warauf max 16 Figuren zufällig gedreht 
werden.
Die Figuren überschneiden sich und so wird eine sich stehtig ändernde
Gesamtform erzeugt. etc. ---
c) der C-Code

Es scheint dass das nicht klar war, weil ich den Überblick bereits in 
Gedanken hatte. Da gibt es doch auch das Problem, dass man eigene Texte 
nie selbst korrigieren soll. Merci für euren Hinweis.

In C bin ich kein Licht, eher eine Laterne.
Das kurze Programm bewirkt dass die 16 Ausgänge zufällig und 
unterschiedlich lange auf High gehen. Besser wäre wenn der Zyklus so 
wäre:
- 2 Sekunden High - dann zufällig lange Low - nächter Zyklus.
Auf diese Weise würde der jeweils aktive Aktor (Motor) nicht die ganze 
Pause lang durchlaufen, sondern nur 2 Sekunden.

@ Martin S. kannst du mir ein wenig auf die Sprünge helfen?
Der Attiny13 ist mit einem Attiny85 ersetzt worden.
Gruss   ed

Beitrag #7541525 wurde vom Autor gelöscht.
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.