- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 25

Thema: RP6Control M32: Projekt I2C-Slave

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Filou89
    Registriert seit
    24.12.2010
    Ort
    Thun, Switzerland
    Alter
    35
    Beiträge
    116
    Hallo Zusammen,
    Ich könnte auch Strings übertragen, aber das wäre dann doch etwas "übers Ziel hinaus".
    Ich würde es für sinnvoll halten, wenn man dem Slave einige "Standard-Strings" beibringen würde die im Programm hinterlegt werden und dann zur ausgabe auf dem LCD nur noch aufgerufen werden müssen.
    Im Sinne von:
    Code:
    #define CMD_WRITESTRINGNRLCD   2X
    Macht das Sinn?

    [EDIT]
    Punkt 10: Wie stellst du dir das "Weiterleben" vor? Sollen einfach keine neuen Befehle mehr ausgegeben werden, soll eine vordefinierte "Sicherheitsstellung" eingenommen werden, auf dem LCd eine Warnung ausgegeben werden und auf neue I2C Befehle gewartet werden... Als Slave soll er ja nur das tun, was der Master befiehlt.
    Mir scheint die "Sicherheitsstellung" sinnvoll. Der Slave würde dann eine Notfallprozedur abarbeiten. Das wäre aber sicher auch anwenderspezifisch; Man könnte jedoch hier eine gute Schnittstelle vorsehen.

    Ist für die Ansteuerung der Servos auch etwas vorgesehen?
    [/EDIT]
    Grüsse
    Geändert von Filou89 (12.09.2012 um 09:01 Uhr)

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Filou89
    Registriert seit
    24.12.2010
    Ort
    Thun, Switzerland
    Alter
    35
    Beiträge
    116
    Hi Dirk,
    Ich habe mal die Remotrol-Version und Base Version als Vorlage genommen und mal einen Anfang gemacht.
    Noch konnte ich nicht alle CMD's schreiben. Manche lesen eigentlich mehr aus als schreiben, andere schreiben und lesen. Das muss noch überarbeitet werden.
    Hoffentlich kannst du dies weiterverwenden.
    Grüsse
    Filou
    Angehängte Dateien Angehängte Dateien

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    @Filou89
    Die Idee mit den Strings per ID aufrufen ist erst mal bestechend gut - schauen wir uns aber mal die Praxis an:
    + Man könnte die Strings im EEPROM oder SPI Rom hinterlegen so das sie nicht im knappen Speicher rumliegen.
    - Das ist aber letztlich nur für fixe Strings ohne Variablen sinnvoll.

    Möchte ich - was wohl öfter statt findet - z.b. einen String wie "Bat:7,2V LDR_L: 500 LDR_R: 270" ausgeben,
    wird schnell klar das es nicht lohnt davon irgendwas vor zu definieren oder man müsste Funktionen basteln die Werte in Platzhalter abgelegter Strings frickeln... erinnert mich irgendwie an printf oder?

    Also geht es - für was auch immer - nur um Fixe Strings, ist die Idee gut. Für zusammengesetzte Strings bleibt nur "morsen".

    Schön wäre letztlich nur eine Lösung wie es ähnlich mit der RS232 gäbe, in dem man einfach per printf/scanf o.ä. ein Datenstrom auf der I2C verarbeitet und der Slave dies direkt zum Display bringt.
    Da sagte aber Dirk leider schon: "übers Ziel hinaus"

    Mehrarbeit an einer Stelle führt meist zu weniger Arbeit an vielen anderen Stellen. Leider wird bei den Interfaces gepart, auf vorhandene Lösungen gesetzt und auf Lowlevel programmiert.. nur muss man sich dann nicht über Lowlevelfunktionalität als Ergebnis wundern...

    So lässt sich jedenfalls kein vielseitiges, modulares Interface bauen auch wenn es für diese eine Anwendung vielleicht halbwechs funktioniert.

    EEPROM bzw. SPI ROM Speicher eignet sich hervorragend um z.B. crc, SIN, COS und ATAN2 Tabellen abzulegen... und vielleicht auch den ein oder anderen String ... aber das ist kein Ersatz für standartisiertes Stringhandling auf seriellen Interfaces jeglicher Bauform. Und genau das Fehlen solcher Konzepte auf dem RP6 erzwingt leider Lowlevel-I2C-Registergefummel-Lösungen.
    Natürlich kosten Alternativen auch Speicher aber man spart anderso wo auch - mit etwas Geschick sogar mehrfach. Der Witz ist... solche Lösungen gibts sogar schon - werden aber nicht verwendet.
    Stellt euch doch bitte nur mal vor... was man anstellen müsste wenn man 2 RP6 hat.. beide mit RFM12 und M32, wo nun die M32 der RP6_1 Daten auf die Base oder Display vom RP6_2 schreiben/lesen will.... Ok weil die M256 grade "in" ist nehmen wir halt die, statt der RFM12... macht es auch nicht einfacher. Mal abgesehen das 2 RFM12 10 Euro und bissel Hirnschmalz kosten, 2 M256 das 24fache!!!

    Ich bin mir aber sicher das Dirk und/oder Du da was funktionierendes zusammen bekommen. Ach wenn es nur eine Lösungs-Replikation der Base_Slave und keine Invention für Serielle Schnittstellen ist - was ja zugegebener Weise auch nicht eure erklärte Aufgabenstellung ist.

    Gruß Rolf
    Sind Sie auch ambivalent?

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Ich hab mal hier: http://www.rn-wissen.de/index.php/RP...M32:_I2C-Slave
    ... einen RN-Wissen Artikel zum M32 I2C-Slave aufgemacht.

    Mitschreiben, wer möchte ...
    Gruß
    Dirk

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hier: http://www.rn-wissen.de/index.php/RP...lave#I2C-Slave
    ... gibt es jetzt eine V1.0 des M32 I2C-Slave.

    Wenn man die in die M32 lädt, fangen alle 3 Skunden die 4 LEDs an, für 3 Sekunden zu blinken. Das ist die Timeout-Anzeige, die nach 3 Sek. auslöst, dann nach weiteren 3 Sek. Blinken einen "Soft-Reset" auslöst.

    Dazu blinkt die Heartbeat-Anzeige (* in der rechten LCD-Ecke).

    Würdet ihr das mal testen?
    Den M32-Master (am einfachsten RP6Control_07_I2CMaster.c) müßtet ihr für die M256 etwas anpassen.
    Die Zeile: if(!block && (PIND & EINT1))
    wird in: if(!block && (PINJ & INT2_PI15)) // XBUS INT2 -> PJ6 (PCINT15)
    ... geändert, weil XBUS INT2 als Interrupt verwendet wird.
    Gruß
    Dirk

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Filou89
    Registriert seit
    24.12.2010
    Ort
    Thun, Switzerland
    Alter
    35
    Beiträge
    116
    Also wenn immer die äusseren und die inneren blinken, dann funktioniert das bei mir!
    Nur für die als Kosmetik habe ich noch das LCD gelöscht, jedoch nicht über den I2C Bus.
    Grüsse

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Hab mal ne Frage zur Befehlsstruktur unter Punkt 8:
    Wollt ihr für #define CMD_SETIOS jeden I/O einzeln setzen?
    Oder analog zu SETLEDs auch mehrere auf einmal?
    Und wie ists, wenn manche als Input, andere als Output behandelt werden sollten?

    Die Idee ist wirklich klasse!
    Und der Einschub mit den abgespeicherten Strings finde ich ebenfalls sinnvoll. Man kann ja auf gewisse Ereignisse vordefinierte Strings z.B. ins LCD schreiben lassen etc.

    Grüße

Ähnliche Themen

  1. RP6Control M32: Library für 8 Servos
    Von Dirk im Forum Robby RP6
    Antworten: 84
    Letzter Beitrag: 12.02.2013, 21:17
  2. Slave Transmitter und Slave Receiver Mode
    Von masasibe im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 26.02.2011, 19:55
  3. RP6Control M32: Tonfrequenzen
    Von Dirk im Forum Robby RP6
    Antworten: 2
    Letzter Beitrag: 10.10.2009, 18:47
  4. Slave-Master-Slave übertragung geht nicht
    Von Dämmi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 26.11.2008, 00:08
  5. Antworten: 0
    Letzter Beitrag: 26.08.2007, 15:03

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test