Hi zusammen, ich möchte mir mit dem Attiny13 ein kleines Blink/Soundmodul bauen. Ich bin bisher noch Anfänger in Sachen selber programmieren und möchte mich daher noch ein bisschen weiterbilden ;-) An den Ports 3 und 4 habe ein Blinkmuster programmiert, bei dem zwei Leds abwechselnd aufblitzen. Nun möchte ich an einem der anderen Ports ein Sirenengeräusch erzeugen, bei dem die Frequenz ansteigt und wieder abnimmt. Wie kann ich das programmieren? Mein Code sieht bisher so aus: $regfile "attiny13.dat" $crystal = 1000000 Config Portb = Output Do Portb.3 = 0 Waitms 90 Portb.3 = 1 Waitms 90 Portb.3 = 0 Waitms 90 Portb.3 = 1 Waitms 90 Portb.3 = 0 Waitms 150 Portb.4 = 0 Waitms 90 Portb.4 = 1 Waitms 90 Portb.4 = 0 Waitms 90 Portb.4 = 1 Waitms 90 Portb.4 = 0 Waitms 90 Loop
moep schrieb: > Stichwort: PWM Ja, daran dachte ich auch erst, aber ich fände es nützlicher wenn du mir erklären würdest, was ich ändern/dazufügen muss...
Benutz halt die Suche, meinst du, du wärst der erste, der eine PWM mit Bascom erzeugen möchte? Beitrag "Bascom PWM" http://avrhelp.mcselec.com/index.html?config_timer1.htm Mach erst mal einen gleichbleibenden Sinus und hör dir den an. Wenn der passt, musst du ja nur die Frequenz ändern, damit du einen Sirenenton kriegst.
nocheinGast schrieb: > Mach erst mal einen gleichbleibenden Sinus und hör dir den an. Da ist schon mein Problem. Wie erzeug ich den Sinus? Ich werde aus den Links nicht so richtig schlau. Kannst Du mir vielleicht mit einer Codeänderung auf die Sprünge helfen? nocheinGast schrieb: > Wenn der > passt, musst du ja nur die Frequenz ändern, damit du einen Sirenenton > kriegst. Ja das hört sich einfach und verständlich an, aber wie schreibe ich den Code dafür?
Naja... In der Artikelsammlung (http://www.mikrocontroller.net/articles/Hauptseite) findest du einige Artikel zum Thema PWM und wie man sie erzeugt (auch mit ausführlichem Beispielcode). Erst mal solltest du also eine PWM einbauen und verstehen wie sie funktioniert und wie du sie steuerst. Dimm' für den Anfang am besten einfach mal eine deiner LEDs mit der PWM. Dannach liest du diesen Artiekel zum Thema Klangerzeugung (http://www.mikrocontroller.net/articles/Klangerzeugung). Dort steht drin wie du "richtige" Töne erzeugen kannst (Sinustöne mittels Sinustabelle im Speicher).
vielleicht kannst Du das als Bais nehmen und weiter ausbauen: http://bascom-forum.de/showthread.php?2738-Martinshorn&highlight=sirene
oder http://halvar.at/elektronik/kleiner_bascom_avr_kurs/timer0_als_timer/ und das dann sinusförmig erweitern mit READ/DATA
Eine recht einfache Möglichkeit mit BASCOM Töne zu erzeugen, ist der SOUND Befehl. Hier ist ein Beispiel: http://www.mcselec.com/index.php?option=com_content&task=view&id=175&Itemid=41 Achtung, der Ton (Höhe, Länge) hängt stark von dem ab, was in $crystal angegeben wurde.
PS. Mit Waitms wird man auf Dauer nicht glücklich. Besser ist es, den Timer zu bemühen. Über die Suchfunktion lässt sich da etwas finden.
Wenn schon der Hinweis auf den SOUND-Befehl dann bitte auch mit einem hilfreichen Link: http://www.mcselec.com/index.php?option=com_content&task=view&id=221&Itemid=57 Für einen Sirenenton ist SOUND m.E. nicht geeignet. "Mit Waitms wird man auf Dauer nicht glücklich. Besser ist es, den Timer zu bemühen. Über die Suchfunktion lässt sich da etwas finden." Was soll denn so eine Aussage? Damit kann ja niemand etwas anfangen. WAITMS ist selbstverständlich eine sinnvolle Sache. Man muss nicht alles mit Timern erschlagen. @Einsteiger: Bist Du sicher, dass Dein Prozessor mit 1 MHz läuft? Standardmäßig läuft der mit 1200000 Hz. @Einsteiger: Bersuch' mal, mit CTC wie oben im Link Töne zu erzeugen. Einzelne. Dann mehrere verschiedene Töne - getrennt durch WAIT 1. Dann die Tonhöhen in einer DATA-Tabelle ablegen und in einer Schleife mit READ abfragen. Dann kannst Du die Töne im DATA-Bereich sinusförmig an- und abschwellen lassen. DAnn bei Bedarf noch in der Schleige IF-Abfragen für Blitzen/Blinken von LEDs einbauen. Oder einen zweiten Timer für das Blitzen nehmen.
Stefan Hoffmann schrieb: > Für einen Sirenenton ist SOUND m.E. nicht geeignet. Siehe Überschrift des Artikels (muss man halt mal etwas nach unten scrollen): 3.5.3 Sirene mit SOUND Befehl >Was soll denn so eine Aussage? Damit kann ja niemand etwas anfangen. WAITMS ist selbstverständlich eine sinnvolle Sache. Man muss nicht alles mit Timern erschlagen. Die Aussage ist richtig. Ohne Timer wird Einsteiger sein Projekt so nicht verwirklichen können. Es gibt genug BASCOM-Beispiele hier und anderswo mit Timern, man muss ja nicht immer alles doppelt und dreifach schreiben.
Danke schonmal für die vielen Links und Tipps. Ich denke das mit den Melodien ist gar keine so schlechte Idee. Meine Frage wäre nur ob das auch mit dem Attiny13 geht oder ist der nicht leistungsfähig genug? Wie und was füge später wo zu? MFG Einsteiger
Einsteiger schrieb: > Ich denke das mit den Melodien ist gar keine so schlechte Idee. > Meine Frage wäre nur ob das auch mit dem Attiny13 geht oder ist der > nicht leistungsfähig genug? Was verstehst Du unter "leistungsfähig"? Die meiste "Leistung" (die meisten Ressourcen) werden doch bereits durch die Verwendung von Bascom blockiert. So wird z.B. ein großer Teil des eh knappen SRAMs für den Stack gebraucht, weil Bascom bei Interrupts fast alle Register sichert, auch die, die nicht gebraucht werden. Ähnlich ist es mit der Rechenzeit. Interrupts werden schnarchlangsam, weil die Registersicherung den Aufruf verzögert. Nun zur Deinem Projekt allgemein. Du willst ein paar Blinker und eine Sirene realisieren (klingt nach Feuerwehr, Rettungswagen oder Polizei). Alles soll unabhängig voneinander funktionieren. Du brauchst einen Tonerzeuger, am besten in Hardware, also dem man nur die Frequenz übergibt und der dann selbsttätig arbeitet. Dazu ist ein Timer im CTC-Mode mit Toggeln des zugehörigen Portpins gut geeignet. Das ist mit dem Tiny13 realisierbar. Nun kommen aber noch die Blinklichter (unabhängige Frequenzen) und das Auf/Abschwellen der Sirene dazu. Dafür bräuchte man einen Zeittakt, in dem die Sirenenfrequenz verändert wird und die Blinkzeiten abgezählt werden. Dies realisiert man am besten mit einem Timer. Dumm nur, dass der Tiny13 nur einen Timer hat, der ja für die Sirene im CTC-Modus läuft und somit variablen Zählumfang hat, was ihn (trotz seiner beiden Compare-Einheiten) für andere Aufgaben unbrauchbar macht. Somit müsste der Zeittakt für die Frequenzänderung der Sirene (Auf/Abzählen des Compare-Wertes des Timers) und das Herunterzählen und auf Startwert setzen aller Blinkzähler mittels Warteschleifen (Wait) realisiert werden. Da der Timer ohne Interrupt arbeitet (also keine Rechenzeit für die Registersicherung vertrödelt wird) ist dies akzeptabel, auch wenn ich kein Freund von Warteschleifen bin. Fazit: Dein Projekt (Sirene mit Rechteck-Ton, 2 Blinker zur Immitation von unterschiedlich schnellen Rundumleuchten, 1 Doppelblitzer für die Blitzlampen der Rettungsfahrzeuge, 1 Freigabe-Eingang) ist bei geschickter Programmierung mit dem Tiny13 (auch mit Bascom) realisierbar. ...
@ hannes lux Hannes Lux schrieb: > Du willst ein paar Blinker und eine Sirene realisieren (klingt nach > Feuerwehr, Rettungswagen oder Polizei). Genau, zwei abwechselnd aufblitzende LEDs in Blau und Rot und eine Sirene mit an - und abschwillendem Ton. Soll für ein amerikanisches Polizeiauto sein. Die Sirene kann mir ruhig asynchron zur Blinkfreqenz laufen. Das ist erstmal egal. Das mit den Tönen hab ich ausprobiert. Tonleiter von C bis H und umgekehrt ( inclusive der Halbtöne) hintereinandergefügt und abgespielt. Nach der Inbetriebnahme, war ich allerdings nicht so zufrieden mit dem Ergebnis. Die Tonwechsel sind sogar hörbar und man hört das es zusammengefügt wurde. Ich möchte aber eher ein sauberes Tonsignal für die Sirene erzeugen wie bei einem Sqarewave-Oszillator nur halt mit Mikrocontroller.
Einsteiger schrieb: > @ hannes lux > > Hannes Lux schrieb: >> Du willst ein paar Blinker und eine Sirene realisieren (klingt nach >> Feuerwehr, Rettungswagen oder Polizei). > > Genau, zwei abwechselnd aufblitzende LEDs in Blau und Rot und eine > Sirene mit an - und abschwillendem Ton. Soll für ein amerikanisches > Polizeiauto sein. > Die Sirene kann mir ruhig asynchron zur Blinkfreqenz laufen. Das ist > erstmal egal. Das wird auch im Original nicht synchron sein. > Das mit den Tönen hab ich ausprobiert. Tonleiter von C bis H und > umgekehrt ( inclusive der Halbtöne) hintereinandergefügt und abgespielt. Wie hast Du es ausprobiert? Mit dem Sound-Befehl? - Vergiss es... > Nach der Inbetriebnahme, war ich allerdings nicht so zufrieden mit dem > Ergebnis. Die Tonwechsel sind sogar hörbar und man hört das es > zusammengefügt wurde. Ich möchte aber eher ein sauberes Tonsignal für > die Sirene erzeugen wie bei einem Sqarewave-Oszillator nur halt mit > Mikrocontroller. Ja und? Die Steuer-Register der internen Peripherie der AVRs kann man auch in Bascom direkt beschreiben, dazu braucht es viele der mitgelieferten Funktionen nicht. Nimm das Datenblatt des Tiny13, Kapitel Timer und suche Dir die Registereinstellungen für den CTC-Modus (Clear To Compare) heraus. Dazu die Einstellungen, mit denen Du den OC0A(oder B)-Pin per Timer-Compare toggeln lassen kannst. Dann probierst Du (kann man auch errechnen), mit welchen Werten im Register OCR0A (oder B) Du akzeptable Frequenzen erreichst. Dazu auch evtl. mit dem Vorteiler des Timers spielen und notfalls auch etwas mit dem Systemtakt-Vorteiler (CLKPR). Hast Du die 2 Werte für minimale und maximale halbe Periodendauer (aus denen sich die Frequenz ergibt), so zählst Du im Waitms-Takt (ausprobieren) eine Variable jeweils einen Schritt hoch bzw. runter (zwischen diesen beiden Grenzwerten für Min und Max) und schreibst sie in das Compare-Register des Timers. Somit hat Du nicht nur die gestuften Werte der Tonleiter, sondern auch alle Zwischenstufen. Und in diesem Waitms-Takt zählst Du auch die Zähler für die Blinker im Kreis und definierst jeweils zwei Zählerstände zum Einschalten und Ausschalten der LED. ...
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.