- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 25

Thema: RP6: Beispiel Devantech CMPS03

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied Avatar von ScummVM
    Registriert seit
    02.04.2010
    Ort
    Österreich
    Beiträge
    79
    Mach ja nix wenn der Betrag schon etwas älter ist
    Hab mir die aktuelle Beschreibung des CMPS03 auf robotikhardware.de angesehen und festgestellt das die mittlerweile geändert wurde.
    Ich habe meinen Kompass mit der Pin Methode kalibriert nicht über I2C - im Endeffekt habe ich den Sensor 5x kalibriert Nord/Ost/Süd/West/Nord , dann hats funktioniert.

    Bei mir ist der Kompass ganz vorne auf der Erweiterungsplatine montiert. Gemessen habe ich nur im Stillstand, während der Fahrt habe ich nie gemessen, so hatte ich keine Probleme damit.
    Klicke auf die Grafik für eine größere Ansicht

Name:	RP6.jpg
Hits:	28
Größe:	86,9 KB
ID:	19306

    Zur Abschirmung wäre wohl µ-Metall (http://de.wikipedia.org/wiki/Mu-Metall) am besten geeignet - aber woher nehmen.

    --
    Hab grad festgestellt das ich mein laufendes Programm gar nicht mehr hier reingestellt habe.
    Code:
    /*******************************************************************************
     * RP6 C-Control PRO M128 Erweiterungsmodul
     * ----------------------------------------------------------------------------
     * RP6 - M128 - CMPS03 Kompassmodul Test / Display Test
     * ----------------------------------------------------------------------------
     * by ScummVM
     ******************************************************************************/
    
    // RP6CCLib einbinden
    #include "RP6CCLib.cc"
    
    // RP6 Master Lib einbinden
    #include "RP6MasterLib.cc"
    
    // Stopwatch einbinden
    #include "RP6StopwatchesCClib.cc"
    
    // I²C Bus Adresse des Controllers auf dem Mainboard
    #define RP6_BASE_ADR    10
    
    // Die I²C Adresse des CMPS03 ist 0xC0:
    #define CMPS03_ADR      0xC0
    
    // CMPS03 Daten Register:
    #define VERSION         0               // Firmware Version
    #define LOW             1               // Lowbyte
    #define HIGH            2               // Highbyte
    #define CALIBRATE       15              // Kalibrierung
    
    //CMPS03 DATEN REGISTER AUSLESEN
    
    float grad, value;
    word messung;
    char result[2];
    byte messung_low, messung_high, version;
    
    void readCMPS03(void)
    {
        I2C_Start();
        I2C_Write(0xC0);
        I2C_Write(0xC2); // Register 2 lesen
        I2C_Stop();
        I2C_Start();
        I2C_Write(0xC1); // Register 1 lesen
        messung_high = I2C_Read_ACK();
        messung_low = I2C_Read_NACK();
        version = RP6_readRegister(0xC0, 0);
        messung = (( messung_high << 8 ) + messung_low);
        I2C_Stop();
        RP6_readRegisters(RP6_BASE_ADR, I2C_REG_ADC_UBAT_L, messageBuf, 2);
        adcBat = (messageBuf[1] << 8) | (messageBuf[0]);
    
    
        if (getStopwatch1() > 500) {
    
            value = (adcBat / 102.4);          // Spannung umrechnen
            grad = (messung / 10.0);           // Grad umrechnen
            print("Version: ");                // Version seriell
            printInteger(version);             // Version seriell ausgeben
            print(" | Richtung: ");            // Richtung seriell
            clearLCD();                        // LCD löschen
            printlnLCD("Richtung:",0,0);       // Richtung LCD
            Str_WriteFloat(grad,1,result,0);   // Winkel seriell ausgeben
            Serial_WriteText(0,result);
            setCursorPosLCD(1,0);              // Cursor Position
            writeStringLCD(result);            // Winkel am LCD ausgeben
            println(" Grad");                  // Grad seriell
            print(" | Akku: ");                // Akku seriell
            Str_WriteFloat(value,2,result,0);  // Spannung seriell ausgeben
            Serial_WriteText(0,result);
            println(" V");                     // Einheit Spannung
            setCursorPosLCD(1,6);              // Cursor Position
            printLCD("Grad");                  // Grad LCD
            setStopwatch1(0);
        }
    }
    
    // Mainprogramm
    
    void main(void)
    {
        RP6_CCPRO_Init(); // Auf Startsignal warten!
        I2C_Init(I2C_400kHz);
    
        newline();
        println("   ________________________");
        println("   \\| RP6  ROBOT SYSTEM |/");
        println("    \\_-_-_-_-_-_-_-_-_-_/ ");
        newline();
        println("        CMPS03 Test  ");
        newline();
    
        showScreenLCD("CMPS03 Test","");
    
        beep(100, 200, 300);
    
        setStopwatch1(0);
        startStopwatch1();
    
        while(true)
        {
            readCMPS03();
        }
    }
    Das Programm gibt die Richtung mit Kommastelle auf dem LCD aus und über die Serielle Schnittstelle die Version, Richtung und Akkuspannung. Es lässt sich sicher alles besser lösen - aber es läuft. Das Programm benutzt die Stopwatches für die M128 von Dirk https://www.roboternetz.de/community...ight=stopwatch

    Gruß
    ScummVM

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    20.06.2011
    Beiträge
    18
    Hi!
    Das passt ja. Hab ihn heute zugestellt bekommen!!! Wollte ihn so ziemlich genau so wie Du anbringen, also bin ich schon mal echt begeistert! Den Code hatte ich mal kurz überflogen, konnte ihn aber leider noch nicht testen, da ich heute schon 2 kannen Kaffee intus hab und das dann wohl eher ein Lötfiasko würde , werde ihn aber morgen früh mal "ranschrauben" und testen. Werde ihn über I2C kalibrieren das scheint mir doch die einfachere Methode zu sein. Ansonsten schön Aufgebaut dein rp6. Zum Thema Abschirmung mit MU, http://www.matthey.ch die könnten das liefern, und auch in mengen unter 30 Kg . Aber mal im ernst könnte ich nicht irgendein nichtmagnetisches Metall zur Abschirmung nehmen bzw. sogar Aluminium? Da es ja nur schwach magnetisch ist sollte es doch für eine gewisse Abschirmung reichen, oder habe ich da falsche Erinnerung an den Physikunterricht (hatte ne hübsche Lehrerin, deshalb verzeiht mir bitte wenn ich mich da irre)?
    Gruß littles

  3. #3
    Benutzer Stammmitglied Avatar von ScummVM
    Registriert seit
    02.04.2010
    Ort
    Österreich
    Beiträge
    79
    Und schon getestet?
    Probier erstmal wie der CMPS03 läuft - dann kann man immer noch über eine Abschirmung nachdenken (oder etwas höher montieren).
    Geändert von ScummVM (13.07.2011 um 22:49 Uhr)

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    20.06.2011
    Beiträge
    18
    Hi!
    Konnte das gestern nur kurz testen, weil ein guter Freund Vater geworden ist. Das Messen lief soweit ich das beurteilen konnte bei meinem Test gut. Werde heute mal schauen wie genau er sich kompassgetützt dreht. Hatte nicht das gefühl das der Kompass von den Motoren gestört wird während der Drehung. Aber das werde ich heute beim Dauertest genauer unter die Lupe nehmen. Bin mir aber ziemlich sicher das es Funktioniert.

Berechtigungen

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

12V Akku bauen