Hallo, ich möchte: Sinuszahlen aus konstanter Tabelle auslesen & per PWM ausgeben. das dürfte kein Problem sein aber: die Tabelle an sich. Wie kann ich die Sinuswerte generieren (vorher offline in extra program auf pc!)? mit #include <math.h> #define anzahl 100 for(i=0;i<anzahl;i++){ z++; sinustabelle[i]=(sin(anzahl)); } kommen nur 0en raus & mit (hab ich irgendwo aus dem Forum:) #include <math.h> #define anzahl 100 #define pi 3.1415926 for(i=0;i<anzahl;i++){ z++; sinustabelle[i]=((127.5+127.5*sin(2.0*pi*i/anzahl))); } kommt was sinusartiges raus aber es ist nicht rund, also der anfangswert ist nicht der endwert (ich versteh die gleichung auch nicht) ich weiß es gibt viele einträge dazu aber ich versteh die mathematik vom sinus einfach nicht kann mir jemand helfen?
William schrieb: > die Tabelle an sich. Wie kann ich die Sinuswerte generieren (vorher > offline in extra program auf pc!)? Ja. ist die beste Variante
mit
1 | for(i=0;i<anzahl;i++){ |
2 | z++; |
3 | sinustabelle[i]=(sin(anzahl)); |
4 | }
|
wird 100mal der wert sin(100) ins array abgelegt....kein wunder, dass da nur 0en drinnenstehen ;)
William schrieb: > #include <math.h> > #define anzahl 100 > for(i=0;i<anzahl;i++){ > z++; > sinustabelle[i]=(sin(anzahl)); > } > > kommen nur 0en raus Was ist eigentlich so schwer daran, IMMER Datentypen anzugeben. Welchen Typ hat sinustabelle? Dir ist klar, dass der Sinus aller Winkel eine Zahl zwischen 0 und 1 ist? Und ob du den Sinus von Werten zwischen 0 und 100 haben willst, wage ich auch zu bezweifeln. Das Argument an den Sinus wird in Radianten angegeben. Also 0° <==> 0 90° <==> PI / 2 360° <==> 2 * PI > #include <math.h> > #define anzahl 100 > #define pi 3.1415926 > > for(i=0;i<anzahl;i++){ > z++; > sinustabelle[i]=((127.5+127.5*sin(2.0*pi*i/anzahl))); > } > > kommt was sinusartiges raus aber es ist nicht rund, also der anfangswert > ist nicht der endwert (ich versteh die gleichung auch nicht) Solltest du aber. Das ist nix anderes als ein Dreisatz, der den Bereich 0 bis anzahl in den Bereich 0 bis 2*PI abbildet, davon den Sinus rechnet und dann die Werte hochskaliert und verschiebt in den Bereich 0 bis 255. Das der Anfangswert nicht mit dem Endwert übereinstimmt, ist so gewollt. Denn der Sinus von 0° ist gleich dem Sinus von 360°. Den braucht daher kein Mensch, weil er ihn bei 0° sowieso schon hat. > ich weiß es gibt viele einträge dazu aber > ich versteh die mathematik vom sinus einfach nicht Brauchst du auch nicht. Stell dir ein Rad vor. Markier dir einen Punkt am Umfang. Der Punkt liegt rechts genau auf gleicher Höhe wie die Nabe. Jetzt drehst du das Rad. Der Punkt wandert nach oben (und nach links aber das ist beim Sinus uninteressant), kommt nach dem höchsten Punkt wieder runter geht unter die Nabe (wandert wieder nach rechts) und kommt wieder hoch, bis er dann einmal rum ist. Der Abstand des Punktes von der waagrechten Linie auf der Nabe und Anfangspunkt lag, das ist der Sinus des Winkels um den das Rad gedreht ist. Gegeben also der Verdrehwinkel des Rades, sagt dir der Sinus des Winkels wie weit der Punkt hoch bzw. unter die 0-Linie gewandert ist. That's it. Das ist dann auch schon (fast) alles. :-) Näheres in jedem Mathebuch, Stichwort "Trigonometrie". Und der Rest. Das ist in beiden Fällen ein ganz simpler Dreisatz. Ein Apfel kostet 2 Euro. Die Apfelkiste 5 Euro. Wieviel kosten 15 Äpfel, wenn man sie in der Kiste kauft. > kann mir jemand helfen?
William schrieb: > Karl Heinz Buchegger schrieb: >> Ja. ist die beste Variante > > Ja, aber wie? zb mit Excel?
Mr Tannnoy schrieb: > Wenn ich 7 Äpfel und 3 Birnen kaufe: Wie alt ist danach der Bauer???? Ich versuchs mal mit Deinen Angaben...hier die Möglichkeiten: 7 Äpfel - 3 Birnen = 4 Jahre 7 Äpfel + 3 Birnen = 10 Jahre 7 Äpfel * 3 Birnen = 21 Jahre 7 Äpfel / 3 Birnen = (float)2.3333 Jahre od. (int)2 Jahre 7 Äpfel % 3 Birnen = 1 Jahre
> Welchen Typ hat sinustabelle? bisher int > Dir ist klar, dass der Sinus aller Winkel eine Zahl zwischen 0 und 1 > ist? war mir nicht klar. jetzt wo du's sagst ist unsigned int natürlich falsch... float? double? > Also 0° <==> 0 > 90° <==> PI / 2 > 360° <==> 2 * PI das hab ich verstanden ok, dann ist also das richtig?: >> #include <math.h> >> #define anzahl 100 >> #define pi 3.1415926 unsigned int sinustabelle[anzahl]; unsigned int make_sinus_zahlen(void) { unsigned int i; for(i=0;i<anzahl;i++){ >> >> for(i=0;i<anzahl;i++){ >> z++; >> sinustabelle[i]=((127.5+127.5*sin(2.0*pi*i/anzahl))); >> } ??richtig?? > (...)Das ist nix anderes als ein Dreisatz, der den Bereich > 0 bis anzahl in den Bereich 0 bis 2*PI abbildet, davon den Sinus rechnet > und dann die Werte hochskaliert und verschiebt in den Bereich 0 bis 255. das heißt die anzahl 100 ist hier die Auflösung, richtig?? was fürn datentyp nehme ich nun um die auflösung riesig zu machen (mit nachkommastellen)? float? double? mit unsigned davor? > Das der Anfangswert nicht mit dem Endwert übereinstimmt, ist so gewollt. > Denn der Sinus von 0° ist gleich dem Sinus von 360°. Den braucht daher > kein Mensch, weil er ihn bei 0° sowieso schon hat. versteh ich nicht: wiederspricht sich doch von 0 bis 2pi = eine umdrehung vom Rad = anfangswert = endwert dann müsste sich das bei sinustabelle[i]=((127.5+127.5*sin(3*pi*i/anzahl))); ja wiederholen, also die periode nach 2*pi deckungsgleich wiederholen. tuts auch, raus kommt für #define anzahl 64 127, 146, 164, 182, 198, 213, 226, 236, 245, 251, 254, 254, 252, 247, 239, 229, 217, 203, 187, 170, 152, 133, 115, 96, 78, 61, 46, 33, 21, 12, 5, 1, 0, 1, 5, 12, 21, 33, 46, 61, 78, 96, 115, 133, 152, 170, 187, 203, 217, 229, 239, 247, 252, 254, 254, 251, 245, 236, 226, 213, 198, 182, 164, 146, sieht symmetrisch aus! > > Näheres in jedem Mathebuch, Stichwort "Trigonometrie". puuuuh 2*pi danke
hallo nochmal um einige meiner fragen selbst zu beantworten: > das heißt die anzahl 100 ist hier die Auflösung, richtig?? ja ist wohl richtig allerdings kann ich das ganze auf der y achse ja noch höher verschieben um keine doppelten zahlen zu bekommen und die auflösung noch höher zu machen. kommt sich das mit dem PWM in die quere? > was fürn datentyp nehme ich nun um die auflösung riesig zu machen (mit > nachkommastellen)? float? double? mit unsigned davor? nachkommastellen brauch ich ja dann nicht!? danke
Und wie kommst du eigentlich auf die Anzahl von 100 Stützstellen? Aus der Sicht eines µC ist das - nach Floating-Point - eine der krummsten Zahlen, die er sich vorstellen kann.
Hab da was in meinen Snippets gefunden. Man kann übrigens aus einer Viertelperiode eine Ganze errechnen. Dies wird a)durch Achsenspiegelung an der Geraden x = pi/2 b)durch Verschiebung und Achsenspiegelung an der x-Achse erreicht. mfg mf
Mensch sind eure Programme alle kompliziert :P Fuer die meisten Anwendungen braucht man gar keine negativen Sinuswerte. Z.B. fuer einen PWM Sinus rattert man die Tabelle abwechselnd vorwaerts und rueckwaerts ab (0 bis Pi/2 und wieder zurueck).
1 | root@dockstar:~/c# cat sinetable.c |
2 | #include <stdio.h> |
3 | #include <stdlib.h> |
4 | #include <math.h> |
5 | #include <malloc.h> |
6 | |
7 | int main(int argc, char **argv) |
8 | { |
9 | int i; |
10 | int * sinetable; |
11 | int sinetblsiz = atoi(argv[1]); |
12 | |
13 | sinetable = malloc(sinetblsiz*sizeof(int)); |
14 | |
15 | for (i=0; i<sinetblsiz; i++) |
16 | sinetable[i] = 256*sin(M_PI_2*(i/(float)sinetblsiz)); |
17 | |
18 | printf("PROGMEM uint8_t sinetable[] = { "); |
19 | for(i=0; i<sinetblsiz; i++) |
20 | printf("%i, ", sinetable[i]); |
21 | printf("\b\b };\n"); |
22 | } |
23 | root@dockstar:~/c# gcc -lm sinetable.c |
24 | root@dockstar:~/c# ./a.out 16 |
25 | PROGMEM uint8_t sinetable[] = { 0, 25, 49, 74, 97, 120, 142, 162, 181, 197, 212, 225, 236, 244, 251, 254 }; |
>kommt was sinusartiges raus aber es ist nicht rund, also der anfangswert >ist nicht der endwert Der Anfangswert soll auch nicht der Endwert sein. Sonst wird ein Wert 2 mal ausgegeben.
/* Sinus */ prog_uint8_t sinewave[256] = { 64, 66, 67, 69, 70, 72, 73, 75, 76, 78, 79, 81, 82, 84, 85, 87, 88, 90, 91, 92, 94, 95, 96, 98, 99, 100, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116, 116, 117, 118, 119, 120, 120, 121, 122, 122, 123, 123, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 123, 123, 122, 122, 121, 120, 120, 119, 118, 117, 116, 116, 115, 114, 113, 112, 111, 110, 109, 107, 106, 105, 104, 103, 102, 100, 99, 98, 96, 95, 94, 92, 91, 90, 88, 87, 85, 84, 82, 81, 79, 78, 76, 75, 73, 72, 70, 69, 67, 66, 64, 62, 61, 59, 58, 56, 55, 53, 52, 50, 49, 47, 46, 44, 43, 41, 40, 38, 37, 36, 34, 33, 32, 30, 29, 28, 26, 25, 24, 23, 22, 21, 19, 18, 17, 16, 15, 14, 13, 12, 12, 11, 10, 9, 8, 8, 7, 6, 6, 5, 5, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 11, 12, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 28, 29, 30, 32, 33, 34, 36, 37, 38, 40, 41, 43, 44, 46, 47, 49, 50, 52, 53, 55, 56, 58, 59, 61, 62, };
Mach das mit Excel, als Amplitude für den Sinus nimmste den halben PWM-Maximalwert und haust noch einen Offset von PWM-Maximalwert/2 drauf, fertig. Knut
Hallo Mir hat das hier bei einem ähnlichen Problem weitergeholfen. http://www.afug-info.de/Schaltungen-Eigenbau/PIC-Sinus-Tabelle/ Schöner Sinus und übersichtliche Tabelle. Hans
Mit angehängter Exceltabelle wird eine Halbewlle als Integer abgelegt - In Zelle F5 den Zieldateinamen eintragen - in Zelle F11 die Frequenz eintragen - In Zelle F14 die Anzahl der Schritte der Halbwelle eintragen - In Zelle F17 den Max-Wert (bei 90 Grad) der Werte eintragen - Button klicken Es wird eine Include-Datei abgelegt, die mit folgendem C-Code umgeben werden kann:
1 | static const uint16_t sine_tab[SINE_STEPS] PROGMEM = { |
2 | #include "sinus200.cin" |
3 | };
|
Wird aktuell hier verwendet: https://www.mikrocontroller.net/articles/Sinuswechselrichter_600W
:
Bearbeitet durch User
Sinus könnte man auch als Beleidigung auffassen! (Bei dem Zeitgeist heute . . .)
Ich wundere mich eher, was dir eine Sinustabelle bzw eine sinusmodulierte PWM bringt wenn du nichtmal weißt, was die sinusfunktion überhaupt macht. Klar die Kurve sieht hübsch aus aber ich bezweifle dass mit dem Kenntnisstand was nicht explodierendes bei herauskommt.
Das Excel ist aber trotzdem hilfreich, finde ich. Ich habe das hiermit gemacht: Digitale Sinusfunktion
Na und ob das noch jemanden interessiert - mich zum Beispiel :-) Sonst könnte man das Forum doch gleich schließen - ich fasse das Ganze schon irgendwie auch als Quelle zum Nachlesen und Nachschauen auf - es ist ja nicht so, dass technische Probleme zeitlich begrenzt oder auf nur einzelne Fragensteller begrenzt wären. Selbst 2016 gibt´s noch viele, die sich für Commodore interessieren. Also, cool down - immer mit der Ruhe. Ist doch schön, wenn hier was geschrieben wird, was anderen hilft.
Das verstehe ich nicht. Der Sinus-Tabellen-Artikel von Mikrocontroller arbeitet mit negativen Zahlen in der Tabelle - der µC soll aber doch von 0 bis +5 Volt den Sinus ausgeben (keine negativen Werte). Was mache ich dann mit den negativen Zahlen? Die Tabelle im Link von Hans http://www.afug-info.de/Schaltungen-Eigenbau/PIC-Sinus-Tabelle/ verwendet dagegen nur positive Zahlen ohne Fließkomma und der Sinus sieht doch sehr schön aus. Ach ja, ich arbeite hobbymäßig mit PICs. Kann mir aber schlecht vorstellen, dass Atmel negative Zahlen "verstehen" soll.
@ Alfred (Gast) >Der Sinus-Tabellen-Artikel von Mikrocontroller arbeitet mit negativen >Zahlen in der Tabelle Welche denn? > - der µC soll aber doch von 0 bis +5 Volt den >Sinus ausgeben (keine negativen Werte). Kann er im Normalfall auch gar nicht. >Was mache ich dann mit den negativen Zahlen? Die Hälfte des Maximums jeweils dazu addieren. Oder gleich dir richtige Tabelle mit Offset nehmen.
>Kann mir aber schlecht vorstellen, dass Atmel negative Zahlen >"verstehen" soll. Ja, die negativen Zahlen waren 1996 nämlich noch nicht erfunden. Tja was macht man mit den negativen Werten im Sinus wenn die Ausgangsspannung immer positiv ist. Vorschläge: - Ignorieren (ergibt Einwellen-Gleichrichtung) - Nach oben umklappen (ergibt Vollbrückengleichrichtung) - Nach oben verschieben (ergibt Sinus mit Gleichanteil) Kommt jetzt drauf an was du mit dem Sinus vorhast. Wenn der nur aufm Oszi schön aussehen soll, kannst du den noch mit einem RC-Glied glätten und bist fertig.
Danke für die Antworten. Ich meinte diese Tabelle hier mit den negativen Fließkomma-Zahlen http://www.mikrocontroller.net/articles/Sinus_Tabelle Auch ansonsten findet man häufig Excel-Tabellen, die negative Zahlen ausgeben. Wenn ich diese Tabellen in dieser Form gar nicht verwenden kann, habe ich mich aus reinem Interesse gefragt, warum man so viel nicht brauchbares Zeugs als Sinus-Tabelle findet. Es ist zwar richtig, dass ein PIN nur Hi oder Lo sein kann (mit dem Referenzspannungsausgang geht´s zwar auch anders), aber wenn ich mehrere PINs zusammenschalte (Spannungsteiler), dann brauche ich eine Tabelle, bei der auch ein Sinus rauskommt, und nicht irgendwelche Zahlen, die ich mir dann noch selbst zurechtbiegen muss. Das ist keine Faulheit, aber als Anfänger ist das ziemlich verwirrend. Da braucht man halt ab und zu mal ein funktionierendes Beispiel, um auf den Zug aufspringen zu können. Wenn´s dann einmal läuft, kann man mit dem "biegen" anfangen und selbst experimentieren.
Alfred schrieb: > Was mache ich dann mit den negativen Zahlen? Kommt drauf an, was du mit dem Sinus vor hast. > Die Tabelle im Link von Hans > http://www.afug-info.de/Schaltungen-Eigenbau/PIC-Sinus-Tabelle/ > verwendet dagegen nur positive Zahlen ohne Fließkomma und der Sinus > sieht doch sehr schön aus. Das ist dann aber kein reiner Sinus, sondern einer, wo noch ein Offset draufgerechnet wurde. > Ach ja, ich arbeite hobbymäßig mit PICs. > Kann mir aber schlecht vorstellen, dass Atmel negative Zahlen > "verstehen" soll. Natürlich versteht Atmel negative Zahlen. Alfred schrieb: > Danke für die Antworten. > > Ich meinte diese Tabelle hier mit den negativen Fließkomma-Zahlen > http://www.mikrocontroller.net/articles/Sinus_Tabelle > > Auch ansonsten findet man häufig Excel-Tabellen, die negative Zahlen > ausgeben. Wenn ich diese Tabellen in dieser Form gar nicht verwenden > kann, habe ich mich aus reinem Interesse gefragt, warum man so viel > nicht brauchbares Zeugs als Sinus-Tabelle findet. Wenn du bei deinem speziellen Problem nichts mit negativen Zahlen anfangen kannst, aber trotzdem einen Sinus brauchst, musst du dir eben überlegen, was du dann in diesem Fall stattdessen machst. > Es ist zwar richtig, dass ein PIN nur Hi oder Lo sein kann (mit dem > Referenzspannungsausgang geht´s zwar auch anders), aber wenn ich mehrere > PINs zusammenschalte (Spannungsteiler), dann brauche ich eine Tabelle, > bei der auch ein Sinus rauskommt, und nicht irgendwelche Zahlen, die ich > mir dann noch selbst zurechtbiegen muss. Das verstehe ich jetzt nicht. Ein Sinus hat nun mal negative Zahlen. "Irgenwelche Zahlen" musst du dir nur dann "zurechtbiegen, wenn du was sinusförmiges ohne negative Zahlen brauchst.
@Alfred (Gast) >Ich meinte diese Tabelle hier mit den negativen Fließkomma-Zahlen >http://www.mikrocontroller.net/articles/Sinus_Tabelle Liegt das nicht auf der Hand? Fließkommazahlen kann man so oder so nicht direkt in Hardwareregister schreiben. Die nutzt man nur für Berechnungen, an deren Ende eine Integerzahl steht. >Es ist zwar richtig, dass ein PIN nur Hi oder Lo sein kann (mit dem >Referenzspannungsausgang geht´s zwar auch anders), aber wenn ich mehrere >PINs zusammenschalte (Spannungsteiler), Das ist ein einfacher DA-Wandler. >Das ist keine Faulheit, aber als Anfänger ist das ziemlich verwirrend. Der Artikel ist auch nicht sonderlich anfängertauglich. Er ist auch nicht mal sonderlich gut, eher das Gegenteil.
:
Bearbeitet durch User
In einem Projekt musste ich eine Drehung realisieren. Dachte dann, man könnte das schön mit einer 256 Werte grossen Tabelle sowie Überlauf & MASK realisieren, um sin und cos zu berechnen. Dummerweise waren die Abweichungen zu ungenau, so dass das Muster an einigen Winkeln in sich zusammenfiel, die Drehung von einer Pumpbewegung überlagert wurde. Lösung: 360 + 90 Werte:
1 | const signed short sineTable[360+90] = { |
2 | 0, 17, 34, 52, 69, 87, 104, 121, 139, 156, 173, 190, 207, 224, 241, 258, |
3 | 275, 292, 309, 325, 342, 358, 374, 390, 406, 422, 438, 453, 469, 484, 500, 515, |
4 | 529, 544, 559, 573, 587, 601, 615, 629, 642, 656, 669, 682, 694, 707, 719, 731, |
5 | 743, 754, 766, 777, 788, 798, 809, 819, 829, 838, 848, 857, 866, 874, 882, 891, |
6 | 898, 906, 913, 920, 927, 933, 939, 945, 951, 956, 961, 965, 970, 974, 978, 981, |
7 | 984, 987, 990, 992, 994, 996, 997, 998, 999, 999, 1000, 999, 999, 998, 997, 996, |
8 | 994, 992, 990, 987, 984, 981, 978, 974, 970, 965, 961, 956, 951, 945, 939, 933, |
9 | 927, 920, 913, 906, 898, 891, 882, 874, 866, 857, 848, 838, 829, 819, 809, 798, |
10 | 788, 777, 766, 754, 743, 731, 719, 707, 694, 682, 669, 656, 642, 629, 615, 601, |
11 | 587, 573, 559, 544, 529, 515, 500, 484, 469, 453, 438, 422, 406, 390, 374, 358, |
12 | 342, 325, 309, 292, 275, 258, 241, 224, 207, 190, 173, 156, 139, 121, 104, 87, |
13 | 69, 52, 34, 17, 0, - 17, - 34, - 52, - 69, - 87, -104, -121, -139, -156, -173, -190, |
14 | -207, -224, -241, -258, -275, -292, -309, -325, -342, -358, -374, -390, -406, -422, -438, -453, |
15 | -469, -484, -500, -515, -529, -544, -559, -573, -587, -601, -615, -629, -642, -656, -669, -682, |
16 | -694, -707, -719, -731, -743, -754, -766, -777, -788, -798, -809, -819, -829, -838, -848, -857, |
17 | -866, -874, -882, -891, -898, -906, -913, -920, -927, -933, -939, -945, -951, -956, -961, -965, |
18 | -970, -974, -978, -981, -984, -987, -990, -992, -994, -996, -997, -998, -999, -999,-1000, -999, |
19 | -999, -998, -997, -996, -994, -992, -990, -987, -984, -981, -978, -974, -970, -965, -961, -956, |
20 | -951, -945, -939, -933, -927, -920, -913, -906, -898, -891, -882, -874, -866, -857, -848, -838, |
21 | -829, -819, -809, -798, -788, -777, -766, -754, -743, -731, -719, -707, -694, -682, -669, -656, |
22 | -642, -629, -615, -601, -587, -573, -559, -544, -529, -515, -500, -484, -469, -453, -438, -422, |
23 | -406, -390, -374, -358, -342, -325, -309, -292, -275, -258, -241, -224, -207, -190, -173, -156, |
24 | -139, -121, -104, - 87, - 69, - 52, - 34, - 17, 0, 17, 34, 52, 69, 87, 104, 121, |
25 | 139, 156, 173, 190, 207, 224, 241, 258, 275, 292, 309, 325, 342, 358, 374, 390, |
26 | 406, 422, 438, 453, 469, 484, 500, 515, 529, 544, 559, 573, 587, 601, 615, 629, |
27 | 642, 656, 669, 682, 694, 707, 719, 731, 743, 754, 766, 777, 788, 798, 809, 819, |
28 | 829, 838, 848, 857, 866, 874, 882, 891, 898, 906, 913, 920, 927, 933, 939, 945, |
29 | 951, 956, 961, 965, 970, 974, 978, 981, 984, 987, 990, 992, 994, 996, 997, 998, |
30 | 999, 999, |
31 | };
|
32 | |
33 | #define SINETAB_MAXVAL 1000
|
34 | |
35 | // calculate rotation
|
36 | x1 = point.x; // preserve x, y |
37 | y1 = point.y; |
38 | point.x = (x1 * sineTable[rotate + 90]) - (y1 * sineTable[rotate ]); |
39 | point.y = (x1 * sineTable[rotate ]) + (y1 * sineTable[rotate + 90]); |
40 | point.x /= SINETAB_MAXVAL; |
41 | point.y /= SINETAB_MAXVAL; |
:
Bearbeitet durch User
Alfred schrieb: > Auch ansonsten findet man häufig Excel-Tabellen, die negative Zahlen > ausgeben. Wenn ich diese Tabellen in dieser Form gar nicht verwenden > kann, habe ich mich aus reinem Interesse gefragt, warum man so viel > nicht brauchbares Zeugs als Sinus-Tabelle findet. Erstmal hat eine Excel-Tabelle nichts mit einem Microcontroller zu tun. Ein Sinus ist immer positiv oder negativ, je nach Quadrant, deshalb ist eine Exceltabelle mit negativen Zahlen immer richtig. Wenn Du Sinuswerte mit einem Mikrocontroller ausgeben willst, mußt Du die Werte immer irgendwie skalieren, damit Du auf sinnvolle Integerwerte kommst. Oder wie willst Du einen reinen Sinuswert von z.B. 0,0538729 auf einem Mikrocontroller ausgeben? Es gibt auch externe DA-Wandler, die Werte von z.B. -128 bis +127 (8 Bit) verarbeiten und ausgeben können, da kannst Du dann auch negative (Integer-)Werte verwenden.
Falk B. schrieb: > Der Artikel ist auch nicht sonderlich anfängertauglich. Er ist auch > nicht mal sonderlich gut, eher das Gegenteil. zeige einen besseren! am besten deinen. aber egal das Thema ist so trivial, das kann jeder der in Mathe nicht gepennt hat, einen Offset für nur positive Ausgaben raufrechnen auch und den Gleichanteil später per Ko abtrennen auch. Man sollte aber den Unterschied von DEG und RAD kennen
:
Bearbeitet durch User
@ Joachim B. (jar) >> Der Artikel ist auch nicht sonderlich anfängertauglich. Er ist auch >> nicht mal sonderlich gut, eher das Gegenteil. >zeige einen besseren! am besten deinen. Da weiß ich ja gar nicht wo ich anfangen soll ;-) LED-Matrix LED-Fading Royer Converter Liste unvollständig. >aber egal das Thema ist so trivial, das kann jeder der in Mathe nicht >gepennt hat, einen Offset für nur positive Ausgaben raufrechnen auch und >den Gleichanteil später per Ko abtrennen auch. Wenn es denn so "!trivial" ist, warum ist dann der Artikel so schlecht? >Man sollte aber den Unterschied von DEG und RAD kennen Da gehen die Problemchen schon los ;-)
William schrieb: > Ja, aber wie? Excel, Matlab, Python, C, ... Ich nutze für soetwas Matlab, aber da bin ich in diesem Forum vermutlich in der Minderzahl.
Danke für die vielen Antworten. Ich hab mich wohl ein wenig missverständlich ausgedrückt, sorry dafür. Es geht nicht um Sinus-Berechnungen im Allgemeinen (die haben selbstverständlich immer negative Zahlen), sondern um eine Sinus-Tabelle gebrauchsfertig für Mikrocontroller. Und da musste ich einfach feststellen, dass es µC-taugliche Sinus-Tabellen, bei denen dann auch wirklich ein Sinus rauskommt, seltene Mangelware sind. Zwischenzeitlich habe ich die sinus-Tabellen von www.afug-info.de ausprobiert, die funktionieren einwandfrei. Damit bin ich jetzt einen großen Schritt weitergekommen. Jetzt wäre es noch schön, wenn es eine Excel-Tabelle gäbe, die einem solche schönen, zuverlässigen Werte ausspuckt und man die Parameter (wie Anzahl der Stützpunkte etc.) selbst eingeben kann. träum
Hier mal eine verbesserte Version des Generatorprogramms. https://www.mikrocontroller.net/articles/Sinus_Tabelle https://www.mikrocontroller.net/wikifiles/1/1b/Sinus_gen.zip Bedienung über Commandozeile (CMD).
Alfred schrieb: > Ich hab mich wohl ein wenig missverständlich ausgedrückt, sorry dafür. > Es geht nicht um Sinus-Berechnungen im Allgemeinen (die haben > selbstverständlich immer negative Zahlen), sondern um eine Sinus-Tabelle > gebrauchsfertig für Mikrocontroller. bitte das proggt man doch mal nach Belieben in einer ruhigen Minute. > Jetzt wäre es noch schön, wenn es eine Excel-Tabelle gäbe, die einem > solche schönen, zuverlässigen Werte ausspuckt und man die Parameter (wie > Anzahl der Stützpunkte etc.) selbst eingeben kann. träum auch das kann man mal machen, ich sammele ja auch viel im Netz, aber trival Zeugs, da dauert ja die Suche länger bis es gefällt als selber proggen. Von 0 - 180° oder pi in beliebig kleinen Schritten normiert auf 0-255 oder 0-(2^16-1). Wer mag macht noch eine Tabelle und nimmt bei kleinsten Änderungen größere Schrittweiten und gibt das als Text in einer Sinus.h aus.
Na ein bißchen lesen musst Du schon... Auf der von Dir zitierten Seite mit der Beispielschaltung gibt´s doch eine Libre Office Tabelle, die Dir die Sinus-Werte berechnet, und auch noch nach Deinen Wünschen. Noch bequemer geht´s jetzt aber wirklich nicht mehr... http://www.afug-info.de/Download/
Alex, Danke für den Link. Die Tabelle entspricht genau meinen Vorstellungen.
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.