Altes Thema: PWM

Gast #3132
Lesenswert?

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
Gast #3133
Lesenswert?

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.
Gast #3136
Lesenswert?

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
Gast #3137
Lesenswert?

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.
Gast #3138
Lesenswert?

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
Gast #3139
Lesenswert?

@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
Gast #3141
Lesenswert?

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.
Gast #3142
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren