Forum: Mikrocontroller und Digitale Elektronik Bascom: 1,8kHz auf 56kHz Trägerfrequenz erzeugen


von anfänger (Gast)


Lesenswert?

Hallo!

Ich möchte mit einem Attiny2313 und Bascom-AVR (1.11.8.3) zwei 
kombinierte Frequenzen erzeugen. Die eigentliche Frequenz soll 1,8 kHz 
betragen und mit einer Trägerfrequenz von 56 kHz kombiniert werden. Das 
Signal soll insgesamt 32ms dauern. Damit wird dann eine IR-LED 
angesteuert. Auf der Empfängerseite wird das Signal mit einem TSOP1756 
demoduliert, so dass dort nur noch die 1,8 kHz Frequenz "entschlüsselt" 
werden muss.

Zur Erzeugung der Frequenzen:
Wie gehe ich hier grundsätzlich vor? Nachdem was ich so gelesen habe, 
hat es wohl was mit Pulsweitenmodulation zu tun, wobei ich den konkreten 
Zusammenhang allerdings nicht verstehen konnte. Dsa erforderliche 
Programm soll möglichst Ressorcenschonend sein und am besten auch nur 
einen Timer in Anspruch nehmen. (Der Andere wird später evtl. noch 
gebraucht).

Also ich würde mich sehr freuen, wenn mir hier jemand die grundsätzliche 
Vorgehensweise zur Erzeugung des Signals erklären könnte.

Schöne Grüße,
Stefan

von Falk (Gast)


Lesenswert?

Nun, nix leichter als das. Für deine Ansteuerung der IR-LED musst du 
eben diese nur mit 56 kHz ein- und ausschalten. 56kHz sind ~17,8 us. Bei 
1 MHz Takt für deinen AVR sind das ~18 Takte.

Pin einschalten
8 Takte warten
Pin ausschalten
8 Takte warten

Diese Prozedur beliebig oft wiederholen. Die Pause zwischen ein und 
ausschalten ist deshalb nur 8 Takte und nicht 9, weil das ein-und 
Ausschalten selber schon einen Takt braucht, mit sbi/cbi sogar zwei.

Wenn dun nun diesen 56 kHz Träger nochmal mit 1,8 kHz (555,5 uS) 
modulieren willst, musst du

15 Perioden nach obigem Muster erzeugen
16 Perioden a 18 Takte warten

Damit ist eine vollständige Periode von 1,8 kHz beschrieben.

MFG
Falk

P.S. Tut mir leid, ich hab von BASCOM keine Ahnung, nur ASM.






von Philipp B. (philipp_burch)


Lesenswert?

Du könntest deine LED auch an einen Capture-Ausgang von einem Timer 
hängen. Dann brauchst du den (den Ausgang) nur noch im entsprechenden 
Intervall zu aktivieren/deaktivieren. Um keinen weiteren Timer zu 
verschwenden könntest du das in eine ISR vom selben Timer packen. 56kHz 
macht ja relativ genau 31 Perioden wenn du auf 1.8kHz kommen willst.

von crazy horse (Gast)


Lesenswert?

es gibt keine capture- sondern nur compare-Ausgänge :-)
Die 56kHz solltest du direkt mit einem Timer erzeugen (CTC-Mode, toggle 
Output on compare). Der Rest ist dann einfach.

von anfänger (Gast)


Lesenswert?

Ok, danke erstmal für die hilfreichen Antworten!

Aber wie kann ich denn unter Bascom den CTC-Modus konfigurieren? Hab 
sowohl in der Hilfe als auch im Netz nichts dazu gefunden. Ich will 
jetzt erstmal nur die 56kHz-Frequenz erzeugen und dann mal 
weiterschauen.

MfG, Stefan.

von anfänger (Gast)


Lesenswert?

So, habs hinbekommen :-) und nur einen Timer verbraucht.

Wie muss das ganze denn jetzt auf der Empfängerseite gemacht werden? Die 
56kHz werden ja schon automatisch im TSOP1756 demoduliert. Ich muss also 
nur noch die 1,8kHz erkennen.

Also wie muss ich jetzt ansetzen?

Danke, Stefan.

von Philipp B. (philipp_burch)


Lesenswert?

Bei einem Timer den Input-Capture aktivieren und mit der steigenden 
Flanke starten und mit der fallenden stoppen (Oder umgekehrt). 
Einstellungen stehen im Datenblatt.

von unbeschreiblicher Rahul (Gast)


Lesenswert?

>Bei einem Timer den Input-Capture aktivieren und mit der steigenden
>Flanke starten und mit der fallenden stoppen (Oder umgekehrt).

Nö, da man ja auch die komplette Periode benutzen kann, braucht man nur 
eine der beiden Flanken benutzen.
Und das Messen einer festen Frequenz bzw. herausfinden derer Anwesenheit 
sollte man eher über die Periodendauer machen...
Man kan es auch über die Anzahl der Impulse (Interrupt) innerhalb einer 
Torzeit (Timer) machen.
Man schaltet einen Timer durch eine Flanke an einem externen 
Interrupt-Eingang ein und zählt gleichzeitig die Impulse an diesem 
Eingang.
Solbald der Timer einen Interrupt auslöst, hört man auf, die Impulse zu 
zählen (bzw. rettet die bis dahin aufgelaufene Zahl und setzt den 
Impulszähler auf 0 zurück), und wertet die Anzahl aus...

von anfänger (Gast)


Lesenswert?

ah ok. verstehe. werd ich mal ausprobieren. danke.

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.