Sinustabelle

Gast #1090188
Lesenswert?

Der Aufwand bei der Tabelle ist nicht das Berechnen der werte, sondern 
deren formatierung. die Einen wollen
.DB 00 01 .... mit 16 Werten pro Zeile, die Anderen wollen das Null bei 
128, usw.

Ohne PC Programmiersprache sollte der Poster mal ueber denn Sinn des 
ganzen nachdenken... Meines Erachtens laeuft ohne PC Programmiersprache 
gar nichts.
#1090196
Lesenswert?

Ingo Laabs wrote:
> uii ist ja nett von dir. Wie machst du das in EXCEL ?
> Ist jetzt so das Ding mit dem Fisch und der Angel

Ha, ganz normale Sin-Berechnungen, also

f(x) = â * sin (2*Pi*x - b) + c

â ist die Amplitude
b ist die Phasenverschiebung
c ist der "Offset"-Wert

In EXCEL dann halt die Formel dafür; ggf. noch mit GANZZAHL(x) auf eine 
ganze Zahl bringen.

Für x setzt du halt n/d ein. (n € N; d ist die Schrittanzahl pro 
Periode)

Gruß
Christian

EDIT:

ZU deinem vorherigen Post:
Wenn du mir jetzt noch sagt, wie viele Schritte du brauchst, dann mach 
ich dir das auch.
Gast #1090198
Lesenswert?

Das ist doch ne Scherzfrage. Oder willst du allen ernstens Behaupten, 
eine Programm schreiben zu wollen, was Sinuswerte über einen DA-Wandler 
ausgibt, aber paar popelige Sinuswerte (z.Not mitn TR) kannst du nicht 
errechnen???
Gast #1090579
Lesenswert?

> Qsinusgeek

Aha, Kuh-Sinus... Oder Kuh-sine? Wir sind doch nicht etwa verwandt? ;-)

> danke, das ist genau was ich brauche.

Nix zu danken, hättest Du aber mit ein paar Zeilen QBASIC (lag jedem 
MS-DOOF und fast jedem WINDOOF bei) auch selbst machen können. Oder mit 
fast jeder anderen Programmiersprache für PC, je nachdem, womit Du 
aufgewachsen bist. Alternativ hättest Du mal in die Codesammlung schaun 
können, da ist dieses Include auch zu finden.

> Kann sich blödkommetarlippy

Der Ausdruck gefällt mir nicht, das hat er nicht verdient. Matthias 
Lipinsky gehört zu Denen, die oft und gern helfen und über ein 
fundiertes Grundwissen verfügen.

> mal ein Beispiel dran nehmen

Beweise uns, dass er unrecht hat, zeige uns (hier in diesem Thread) 
Deinen (hoffentlich selbstgeschriebenen) Quelltext. Anderenfalls könnte 
man vermuten, dass er mit seiner Aussage richtig lag.

~
Gast #1090629
Lesenswert?

Ums schmerzlos zu machen, hiermit kannst du dir selber deine Tabelle 
basteln oder eine diskrete Wertetabelle Anlegen.

1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <math.h>
4

5
#define ANZAHL 100
6
#define AMPLITUDE 128
7
#define OFFSET 1
8

9
float sinustabelle[ANZAHL];
10

11
int main(void){
12
 int i;
13
 for (i=0; i<ANZAHL; i++) sinustabelle[i]=AMPLITUDE*(sin(i*2*M_PI/ANZAHL)+OFFSET);
14
 for (i=0; i<ANZAHL; i++) printf("%f\n", sinustabelle[i]);
15
 return 0;
16
}

Steckt natürlich eine kleine Gemeinheit drin wenn der Winkel 90° beträgt 
ist der Wert 256 und läuft in einer 8 Bit Variablen über, darum hier als 
Float...
#1090887
Lesenswert?

@sinusgeek
werde ich machen sofern er dann fertig ist.
Ich meinte damit nur, dass einige Leute hier nicht so überheblich sein 
sollen, und andere die noch nicht soweit sind schlichtweg als doof 
hinstellen. Jeder hier hat wohl mal klein angefangen.Mit Sicherheit auch 
lippy. Und wenn er das notwendige Gedankengut besitzt, könnte er es ja 
zur Verfügung stellen auch wenn es aus seiner sicht banale Probleme 
sind. Er wird mit Sicherheit auch einen Schwachpunkt haben...vielleicht 
kann er ja keinen Weihnachtsbraten machen...gell
Gast #1090897
Lesenswert?

Hauptsache der Fragesteller erklärt NICHT genau was er haben möchte und 
ist grob genug. Alles Obama oder was? Die für Dein Problem notwendige 
Bildung sollte Dir in der Schule beigebracht worden sein, die 
Programmiersprache C
ist auch völlig ausreichend um Dein Problem zu klären.
Dein eigentliches Problem ist das Du zwar die große Klappe, aber nichts 
dahinter hast.

Gruß,

Holm
Gast #1090909
Lesenswert?

Frank Schlaefendorf wrote:
> es ist auch nicht notwendig eine ganze sinusperiode als tabelle
> abzuspeichern, die werte von 0..90°, also eine viertel periode reichen
> vollkommen aus, der rest wird durch spiegelung erzeugt.

Natürlich nicht, nur hab ich den Verdacht das sich der Threadersteller 
damit nur schwerer tun würde.
Abgesehen davon funktioniert das nicht vernünftig wenn, aus welchen 
Gründen auch immer, die Anzahl der Abtastwerte kein Vielfaches von 4 
sein sollen. Aber prinzipiell hast du Recht.
(Firma: Nisch-Aufzüge) Persönliche Seite #1090961
Lesenswert?

holm wrote:
> Hauptsache der Fragesteller erklärt NICHT genau was er haben möchte und
> ist grob genug. Alles Obama oder was? Die für Dein Problem notwendige
> Bildung sollte Dir in der Schule beigebracht worden sein, die
> Programmiersprache C
> ist auch völlig ausreichend um Dein Problem zu klären.
> Dein eigentliches Problem ist das Du zwar die große Klappe, aber nichts
> dahinter hast.
>
> Gruß,
>
> Holm

Beitrag "Re: Fototransistor aus BC547"  und folgender
(Firma: Nisch-Aufzüge) Persönliche Seite #1090964
Lesenswert?

Ingo Laabs wrote:
> und genau das dahinter möchte ich mir hier erarbeiten..auch wenn es
> einfache Fragen sind..und wenn sich einer hier auf den Schlips getreten
> fühlte, so möchte ich mich dafür entschuldigen. Werde aber nicht darum
> kommen weiterhin einfache Fragen zu stellen.


Nein, nicht du mußt dich hier entschuldigen, sondern derjenige, der noch 
nicht einmal die Grundregeln zivilisierten miteinanders einzuhalten 
bereit ist und gar nicht zu ahnen scheint was er alles nicht weiß. Und 
zwar er bei dir und nicht umgekehrt.
#1090977
Lesenswert?

So, mein Programm sieht nun so aus und es funktioniert(auch wenn es für 
den ein oder anderen Profi hier ein wenig wackelig aussieht)
Die Beschaltung möchte ich hier euch ersparen (R2R mit nem OP hinter)
Kann mich halt über Kleinigkeiten freuen :-)
Für Verbesserungen und Anregungen bin ich immer dankbar

.include"tn26def.inc"

.def zaehler = r17
.def temp = r16

main:
ldi temp,(RAMEND)
out SP,temp

ldi temp,0xff
out DDRA,temp

anfang:

ldi ZL,LOW (sinustabelle*2)
ldi ZH,HIGH (sinustabelle*2)

holen:
lpm
mov temp,r0

sbci zaehler,255
brcc anfang

out PORTA,temp
adiw ZL,1
rjmp holen

sinustabelle:
.db $80,$83,$86,$89,$8C,$8F,$92,$95; 0-7
.db $98,$9B,$9E,$A1,$A4,$A7,$AA,$AD; 8-15
.db $B0,$B3,$B6,$B9,$BB,$BE,$C1,$C3; 16-23
.db $C6,$C9,$CB,$CE,$D0,$D3,$D5,$D7; 24-31
.db $D9,$DC,$DE,$E0,$E2,$E4,$E6,$E7; 32-39
.db $E9,$EB,$ED,$EE,$F0,$F1,$F2,$F4; 40-47
.db $F5,$F6,$F7,$F8,$F9,$FA,$FB,$FC; 48-55
.db $FC,$FD,$FD,$FE,$FE,$FE,$FE,$FF; 56-63
.db $FF,$FF,$FE,$FE,$FE,$FE,$FD,$FD; 64-71
.db $FC,$FC,$FB,$FA,$F9,$F8,$F7,$F6; 72-79
.db $F5,$F4,$F2,$F1,$F0,$EE,$ED,$EB; 80-87
.db $E9,$E7,$E6,$E4,$E2,$E0,$DE,$DC; 88-95
.db $D9,$D7,$D5,$D3,$D0,$CE,$CB,$C9; 96-103
.db $C6,$C3,$C1,$BE,$BB,$B9,$B6,$B3; 104-111
.db $B0,$AD,$AA,$A7,$A4,$A1,$9E,$9B; 112-119
.db $98,$95,$92,$8F,$8C,$89,$86,$83; 120-127
.db $80,$7C,$79,$76,$73,$70,$6D,$6A; 128-135
.db $67,$64,$61,$5E,$5B,$58,$55,$52; 136-143
.db $4F,$4C,$49,$46,$44,$41,$3E,$3C; 144-151
.db $39,$36,$34,$31,$2F,$2C,$2A,$28; 152-159
.db $26,$23,$21,$1F,$1D,$1B,$19,$18; 160-167
.db $16,$14,$12,$11,$0F,$0E,$0D,$0B; 168-175
.db $0A,$09,$08,$07,$06,$05,$04,$03; 176-183
.db $03,$02,$02,$01,$01,$01,$01,$00; 184-191
.db $00,$00,$01,$01,$01,$01,$02,$02; 192-199
.db $03,$03,$04,$05,$06,$07,$08,$09; 200-207
.db $0A,$0B,$0D,$0E,$0F,$11,$12,$14; 208-215
.db $16,$18,$19,$1B,$1D,$1F,$21,$23; 216-223
.db $26,$28,$2A,$2C,$2F,$31,$34,$36; 224-231
.db $39,$3C,$3E,$41,$44,$46,$49,$4C; 232-239
.db $4F,$52,$55,$58,$5B,$5E,$61,$64; 240-247
.db $67,$6A,$6D,$70,$73,$76,$79,$7C; 248-255
Gast #1090983
Lesenswert?

> Jeder hier hat wohl mal klein angefangen.Mit Sicherheit auch lippy.

Das ist wohl wahr. Die meisten davon, mit Sicherheit auch Lippy, haben 
sich ihr Wissen aber durch intensives Selbststudium und eigene 
Experimente, also durch eigene Arbeit angeeignet und nicht unüberlegt in 
Foren zusammengefragt. Nein, ich mache Dir keinen Vorwurf, dass Du 
gefragt hast. Ich finde Deine abwertenden Sprüche aber unangemessen.

> Und wenn er das notwendige Gedankengut besitzt, könnte er es ja
> zur Verfügung stellen auch wenn es aus seiner sicht banale Probleme
> sind.

Das macht er ja auch. Allerdings erwartet er dabei, dass der 
Hilfesuchende auch selbst etwas dafür tut. Der Umgang mit 
Winkelfunktionen (bzw. das Erstellen einer Sinustabelle) sollte 
eigentlich als Schulwissen bekannt sein, das relativiert die 
Notwendigkeit Deiner Frage.

~
(Firma: HSCS) #1090994
Lesenswert?

wie ich schon sagte, eine viertel periode abzuspeichern reichts auch 
aus. wenn du dir mal eine volle sinusschwingung aufzeichnest und die 
zeitachse in 4 gleiche teile einteilst (den sogenannten quadranten), 
dann stellst du fest, dass im ersten und zweiten quadranten die selben 
sinuswerte angenommen werden, nur in umgekehrter reihenfolge. in deiner 
tabelle ist das zu sehen, der startwert ist 0x80 und er steigt bis 0xFF 
an, ab dem 64sten byte wiederholen sich alle werte wieder, bis zum 
128sten byte, da bist du wieder bei 0x80H angekommen. ab da geht die 
sinusfunktion in den negativen bereich und wenn du dir deine zeichnung 
anschaust, dann siehst du, das die sinuswelle dort genauso aussieht wie 
im positiven bereich, man nimmt die selben werte und muss nur das 
vorzeichen ändern.
in deinem fall geht es in der tabelle einfach mit den invertierten 
werten weiter (also ein xor mit 0xff). deine ganze tabelle muss also nur 
bis zum 64sten bit reichen, alle anderen werte ergeben sich automatisch. 
du kannst natürlich die größe der tabelle so belassen, dann kannst du 
die sinusfunktion 4mal feiner abstufen, dann ist die qualität des 
ausgangssignals besser.
Gast #1090998
Lesenswert?

Hi

>Für Verbesserungen und Anregungen bin ich immer dankbar

1.  lpm
    mov temp,r0
    lässt sich durch 'lpm temp' ersetzen.

2. Dein Register 'zaehler' wird nie auf Null gesetzt und auch nirgens 
incrementiert.

3.  sbci zaehler,255
    brcc anfang

    kannst du ersetzen:

    inc zaehler
    brcs anfang

    Das Carry-Flag wird bei Überlauf gesetzt un 'zaehler' wird Null.

MfG Spess
(Firma: Nisch-Aufzüge) Persönliche Seite #1091015
Lesenswert?

o.t.

holm wrote:
> @Winfried: ich werde Dich als Sozial kompetente Person irgendwie
> bookmarken,
> kann ja sein, das man so Jemanden mal braucht, wenn auch gerade jetzt
> nicht...
>
> Gruß,
>
> Holm

ja tu das ;-)

darfst jederzeit posten, wennn ich es rechtzeitig bemerke, so helfe ich 
auch dir gern und unabhängig davon, ob ich deine Frage oder dein 
Benehmen als angemessen erachte, nach bestem Gewissen.

MfG Winne
Gast #1091023
Lesenswert?

Hi

>erhöht sbic nicht zaehler und zieht die 255 dann ab
>so dass ich mit brcc einen vergleich machen kann?

SBCI - Subtract Immediate with Carry
Operation:
(i)Rd ← Rd - K - C

Dein Konstrukt erhöht zwar den Zähler, ist aber durch das undefinierte 
C-Flag fehlerträchtig. In deinem Programm mag das funktionieren. Ist 
aber irgendwie 'Von hinten durch die Brust ins Auge'.

MfG Spess
#1100381
Lesenswert?

@spess53
>  sbci zaehler,255
>  brcc anfang

> kannst du ersetzen:

> inc zaehler
> brcs anfang

> Das Carry-Flag wird bei Überlauf gesetzt un 'zaehler' wird Null.

> lpm
> mov temp,r0
> lässt sich durch 'lpm temp' ersetzen.



Carry wird bei mir nicht gesetzt
und bei lpm temp
meckert das AVR Studio
warum ??

habe es durch

inc zaehler
breq anfang

ersetzt
Persönliche Seite #1100393
Lesenswert?

Ingo Laabs schrob:
> Carry wird bei mir nicht gesetzt
> und bei lpm temp
> meckert das AVR Studio
> warum ??

Weil a) Carry durch INC nicht gesetzt wird. und b) nicht jeder AVR ein 
LPM Rn kennt. Kleine AVR kennen nur LPM mit implitizem R0, das von 
manchen Assemblern erlaubt wird hinzutexten, obwohl es dann redundant 
ist.

> habe es durch
>
> inc zaehler
> breq anfang
>
> ersetzt

Das geht, Z-Flag wird durch INC gesetzt

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren