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

Thema: Raspberry Pi: ARM/Linux-Computer für 28 Euro

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist Avatar von -schumi-
    Registriert seit
    30.12.2009
    Ort
    Wasserburg am Inn / Bayern
    Alter
    31
    Beiträge
    449
    Als erstes braucht man nen I²C-Treiber. Ich war faul und hab einfach ein fertiges Image genommen

    In dem Artikel http://nathan.chantrell.net/20120519...c-io-expander/ verlinkt der Autor auf das Image: http://www.frank-buss.de/tmp/kernel.img
    (Ist ein Debian, einfach das kernel.img in der Bootpartition ersetzen. Der in diesem Image enthaltene I2C-Treiber arbeitet zwar noch über Software-I2C, aber das reicht dicke. Es gibt auch einen Treiber der das Hardware-I2C nutzt, aber da muss man sich den Kernel erst mal selbst bauen und da hab ich grad kein Bock drauf . Ausserdem haben Kernel mit diesem Treiber bis jetzt mehr Probleme beim booten von SD-Karten)

    Dann kann man relativ einfach das Device öffen, Slave-Adresse angeben und dann nach Lust und Laune schreiben und lesen:
    Code:
    #include <linux/i2c-dev.h>
    #include <linux/i2c.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <sys/ioctl.h>
    
    // Commands:
    #define CMD_POWER_OFF             0
    #define CMD_POWER_ON             1
    #define CMD_CONFIG                2
    #define CMD_SETLEDS             3
    #define CMD_STOP                4
    #define CMD_MOVE_AT_SPEED        5
    #define CMD_CHANGE_DIR            6
    #define CMD_MOVE                7
    #define CMD_ROTATE                8
    #define CMD_SET_ACS_POWER        9
    #define CMD_SEND_RC5            10
    #define CMD_SET_WDT                11
    #define CMD_SET_WDT_RQ            12
    
    int main()
    {
        bus = open( "/dev/i2c-0", O_RDWR );  // I2C öffnen
        if ( bus == -1 )
        {
          // error
        }
        slave_addr = 0x05;   // Slave Adresse (0x05 ist von der Base)
        ioctl( bus, I2C_SLAVE, slave_addr );  // Slave Adresse setzen
    
        char buffer[] = {0, CMD_MOVE_AT_SPEED, 30, 30};     // Command
        unsigned int bytes;
        bytes = write( bus, buffer, sizeof(buffer) );  // Rausschreiben
    
        close (bus);  // I2C schließen
        return 0;
    }
    Dieses Programm setzt die Geschwindigkeit jetzt eben auf 30/30. Für die ganzen Commands nehm ich mir die RP6Base_I2CSlave.c und die RP6Control_*I2C-XYZ-Master*.c aus den Beispielen zu Hilfe.

    Den Quelltext einfach in eine rp6ctrl.c oder sowas schreiben (am besten via SSH auf Raspi zugreifen und dann in Nano Strg+Alt+V). Dann das Programm übersetzen mit "gcc rp6ctrl.c -o rp6ctrl". Ausführen mit "sudo ./rp6ctrl". Da braucht man eben Root-Rechte, oder man includet den User in irgend eine Gruppe deren Namen ich jetzt nicht weis, die die Rechte zum I2C-Schreiben hat.

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Zitat Zitat von -schumi- Beitrag anzeigen
    Als erstes braucht man nen I²C-Treiber. Ich war faul und hab einfach ein fertiges Image genommen

    In dem Artikel http://nathan.chantrell.net/20120519...c-io-expander/ verlinkt der Autor auf das Image: http://www.frank-buss.de/tmp/kernel.img
    (Ist ein Debian, einfach das kernel.img in der Bootpartition ersetzen. Der in diesem Image enthaltene I2C-Treiber arbeitet zwar noch über Software-I2C, aber das reicht dicke. Es gibt auch einen Treiber der das Hardware-I2C nutzt, aber da muss man sich den Kernel erst mal selbst bauen und da hab ich grad kein Bock drauf . Ausserdem haben Kernel mit diesem Treiber bis jetzt mehr Probleme beim booten von SD-Karten)

    Dann kann man relativ einfach das Device öffen, Slave-Adresse angeben und dann nach Lust und Laune schreiben und lesen:
    Code:
    #include <linux/i2c-dev.h>
    #include <linux/i2c.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <sys/ioctl.h>
    
    // Commands:
    #define CMD_POWER_OFF             0
    #define CMD_POWER_ON             1
    #define CMD_CONFIG                2
    #define CMD_SETLEDS             3
    #define CMD_STOP                4
    #define CMD_MOVE_AT_SPEED        5
    #define CMD_CHANGE_DIR            6
    #define CMD_MOVE                7
    #define CMD_ROTATE                8
    #define CMD_SET_ACS_POWER        9
    #define CMD_SEND_RC5            10
    #define CMD_SET_WDT                11
    #define CMD_SET_WDT_RQ            12
    
    int main()
    {
        bus = open( "/dev/i2c-0", O_RDWR );  // I2C öffnen
        if ( bus == -1 )
        {
          // error
        }
        slave_addr = 0x05;   // Slave Adresse (0x05 ist von der Base)
        ioctl( bus, I2C_SLAVE, slave_addr );  // Slave Adresse setzen
    
        char buffer[] = {0, CMD_MOVE_AT_SPEED, 30, 30};     // Command
        unsigned int bytes;
        bytes = write( bus, buffer, sizeof(buffer) );  // Rausschreiben
    
        close (bus);  // I2C schließen
        return 0;
    }
    Dieses Programm setzt die Geschwindigkeit jetzt eben auf 30/30. Für die ganzen Commands nehm ich mir die RP6Base_I2CSlave.c und die RP6Control_*I2C-XYZ-Master*.c aus den Beispielen zu Hilfe.

    Den Quelltext einfach in eine rp6ctrl.c oder sowas schreiben (am besten via SSH auf Raspi zugreifen und dann in Nano Strg+Alt+V). Dann das Programm übersetzen mit "gcc rp6ctrl.c -o rp6ctrl". Ausführen mit "sudo ./rp6ctrl". Da braucht man eben Root-Rechte, oder man includet den User in irgend eine Gruppe deren Namen ich jetzt nicht weis, die die Rechte zum I2C-Schreiben hat.
    Dank dir ^.^
    Dann kann ich am Ende des Monats, wenn mein Pi ankommt, gleich mal meinen CAN-Knoten zusammen mit dem Pi testen ^.^
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  3. #3
    Erfahrener Benutzer Begeisterter Techniker Avatar von Chypsylon
    Registriert seit
    02.02.2011
    Ort
    Graz/Österreich
    Beiträge
    256
    Zitat Zitat von -schumi- Beitrag anzeigen
    Als erstes braucht man nen I²C-Treiber. Ich war faul und hab einfach ein fertiges Image genommen

    In dem Artikel http://nathan.chantrell.net/20120519...c-io-expander/ verlinkt der Autor auf das Image: http://www.frank-buss.de/tmp/kernel.img
    (Ist ein Debian, einfach das kernel.img in der Bootpartition ersetzen. Der in diesem Image enthaltene I2C-Treiber arbeitet zwar noch über Software-I2C, aber das reicht dicke. Es gibt auch einen Treiber der das Hardware-I2C nutzt, aber da muss man sich den Kernel erst mal selbst bauen und da hab ich grad kein Bock drauf . Ausserdem haben Kernel mit diesem Treiber bis jetzt mehr Probleme beim booten von SD-Karten)

    Dann kann man relativ einfach das Device öffen, Slave-Adresse angeben und dann nach Lust und Laune schreiben und lesen:
    Code:
    #include <linux/i2c-dev.h>
    #include <linux/i2c.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <sys/ioctl.h>
    
    // Commands:
    #define CMD_POWER_OFF             0
    #define CMD_POWER_ON             1
    #define CMD_CONFIG                2
    #define CMD_SETLEDS             3
    #define CMD_STOP                4
    #define CMD_MOVE_AT_SPEED        5
    #define CMD_CHANGE_DIR            6
    #define CMD_MOVE                7
    #define CMD_ROTATE                8
    #define CMD_SET_ACS_POWER        9
    #define CMD_SEND_RC5            10
    #define CMD_SET_WDT                11
    #define CMD_SET_WDT_RQ            12
    
    int main()
    {
        bus = open( "/dev/i2c-0", O_RDWR );  // I2C öffnen
        if ( bus == -1 )
        {
          // error
        }
        slave_addr = 0x05;   // Slave Adresse (0x05 ist von der Base)
        ioctl( bus, I2C_SLAVE, slave_addr );  // Slave Adresse setzen
    
        char buffer[] = {0, CMD_MOVE_AT_SPEED, 30, 30};     // Command
        unsigned int bytes;
        bytes = write( bus, buffer, sizeof(buffer) );  // Rausschreiben
    
        close (bus);  // I2C schließen
        return 0;
    }
    Dieses Programm setzt die Geschwindigkeit jetzt eben auf 30/30. Für die ganzen Commands nehm ich mir die RP6Base_I2CSlave.c und die RP6Control_*I2C-XYZ-Master*.c aus den Beispielen zu Hilfe.

    Den Quelltext einfach in eine rp6ctrl.c oder sowas schreiben (am besten via SSH auf Raspi zugreifen und dann in Nano Strg+Alt+V). Dann das Programm übersetzen mit "gcc rp6ctrl.c -o rp6ctrl". Ausführen mit "sudo ./rp6ctrl". Da braucht man eben Root-Rechte, oder man includet den User in irgend eine Gruppe deren Namen ich jetzt nicht weis, die die Rechte zum I2C-Schreiben hat.
    Ebenfalls danke für das Beispiel

    Den Hardware-Treiber gibts übrigens hier, ich glaube das die Probleme beim booten mittlerweile gefixt sind...

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Kleine Frage noch.....das Image ist einfach ein Kernel der auf die SD-Karte gepackt wird?
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  5. #5
    Erfahrener Benutzer Roboter-Spezialist Avatar von -schumi-
    Registriert seit
    30.12.2009
    Ort
    Wasserburg am Inn / Bayern
    Alter
    31
    Beiträge
    449
    Es gibt ja so ein fertiges Debian Image für den Raspi, das kannst du mit dd auf die SDKarte kopieren. Anschließend hast du dann 2 Partitionen auf der SDKarte. Eine Fat32 zum Booten und die andere eine Ext3 (oder 4?) glaub ich (auf der ist das System an sich). Auf der Bootpartition befindet sich eine kernel.img, die bennenst du einfach in kernel.img.bak oder so um und kopierst die neue kernel.img auf diese Partition. Fertig

    Den anderen Kernel, den Chypsylon verlinkt hat musst du auf den Raspi kopieren (ins Homeverzeichnis oder so) und dann mit "sudo dpkg -i /pfad/zum/kernel.deb" installieren. Ob der Kernel funzt hab ich aber selbst noch nicht ausprobiert

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.02.2006
    Beiträge
    982
    Unterstuetzt das OS das man via RaspPI herunter laden kann noch kein I2C?
    Nam et ipsa scientia potestas est..

  7. #7
    Erfahrener Benutzer Roboter-Spezialist Avatar von -schumi-
    Registriert seit
    30.12.2009
    Ort
    Wasserburg am Inn / Bayern
    Alter
    31
    Beiträge
    449
    Nein, diese Aufgabe hat die Foundation an die Community abgegeben. Und wie man sieht funktioniert das ja auch wunderbar Bin mal gespannt wann der Treiber in die offiziellen Images übernommen wird.

  8. #8
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Wie ist den das mit SPI?
    Gibt es da auch schon ein Image mit SPI und I²C?
    Die "Entwicklungsarbeit" an die Community abzugeben ist an für sich eine schöne Sache. Da ist man nicht direkt auf den Hersteller angewiesen. Wobei es trotzdem gut wäre wenn der Hersteller da mit involviert ist (keine Ahnung ob er das jetzt ist oder nicht).
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

Ähnliche Themen

  1. SO-DIMM-Computer unter Linux oder Windows CE
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 26.01.2012, 10:50
  2. Welches Linux für AVR , Asuro.....Linux überhaupt?
    Von oderlachs im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 10
    Letzter Beitrag: 09.01.2012, 12:23
  3. Antworten: 9
    Letzter Beitrag: 11.04.2006, 16:09
  4. robosapien für 49 euro
    Von pebisoft im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 4
    Letzter Beitrag: 22.01.2005, 16:06
  5. Servo für 1 Euro
    Von DrZoidberg im Forum Motoren
    Antworten: 18
    Letzter Beitrag: 18.09.2004, 10:46

Stichworte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress