PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ist das zu viel für 2313?



Thomas$
13.07.2009, 15:09
$regfile = "2313Def.dat"
$crystal = 7372800 '18.08MHc*24=433.92MHc, AVR core 18.08MHc/128 by default
Config Portd = Output

Dim A As Double
Dim B As Double
Dim Pause As Double
dim x as double
Portd = 255
A = 0

Do
X = X + 1
A = Sin(x)
B = 255 - a
Portd.1 = 0
For Pause = 1 To A : Next Pause
Portd.1 = 1
For Pause = 1 To B : Next Pause
If X = 180 Then X = 0
Loop ich wollt eigentlich einen sinus generator bastel der auf einen pin mir sinus aus gibt und am anderen genau das negativ also sinus 180° phasen versetzt aber ich hab bei dem programm 123% flash used wär froh wenn mir jemand einen tipp geben kann wie man das am einfachsten macht ohne den flash zu überfüllen ich wollt den 2313 nehmen weil ich an dem reichlich leds schon dran hab und der programmer stecker ist auch schon dran ich will mir keine neu leiterplatte noch zam löten.
mfg thomas

for_ro
13.07.2009, 16:19
Wenn du nur 180 Werte, also ein Wert pro Grad berechnest, brauchst du dann wirklich den Double Typ?
Der Wertebereich von sin(x) ist 0 bis Pi/2.
Also wird A nur von 0 bis 1,57 laufen, B von 255 bis 253,43.
Da du step 1 in den Schleifen hast, tut sich da auch nicht so viel.

Gruß

Rolf

Thomas$
13.07.2009, 16:25
das double geht ja nur auf kosten des sram´s ich denke das sin mir den flash klaut das programm ist quark hab ich gemerkt aber trotzdem darf der flash doch noch nich voll sein oder?

uwegw
13.07.2009, 16:29
Den Sinus in Echtzeit zu berechnen, brauch sehr lange und führt auch zu einem sehr großen Code, der nicht mehr ins Flash passt.
Mach dir ne Sinustabelle mit ganzzahligen Einträgen. Dann ncoh per Hardware-PWM ausgeben, und es läuft garantiert 100mal schneller als deine Lösung...

for_ro
13.07.2009, 17:01
das double geht ja nur auf kosten des sram´s
Ne, das geht auch voll in die Code Länge.
Schau dir mal den Code an, wenn du Single anstatt Double in der Sinus-Berechnung machst. Wenn du eine Wertetabelle mit Lookup machst, wie von Uwe vorgeschlagen, wird es noch viel besser. Obwohl du 90 Werte im Flash legen würdest, wäre der Code wesentlich kürzer.

Gruß

Rolf

Thomas$
13.07.2009, 17:27
ich hab noch nen atmega8 gefunden hab aber leider danneben bei den fusebits gesetzt und es zu spät gemerkt. ich werd also eine werte tabelle anlegen müssen ok thx

Besserwessi
13.07.2009, 21:16
Für einen guten Generator mit den 2313 sollte man für die Ausgange einen DA-Wandler statt dem PWM nehmen. Auch eine R2R Kette wäre schon deutlich besser. Die Daten kommen aus einer Tabelle (256 oder 512 Einträge) und der Index wird durch fortlaufendes Addieren der Phase berechent. Das findet man auch als DDS Generator. Das ist allerdings eine Anwendung wo Assembler wirklich hilfreich ist.

Thomas$
13.07.2009, 21:22
assembler für einen basic verwöhnten?? gibts da ein codeschnipsel für den DA-wandler? hat der 2313 einen?

Besserwessi
13.07.2009, 22:58
Die AVR Coontoller haben keinen DA Wandler drin. Man kann sich aber einen einfachen extern bauen, duch eine Widerstandskette an 7-8 IO- Pins (bevorzugt von einem Port). Die Alternative mit Hardware PWM ist schon einiges langsamer, geht aber auch noch. Mit ca. 8 MHz durch 256 geteilt hätte man eine PWM Frequenz von etwa 30 kHz. Das würde für Signalfrequenz bis etwa 5 kHz reichen, mit 7 Bit PWM oder einer höheren Taktfrequenz auch mehr.


Möglich wäre z.B. eine rein in ASM geschrieben Interruptroutine für einen timer interrupt. Der eigentliche ASM Teil ist recht kurz (ca. 30 Befehle) , soll ja auch sehr schnell sein. Den Teil könnte man z.B. per inline ASM einbinden. Man hätte dann im Hintergrund den Sinus (variabler Frequenz) laufen lassen und kann sich im Hauptprogramm um eine Testenabfrage usw. kümmern. Wäre ein schönes Projekt, um sich mal mit dem inline ASM von BASCOM auseinanderzusetzen.


Was ich allerdings nicht weiss, ist wie man die Tabelle an die Richtge Stelle (z.B. Ende des Speichers) im Flash kriegt.

Thomas$
13.07.2009, 23:03
es soll am ende us erzeugen können und halt und beide sinus wellen müssen sich zum schluss aufheben wenn sie aufeinandertreffen. und auf eine der beiden wellen soll ein ton signal das von einem micro aufgenommen wird drauf modeliert werden. so das dort wo beide sich treffen der ton vom micro zu hören ist

Besserwessi
14.07.2009, 21:56
Für den Ultiraschllbereich wird man wohl mit dem AD Wandler, ggf. auch nur 4 Bit und ASM arbeiten müssen. Sonst wäre die Alternative mit einem Rechtecksignal vom PWM Ausgang und ggf einem Filter dahinter.

Das mit dem Auslöschen und höhrbarmachen einen Tones sollte man noch mal genau überdenken. Solange bei einigermaßen kleinen Amplituden bleibt, ist Ultraschall einen lineare Angelegenheit. Dass heißt, egal was man da addiert, subtrahiert oder überlagert, blieben die Frequenzen erhalten. Nur die Amplitude wird vom Ort abhänhig und bei Modulation auch noch von der Zeit. Man bekommt aber so keine Frequenzen im Höhrbaren Bereich.

Andere Frequenzen erzeugt man erst im nichtlinearen Bereich, und dafür braucht man in der Regel sehr hohe Amplituden, etwa so wie in den Ultraschallreinigern.

Thomas$
14.07.2009, 23:05
zum aufbau dachte ich zwei hochtoner die beide den selben abstand zum objekt haben. und am qbjekt sollen sich beide wellen aufheben. das objekt ist irgendwas unebenes raues oder eine person ich hab das mal mit 440 und 440,5 herz probier so das sich beide mal überlagern mussten und da hat man deutlich gemerkt das der ton laut oder leise wurde
allerdings wurde der ton vom pc erzeugt

Besserwessi
15.07.2009, 20:15
Die zwei frequenzen von 440 und 440,5 Hz haben nichts mit Ultraschall zu tun. Das sind 2 Normale Audiofrequenzen, durch den kleinen Frequenzunterschied kreigt man eine Schwebung und entsprechend wird der Ton an einem Ort abwechselnd laut und leise (bzw. auch mal ganz weg). Man bekommt auch eine vom Ort abhängige Überlagerung, so das wenn der Ton an einem Ort laut ist, er wo anders leise ist. Die Stellen wo es Laut ist, bewegen sich halt relativ langsam im Raum. Die 440,5 Hz kann man nämlich auch so interpretieren als wären es 440 Hz mit einer langsam veränderlichen Phase.

Es bleibt aber bei der Frequenz von etwa 440 Hz für den Ton den man hört.