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

Thema: I2C Verständnisprobleme

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    07.07.2010
    Alter
    35
    Beiträge
    228

    I2C Verständnisprobleme

    Guten Abend,

    hänge nun schon ein paar Tage an einem Problem fest und weiß nicht mehr weiter.
    Nichtmal die Sufu und die damit gefundenen Threads konnten mir weiterhelfen

    Hier mal mein Code:

    M32
    Code:
    #include "RP6ControlLib.h"
    #include "RP6I2CmasterTWI.h"
    
    uint8_t data[2];
    
    void I2C_transmissionError(uint8_t errorState) 
    { 
       writeString_P("I2C ERROR -->TWI STATE IS: 0x"); 
       writeInteger(errorState, HEX);
       writeChar('\n');
    }
    
    int main(void){
    	initRP6Control();
    	initLCD();
    	I2CTWI_initMaster(100);
    	I2CTWI_setTransmissionErrorHandler(I2C_transmissionError);
    	while(1){
    		clearLCD();
    		I2CTWI_transmitByte(10,0);
                    writeString_P("transmit....");               //reine Testausgabe wo die Funktion hängen bleibt
    		data[0] = I2CTWI_readByte(10);
                    writeString_P("read....");                    //reine Testausgabe wo die Funktion hängen bleibt
    		writeIntegerLCD(data[0],DEC);
    	}
    	return 0;
    }
    Base
    Code:
    #include "RP6RobotBaseLib.h"
    #include "RP6I2CslaveTWI.h"
    
    int main(void){
    	initRobotBase();
    	I2CTWI_initSlave(10);
    	int8_t data = 1;
    	while(1){
    		if(I2CTWI_writeRegisters[0] && !I2CTWI_writeBusy){
    			I2CTWI_readRegisters[0] = data;
    			data++;
    		}
    	}
    }
    Die Master Funktion läuft leider nur bis nach "I2CTWI_transmitByte" danach gehts nicht weiter.

    Dabei will ich eigentlich erstmal nur einen festen Wert (data) übertragen. Erst wollte ich den Wert eines Lichtsensors übertragen, da dies aber scheiterte wollte ich erstmal mit was anderem (in meinen Augen leichteren) beginnen.

    Hoffe mir kann jmd helfen.

    MfG

    Ezalo
    Welches sind die drei Feinde eines Programmierers?

    Sonnenlicht, Sauerstoff und das unerträgliche Gebrüll der Vögel

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    Hallo,
    in der M32 Seite fehlt dir der Aufruf von task_I2CTWI(); in der While Loop.
    Das löst das Problem jedoch nicht komplett, da für ein Befehl das task_I2CTWI(); ggf. mehrfach aufgerufen werden muss.
    Orientiere dich im Schleifenaufbau mehr an den beigelegten Masterprogrammen für die M32. Und berücksichtige, das die I2CTWI
    Funktionen ggf. asyncron arbeiten. Das Datum wird also ggf. nicht 100% genau dann verschickt wenn du es erwartest sondern
    erst beim Aufruf von task_I2CTWI(); Zum Verständniß, die TWI Befehle bestücken eigentlich nur die Vars mit Daten, die eigentliche Ausführung stößt task_I2CTWI(); an. Zumindest bei einigen TWI Befehlen mit Leseoperationen.

    LG Rolf
    Geändert von RolfD (31.03.2011 um 23:50 Uhr)
    Sind Sie auch ambivalent?

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @Ezalo:
    In diesem Thread:
    https://www.roboternetz.de/community...-RP6-I2C/page2
    ... sind ein paar Beispiele für eine einfache Datenübertragung.
    Gruß
    Dirk

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    07.07.2010
    Alter
    35
    Beiträge
    228
    In dem von dir genannten Beispiel geht es doch aber um die Datenübertragung von Master zu Slave. Ich möchte ja aber mit dem Master die Daten vom Slave lesen
    Welches sind die drei Feinde eines Programmierers?

    Sonnenlicht, Sauerstoff und das unerträgliche Gebrüll der Vögel

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    10.09.2010
    Beiträge
    74
    Hallo!
    Ich habe leider keinen anderen Beitrag gefunden, also versuche ich es hier. Ich habe seit letzter Woche ein RP6 Control M32. Ich habe mir alle Beispiel Programme angeschaut. Jetzt möchte ich aber genau wissen, wie ich den Austausch über den I²C Bus mache.
    Ich habe herausgefunden, dass folgende Aufrufe auf jedem Fall zu machen sind: (laut Beispiel 06_I2CMaster.c)
    #include "RP6I2CmasterTWI.h"

    I2CTWI_initMaster(100);
    I2CTWI_setTransmissionErrorHandler(I2C_transmissio nError);

    So, mein erstes Problem ist, wie kann ich dem Roboter auf einfache Weise "sagen", dass er auf dem Base die LED 1 anschalten soll.
    Ich habe mal im Programm geschaut und festgestellt, dass in der Zeile
    I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, 3, counter); die LEDs angesprochen werden.

    ich hoffe ihr könnt mein Problem verstehen.
    Ich danke schonmal für die Hilfe

    Gruß RP6fahrer

    PS: vielleicht ibt es irgendwo eine zusammenfassende Befehlsliste für den I²C des RP6

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @RP6fahrer,

    das Problem ist, dass du einerseits die I2C-Befehle des RP6 kennen must (die stehen aber in der Anleitung gut beschrieben!), andererseits must du auf der Control M32 DIE Befehle senden, die das RP6Base_I2CSlave Programm kennt.

    Wenn du dich damit nicht beschäftigen willst, gibt es eine gute Möglichkeit:
    Du bindest in deine M32-Programme auch noch die RP6Control_I2CMasterLib (du findest sie z.B. im Beispiel Example_10_Move2) ein. In dieser Lib hat SlyD fast alle Befehle, die es auf der Base (z.B. zur LED-Ansteuerung) gibt, für die M32 zur Verfügung gestellt. Da gibt es also z.B. die Funktion updateStatusLEDs() und setRP6LEDs() (anstelle von setLEDs der Base!). Die kannst du genau so benutzen, wie auf der Base (siehe Anleitung zur Base!). Wenn du dir die Funktionen in der RP6Control_I2CMasterLib ansiehst, kannst du lernen, wie du auch ohne diese Lib mit reinen I2C-Makrobefehlen z.B. LEDs schalten kannst.
    Gruß
    Dirk

Ähnliche Themen

  1. Verständnisprobleme -> Drehmomentrechner
    Von selan im Forum Motoren
    Antworten: 9
    Letzter Beitrag: 13.11.2006, 14:25
  2. Verständnisprobleme über die Funktionsweise eines Interrupts
    Von electrofux im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 31.10.2006, 16:14
  3. Syntax - Verständnisprobleme
    Von R2D3212 im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 05.07.2006, 01:41
  4. Serielle Verständnisprobleme
    Von steffenvogel im Forum Software, Algorithmen und KI
    Antworten: 6
    Letzter Beitrag: 09.04.2006, 13:23
  5. Antworten: 17
    Letzter Beitrag: 01.01.2006, 17:33

Berechtigungen

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

LiFePO4 Speicher Test