Hallo, Ich beschäftige mich seit kurzem mit dem AT90S2313 (4Mhz Quarz) und versuche ihm mit Bascom Intelligenz einzuhauchen (div.Blink u.Lc-Anzeige liegen hintermir). Mich interessiert nun die Tonerzeugung, d.h wie kann ich z.B 440Hz (a-Ton) oder 1Khz genau erzeugen (Tonleiter). Der Sound-Befehl ist ja recht ungenau und wie der Timer mit Vorteiler(das "krumme" Frequenzen herauskommen) usw.programmiert wird ist mir nicht klar.Wer hat einen Tip für mich ? Das kpl. Programm für die AVR-Klingel" ist einfach zu mächtig für mich trotz Kommentare. Gruß Max.
Hallo, also einen ton erzeugst du indem du an dem pin an dem dein lautsprecher angeschlossen ist in bestimmten abstaenden auf 1 und 0 setzt. Wenn du in einer Sekunde den pin auf 1 und dann wieder auf null setzt hast du ein Hertz. Jetzt musst du zwischen den Befehlen die den pin auf 1 oder 0 setzten, sbi oder cbi, noch warteschleifen einbauen. Du hast deinen 4MHz Quarz also 4 Millionen takte pro sekunde. Um 1KHz zu erseugen brauchst du eine warteschleife von 2000 Takten zwischen den befahlen sbi und cbi. Wenn du die warteschleife aenderst aender sich die frequenz. Die laenge des Tons kannst du beeinflussen indem du eine warteschleife um deine ganze procedure herum setzt. Siehe Beispiel: ton: mov tonlaenge,temp1 ;Tonlaenge (fequenz*sekunden/40) mov tonhoehe,temp2 ;Tonhoehe (1=10KHz,10=1KHz,100=100Hz, 255=39.2Hz) ldi temp3,0b01000001 ldi temp4,0b00101000 an: sbi portb,0 Zeit1: dec temp3 brne Zeit1 ldi temp3,0b01000001 dec tonhoehe brne Zeit1 mov tonhoehe,temp2 aus: cbi portb,0 Zeit2: dec temp3 brne Zeit2 ldi temp3,0b01000001 dec tonhoehe brne Zeit2 mov tonhoehe,temp2 dec temp4 brne an ldi temp4,0b00101000 dec tonlaenge brne an Das einzige problem hier ist das man den 10KHz ton maximal 1s erzeugen kann. Das kann man aber mit ein paar kleinen modifikationen aendern. Viele Gruesse Anton
man könnte auch einfach die sound-anweisung benutzen... sound pin, duration, pulses 'ist etwas einfacher oder ??? gruß peter
sorry... hatte übersehen das du das schon getestet hattest. wenn der ton sehr genau produziert werden soll, bleibt dir nur die wahl eine timer mit config entsprechend deiner vorgaben einzurichten und in der isr dann je nach ton eine ausgangspin zu setzen oder zurückzusetzen. die "auflösung" bzw. genauigkeit hängt also direkt von der zeit zwischen zwei isr-aufrufen ab.
Hallo, danke erstmal für die Antworten. Ich komme erst heute zum Antworten, vielleicht hättest Du auch ein Beispiel in BASCOM für mich ? Gruß Max
Hallo, sorry, aber ich habe keine Ahnung wie das unter BASCOM geht, kann dir leider nur die Funktionsweise unter Assembler sagen. Gruss Anton
hallo max! hast du nach jahren endlich herausgefunden, wie man es machen könnte? ich würde sagen mit timern. hast du evtl. entsprechenden bascom-code parat? bye!
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.