www.mikrocontroller.net

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


Autor: anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.






Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: unbeschreiblicher Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah ok. verstehe. werd ich mal ausprobieren. danke.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.