Dirk
14.09.2006, 19:25
Schon wieder ein neuer Sklave?
Weil sich der 2313-Coprozessor auf der RNBFRA oft langweilt (es fehlte die passende Aufgabe!), hat ihm PicNick ja schon beigebracht, wie er als I2C-Slave hervorragend 10 Servos ansteuern kann.
Guckst du da: https://www.roboternetz.de/phpBB2/viewtopic.php?t=21164
Warum sollte er auf dieser Grundlage nicht noch weitere Fähigkeiten entwickeln? Wie wäre es, wenn er (als zweite - zugegeben banale - Aufgabe) das Senden und Empfangen von RC5-IR-Code lernen würde und das natürlich als I2C-Sklave?
Leider geht das mit BASCOMs "Getrc5" gar nicht, so dass ich den IR-Empfang im Hintergrund über einen Timer mit Zwischenpuffer gelöst habe.
Für die I2C-Slave-Funktion habe ich natürlich die geniale Lösung von PicNick genommen, wie sie auch in seinem Servo-Sklaven (RNSI2C) umgesetzt ist.
An den 2313 auf der RNBFRA muss ein IR-Empfänger (z.B. TSOP 1736) an Pinb.2 = "Servo 3" angeschlossen werden und optional ein IR-Sender an Pinb.3 = "Servo 4".
In den Coprozessor gehört das Prog "RNIRI2C.HEX". Es ist nicht nur in einem 2313 auf der RNBFRA lauffähig, sondern kann auch auf anderen Platinen arbeiten, auf denen SDA = Portd.2 und SCL = Portd.3 ist.
Der M32 arbeitet dann das Demoprog "RNIRI2CTest.bas" ab.
Als Demo schickt der Master (M32) im 10-Sekundenrhythmus via I2C den Befehl an den Slave, alle IR-Kommandos von 0 bis 63 nacheinander zu senden. Dafür hat der Slave keinen "Sendepuffer", d.h. jeder einzelne IR-Code (bestehend aus Adresse und Kommando) wird gnadenlos gesendet. Wie bei RC5 üblich, "toggelt" der Slave selbständig,- darum braucht sich der Master also nicht zu kümmern.
Zusätzlich empfängt der Master vom Slave (2313) IR-Codes, die z.B. von einer TV-RC5-Fernbedienung stammen. Dabei kann der Slave 10 empfangene IR-Codes zwischenpuffern. Diese 10 Codes können dann vom Master gelesen werden (also max. 20 Bytes,- er kann auch weniger lesen, aber dann bitte eine GERADE Zahl von Bytes).
Wie häufig sollte ein Master den Puffer des Slave lesen? Wenn man nicht sinnlos auf der Fernbedienung herumdrückt, kann man (zumindest ICH) gezielt max. 2 Tasten pro Sekunde ansteuern. Damit dürfte kein Tastendruck verloren gehen, wenn der Master alle 5 Sekunden eine Abfrage macht.
Enthalten alle 10 Codeplätze 255 (für Adresse und Kommando), dann ist der Puffer leer. Enthält nur 1 Codeplatz die Werte 255 (Adresse und Kommando), dann enthält der Codeplatz DAVOR den zuletzt gesendeten IR-Code.
Beispiel: Nur Codeplatz 3 enthält 255. Dann stehen auf Platz 2 und 1 des Puffers die beiden zuletzt empfangenen IR-Codes und auf den Plätzen 10 bis 4 der dritt- bis neuntletzte empfangene IR-Code. Der Puffer arbeitet also in Form eines "Ringpuffers" und wird nur dann komplett gelöscht, wenn es vom Master einen Lesezugriff gab.
Der Master könnte auch die I2C-Adresse des Slave (Standard: H68) ändern.
Format: START | 1 | neue I2C-Adresse | STOP
Die neue I2C-Adresse (2, 4, ... 252, 254) bleibt im Slave fest gespeichert.
Zusätzlich läßt der Master noch über den Energieport der RNBFRA 1.22 (PCF3) drei LEDs munter blinken. Aber das ist natürlich Unsinn und müßte nicht sein (sieht aber gut aus)!
Viel Spaß!
Gruß Dirk
P.S.: Bitte um Eilmeldungen, falls der Sklave nicht das macht, was der Master will!
Weil sich der 2313-Coprozessor auf der RNBFRA oft langweilt (es fehlte die passende Aufgabe!), hat ihm PicNick ja schon beigebracht, wie er als I2C-Slave hervorragend 10 Servos ansteuern kann.
Guckst du da: https://www.roboternetz.de/phpBB2/viewtopic.php?t=21164
Warum sollte er auf dieser Grundlage nicht noch weitere Fähigkeiten entwickeln? Wie wäre es, wenn er (als zweite - zugegeben banale - Aufgabe) das Senden und Empfangen von RC5-IR-Code lernen würde und das natürlich als I2C-Sklave?
Leider geht das mit BASCOMs "Getrc5" gar nicht, so dass ich den IR-Empfang im Hintergrund über einen Timer mit Zwischenpuffer gelöst habe.
Für die I2C-Slave-Funktion habe ich natürlich die geniale Lösung von PicNick genommen, wie sie auch in seinem Servo-Sklaven (RNSI2C) umgesetzt ist.
An den 2313 auf der RNBFRA muss ein IR-Empfänger (z.B. TSOP 1736) an Pinb.2 = "Servo 3" angeschlossen werden und optional ein IR-Sender an Pinb.3 = "Servo 4".
In den Coprozessor gehört das Prog "RNIRI2C.HEX". Es ist nicht nur in einem 2313 auf der RNBFRA lauffähig, sondern kann auch auf anderen Platinen arbeiten, auf denen SDA = Portd.2 und SCL = Portd.3 ist.
Der M32 arbeitet dann das Demoprog "RNIRI2CTest.bas" ab.
Als Demo schickt der Master (M32) im 10-Sekundenrhythmus via I2C den Befehl an den Slave, alle IR-Kommandos von 0 bis 63 nacheinander zu senden. Dafür hat der Slave keinen "Sendepuffer", d.h. jeder einzelne IR-Code (bestehend aus Adresse und Kommando) wird gnadenlos gesendet. Wie bei RC5 üblich, "toggelt" der Slave selbständig,- darum braucht sich der Master also nicht zu kümmern.
Zusätzlich empfängt der Master vom Slave (2313) IR-Codes, die z.B. von einer TV-RC5-Fernbedienung stammen. Dabei kann der Slave 10 empfangene IR-Codes zwischenpuffern. Diese 10 Codes können dann vom Master gelesen werden (also max. 20 Bytes,- er kann auch weniger lesen, aber dann bitte eine GERADE Zahl von Bytes).
Wie häufig sollte ein Master den Puffer des Slave lesen? Wenn man nicht sinnlos auf der Fernbedienung herumdrückt, kann man (zumindest ICH) gezielt max. 2 Tasten pro Sekunde ansteuern. Damit dürfte kein Tastendruck verloren gehen, wenn der Master alle 5 Sekunden eine Abfrage macht.
Enthalten alle 10 Codeplätze 255 (für Adresse und Kommando), dann ist der Puffer leer. Enthält nur 1 Codeplatz die Werte 255 (Adresse und Kommando), dann enthält der Codeplatz DAVOR den zuletzt gesendeten IR-Code.
Beispiel: Nur Codeplatz 3 enthält 255. Dann stehen auf Platz 2 und 1 des Puffers die beiden zuletzt empfangenen IR-Codes und auf den Plätzen 10 bis 4 der dritt- bis neuntletzte empfangene IR-Code. Der Puffer arbeitet also in Form eines "Ringpuffers" und wird nur dann komplett gelöscht, wenn es vom Master einen Lesezugriff gab.
Der Master könnte auch die I2C-Adresse des Slave (Standard: H68) ändern.
Format: START | 1 | neue I2C-Adresse | STOP
Die neue I2C-Adresse (2, 4, ... 252, 254) bleibt im Slave fest gespeichert.
Zusätzlich läßt der Master noch über den Energieport der RNBFRA 1.22 (PCF3) drei LEDs munter blinken. Aber das ist natürlich Unsinn und müßte nicht sein (sieht aber gut aus)!
Viel Spaß!
Gruß Dirk
P.S.: Bitte um Eilmeldungen, falls der Sklave nicht das macht, was der Master will!