- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: Problem mit Zufalls Tabelle (Atmega32)

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Anzeige

    Powerstation Test
    Zitat Zitat von Thomas E. Beitrag anzeigen
    Soweit waren wir oben schon! RND erzeugt keine echten Zufallszahlen, der Threadersteller will aber welche. Mit RND würden nach dem Start immer wieder diesselbe Musterfolge auftreten.
    Das ist schon klar, es ging mir eher um die Frage:
    Und wie soll ich das Zufallsprogramm realisieren, ohne Datentabellen?
    Eine (pseudo)Zufallsfolge liefert typischerweise eine Funktion, ohne Tabelle. Nur den Startwert muß man sich durch einen von extern geholten Wert bestimmen. In C kann man den random seed einstellen, ich weiß nicht ob das in Basic auch so geht. Die wirkliche Frage ist eher, wo bekomme ich bei einer gegebenen Hardware einen Startwert her. Wenn es eine Starttaste gibt, kann man die Zeit vom Einschalten bis zum Drücken der Taste nehmen. Ob ein offener ADC Eingang etwas passendes liefert, muß man ausprobieren. Dann mit diesem Wert den random seed einstellen, oder wenn das nicht geht, sooft wie diese Zahl vorgibt RND aufrufen und das Ergebniss verwerfen. Ab dann ist das Muster sicher nicht mehr zu erkennen. Besser als eine Tabelle mit 16 Einträgen ist das allemal.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  2. #12
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Ich wollte gerade aus Interesse heraus eine Funktion schreiben, die einen Zufallswert liefert und bin dabei auf etwas interessantes in der Bascom-Hilfe gestoßen:

    The RND() function returns an Integer/Word and needs an internal storage of 2 bytes. (___RSEED). Each new call to Rnd() will give a new positive random number.

    Notice that it is a software based generated number. And each time you will restart your program the same sequence will be created.

    You can use a different SEED value by dimensioning and assigning ___RSEED yourself:

    Dim ___rseed as word : ___rseed = 10234

    Dim I as word : I = rnd(10)


    When your application uses a timer you can assign ___RSEED with the timer value. This will give a better random number.



    Also kann man den Seed von der RND-Funktion direkt mit einem Timerwert laden, was für die Anwendung des Threadstarters einen ausreichenden Zufall darstellt.
    Grüße
    Thomas

  3. #13
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Also kann man den Seed von der RND-Funktion direkt mit einem Timerwert laden
    Bei einem Programm ohne Verzweigungen (z.B. direkt nach der Initialisierung) ist der Timerwert immer gleich, weil sich auch der Timer am Kontrollertakt orientiert!
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #14
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Zitat Zitat von radbruch Beitrag anzeigen
    Bei einem Programm ohne Verzweigungen (z.B. direkt nach der Initialisierung) ist der Timerwert immer gleich, weil sich auch der Timer am Kontrollertakt orientiert!
    Man darf eben nicht immer zur gleichen Zeit den Wert aus dem Timmer laden.
    Grüße
    Thomas

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    23.01.2013
    Beiträge
    9
    Nabend,

    ich werde morgen oder übermorgen mal ein wenig mit euren Ideen herum experimentieren.
    Ich könnte den Timer ja evtl. nach dem 50 Bild laden lassen, oder auch noch später (habe 7000 Bilder ), was wäre Sinnvoll?
    Den Timer früher oder später Initialisieren?

    Mit freundlichem Gruß
    Lars

  6. #16
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Ich könnte den Timer ja evtl. nach dem 50 Bild laden lassen,...
    Die Bilder haben eine feste Größe, die Ladezeit ist deshalb immer gleich und der Timerwert, und damit auch der Startwert des Zufallgeneratores, ist dann auch immer gleich. Es muss irgendwas sein das nicht mit dem Takt des Kontrollers läuft, z.B. ein externer Trigger über die Ladekurve eines Kondensators. Gut finde ich den Ansatz mit der Taste-gedrückt-Zeit als Startwert.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    23.01.2013
    Beiträge
    9
    Gut finde ich den Ansatz mit der Taste-gedrückt-Zeit als Startwert.
    Leider habe ich keinen Start Taster...
    Muss ich unbedingt ein positives Signal am ADC Eingang haben oder kann dies auch von der Masse der Schaltung sein?
    Ansonsten kann ich noch multigeplexte Ausgänge vom Atmega 32 anbieten.
    Hier mal die Platine(An X1 wir ein Einschalter angeschlossen), glaube aber das nützt nichts...
    Klicke auf die Grafik für eine größere Ansicht

Name:	Led_Cube_Platine.PNG
Hits:	5
Größe:	71,3 KB
ID:	24428

  8. #18
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Mit einer LED-Matrix kann man auch die Helligkeit der Umgebung messen. Das wäre ein prima Startwert für den Zufallsgenerator:


    (Video aus https://www.roboternetz.de/community...l=1#post495721)

    https://www.roboternetz.de/community...LED-als-Sensor
    https://www.roboternetz.de/community...-Sensor-am-RP6

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    23.01.2013
    Beiträge
    9
    So hier ist mein Code:

    Code:
    $regfile = "m32def.dat"
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    $crystal = 8000000
    '----------------------------------------------------------------------------------
    Config Porta = Output
    Config Portb = Output
    Config Portc = Output
    Config Portd = Output
    '----------------------------------------------------------------------------------
    '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 Dauer2 As Byte
    Dim Dauer3 As Integer
    Dim Dauer4 As Byte
    Dim __rseed As Word
    Dim Rand(64) As Byte
    Dim I As Byte
    Dauer2 = 27
    '---------------------------------------------------------------------------------
    'Hauptschleife
    
    Do
    Maxbild = 199                                               '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 Dauer2                                  'Dauer des Bildes
    
          For Ebene = 0 To 3                                    'Anzahl der Ebenen (bei mir 4)
             '----------------------------------------------------------------------------------
             Datentabelle = Bild * 12                           'Berechnen der Tabelle
             Temp = Ebene * 3
             Datentabelle = Datentabelle + Temp
              '---------------------------------------------------------------------------------
              'Ausgabe des Bildes
          Porta = Lookup(datentabelle , Muster)
          Datentabelle = Datentabelle + 1
          Portb = 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 = 44 Then
       Dauer2 = 4
       Elseif Bild = 109 Then
       Dauer2 = 27
       Elseif Bild = 112 Then
       Dauer2 = 12
       Elseif Bild = 140 Then
       Dauer2 = 27
       End If
       If Bild = Maxbild Then
       Exit For
       End If
    
    Next Bild
    'Ende der vor eingestellten Bilder
    '-------------------------------------------------------
    'Anfang Zufallsschleife
    
    For Dauer3 = 0 To 5000                                      'vorläufiger Wert wie lange die schleife laufen soll
    
    __rseed = Pina.1                                            'dieser Pin soll also den Zufallswert geben, er ist allerdings auch ein Port für eine Led, geht das?
    For I = 1 To 64                                             'Zufallswerte werdem dem Array übergeben
    Rand(i) = Rnd(1)
    
    If I = 64 Then Exit For
    Next I
    
    For Dauer4 = 0 To 27                                        'Dauer eines Bildes
    
    For Ebene = 0 To 3                                          'Multiplex
    
    If Ebene = 0 Then
    Porta.0 = Rand(64)
    Porta.1 = Rand(1)
    Porta.2 = Rand(2)
    Porta.3 = Rand(3)
    Porta.4 = Rand(4)
    Porta.5 = Rand(5)
    Porta.6 = Rand(6)
    Porta.7 = Rand(7)
    Portb.0 = Rand(8)
    Portb.1 = Rand(9)
    Portb.2 = Rand(10)
    Portb.3 = Rand(11)
    Portd.7 = Rand(12)
    Portd.6 = Rand(13)
    Portd.5 = Rand(14)
    Portd.4 = Rand(15)
    Portd.3 = 0
    Portd.2 = 0
    Portd.1 = 0
    Portd.0 = 1
    Elseif Ebene = 1 Then
    Porta.0 = Rand(16)
    Porta.1 = Rand(17)
    Porta.2 = Rand(18)
    Porta.3 = Rand(19)
    Porta.4 = Rand(20)
    Porta.5 = Rand(21)
    Porta.6 = Rand(22)
    Porta.7 = Rand(23)
    Portb.0 = Rand(24)
    Portb.1 = Rand(25)
    Portb.2 = Rand(26)
    Portb.3 = Rand(27)
    Portd.7 = Rand(28)
    Portd.6 = Rand(29)
    Portd.5 = Rand(30)
    Portd.4 = Rand(31)
    Portd.3 = 0
    Portd.2 = 0
    Portd.1 = 1
    Portd.0 = 0
    Elseif Ebene = 2 Then
    Porta.0 = Rand(32)
    Porta.1 = Rand(33)
    Porta.2 = Rand(34)
    Porta.3 = Rand(35)
    Porta.4 = Rand(36)
    Porta.5 = Rand(37)
    Porta.6 = Rand(38)
    Porta.7 = Rand(39)
    Portb.0 = Rand(40)
    Portb.1 = Rand(41)
    Portb.2 = Rand(42)
    Portb.3 = Rand(43)
    Portd.4 = Rand(44)
    Portd.5 = Rand(45)
    Portd.6 = Rand(46)
    Portd.7 = Rand(47)
    Portd.3 = 0
    Portd.2 = 1
    Portd.1 = 0
    Portd.0 = 0
    Elseif Ebene = 3 Then
    Porta.0 = Rand(48)
    Porta.1 = Rand(49)
    Porta.2 = Rand(50)
    Porta.3 = Rand(51)
    Porta.4 = Rand(52)
    Porta.5 = Rand(53)
    Porta.6 = Rand(54)
    Porta.7 = Rand(55)
    Portb.0 = Rand(56)
    Portb.1 = Rand(57)
    Portb.2 = Rand(58)
    Portb.3 = Rand(59)
    Portd.4 = Rand(60)
    Portd.5 = Rand(61)
    Portd.6 = Rand(62)
    Portd.7 = Rand(63)
    Portd.3 = 1
    Portd.2 = 0
    Portd.1 = 0
    Portd.0 = 0
    End If
    
    
    If Ebene = 3 Then Exit For
    Next Ebene
    If Dauer4 = 27 Then Exit For
    Next Dauer4
    If Dauer3 = 5000 Then Exit For
    Next Dauer3
     'Ende Zufall
    Loop
    
    End
    
    
    
    Muster:                                                     'Bilder die Ablaufen sollen
    $include "muster.txt"
    Leider leuchtet in der Zufallsschleife nie eine Led
    Was ist falsch?

    Gruß Lars

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. [ERLEDIGT] Suche Schaltung für Zufalls Ein/Aus Intervalle
    Von MerlinTheWizzard im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 07.04.2011, 14:52
  2. Pseudo-Zufalls-Impulse-Generator
    Von Maurice M. im Forum AVR Hardwarethemen
    Antworten: 8
    Letzter Beitrag: 12.01.2010, 09: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, 20:17
  4. Timer2 Problem mit ATmega32
    Von Maverick83 im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 05.06.2007, 19:50
  5. STACK Problem mit BasCom ATMega32
    Von Chris266 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 18.04.2005, 11:36

Stichworte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad