Hallo, ich bastel grade an einem Programm zur beleuchtung eines gegenstandes. Dazu hab ich einen ATTiny13, nun soll damit in gewissen Abständen eine LED an und aus gehen (stark vereinfach gesagt), das tut auch alles so wie es soll. Nur bräuchte ich jetzt einen pseudo Zufallsgenerator damit die Sequenz immer etwas unterschiedlich aussieht, ich hab zwar jetzt schon gegoogelt, aber irgendwie erschlägt mich das "Angebot" deutlich. Kennt da vlt jemand was was nicht viel Speicher braucht? Ich brauch einfach eine "Zufallszahl zwischen 0 und 10 oder sowas ähnliches. Denn davon hab ich auf dem Tiny13 wirklich ziemlich wenig. Gruß David
Gast
#3204035
>aber irgendwie erschlägt mich das "Angebot" deutlich Mathematik scheint nicht dein Ding zu sein .. http://www.mathematik.tu-darmstadt.de/fbereiche/stochastik/contents/summerschool/t1.php Einfacher gehts nicht.
Welche Programmiersprache benutzt du denn? In C und Basic gibts es da meistens schon fertige Funktionen. In Assembler habe ich mal ein 19-bit Shifter von Dave VanHorn auf einen Tiny portiert:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
Gast
#3204138
Matthias Sch. schrieb: > In Assembler habe ich mal ein 19-bit > Shifter von Dave VanHorn auf einen Tiny portiert: > [...] OMG. Ein sehr schönes Beispiel dafür, dass die Verwendung von Assembler alleine noch nicht zwangsläufig gute oder effiziente Programme hervorbringt... Das hier macht exakt dasselbe, braucht dafür allerdings nur die Hälfte der Register und weniger als die Hälfte der Taktzyklen und hat als i-Tüpfelchen auch noch eine konstante Laufzeit, was manchmal auch nicht ganz unwichtig ist: .def stateA = r9 .def stateB = r10 .def stateC = r11 .def temp = r16 random: clr tmp sbrc stateA,0 inc tmp sbrc stateA,1 inc tmp sbrc stateA,4 inc tmp sbrc stateC,2 inc tmp lsr tmp rol stateA rol stateB rol stateC mov tmp,stateA ret
Gast
#3204150
c-hater schrieb: > random: > clr tmp Übrigens fällt mir gerade noch auf: Wenn man das clr tmp durch ser tmp ersetzt, macht der Code zwar nicht mehr exakt das, was die Vorlage tut, ist aber dafür stabil, mutiert also nicht zum Konstantengenerator, wenn der Wert im Schieberegister mal zufällig 0 ist... Auch die Wahl der Polynomkoeffizienten sollte man vielleicht nochmal überdenken. Mir scheint, wenn man nur zwei benutzt, nämlich Bit 21 und Bit 19 oder Bit 21 und Bit 17, wird die Zufallsfolge deutlich länger werden. Als abgenehmer Nebeneffekt würde dadurch auch noch der Code um weitere 4 Takte schneller werden.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.