Forum: Mikrocontroller und Digitale Elektronik Altes Thema: PWM


von Günter König (Gast)


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

von Thomas (Gast)


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.

von Axel(ojojo) (Gast)


Lesenswert?

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

von Thomas (Gast)


Lesenswert?

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.

von Günter König (Gast)


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

von Thomas (Gast)


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.

von Günter König (Gast)


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

von Axel(ojojo) (Gast)


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

von Günter König (Gast)


Lesenswert?

Moin Axel,
jawoll, du hast recht.
Gruß,
Günter

von Thomas (Gast)


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.

von Uwe (Gast)


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

von Günter König (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.