PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : IR-Empfang mit BASCOM



hardware.bas
12.01.2019, 14:08
Hallo, liebe Forumgemeinde,
für ein SDR-Radioprojekt, welches schon gut
fortgeschriten ist, möchte ich nun zusätzlich
zur RS232-Kommunikation die Frequenzeingabe
mittels IR-Fernbedienung realisieren.
Codebeispiele gibts ja in BASCOM, jedoch ist
mir zur Zeit nicht klar, welche Mindesttaktfrequenz
der AVR dann braucht. Zur Zeit läuft er noch mit
den internen 1MHz, da ich einerseits nur mit
der Baudrate 1200 kommuniziere, anderseits
der AVR (ATMega162) bisher fast nur statische
Aufgaben erfüllen muss. Erst sollte jedoch das
Teilprojekt IR-Empfang stehen, danach wird die
Taktversorgung extern durch Teilung der Mutter-
quarzfrequenz aktuell. Deshalb meine Frage, welche
Mindesttaktfrequenz geht. Vielen Dank und
viele Grüsse, Micha

oberallgeier
12.01.2019, 16:06
.. möchte .. die Frequenzeingabe mittels IR-Fernbedienung realisieren .. meine Frage, welche Mindesttaktfrequenz geht ..Das kommt ja nu auf den benutzten Code der IR-Fernbedienung an. Ich verwende z.B. das uralte RC-5, dessen Signale in Bits codiert sind die jeweils 2mal889 µs lang sind. Da beim RC-5 der Levelübergang - HL oder LH - in Bitmitte den Wert des Bits - 1 oder 0 - bestimmt, muss man deutlich schneller sein. Du musst Dich also sachkundig machen welcher Code von Deiner Fernbedienung gesendet wird bzw. welche Pulsabstände erkannt werden müssen. Dann ergibt sich die Antwort doch fast von selbst.

hardware.bas
12.01.2019, 17:31
Es wird der RC5-Code sein.
Dann versuchs ich erstmal so, bzw mit den
höheren internen freilaufenden Oszillatoren,
warns 4 oder 8 MHz, hoffe, danach lässt sich
der AVR mit meiner einfachen LPT-basierenden
ISP-Schaltung noch flashen.
Die IR-Eingabe muss erst funktionieren, danach,
wie gesagt, erfolgt die genaue Festlegung der
genauen externen Taktfrequenz.
Eventuell soll der AVR dann die PLL-Referenzfrequenz
für später zu realisierende Downmischer erzeugen.
VG Micha

hardware.bas
12.01.2019, 21:08
Kleiner Nachtrag,
der Mutterquarz auf dem Board ist 66MHz.
Wenn ich diesen mit einem 74ac163 durch
6 auf 11MHz zur Taktversorgung für den AVR
runterteile, hätte ich sogar fast eine
Baudratenfrequenz. Würden die 11MHz reichen,
einen RC5-Code zu decodieren und ist nach dem
Umfusen die ISP-Programmierung noch möglich?
Wäre schön, das zu wissen, bisher lief alles perfekt
und das Zerflashen des AVR würde das ganze
Projekt schrotten, wäre schäde
VG Micha

Searcher
13.01.2019, 10:15
Hallo hardware.bas,

die Beispiele in BASCOM arbeiten mit 4MHz. Ich benutze zum IR-Empfang von RC5 mit dem GETRC5 Befehl meistens ATtiny25 auf internem RC Oszillator mit 8MHz. Geht prima. 11Mhz sind auf jeden Fall schnell genug um RC5 zu dekodieren. Ob die BASCOM Befehle die 11MHz auch richtig verwerten ist eine andere Frage.

Ich habe auch einen RC5 Sender mit ATtiny25 bauen wollen. Geht so ohne weiteres nicht, da BASCOM einen 16Bit Timer dafür braucht. Habe dann einen ATtiny24 genommen.

Du sprichst von dem LPT basierten ISP Programmer. Den habe ich seinerzeit nach Deiner Vorlage (wenn ich mich richtig erinnere) mit 74HC125 nachgebaut und benutze den immer noch unter WINXP. Beim Fusen, bei 1Mhz, 8MHz, 16MHz bis 20MHz. Bisher habe ich keine Probleme damit gehabt.

Gruß
Searcher

hardware.bas
13.01.2019, 10:28
Searcher, vielen Dank für die Antwort,
das beruhigt mich und bringt mich erstmal mit
internem Freilaufoszillator weiter.
Vielleicht teile ich später, wenn ich einen
präzisen Takt brauche auch noch weiter runter.
Den von Dir geschilderten LPT-Programmer habe
ich auchmal genutzt, jedoch vor ca 2 Jahren
durch eine Fehlschaltung geschrottet.
Seitdem nutze ich den LPT-Programmer lediglich
mit den Entkopplungswiderständen, da die PINs
für MISO, MOSI und SLK bei mir immer als
Ausgänge benutzt werden, dadurch keine
harten Pegel der Drumrumhardware Konflikte
machen können. VG Micha

oberallgeier
13.01.2019, 11:06
Hallo Kollegen.


.. die Beispiele in BASCOM arbeiten mit 4MHz .. habe auch einen RC5 Sender mit ATtiny25 bauen wollen .. BASCOM einen 16Bit Timer dafür braucht ..Schade dass ich da nicht helfen kann - BASCOM kann ich nicht. Kann nur schreiben, dass ich !in C! meine RC5-Empfangsroutinen interruptgesteuert (PCI - Pin Change Interrupt) und mit nem 8bittigen Timer realisiert habe, damit empfange ich auch erweiterte Befehle aus 3 RC-5-Telegrammen WENN die komplett aus Ziffern bestehen. Sicher geht auch ne Senderoutine mit 8 Bit - nur eben wohl selbst gestrickt.

hardware.bas
13.01.2019, 11:56
Ich denk mal, dass kriegt man compilerunabhängig
hin. Diverse Timer sind frei und der IR-Empfänger
kommt sicherheitshalber an einen Interruptfähigen
Eingang.
Erst muss ich jedoch feststellen, welcher IR-
Empfänger zwecks Modulationsfrequenz zu den
rumliegenden FBs passt. Mache ich mit LED und
schaue, wie die Reichweite ist.
VG Micha

RoboHolIC
14.01.2019, 00:23
Die Frequenzgenauigkeit und -stabilität des Controllers braucht nicht besser als ein bis zwei Prozent sein. Die Datenblätter der mir geläufigen IR-Empfänger a la TSOP4836, SFH5110-36 etc. (das sind 36kHz-Typen, z.B. für RC5) zeigen, dass die Empfänger je nach IR-Leuchtstärke recht variable, ungleiche ON- und OFF-Zeiten liefern, wenn man sie mit (symmetrischen) 50:50-IR-Bursts passender Frequenz anstrahlt. Die Abweichungen vom Ideal liegen eher im zweistelligen Prozentbereich.

Misst man die absoluten Zeiten am Empfängerausgang, dann muss man mit relativ großen Toleranzen rechnen. Tastet man jedoch die Pegel zu bestimmten Zeiten ab oder misst man die Abstände jeweils steigender oder fallender Flanken, dann ist die Taktgenauigkeit viel unkritischer.

Wenn die 'rumliegenden Fernbedienungen' tatsächlich RC5 senden, dann modulieren sie mit 36kHz.

Hoffnungsvolle IR-FB-Kandidaten für RC5 sind nach meiner Erfahrung die FB-Sender von LOEWE und Technisat (DVB-T).

oberallgeier
14.01.2019, 09:52
Hallo Micha!

.. Erst muss ich jedoch feststellen, welcher IR-Empfänger zwecks Modulationsfrequenz zu den rumliegenden FBs passt ..Bei SB (San Bergmans) gibts Grundlagen zu den (https://www.sbprojects.net/knowledge/ir/index.php) IR-Codes hier. Seine ausführlichen Listen über verschiedene Codes sind leider nicht mehr online, aber dazu gibts ja hier (https://rn-wissen.de/wiki/index.php?title=RC5-Code) im RNWissen noch einige Unterlagen. Detaillierte Unterlagen zu den einzelnen Tastencodes bei RC-5 gibts hier ausführlich (https://www.opendcc.de/info/rc5/rc5.html).

Für die Arbeit am/mit dem Code hatte ich mir einen Scan von meiner Fernbedienung gemacht und die entsprechenden Codeziffern (Wert des Befehlsbytes) dezimal drangeschrieben. War/ist für mich sehr hilfreich.

......https://dl.dropbox.com/s/riwcap8vzj5f1jl/RC-5_IR-Steuerg_besch-kplt_10%25.JPG?dl=0 (https://dl.dropbox.com/s/he4w4ua2orij629/RC-5_IR-Steuerung_beschriftet-kplt.jpg?dl=0)
......© oberallgeier (größere Darstellung im Bild verlinkt)

Vielleicht kennst Du das alles schon, vielleicht hilfts Dir aber auch weiter. Viel Erfolg.

hardware.bas
10.02.2019, 10:04
Nachdem die RS232-Kommunikation bis 2400baud mit
internem 1 MHz-Freilaufoszillator keine Probleme bereitet,
ist nunmehr endlich die IR-Eingabe dran:

Die (versuchsmässig erstmal vorgesehene) Taktung mit
internen 4 MHz und 8 MHz - Freilaufoszillator sollte jetzt
der nächste Schritt sein. Dass ich dabei das einfache
LPT-Dongle mit den 3 Widerständen auch weiterhin
nutzen kann, wurde mir hier im Forum ja bestätigt,
ich, dass klappt dann auch.

Gehe ich recht in der Annahme, dass ich dabei kein
Fusebit ändern muss und dass es reicht, wenn ich
in der regfile lediglich 8000000 oder 4000000 statt
bisher 1000000 eintrage?

Vielen Dank und viele Gruesse
Micha

WL
10.02.2019, 18:51
Gehe ich recht in der Annahme, dass ich dabei kein
Fusebit ändern muss und dass es reicht, wenn ich
in der regfile lediglich 8000000 oder 4000000 statt
bisher 1000000 eintrage?


$regfile = "M162def.dat" bezeichnet deinen ATMega.
Die Angabe $crystal = 8000000 gibt die (tatsächliche) Taktfrequenz des µC dem Compiler auf den Weg.
Nur $crystal =xxxxxxx zu ändern führt nicht zum Erfolg.

Vitis
11.02.2019, 18:54
Nein, die $crystal brauch der Compiler um z.B. wait 1 zu berechnen, also für die interne Kalkulation. Nur die Fuses ändern auch tatsächlich die Taktfrequenz des Controllers.
Der LPT-Programmer funktioniert auf höherer Taktung, andersherum ists doofer. Wenn Du z.B. mit nem schnellen Programmer flashen willst MKII z.B., dann kann es sein das der für nen AVR im Aulieferungszustand bei 1MHz zu schnell ist.

Hatte vor Jahren mal rund 200 Boards zu flashen und dafür den MKII benutzt, hab mir dann n Script geschrieben, das den Programmer erst langsam stellte, dann die Fuses auf extern 16MHz, dann den schnellen Gang im ISP und erst dann das Hexfile.
Hätte sonst ewig gedauert.

Unregistriert
11.02.2019, 19:27
.. Nur die Fuses ändern auch tatsächlich die Taktfrequenz des Controllers ..Sorry für die Pingeligkeit: mit den Fuses wird ein Controller auf externe oder interne Taktgeber eingestellt. Daher auch der beliebte Anfängerfehler nen Controller auf Quarz einzustellen ohne dass ein Quarz oder Resonator vorhanden ist. Ist kein großes Problem - aber erstmal läuft dann nix mehr . . .

hardware.bas
12.02.2019, 00:32
Hmm, erstmal danke fürs allgemeine Feedback,
ich bleibe wohl jetzt beim internen 1MHz-Freilaufoszillator.
Das mit den Fusebits ist mir zu riskant. Die Hardware
funktioniert, ich werd jetzt mit einem temporären
Testprogramm den Impulsfahrplan diverser FBs loggen
und das mit meiner jetzigen Schaltung, dann mittels
RS232, der funktioniert ja auch, auf den HTterm
ausgeben. Da ich ja nur die Tasten 0-9 und 4
zusätzliche Funktionstasten brauche, drösele ich mir
das raus und versuche mir den Code selbst
zurechtzubasteln. Über die Erfolge berichte ich dann.
VG Micha

seite5
12.02.2019, 08:26
aber erstmal läuft dann nix mehr . . .
Stark übertrieben - einfach an den Takteingang einen (fast) beliebigen Takt hängen - und schon geht's wieder (Ein Kollege behauptet, es mit einer
einfachen 50cm-Draht-Antenne geschafft zu haben!). Die Fuses als Grund zu nehmen, nicht mit höherem Takt zu arbeiten, halte ich für den falschen
Ansatz.
Und ansonsten nimm XMEGA, da ist das ganze Geraffel mit den Fuses fast vollständig entsorgt worden.
mfg
Achim

oberallgeier
12.02.2019, 10:27
Hi Micha!


.. ich werd jetzt mit einem temporären Testprogramm den Impulsfahrplan diverser FBs loggen ..Tu was Du nicht lassen kannst - aber ich habe mittlerweile San Bergmans Internet-sites zu VIELEN IR-Codes wieder gefunden. Den Einstieg dazu (https://www.sbprojects.net/knowledge/ir/index.php) hatte ich vor einem Monat gepostet, leider hatte ich damals seine feine Navigation übersehen. Die ist auf der eben verlinkten Seite oben rechts:

......https://dl.dropbox.com/s/tkv0ufr3hkpr8za/SanBergmans-navi.jpg?dl=0

Wenn Du dort auf den Pfeil > klickst, dann tut sich für Dich ne knowledgebase auf, die jede Menge IR-Codes, wohl über ein Dutzend!, ausführlich beschreibt einschließlich vieler vordefinierter Codes der einzelnen Tasten. Damit könntest Du Dir ne ganze Menge Arbeit ersparen . . . Aufgrund dieser Informationen hatte ich auch meine Programmierung z.B. des RC-5-Codes (Manchestercodierung) ausgearbeitet:


/* ================================================== =========================== =
================================================== =========================== =
Beispiele für RC-5-Signalgang/Manchester-Codierung

| | | | Bitdauer 2x889 µs (2*17,78 tupsi) => 1,778 ms/35,56 tupsi
+---+ | | +---+ Für den Wert des Bits ist Übergang in Bitmitte massgebend
|HHH| | | |HHH|
|HHH+---+ +---+HHH| ==> Übergang von 1 nach Null <=> Bitwert 0
|Logic 0| |Logic 1| ==> Übergang von 0 nach 1 <=> Bitwert 1

| | | | | | | | | |
| +-+-+ | +-+-+ | +-+ +-+-+ +-+ +-+ | 1 Bit 1,778 ms / 35,56 tupsi
| | | | | | | | | | | | | | | | | | | 14 Bit 24,892 ms / 497,84 tupsi
+-+ | +-+-+ | +-+-+ +-+ | +-+ +-+ +-+ Gap 114 ms / 2800 tupsi
Bit- | | | | | | | | | |
Wert 1 0 1 0 1 1 0 0 0
================================================== =========================== =
================================================== ===========================*/

hardware.bas
12.02.2019, 11:25
Vielen Dank erstmal für die Infos zu den Codes.
Das andere werde ich jedoch trotzdem versuchen,
da einerseits der ATmega162 im Betriebszustand eh
nichts zu tun hat, andererseits ist es reine Neugier,
mal zu versuchen, unbekannte Codes - nicht nur IR -
durch Absamplen und Loggen von Impulspaketen
zu verstehen. VG Micha

oberallgeier
12.02.2019, 11:34
.. reine Neugier, mal zu versuchen, unbekannte Codes - nicht nur IR - durch Absamplen und Loggen von Impulspaketen ..Gut, das finde ich gut. Das hatte ich auch so gemacht/gesehen, als ich das erste Mal über die IR-Fernsteuerung meines archie ging. Ich hatte bei der Decodierung der Codes auch die tatsächliche Bitfolge ( 100 1101 ) ausgegeben aufs Terminal. Das war SEHR nützlich. Einfach die Abfrage
if Bit gesetzt dann schreibe "1", sonst schreibe "0"
. . . keine Ahnung wie das in Bascom wäre. Wirklich empfehlenswert, hatte mir mehr geholfen als der nackte Zahlenwert - der auch ausgegeben wurdee *gg*.

Viel Erfolg