sinus mit atmega8 erzeugen

Gast #2340991
Lesenswert?

tach,

ich muss für meine dipl-arbeit nen sinus mit nem atmega erzeugen.

umsetzen tu ich das dann mit nem da-wandler aber den programm-code für 
den atmega brauche ich ja.

ich will diesen standart sinus erzeugt mit dds, wie man es hier ständig 
liest.


also, wär nett, wenn jemand hier den programm code reinstellt, 
anschließen zwischen atmega8 und da-wandler mach ich selber.

daher soll das hier jemand reinstellen!


gruß, hannes
Gast #2341007
Lesenswert?

Ich Schwanke noch zwischen Troll und "ich lass mich studieren"

Auch das Auftreten lässt nur trollhafte Rückschlüsse zu.

Die Arbeit finde ich für einen Diplomanden recht ... na ja lahm eben.
Hier im Forum gibt es bestimmt 1000 Leute die nicht auf der UNI waren 
und so etwas in der Kaffeepause zwischendurch machen.

Ich mein Sinus berechnen im RAM ablegen und dann nur noch in der 
richtigen Frequenz ausgeben. Fällt so ziemlich unter die ersten Test 
Progrämmchen für anfänger, so Richtung 20 Zeilen in C.

Trotz allem bin ich neugierig geworden und würde gern noch mehr darüber 
hören.

Gruß Sven
Gast #2341055
Lesenswert?

haltet mal den ball flach :)

ich werds schon schaffen, die grundfunktionen laufen jedenfalls schonmal 
:)

muss dass jetzt noch in der lookuptable speichern und dann abrufen, aber 
das wird auch noch.

meine diplomarbeit besteht natürlich nicht nur aus dem erzeugen von 
sinüssen, das ist vllt. 5%

der standart an deutschen fachhochschulen ist immernoch hoch...


fachhochschulen sind sowieso viel cooler als unis ;)
Persönliche Seite #2341093
Lesenswert?

hannes schrieb:
> also, wär nett, wenn jemand hier den programm code reinstellt,
> anschließen zwischen atmega8 und da-wandler mach ich selber.

Ich hätte da einen sehr einfachen Vorschlag. Du schließt einen 8-Bit 
DA-Wandler an einem Port an und gibst die Buchstaben S I N U S als ASCII 
Zeichen parallel als 8 Bit, nacheinander aus. Eine kleine Schleife drum 
rum und schon hat der Atmega "Sinus" erzeugt. Das geht übrigens auch 
prima mit Cosinus, Tangens oder sogar mit FFT oder 
Kreuzleistungsdichtespektrum!
#2341187
Lesenswert?

Ist das so ein Bachelor-Diplom? So ein Ding für 9 Wochen Abschreiben von 
ein paar Binsenweisheiten?

Wir haben in der Firma jetzt so einen Schwung von diesen Typen bekommen. 
Man, kann man die verarschen, wie früher die Stifte, die man die 
Optische Achse durch die Werkstatt tragen lies. Das die Morgens alleine 
den Reißverschluss ihrer Hose ohne die Mami zubekommen ist ein Wunder.
#2341230
Lesenswert?

>ich will diesen standart sinus erzeugt mit dds, wie man
>es hier ständigliest.
>daher soll das hier jemand reinstellen!

>Lahmer Sauhaufen. Weshalb ist der Code noch nicht da?


Solche Sprueche kann man allenfalls als Chef einmal klopfen.
Ich seh da wird nichts mit dem Diplom. Falsche Berufswahl.
Probier's nochmals als was Anderes.

So schwierig ist ein DDS nun auch nicht.
Gast #2341462
Lesenswert?

Mein Meister Thiel hat mich zum Metzger geschickt um 2 Kilo 
Schwarzschulter zu kaufen.
Ich war damals Radio und FS Lehrling, aber schon recht eingelesen.
So hatte der Metzger zwar keine Schwarzschulter aber adäquates 
Rinderfilet ;-), hähä...

Das hab ich Ihm dann mitgebracht .
Er war grundgeizig und überrascht, kam aus der Nummer aber nicht mehr 
raus ;-)...

Radio Fern, Essen
Gast #2341547
Lesenswert?

hm..
.oO (mal die trolle ignorieren...)

sinus mit atmega war die frage..

variante 1: sinus funktion von gcc - recht langsam
variante 2: lookup-table - speicherintensiv, ginge aber gut für 8bit 
bereich

nun aber noch eine weitere möglichkeit: federpendel im atmega 
simulieren.

das sind eigentlich einfache formeln, geben aber eine hübsche 
sinuskurve. für ein pc programm hatte ich das mal verwendet, da aber 
noch mit floats.
für einen atmega könnte man das relativ einfach auf festkommaarithmetik 
umschreiben.
Persönliche Seite #2341558
Lesenswert?

stru_aus schrieb:
> nun aber noch eine weitere möglichkeit: federpendel im atmega
> simulieren.

Nur mal aus reiner Neugierde. Was ist ein „Federpendel“?

Ein mathematisches Pendel, ein physikalisches Pendel oder einen 
Feder-Masse-Schwinger simulieren?  Was bedeutet Simulation? Numerische 
Lösung der Differentialgleichung oder die Lösung der Dgl. verwenden? 
Wenn ich jedoch die Lösung verwende brauche ich ja den Sinus, der ist ja 
gerade ein Teil der Lösung.  Was hast du mit deiner weiteren Möglichkeit 
gemeint?
Gast #2341586
Lesenswert?

federpendel ist sowas:
http://de.wikipedia.org/wiki/Federpendel
masse, feder mit federkonstante.
jeweils für jedes neue sample einmal die kraft berechnen, die ändert die 
geschwindigkeit, und das für zu neuer position..

also mal eine einfache theoretische implementation:

start:
-man definiert masse m und federkonstante c (nur dies beiden haben 
einfluss auf frequenz, siehe wikipedia).
-starten mit maximalen ausschlag, x= -1.0, geschwindigkeit v=0

dann kleine schritte: jeweils um den zeitfaktor dt (zB 1/44100 sek)
-berechnen der kraft: f= -c * x
-berechnen der neuen geschwindigkeit: v+= f/m * dt
-berechnen der neuen position: x+= v * dt

und - tadaa - es kommt ein hübscher sinus heraus.
Gast #2341627
Lesenswert?

Wir mussten das im dritten Semestern in Assembler für den Nerdy 
programmieren. Lookup-Tabelle->A/D-Wandler->Tiefpass. Das sind, selbst 
mit Interrupts und Unterprogramm nicht mehr als 30 Zeilen.

Den Code habe ich hier noch herumliegen. Aber ich werde ihn nicht 
verschenken, oder verkaufen. Das wirst Du schon noch selbst hinbekommen 
sollen als angehender Ingeneur ;-)
Persönliche Seite #2341676
Lesenswert?

Bernd M. schrieb:
> Hannes Jaeger schrieb:
>> Man, kann man die verarschen, wie früher die Stifte, die man die
>> Optische Achse durch die Werkstatt tragen lies. Das die Morgens alleine
>
> Oder die Kiste mit dem Spannungsabfall.

Hehe, oder wenn ein Akku einen zu großen Innenwiderstand hat einen 
kleineren einlöten lassen.
Gast #2341997
Lesenswert?

Hannes Jaeger schrieb:
> Ist das so ein Bachelor-Diplom? So ein Ding für 9 Wochen Abschreiben von
> ein paar Binsenweisheiten?
>
> Wir haben in der Firma jetzt so einen Schwung von diesen Typen bekommen.
> Man, kann man die verarschen, wie früher die Stifte, die man die
> Optische Achse durch die Werkstatt tragen lies. Das die Morgens alleine
> den Reißverschluss ihrer Hose ohne die Mami zubekommen ist ein Wunder.

Schon mal Bachelorarbeit geschrieben oder eine betreut? Keine 
ernstgemeinte Bachelorarbeit der BRD wird in 9 Wochen geschrieben. 
Anmeldedatum sind auch nur Alibis.

Würde mal sagen deine scheiße Firma sucht gezielt nach dummen Leuten....

Achso Argumente von wegen "Das sind die aktuellen Kandidaten auf dem 
Arbeitsmarkt!" kommen da jetzt. Dann frag ich mich wer die ganzen tollen 
und interessanten Projekte an den Unis bearbeitet.
Gast #2342018
Lesenswert?

Sollte jetzt jeder Vollpfosten kopieren können...
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <avr/pgmspace.h>
4
#include <inttypes.h>
5

6
#define F_CPU 8000000UL  // Quarz mit 8.000.000 Mhz
7
#define TIMERRELOAD 256  // Nachladewert des Timers 255
8
#define AUFLOESUNG 65536 // 16-Bit Counter 65535
9

10
const uint8_t sinustabelle[256] PROGMEM = {127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178,181,184,187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223,225,227,229,231,233,234,236,238,239,240,242,243,244,245,247,248,249,249,250,251,252,252,253,253,253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248,247,245,244,243,242,240,239,238,236,234,233,231,229,227,225,223,221,219,217,215,212,210,208,205,203,200,198,195,192,190,187,184,181,178,176,173,170,167,164,161,158,155,152,149,146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,96,93,90,87,84,81,78,76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,27,25,23,21,20,18,16,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23,25,27,29,31,33,35,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,111,115,118,121,124};
11

12
volatile union {uint16_t u16; uint8_t u8[2];} counter; //0 ist Low, 1 ist High Byte
13
volatile uint16_t offset;
14

15
void frequenz_setzen(uint8_t Ausgabefrequenz){ // 614 Takte mit -Os
16
 offset = ((F_CPU/2 + Ausgabefrequenz * TIMERRELOAD * AUFLOESUNG) / F_CPU); // F_CPU/2 ist fürs Runden
17
}
18

19
int main(void){
20
 OSCCAL = 0xAE; //Kalibrieren des Internen RC OSC
21
 TCCR1A = (1<<COM1A1) | (1<<WGM10); //Clear OC0A on Compare Match & Fast PWM Mode 5
22
 TCCR1B = (1<<WGM12) | (1<<CS10); //CPU-Takt & Fast PWM Mode 5
23
 TIMSK = (1<<TOIE1); //Timer 1 Overflow interrupt an
24
 DDRB = (1<<PB1); //PB1 (OC1A) als Ausgang 
25
 frequenz_setzen(50);
26
 sei();
27

28
 while(1);
29

30
 return 0;
31
}
32

33
ISR(TIMER1_OVF_vect){
34
 OCR1A = pgm_read_byte(&sinustabelle[counter.u8[1]]);
35
 counter.u16 += offset;
36
 return;
37
}
Gast #2342147
Lesenswert?

>also, wär nett, wenn jemand hier den programm code reinstellt,
>anschließen zwischen atmega8 und da-wandler mach ich selber.

Du bist der Hammer... Kannst ja mal lieb fragen, ob das Anschliessen 
nicht auch noch jemand übernehmen kann, dann musst du nur noch den 
schriftlichen Teil bewältigen (oder du kippst das dann auch ab)...
Ein Sinus im AVR erzeugen, ist deine Dipl.-Arbeit? Wo studierst du? 
Andere Leute entwickeln komplette Schaltungen, programmieren diese, 
entwicklen Gehäuse, Win/Linux Frontends etc... Oder "bauen" mal eben 
eine Windkraftanlage aufs Unigelände und kümmern sich um die 
Genehmigungen, Neztzeinspeisungen, Dimensionierungen, Abnahmen etc...
Trete ich dir zu nahme, wenn ich behaupte, dass du eine Schande für jede 
Hochschule bist? Tut mir echt leid, aber allein dein Ton, passt absolut 
nicht zu deiner angeblichen Qualifikation...

>daher soll das hier jemand reinstellen!
...dein "Wunsch", ist uns Befehl
Persönliche Seite #2342309
Lesenswert?

stru_aus schrieb:
> federpendel ist sowas:
> http://de.wikipedia.org/wiki/Federpendel
> masse, feder mit federkonstante.

Das ist ein sehr schönes Beispiel dafür, dass Wikipedia oft eine 
exzellente Quelle für „Halbwissen“ ist. Einige setzen einen Artikel 
rein, der Rest der Welt denkt nun dass diese Quelle ein Gesetz ist.
Ein Pendel ist etwas anderes als ein linearer Feder-Masse-Schwinger. 
Während ein Schwingungssystem, bestehend aus einer Masse und einem 
linear elastischen Federverhalten tatsächlich lineare Schwingungen 
bezüglich der Ortskoordinate ausführt,  ist die Winkelauslenkung eines 
Pendels nichtlinear! Nur bei kleinen Winkelausschlägen kann die Dgl. 
linearisiert und damit auch eine harmonische Lösung gefunden werden.

stru_aus schrieb:
> start:
> -man definiert masse m und federkonstante c (nur dies beiden haben
> einfluss auf frequenz, siehe wikipedia).
> -starten mit maximalen ausschlag, x= -1.0, geschwindigkeit v=0
>
> dann kleine schritte: jeweils um den zeitfaktor dt (zB 1/44100 sek)
> -berechnen der kraft: f= -c * x
> -berechnen der neuen geschwindigkeit: v+= f/m * dt
> -berechnen der neuen position: x+= v * dt
>
> und - tadaa - es kommt ein hübscher sinus heraus.

Dein vor dir beschriebenes Lösungsverfahren entspricht der numerischen 
Lösung der Bewegungsdifferentialgleichung mittels dem einfachsten 
Lösungsalgorithmus, dem impliziten Euler-Cauchy-Verfahren (auch 
Rechteckregel). Das Verfahren ist zwar konsistent und konvergent hat 
aber Stabilitätsprobleme. Dein 1/44100 als Zeitschritt ist somit 
willkürlich und führt nicht immer zu einer richtigen Lösung.
Gast #2343258
Lesenswert?

@stru_aus

Da ich ein Fauler Programmiere bin kombiniere ich einfach beide 
Lösungen.
Hat den Vorteil das es schnell läuft und zur Laufzeit variabel ist.
Außerdem muss ich nicht mehr an die lockup ran (Auflösung ändern etc.). 
Einfach zur Init Zeit lockup befüllen und dann nur noch hirnlos im KREIS 
auslesen.

@ Feder-Pendler

Ein Sinus hat wohl eher was mit einem Kreis ( vor Doofe auch 
Scheibenwischer ) gemein also mit einer Feder.

....

na ja ich Troll mich dann mal ... Duck und weg.

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