Tag Forum, noch mal eine Frage zur PWM: Es ist ja nicht schwer, eine Frequenz von ca. 950Hz zu erzeugen, die dann am OC1 Ausgang zur Verfügung steht. Der AVR (ein 2333 in diesem Fall) ist nun damit beschäftigt, diese Frequenz auszugeben. Nur, wie verfahre ich aber wenn dieser Ton, der über einen 1KHz Tiefpass auf einen FM-Modulator gegeben wird, nur für ca. 0,5sec. anstehen soll? Ich weiß, ist wahrscheinlich sehr simpel. Aber ich komm nicht drauf. Leide wahrscheinlich unter österlichen Spätschäden im Frühstadium...... Die ganze Sache dient als Rückmeldung für ausgelöste Schaltfunktionen und als Störungsmeldung, also eine Art "Roger-Piep". Danke euch allen schon jetzt, Günter
Hallo, also wenn du das mit der Frequenz hinbekommst dann brauchst du ne Schleife um es nur ne bestimmte zeitlang einzuschalten. Also schalte den Programmteil ein der dir die Frequenz erzeugt. Starte eine Schleife A(255mal verkleinern), wenn diese fertig ist geht es mit Schleife B(255mal) weiter die den Wert von Schleife A wieder auf 255 setzt und Schleife A von neuem startet. 255 Befehle werden bei 8 MHZ in 32 µSek ausgeführt aber Schleife a wird ja 255mal ausgeführt also 32µSek mal 255= ca. 8mSek also brauchst du noch mal ne Schleife C die Das ganze wieder 62 mal ablaufen läßt dann ist ne halbe Sekunde rum und du stellt den PWM-Mode wieder ab oder den Programmteil mit dem du die Frequenz erzeugts.
wie kann man das parallel machen 1 Ton an 2 (während immernoch der Ton erklinkt :-) Schleife ausführen 3 dann Ton ausschlaten ? jo Axel
Hallo, so wie ich das mitbekommen habe läuft PWM im Hintergrund du musst die Frequenz einstellen und starten danach kannst du im eigentlichen Prog andere Sachen machen.
Hi Thomas, Djambo Axel, ich hatte mir das folgendermaßen vorgestellt: ein Register wird gesetzt. Mit setzen des Registers wird a.) die Subroutine "Ton" angesprungen und b.) ein Portausgang wird nach L gezogen. Nach Ablauf der Zeit wird das Register gelöscht und der Ton ist aus und der Portausgang ist wieder H. Ich will noch mal probieren....... Danke euch, Günter
Hallo, also das was du machen willst kannst du doch mit analogen Bausteinen machen, dazu brauchst du keinen AVR. Eine Monostabile Kippstufe und einen Summer. Funktioniert in etwas so ein Kondensator lädt sich auf und sobalt ne Taste gedrückt wird(oder anderes Ereigniss) steuert der Kondensator einen Transistor durch welcher den Summer mit Strom versorgt, der Kondensator ist irgendwann entladen und kann den Transistor nicht mehr durchsteuern, dieser schaltet den Sumer wieder ab, der Kondensator lädt sich wieder und wartet aufs nächste Ereignis. Geht mit viel weniger Programmierkenntnis.
Hallelujah Thomas, die Tonerzeugung ist nur ein Teil der Gesamtfunktion..... Die Schaltung macht folgendes: 1.) Erkennen von 5-Tonfolge Signalen (kommt per Funk). 2.) Erkennen ob eine gültige Tonfolge vorhanden ist. 3.) Umwandeln der einzelnen Töne in HEX-Code. 4.) Abspeichern des Codes. 5.) Auswerten des empfangenen Codes. 6.) Ist der Code für diese Baugruppe relevant, Priorität erkennen. 7.) Auswerten der Priorität. 8.) Auslösen entsprechender Funktionen (Relais usw.). 9.) Ansteuern des Sendeteils der HF-Baugruppe (Sender tasten) So, bis hierhin klappt alles. Was jetzt eben noch fehlt ist eben die Modulation des Senders. Dieses soll auch der AVR über die PWM - Erzeugung übernehmen. Ich hoffe, es ist klar das hier kein Monoflop verwendet werden kann. Und noch was, dein Vorschlag ist sehr umständlich weil man doch mit einem getortem astabilen Multivibrator die Sache ganz elegant lösen kann. Es reicht ein Baustein (7400 oder 4011) aus. Sicherlich kann ich diese Schaltung mit einem 7400 aufbauen aber das Layout der Platine steht und die ersten Platinen sind schon bestückt. Trotzdem Danke auch noch, Günter
@Günter verstehe ich Dich richtig, dass Du nur einen Frequenzerzeuger für eine gewisse Zeit anschalten willst ? ich dachte Du willst den Ton mit dem AVR erzeugen. jo dann sollte es doch wohl ganz easy gehen "ein" - "delay" - "aus" oder !? jo Axel
Hallo, ich habe nicht die Tonerzeugng gemeint dafür braucht man nen Multivibrator, habe die Verzögerung gemeint. Du kannst aber auch dein Programm in der Schleife ausführen. Oder den Programmcounter als Schleifenzähler nehmen da der von alleine erhöht wird. Also Schleife erst an einen bestimmten Punkt des Programms abfragen.
Hi, Ich würde dazu den Timer benutzen. zb. Timerinterrupt aller 10ms oä., im Interr. ein Reg. runterzählen(bei Tonanforderung auf 50 laden), wenn = 0 Ton aus. Das war es schon. Gruß Uwe
Danke Uwe, ich glaub, der Groschen ist gefallen..... Das teste ich aus. Gruß, Günter
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.