www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Randomzahl via Timer


Autor: Danny R. (skid)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich muss zu Beginn sagen, dass ich nicht wirklich gut vertraut mit 
Assemblerprogrammierung bin, da ich mich mit den Mechanismen im 
allgemeinen noch nicht recht identifizieren kann.

Um auf den Punkt zu kommen:
Ich arbeite mit zwei anderen an einem Projekt, welches ein Reaktionstest 
reagiert, was bedeutet, dass eine Taste erscheint (auf einen LCD 
Display) diese sehr schnell gedrückt werden muss und die Reaktionszeit 
wird im Endeffekt ausgegeben.

Leider ist das Projekt doch recht schwierig zu realisieren, wie sich 
rausgestellt hat und uns fehlen eigentlich nur noch zwei Knackpunkte, um 
unsere Projekt fertigzustellen.

Eigentlich bin ich dagegen in Foren zu fragen, aber wenn man in einem 
Projekt nicht sonderlich weiterkommt und Assembler ja nun nicht mehr so 
präsent ist, wie C++/C# etc. gestaltet es sich auch recht schwierig im 
Internet das zu finden, was man sucht.
Suchmaschinen sind zwar eine gute Allzweckwaffe, aber für manche Dinge 
wissen selbst diese keinen vernümpftigen Rat, wie ich leider die letzten 
Tage vestellen musste.

Die Punkte wo es harpert:
Ich zähle, wärend ich einen Timer in kleinen Zeitabständen hochzähle 
(10-100ms), ein Register hoch, damit ich im Endeffekt die Zahl des 
Registers mit der Anzahl der Millisekunden multiplizieren kann um die 
Reaktionszeit rauszubekommen.

Problem hierbei ist allerdings, dass ich es nicht schaffe den Wert des 
Registers vernümpftig auf dem LCD-Display (vorerst ohne Multiplikation 
-nur zum Test-) ausgeben kann.
Jetzt weiss ich leider nicht, ob das bei jedem Mikrocontroller gleich 
ist, deswegen nenne ich einfach erstmal den Mikrocontroller den wir zur 
Verfügung haben: Dallas DS87C520 (ein 8051er inwieweit das relevant sein 
sollte)

Ich habe die Adresse im DPTR gespeichert (die Adr. des LCD-Diisplays) um 
ggf. darauf zugreifen zu können, Strings kann ich ausgeben, jedoch weiss 
ich nicht weiter bei dem Wert eines Registers.

Der zweite Punkt:
Meiner Meinung nach der schwierigere der es für mich in sich hat, denn 
auch in CPP war dies nicht gerade einfach zu lösen :-)

Ich muss einige Zufallszahlen aus einen LAUFENDEN Timer rauslesen um 
zufällige Zahlen, bzw. zufällige Buttonpositionen zu erstellen.
Ich kann die Werte in 4 Registern speichern, dass ist nicht das Thema, 
mein Problem ist eben das aus einen laufenden Timer rauszulesen.

Mein Timer:
-----------------------------------------
delay:
mov  r0, #100d
mov  tmod, #01h  ; Timer Mode 1 (16bit)

loop:
mov  th0, #0beh  ; Nachladewerte
mov  tl0, #0e5h  ; für 10 ms
setb  tr0        ; Start Timer

wait:
jnb  tf0, wait   ; Warte auf Timer
clr  tr0
clr  tf0         ; Timer rücksetzen
djnz  r0, loop   ; 100 x ausführen
ret
-----------------------------------------

Schön und gut, dass ich den habe, ich bin schon Stolz auf mich, dass der 
seine Arbeit verrichtet, aber im laufenden Timer da irgendwie was 
rauszulesen ist meine derzeitige Grenze :-))

Ich hoffe ihr könnt mir da etwas weiterhelfen, damit ich da wieder etwas 
Land sehe :-)
Würde mich jedenfalls über diese freuen!

Liebe Grüße,
Danny.

Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>, ich bin schon Stolz auf mich

kannst DU auch sein ... (Du  kennst einen der der lesen kann)

http://www.mikrocontroller.net/articles/AVR-Tutorial:_Uhr

Autor: Tim R. (vref)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Zahlen aus einem laufenden Timer werden nicht besonders zufällig 
sein...
Es gibt bessere Mechanismen um Pseudo-Zufallszahlen zu erzeugen:

http://en.wikipedia.org/wiki/Linear_feedback_shift_register

Den Seed kannst du ja aus dem Timer beim ersten Tastendruck beziehen.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tim R. wrote:
> Die Zahlen aus einem laufenden Timer werden nicht besonders zufällig
> sein...
> Es gibt bessere Mechanismen um Pseudo-Zufallszahlen zu erzeugen:
>
> http://en.wikipedia.org/wiki/Linear_feedback_shift_register
>
> Den Seed kannst du ja aus dem Timer beim ersten Tastendruck beziehen.

oder http://en.wikipedia.org/wiki/Linear_congruential_generator

Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schuldigung ich war frech

wenn Du den Timer auf max Freq laufen lässt,
(Startwert = "Kleinste Zahl" ; Endwert = "Größte Zahl")

.. sollte keiner mehr in der Lage sein eine bestimmte
   Zahl (Wert) zutreffen ...

Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
.. auch ein µC nicht ..

bei "bei regelmäßigen Abfragen"!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.