Ich habe einen Tiny26 mit 250kHz PWM. Ich möchte nun ein Sinussignal ausgeben, wie es in der Appnote AVR131: Using the AVRs High-speed PWM beschrieben wird. Ich programmiere allerdings in C, und mir föllt spontan keine Möglichkeit ein, wie ich die 256 Byte Wertetabelle ausgeben soll. Im RAM halten kann ich sie nicht, und ein SWITCH will ich mit so vielen werten auch nicht machen...
Warum nicht einfach eine Look-Up-Table im Flash und dann einfach wie einen Ringpuffer timergesteuert ständig reihum die Werte auslesen und ausgeben?
Weiss aber leider nicht wie man das in C programmiert... :kopfschütteln: [PCODE] DatenTyp bla[10] = {1,2,3,4,5,6,8,9,100; .... out(Port,bla[5]); [/PCODE]
Ein normales ARRAY wird leider im RAM angelegt und mit 255 Werten a 1 Byte ist der RAM eines Tiny26 leider zu 200% voll... @..... Klammer zu am Ende...
..alles eine Frage der gewünschten Auflösung ....Sinus besteht aus einer viertel Welle ..ansteigen ... wieder fallende ..ansteigend*-1 .. wieder fallend *-1 also kann mann selber die Ganeuigkeit festlegen..... ansonsten eine reine Transistorschaltung
Also die GEFORDERTE Aulösung ist 255. Viertelwelle ginge natürlich, aber ich will mir die erweiterung auf beliebige Signale offen halten. Kan mir denn keiner helfen und mir sagen wie man in C eine Tabelle ins Flash bekommt? mit assembler geht es ja recht leicht.
@Lukas ... was soll das mit der 255.... egal noch einmal: ich habe eine zyklischen Kurvenverlauf wie z.B Sinus gegen Stützwerte ° 10 0,1736482 20 0,3420201 30 0,5 40 0,6427876 50 0,7660444 60 0,8660254 70 0,9396926 80 0,9848078 90 1 Preisfrag was ist der Wert bei 130° - staun 130 0,7660444 also meine Werteliste absteiegn... und dann abe 180° negiert ups 4 Mal das Array abarbeiten 1. Umlauf aufsteigen 2. Umlauf absteigend 3. Umlauf Aufsteigend aber negiert 4. Umlauf absteigen negiert und was soll das nun mit der 255 erten im Array
Schau dir mal das an: http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html und das: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial Punkt 17.2 Damit solltest weiterkommen. Gruß Roland p.S. da der Sinus symetrisch ist, reicht es eventuell nur eine viertel Periode abzuspeichern.
Danke Thomas W.! Genau das habe ich gesucht und keine ..... die anscheinend nicht lesen, sondern nur was antworten.
Guten Abend, wenn Du die 256 Sinuswerte nacheinander brauchst, kannst Du die rekursiv berechnen, auch in integer. Da brauchst Du gar keine Tabelle. Das Prinzip dabei ist, nen Vektor cos(w)+i*sin(w) um nen Winkel von 2*pi/256 zu drehen. Das liefert Dir auch den Cosinus. Cheers Detlef
> ..... die anscheinend nicht lesen
Wenn ich jetzt gemein wäre, könnte ich sagen:
Mit dem lesen hast Du's aber auch nicht wirklich.
Der Link geht immerhin ins Tutorial. Das sollte man
eigentlich schon mal studiert haben.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.