Hallo, ich möchte mit meinem 90s4433 ein hübsche tonleiter erzeugen, kann mir da jemand mit dem asm-code und bei der verstärkerschaltung für ein kleinen lautsprecher weiterhelfen? danke.
Hallo Michael, kannst du noch mehr zu deinen Anforderungen sagen. Soll das Ausgangssignal Sinus sein oder reicht dir ein Rechteck? Für Sinus kannst du dir mal das DDS-Projekt unter Projekte anschauen und passend abändern. Hast du die Frequenzen schon für deine Tonleiter? 440Hz ->Kammerton a danach mit dem Multiplikator 2^(1/12) in Halbtonschritten nach oben. mfg werner
Naja ich hab nich viel ahnung von sinus und rechteck signalen, was ist denn da der unterschied? Ich wollte nur am ausgang meines µC nen lautsprecher anschliessen der dann die töne wiedergibt, so wie beim internen lautsprecher im pc gehäuse. Aber ich brauch da irgendwie noch eine verstärkerschaltung weil hab schon mal rumexperimentiert und da war der ton ganz leise. Vielleicht war aber auch nur mein programm falsch.
Der Unterschied von Sinus und Rechteck ist der Klang. Aber laß dir doch nicht alles aus der Nase ziehen, wie weit bist du den schon gekommen? Einzelnen leisen Ton erzeugen? leise Tonleiter erzeugen? du kannst ja ggf. den Code anhängen. einfache Verstärkerschaltung: 5V | C uC_pin------R1----B E | +----C1----lautsprecher--+ | | R2 Masse | Masse R1=1k R2=50Ohm C1=möglichst groß CBE ist ein NPN-Transistor mfg werner
Danke erstmal das du mir so schnell antwortest. Also das ist der code, is noch nicht viel: .include "4433def.inc" .def temp = r16 ldi temp, RAMEND out SPL, temp ldi r16, 0xFF out DDRB, r16 loop: ldi r16, 0b11111110 out PORTB, r16 rcall PAUSE ldi r16, 0b11111111 out PORTB, r16 rcall PAUSE rjmp loop PAUSE: ldi R17, $09 WGLOOP0: ldi R18, $6E WGLOOP1: dec R18 brne WGLOOP1 dec R17 brne WGLOOP0 ldi R17, $01 WGLOOP2: dec R17 brne WGLOOP2 ret Also der schalten einfach den ersten ausgang von B abwechselnd auf high und low, mit einer kleinen verzögerung dazwischen. Wobei ich auch nicht weise ob die Pause schleife ne richtige lösung, hab ich aus dem DelayProgramm, der sollche schleifen erzeugt mit einer bestimmten wartezeit. Sozusagen hab ich es bis jetzt nur geschafft einen leisen piepton zu erzeugen.
Also ich hab das mal kurz abgetippt: Das Programm holt sich jeweils die Wartezeit=Impulsdauer=Pausendauer aus dem Speicher. Dann werden jeweils 1000 gleiche Perioden ausgegeben. Dann wird der nächste Ton geholt usw. Ich hoffe der Code ist einigermaßen lesbar. Ich hab das Programm nicht getestet, hoffe aber das es läuft. Die Tonfolge wird in Abhängigkeit von der Tonhöhe immer schneller, die Korrektur überlass ich dir. Für einen Musiker wird sich die Tonfolge aufgrund von Rundungsfehlern ziemlich schrecklich anhören. Die Lautstärke hat natürlich nichts mit dem Programm zu tun, aber ich denke das ist dir auch klar. mfg werner PS: ich würde das Programm anders zusammenbauen, aber ich wollte hier nichts überstürtzen.
ach du schei.... das Programm enthält einen bösen und einen kleinen Fehler: - Der Startpointer muß natürlich tonleiter*2 sein. - beim 2. Durchlauf ist R0=0 => Ton=256 anstatt 254 mfg werner
Danke, es funktioniert, hab nur zwei kleine probleme. Wenn ich die verstärkerschaltung so baue, wie du sie mir oben aufgemalt hast, dann ändert sich die lautstärke nich, wenn ich allerding den kondensator weglasse (hab nen 100µF benutzt) ist es zwar lauter aber mein spannungsregler IC wird sehr heiss. Das zweite problem ist das die töne sich richtig gut anhörn aber immer so ein anderer ton drauf liegt, wie ein brummen. Ist es irgendwie möglich so ein richtig sauberen ton, wie bei einer Armbanduhr zu erzeugen, wenn die zum beispiel piep wenn der alarm losgeht?
Mir scheint, dein Lautsprecher ist niederohmiger als ich dachte. Für den Fall daß der Lautsprecher nur 8 oder gar 4Ohm hat, mußt du die beiden Widerstände verkleinern. Im Idealfall ist dann R1 kleiner als die Lautsprecherimpedanz. Der Kondensator ist noch etwas klein, sollte aber gehen. Den Kondensator darf man aber nicht weglassen, dieser filtert den DC-Strom aus. Der Spannungsregler wird wegen des DC-Stromes heiß. mfg werner
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.