- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 19

Thema: Problem mit Zufalls Tabelle (Atmega32)

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.01.2013
    Beiträge
    9

    Problem mit Zufalls Tabelle (Atmega32)

    Hallo,
    ich möchte gerne eine Zufalls Tabelle, für einen Led Cube erzeugen.
    Es sollen also immer zufällig irgendwelche Led's leuchten.
    Meine Idee ist diese:

    Code:
    $regfile = "m32def.dat"
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    $crystal = 8000000
    '----------------------------------------------------------------------------------
    Ddra = 11111111                                             'Ausgänge setzten
    Ddrb = 00001111
    Ddrc = 01111111
    Ddrd = 10000000
    '----------------------------------------------------------------------------------
    'Variablen setzen
    Dim Bild As Word
    Dim Maxbild As Word
    Dim Ebene As Byte
    Dim Dauer As Byte
    Dim Temp As Word
    Dim Datentabelle As Word
    Dim I As Byte
    Dim Random(64) As Byte
    Dim Dauer2 As Word
    '---------------------------------------------------------------------------------
    'Hauptschleife
    
    Do
    Maxbild = 12                                                'Maxbild = Anzahl der Bilder
    Maxbild = Maxbild - 1                                       'Maxbild -1, da er bei 0 anfängt zu zählen
    
    For Bild = 0 To Maxbild                                     'Bilder ablaufen
    
       For Dauer = 0 To 27                                      'Dauer des Bildes
    
          For Ebene = 0 To 3                                    'Anzahl der Ebenen (bei mir 4)
             '----------------------------------------------------------------------------------
             Datentabelle = Bild * 16                           'Berechnen der Tabelle
             Temp = Ebene * 4
             Datentabelle = Datentabelle + Temp
              '---------------------------------------------------------------------------------
              'Ausgabe des Bildes
          Porta = Lookup(datentabelle , Muster)
          Datentabelle = Datentabelle + 1
          Portb = Lookup(datentabelle , Muster)
          Datentabelle = Datentabelle + 1
          Portc = Lookup(datentabelle , Muster)
          Datentabelle = Datentabelle + 1
          Portd = Lookup(datentabelle , Muster)
    
          Waitms 5
          '----------------------------------------------------------------------------------------
           If Ebene = 3 Then
           Exit For
           End If
          Next Ebene
          If Dauer = 27 Then
          Exit For
          End If
    
       Next Dauer
       If Bild = Maxbild Then
       Exit For
       End If
    Next Bild
    'Ende der vor eingestellten Bilder
    
    '--------------------------------------------------------------------------------------------
    'Anfang Zufalls Schleife
    For Dauer2 = 0 To 1000                                      'Ein Vorläufiger Wert, wie lang die Zufalls schleife laufen soll
       '-----------------------------------------------------------------------------------------
       'Dem Array wird ein Zufalls bit übergeben
       For I = 1 To 64
          Random(i) = Rnd(1)
          If I = 64 Then Exit For
       Next I
         '---------------------------------------------------------------------------------------
         'Ausgabe des Bildes
       For Dauer = 0 To 27
    
          For Ebene = 0 To 3
               Temp = Ebene * 4
    
               Porta = Lookup(temp , Rand)
               temp = temp + 1
               Portb = Lookup(temp , Rand)
               Temp = Temp + 1
               Portc = Lookup(temp , Rand)
               Temp = Temp + 1
               Portd = Lookup(temp , Rand)
    
                If Ebene = 3 Then Exit For 
           Next Ebene
       If Dauer = 27 Then Exit For
       Next Dauer
    If Dauer2 = 1000 Then Exit For
    Next Dauer2
    'Ende der Zufalls schleife
      '------------------------------------------------------------------------------------------
    Loop
    
    End
    '---------------------------------------------------------------------------------------------
    'Hier nun mein Problem, gibt es eine Möglichkeit die Variablen aus dem Array so in die Tabelle zu geben?
    Rand:
    Data &B&RANDOM(1)0000000 , &B00000001 , &B00001000 , &B00000000
    Data &B00000000 , &B00000000 , &B00010000 , &B00000000
    Data &B00000000 , &B00000000 , &B00100000 , &B00000000
    Data &B00000000 , &B00000000 , &B01000000 , &B00000000
     '-------------------------------------------------------------------------------------------
    
    
    
    Muster:                                                     'Bilder die Ablaufen sollen
    $include "muster.txt"

    Was meint ihr?
    Ist es möglich das so irgendwie so hin zu bekommen, oder bin ich auf dem Holzweg?

    Gruß
    Lars
    Geändert von Lars Schütz (27.01.2013 um 22:29 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Wenn ich das richtig verstanden habe, willst du zur Laufzeit ein Array mit Zufallszahlen füllen und anschließend die Werte aus dem Array in eine Data-Table füllen. Eine Datentabelle kannst du aber nur mit festen Werten füllen, da sich diese im Flash befindet. Da allerdings bei der Verwendung der Funktion Random sowieso immer die gleichen Zufallszahlen herauskommen lassen diese sich auch vor der Compilierung in die Datentabelle schreiben. Hintergrund dazu: Random wird während dem Compilieren aus einem zufälligen Seed berechnet und die Werte fest auf den µC gebrannt. Also wird nach jedem Einschalten immer wieder die gleiche Folge an Mustern auf deinem Cube zu sehen sein.

    Wenn du echte Zufallswerte wünschst, kannst du die einfach aus einem offenen AD-Eingang erzeugen, oder komplizierter, das Rauschen einer Diode auswerten. Auch der Weg über eine Systemzeit ist möglich. Aber selbst wenn du echte Zufallswerte erzeugen würdest, in eine Tabelle im Flash kommen die auf keinem Weg.

    So, ich hoffe ich habe mich jetzt nicht verhadert, ist schon spät/früh heute...
    Grüße
    Thomas

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    Ich habe vor kurzem auch das gleiche Problem gehabt das ich eine zufällige Reihenfolge benötigt habe.
    In der Firma werden Motoren (bis zu 10) zufällig angesteuert (immer nur einer). Die Laufzeit der Motoren sollte auch zufällig sein.

    Ich habe auch länger gesucht und auch verschiedene Möglichkeiten gefunden (u.A. auch den ADC aktivieren und nicht beschalten bzw mit einer "Antenne" versehen). Habe mich aber für einen Chaosgenerator entschieden, da es immer funktionieren soll (Industrie). Noch ist es in Planung, der Chaosgenerator funktioniert aber auf dem Breadboard schon. Habe diese Schaltung verwendet http://physics.mercer.edu/hpage/vilnius.html
    Statt R3 habe ich ein 1k Poti eingebaut da es nicht gleich funtkioniert hat. Mit dem Oszi habe ich es dann so eingestellt bis ich eine zufällige Schwingung hatte (Wenn man es falsch einstellt wird es eher ein Sinus oder man hat keine Schwingung). Dieses Signal wertest du mit dem ADC aus (achte aber das du auch negative Spannungen hast).

    Du kannst die Schaltung mit z.B. LTSpice simulieren. Habe ich zum Testen auch so gemacht.

    MfG Hannes

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    23.01.2013
    Beiträge
    9
    Hallo,

    ich habe es mir fast gedacht, das es so nicht zu realisieren ist .
    Da die Platine schon soweit fertig ist, werde ich erstmal auf ein Zufalls Programm verzichten.
    Ich werde eure Vorschläge bei meinem nächsten Cube mit einbeziehen.
    Habt Vielen Dank für eure mühe

    Gruß
    Lars

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Zitat Zitat von Lars Schütz Beitrag anzeigen
    ich habe es mir fast gedacht, das es so nicht zu realisieren ist .
    Da die Platine schon soweit fertig ist, werde ich erstmal auf ein Zufalls Programm verzichten.
    Ich werde eure Vorschläge bei meinem nächsten Cube mit einbeziehen.
    Habt Vielen Dank für eure mühe
    Wenn du einen offenen AD-Eingang hast, könntest du diesen Einlesen und die daraus resultierenden Werte als Seed benutzen. Alternativ bleibt noch eine Zeit übrig. Also Möglichkeiten gibt es noch.
    Grüße
    Thomas

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    23.01.2013
    Beiträge
    9
    Und wie soll ich das Zufallsprogramm realisieren, ohne Datentabellen?
    Bin noch Anfänger in Basic...

    Gruß Lars

Ähnliche Themen

  1. [ERLEDIGT] Suche Schaltung für Zufalls Ein/Aus Intervalle
    Von MerlinTheWizzard im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 07.04.2011, 15:52
  2. Pseudo-Zufalls-Impulse-Generator
    Von Maurice M. im Forum AVR Hardwarethemen
    Antworten: 8
    Letzter Beitrag: 12.01.2010, 10:58
  3. Problem mit optischer Maus an STK500 mit ATMega32
    Von collatz im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 21.04.2008, 21:17
  4. Timer2 Problem mit ATmega32
    Von Maverick83 im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 05.06.2007, 20:50
  5. STACK Problem mit BasCom ATMega32
    Von Chris266 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 18.04.2005, 12:36

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests