mikrocontroller.net

Forum: Compiler & IDEs Sinus ausgeben


Autor: Luky S. (luky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe einen Tiny26 mit 250kHz PWM.
Ich möchte nun ein Sinussignal ausgeben, wie es in der Appnote AVR131:
Using the AVR’s 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...

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum nicht einfach eine Look-Up-Table im Flash und dann einfach wie
einen Ringpuffer timergesteuert ständig reihum die Werte auslesen und
ausgeben?

Autor: Luky S. (luky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehr gute Idee.
Weiss aber leider nicht wie man das in C programmiert...

Autor: ..... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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]

Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: ..... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
..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

Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: ..... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Roland Praml (pram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir mal das an:
http://www.nongnu.org/avr-libc/user-manual/group__...

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.

Autor: Thomas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: ..... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
/ich will Wegstabenverbusler nachfixen dürfen....

Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Thomas W.!
Genau das habe ich gesucht und keine ..... die anscheinend nicht lesen,
sondern nur was antworten.

Autor: Detlef A (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ..... 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.

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.