ATmega und Infrarot-FB

Kani

Neues Mitglied
07. Jan. 2009
339
0
0
Spenge
Sprachen
Hallooooo,
:cheers:
ich melde mich auch mal wieder. Ich bin dabei ein Revell 1:24 LF 16 (Feuerwehr-LKW) zu verlichten. Um keine lästigen Schalter etc. zu haben, würde ich gerne eine Infrarot-Fernbedienung verwenden. Programmieren möchte ich wie immer alles in C.
Diesmal ist auch mehr Verständnis vorhanden - versprochen. =):adore:

Hat jemand soetwas schonmal gemacht?
Worauf muss ich bei den Fernbedienung achten?
Welche Bauteile gibt es zum Empfangen dieser Signale? Mit einem einfachen Fotoransistor wird es wahrscheinlich nicht gehen oder?

Liebe Grüße,
Finn
 
Hallo Kani!

Bekannter Maßen.... und wie es in meiner Signatur steht ;) .... programmiere ich ja nicht in C und werde dir deswegen auch nicht helfen können :rolleyes: ,
aber als FB würde ich eine Universal-FB nehmen die auch RC5-Signale senden kann (z.B. Philips Geräte).

Zum Empfang der Signale kannst du z.B. einen TSOP 1736 nehmen.
Da gute Stück ist günstig (siehe Link) und ist weit aus intelligenter als ein Fototransistor. ;)

Der Rest ist dann wohl mehr Softwaresache, bei der ich dir dann nicht mehr helfen kann.
Das waren halt noch Zeiten, als Nomis3000 sich der Sache angenommen hat. ;)

Gruß,
Cassio
 
Hi Cassio,
ich habe gelesen, dass RC5 schon veraltet ist, stimmt das?
Bei Reichelt gibt es ne Universal für 8€, die würde ich mir gönnen.
Kann man die Empfänger-Routine von Bascom oder Assembler in C einbinden?
Sodass ich nur abfragen muss, ob die jeweilige Taste gedrückt wird/wurde?

Lg, Finn
 
Hallo Finn!

Nun ja, ich würde nicht sagen, dass der RC5-Code veraltet ist!
Wie kommst du überhaupt auf die Idee? :hmmmm:
Es gibt ihn zwar schon sehr lange, wird aber heute noch bei Neugeräten eingesetzt.

In den letzten Jahren wurde der ursprüngliche RC5-Code aber leicht "modifiziert" und nennt sich dann RC5Extended.

Mit der "alten" Version konnte man nur 64 verschiedene Kommandos senden.
In der geänderten Version sind es nun 128 Kommandos.

Damit aber alle alten Geräte weiterhin bedient werden konnten, hat man für den Extended-Code einen kleinen Trick verwendet.

Der RC5-Code ist ein 14Bit-Word.
Die ersten beiden Bits sind eigentlich immer "11............"!
Dies entspricht dem "alten" RC5-Code.

Bei der Extended-Version ist dies geändert in "10............"!

Der Rest ist in beiden Versionen identisch!
Nach den beiden "Startbits" folgt das Togglebit, dann die 5-Bit Geräteadresse (32 Möglichkeiten) und zum Schluss das 6-Bit Kommando (64 Möglichkeiten).
Sind also in beiden Fällen 14 Bit die übertragen werden. ;)

Durch das Ändern des zweiten "Startbits" werden in der Extended-Version somit aus 64 Möglichkeiten dann 128 Möglichkeiten.

Ich würde nun einfach mal behaupten, dass dies doch locker für deine Zwecke ausreichend sein müsste. ;)


Kann man die Empfänger-Routine von Bascom oder Assembler in C einbinden?

Keine Ahnung?
Meines Wissens nach geht dies zwar bei BASCOM, aber nicht bei C ! :rolleyes:
Würde aber ja auch keinen Sinn machen, oder? :hmmmm:
Ich bin der Meinung.... DU hast dir selber das Ziel gesetzt in C zu programmieren!
Also solltest du alles dran setzen diese Sprache auch selbstständig zu erlenen!

Manchmal habe ich jedoch den Eindruck, du möchtest nur in C programmieren weil es "cooler" klingt.......... als BASCOM zu sagen. ;)

Wünsche dir jedenfalls viel Spaß beim tüfteln und ausprobieren. :)

Gruß,
Cassio
 
Hi,

das mit der veralteten Version habe ich auf microcontroller.net gelesen.
Habe gute Tutorials zu gefunden. Werde bald mal damit anfangen was auszuprobieren.

Sind im moment gerade dabei, S7-300 zu programmieren. Haben bei Eon nen SPS Raum, als unser Ausbilder sagte, was das alles Wert sei, bekam man richtig Respekt davor. :p
Er sprach von nen Oberklasse-Wagen bis Einfamilienhaus. So um die 100.000€.
Mit Touchpads und, und, und.

Da programmiere ich gerne mit der Anwendungsliste, da ich das schreiben einfach lieber mag. =)
Naja und C weil ich damit angefangen bin, dann will ich auch dabei bleiben.

Liebe Grüße,
Finn
 
Hallo Dino.

Ich habe auch schon das passende in C gefunden, trotzdem danke.
Bei Reichelt habe ich diese Fernbedienung gefunden:
Artikel-Nr.: HAMA 12047

Leider steht nirgends bei, ob sie RC5 sendet.
Diese TSOP 1736 gibt es nicht in viele Shops kann das sein? Schade das Reichelt den nicht hat. Wie sieht es eigentlich mit der Codierung aus, ist es irgendwo festgelegt, dass z.B. die Taste 1 auf der Fernbedienung, einen bestimmten Binärcode hat?
Hier mal der Link zum Tutorial:
http://www.rn-wissen.de/index.php/RC5-Decoder_für_ATMega
 
Hallo Finn!

Nun ja.... die Preise bei Siemens (in der Steuerungs- und Automatisierungstechnik) sind doch als sehr relativ anzusehen!
Das diese durch bestimmte wirtschaftspolitische Entscheidungen seit Jahren künstlich hochgehalten werden ist aber ein ganz anderes Thema! :rolleyes:

Bleiben wir also lieber bei deiner FB. ;)

Ich habe auch schon gesehen, dass der TSOP1736 momentan fast nicht zu bekommen ist. :eek:
Reichelt hatte den sonst immer auf Lager und nun..... nix.
Einen Vergleichstyp fällt mir jetzt nur der Siemens SFH506-36 ein. :rolleyes:

Da der TSOP1736 bereits auf die 36kHz Trägerfrequenz abgestimmt ist und er dir quasi nur noch die Daten ausgiebt, kann er natürlich mehr als ein Fototransistor.
Außerdem hat er eine eigene Regelung eingebaut, die je nach Lichtverhältnissen den Empfang anpasst.


Mir scheint aber auch, als hättest du das Prinzip des RC5-Codes noch nicht ganz verstanden.
Also noch mal....
Der RC5-Code hat 5 Bit für die Geräteadresse und 6 Bit für die Kommandos.
Es gibt natürlih Vorgaben von Philips, welche Adresse bzw. Kommandos zu welchen Geräten bzw. Tasten gehören.

Mal ein paar Beispiele:
Adresse 00 = TV
Adresse 05 = VCR

Kommando 12 (bzw. 61) = StandBy
Kommando 16 = Lautstärke +
Kommando 17 = Lautstärke -

Wenn du also 00/12 sendest (zzgl. Togglebit und die Startbits).....
binär also: "1_1_0_00000_001100"
dann wird dein TV ein- bzw. ausgeschaltet.

Sendest du aber 05/12, dann wird dein Videorecorder ein- bzw. ausgeschaltet.

Ich habe eben doch noch eine "alte" Übersichtsliste bei mir gefunden: rc5code.gif

Ich hoffe, damit wir es etwas klarer! ;)


Was deine Uni-FB betrifft.....
Da reicht auch eine von JaWoll oder KiK für 1,99 Euro aus. :cool:
Den RC5-Code können die eigentlich alle senden, wenn du verschiedene Philipsgeräte einstellen kannst.

Gruß,
Cassio
 
Hi,

Was deine Uni-FB betrifft.....
Da reicht auch eine von JaWoll oder KiK für 1,99 Euro aus. :cool:
Den RC5-Code können die eigentlich alle senden, wenn du verschiedene Philipsgeräte einstellen kannst.
oder wenn man ne PC-TVkarte (Hauppauge, ...) hat. Da sind sowieso FB
dabei. Evtl gehen sogar die oder ne andere die von nem kaputten Gerät ist.
Einfach mal durchtesten. Und wenn du erst mal nur nen Bitstrom auf ein
Display zauberst damit man sehen kann was da so ankommt.

Gruß
Dino
 
Hallo ihr beiden.
@Cassio: Genau soeine Tabelle habe ich gesucht.
Das Prinzip mit den Adressen und Befehlen habe ich verstanden. Ich wusste nur nicht, welcher Befehl weil welchem Tastendruck gesendet wird.
Das muss ich ja wissen, dass z.B. die Taste "Lautstärke +" wirklich vereinfacht gesagt LED 1 an oder aus macht.
Ich muss meine Programme (z.B. LED-Lauflicht) ja einem Befehl zuordnen.

Nen Kumpel von mir arbeitet im EP-Laden, die haben bestimmt oft Defekte Fernseher, wo eine FB für mich raus springt. Zum testen reichen ja erstmal die, die ich hier von meinen Geräten rummliegen habe.

Nochmal zu C:
Ich habe mit Mikrocontrollern und C angefangen, weil ich ja mal diesen Thread mit DMX verfolgt habe.
So bin ich zu C gekommen, am meisten verwirrt mich an C, dass es für mich unverständlich ist, wie soein Code entschlüsselt wird. Die Zeiten generell bei Mikrocontrollern bekomm ich irgendwie nicht gebacken. Ich weiß, dass jede 1,778ms ein neues Bit vom IR-Empfänger rein kommt.

Wie z.B. soll der Controller wissen, ob das jetzt ein Start-Bit oder keins ist. Wie stelle ich es an, dass er jede 1,778ms neu nachschauen soll.

Die empfangenen Bits kann ich ja erstmal speichern und später vergleichen, ob der Befehl gültig ist.

Ist sowas in Assembler oder Bascom "einfacher" oder eher "simpler"
 
Hi Kani,

also das mit den Bits in einem Datenstrom erkennen ist eigentlich nicht weiter
schwer wenn man erst einmal weiß wie es in Hardware abläuft (abprogrammieren).

In Hardware läuft es so ...

Code:
[FONT="Courier New"]----____----________----____ eingehender Datenstrom
^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Sample-Zeitpunkte
||||||||||||||||||||||||||||
1111000011110000000011110000 Bits im Schieberegister
  1   0   1   0   0   1   0  herausgelesene Datenbits[/FONT]
Das wäre zum Beispiel mit einem Oversampling mit dem vierfachen Datentakt.
Wenn man also mit 50kBit Daten empfangen will dann samplet man mit 200kHz.
Diese Samples werden in ein Schieberegister eingespeichert. Da gibts bei
Controllern wunderbare Shift-Befehle für. Und nun legt man eine Maske auf
das Muster im Schieberegister. Man faßt zB bei vierfachem Oversampling
immer 4 Bits im Schieberegister zusammen. Wenn du 3x eine 1 drin hast dann
wird das wohl ein Datenbit 1 sein. Wenn du 3x eine 0 in diesen 4 Bits hast
dann ist es wohl eine 0 als Datenbit. Es wird also nach einer Mehrheit
demokratisch auf 0 oder 1 entschieden.

Für den Anfang des Datenstroms könnte man jetzt zB auf eine steigende
oder fallende Flanke auf der Datenleitung triggern oder man erwartet ein
bestimmtes Bitmuster oder oder oder ... da gibts viele Möglichkeiten.

Diese Vorgehensweise hab ich hier wunderbar in einem Buch über die Z80-
Prozessorserie erklärt. Da ist die Z80-SIO (Serial In/Out) drin erklärt. Also
sozusagen der UART-Baustein für den Z80-Prozessor.

Das war es jetzt mal in Kürze ... ;)

Gruß
Dino
 
Okay, ich glaube ich lass das einfach und arbeite mit NE555 und Tastern.
Ich bin nicht doof, aber ich verstehe einfach nicht, wie ich das in C umsetzen muss. Ist das gleiche Problem wie damals auch. Ich könnte dem Mikrocontroller auf Hochdeutsch vorschreiben, was er machen soll, bringe das aber nicht auf (wie in meinem Fall) C nieder. Ich frage mich bei sowas immer, wenn ich das zuhause lese.
"Wiieee? Maske auflegen...?"

Ich glaube, ich lege das mal wieder auf Eis oder mach alles mit NE555 und Schalter...obwohl ich glaube, wenn dann lasse ich das ganz - Ganz oder garnicht.
 
Hallo Kani!

Es ist bestimmt keine Schande, wenn du dieses kleine Projekt mal mit BASCOM versuchst. ;)

Schau dir mal meinen Thread mit dem Norkadosendimmer an!

Dort verwende ich auch einen TSOP1736 und den RC5-Code. ;)

Mit der BASCOM-Demoversion kannst du ohne weitere Kosten dieses kleine Programm schreiben und auch kompilieren, da die 4K Grenze nicht überschritten wird. :)


Kurz und gut...
Bevor du die NE555 wieder rausholst, lade dir die BASCOM-Demo und versuche es einfach mal. ;)

Schöne Grüße,
Cassio
 
Hi Kani,

Ich bin nicht doof, aber ich verstehe einfach nicht, wie ich das in C umsetzen muss. Ist das gleiche Problem wie damals auch. Ich könnte dem Mikrocontroller auf Hochdeutsch vorschreiben, was er machen soll, bringe das aber nicht auf (wie in meinem Fall) C nieder. Ich frage mich bei sowas immer, wenn ich das zuhause lese.
"Wiieee? Maske auflegen...?"
ups ... Also ne Maske ist eigentlich kein Hexenwerk. Du kennst doch warscheinlich
IP-Adressen und Netzmasken ...
also zB ....
192.168.100.124 (IP-Adresse)
255.255.255.0 (Netzmaske)
Die Netzmaske sieht binär so aus 11111111 11111111 11111111 00000000
Wenn du die IP-Adresse mit der Netzmaske bitweise UND-verknüpfst dann
maskiertst du zB alle hinteren Bits raus. Übrig bleibt ...
192.168.100.0 (Dein IP-Netz in dem die Adresse liegt)
Das meine ich mit maskieren. Man baut sich einen Zahlenwert (Binär) - also
ein Maske die mit einem anderen Wert auf irgendeine logische Weise verknüpft
wird damit man nur noch das übrig behält was einen interessiert.

Vergleichbar ... Du schaust durch ein Schlüsselloch. Das was dich interessiert
ist das Mädel im Zimmer und nicht die Blumen auf dem Fensterbrett. Bis auf
das Mädel ist alles andere vom Schlüsselloch ausmaskiert :D :p :rolleyes:

Wenn man schon länger programmiert (wie ich) dann haut man schnell mal
nen paar Wörter rein die man einfach so verwendet ohne nachzudenken ob
der andere die evtl nicht richtig versteht :eek:

Ach ja ... noch zu Cassios Idee ... Ist eigentlich garnicht so blöd.
BASCOM hat schon ne Menge an Bibliotheken drin. Da kann man schnell
vorwärts kommen. Die Befehle findet man sowieso in ähnlicher weise in
C, PERL, JAVA, ... wieder. Also probier es doch einfach mal. Dann wären die
wildesten Hardware-Anpassungen schon weg und du kannst dich zuerst mal
auf die "Intelligenz" im Programm konzentrieren. Wenn es dann klappt
kann man es immer noch in Richtung C portieren.

Gruß
Dino
 
Hi,

ich hab mir überlegt, dass ich bei C bleibe und nochmal von neu anfange.

Dieser Satz ist doch schon was für die Maske
Die Abfrage der Zustände von Bits erfolgt durch Einlesen des gesamten Registerinhalts und ausblenden der Bits deren Zustand nicht von Interesse ist. Einige Beispiele zum Prüfen ob Bits gesetzt oder gelöscht sind:
 
Hi,
Dieser Satz ist doch schon was für die Maske
das beschreibt es recht gut. Du baust dir ein Bitmuster mit dem du die
uninteressanten Teile eines anderen Wertes (Zahl, String, ...) ausblenden
(also ausmaskieren) kannst. Man kann auch anders maskieren. Aber der
Zweck bleibt immer gleich. Uninteressante Teile einfach auszublenden oder
den Blick nur auf einen kleinen Teil zu werfen. Man kann zB bei ... sagen wir mal
... 64 Bits die von einem Eingang in ein Schieberegister gegangen sind mit
einer Maske die nur 4 Bit durchläßt ein Bitmuster suchen. Dafür bewegt man
die Maske Bitweise über die 64Bit-Kolonne im Schieberegister und sieht was
durch die Maske hindurchscheint. Also zB so ...

0100100101001011001010010101001010100101001010101010101
0000000000000000000000000000111100000000000000000000000
.................................<----..................--->.......................

Damit kann man in einem Bitstrom ein 4Bit langes Muster suchen.
Diese Maske kann man dann auch Fenster nennen. Man bewegt ein
Fenster über den Datenstrom (oder so) es gibt viele Ausdrucksweisen
für solche Maßnahmen.

Gruß
Dino
 
Jep, dass habe ich verstanden. Das bekomm ich auch hin, denke ich. Das sehe ich wenn ich beim auswerten der empfangenen Daten bin. Erstmal muss ich sie ja vernünftig empfangen und speichern, dann das Fenster "rüberziehen" und schauen was so durchsiebt.

Kann man einen Timer so einstellen, dass er in bestimmten konstanten Abständen den anliegenden Status in einer Variable speichert?

Also quasi so:

1: 1,7ms
0 empfangen
Bits in Variable: 0
2: 1,7ms
1 empfangen
Bit in Variable: 01
3: 1,7ms
1 empfangen
Bit in Variable: 011

Ich würde also gerne jede 1,7ms den aktuelen Status des Eingangs in eine Variable schieben.

Habe alles soweit verstanden, was mir noch unklar ist:
1. Wie bekomme ich die 1,7ms hin, da brauche ich ja einen Timer. Wie muss ich diesen Initialisieren.
2. Wenn das so "relativ einfach" ist, wieso sind die Codes im Internet so umständlich?
3. Brauche ich für den Empfang einen Interrupt?
 
Hi,

1. Wie bekomme ich die 1,7ms hin, da brauche ich ja einen Timer. Wie muss ich diesen Initialisieren.
Genau ... Du benötigst einen Timer .... Initialisierung steht im Datenblatt (C und ASM).
Such ich heute abend aber nicht mehr zusammen. Darum nur der Hinweis.

2. Wenn das so "relativ einfach" ist, wieso sind die Codes im Internet so umständlich?
:D Für (sorry) Anfänger sieht alles umständlich aus. Du must eigentlich nur ein
paar Register mit den richtigen Werten laden.

3. Brauche ich für den Empfang einen Interrupt?
Für den Empfang nicht unbedingt. Für den Timer ja.

Und nun mach ich langsam Schluß für heute ... :boring: ...:sleep:

Gruß
Dino
 
Hi, danke schonmal. Also wenn ich auf den richtigen Weg bin, bin ich schonmal glücklich.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)