- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 70

Thema: Raspberry Pi I2C

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Kampi Beitrag anzeigen
    Den PSoC betreibe ich mit 5V. Da das Raspberry Pi nur 3,3V Pegel verwendet, nutze ich die Pull-Ups vom Raspberry Pi und habe damit einen 3,3V I²C Pegel.
    Laut dem Datenblatt von dem Chip

    http://www.datasheetcatalog.org/data...j2lq6ps83y.pdf

    reichen 2,1V für einen High Pegel aus. Es kann also auch nicht sein das er die Pegel nicht erkennt.
    So ist es.

    Laut I2C Spezifikation müssten es für HIGH Pegel VCC*0.7 sein.
    Mindestens bedeutet, daß es auch weniger sein kann. Und wenn das Datenblatt des Chips sagt, 2,1V ist das voll in den Specs. Da die Chips erkannt werden, liegt das Problem woanders. Jetzt noch eine zweite Baustelle mit Pegelwandlern aufzumachen ist nicht zielführend.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Im PSOC Datenblatt steht nur was von 2.1V für GPIO. Ob damit auch I2C gemeint ist, würde ich nicht von ausgehen. Mindestens 0.7*VCC für HIGH Pegel heisst gleich oder größer, aber nicht weniger. Wenn es mit dem Mega32 (ich nehme an unter 5V) geklappt hat und mit dem Raspberry Pi unter 3.3V nicht, dann spricht das für Pegelprobleme. Es kann natürlich auch ein Software Fehler im RasPi Code sein.

    5V zu 3V Pegelwandler gibt es von AdaFruit oder Sparkfun.

  3. #3
    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
    Ja der Mega32 wurde mit 5V betrieben.
    Im Grunde hat der PSoC nur GPIOs. Die Pins werden erst in der Software konfiguriert. Da kann man sich aussuchen wo man den I²C hinlegen will (gibt glaube ich P1.0 und 1.1 sowie 1.5 und 1.7 zur Auswahl). Von daher vermute ich das diese Spezifikationen egal für welches Protokoll/Anwendung sind.
    Sicher bin ich mir da aber nicht.
    Der Pegelwandler von Sparkfun eignet sich aber nicht für I²C soweit ich sehe. I²C ist bidirektional und der ist nur für eine Richtung. Oder sehe ich das falsch?
    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

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Um aber mit der SW weiterzukommen, habe aus einem Beispiel-Code aus dem Netz ein Stück zusammengeschnitten, mit dem ich auf meinem Desktop-PC vermutlich das EEPROM meines Monitors auslesen kann. Wegen der Übersichtlichkeit sind die Adressen hardcoded und ein wirkliches Schreiben habe ich nicht probiert, um den Rechner nicht zu gefärden.

    Code:
    #include <linux/i2c-dev.h>
    #include <stdio.h>
    #include <fcntl.h>
    
    #define NUMBYTES 20
    
    int main() {
    
    	int file;
    	char filename[] = "/dev/i2c-0";
    	char buffer[20];
    	int i;
      
    	file = open(filename, O_RDWR);
    	if (file < 0) {
    		perror("i2c-test open: ");
    	    return -1;
    	}
    /* You can do plain I2C transactions by using read(2) and write(2) calls.
     * You do not need to pass the address byte; instead, set it through
     * ioctl I2C_SLAVE before you try to access the device.
     */
    	if (ioctl(file, I2C_SLAVE, 0x50) < 0) {
    		perror("i2c-test set slave address: ");
    		return -1;
    	}
    	buffer[0] = 0;	// set read pointer in I2C slave
    	if(write(file, buffer, 1) != 1) {
    		perror("i2c-test write: ");
    		return -1;
    	}
            if (read(file, buffer, NUMBYTES) != NUMBYTES) {
    		perror("i2c-test read: ");
    		return -1;
    	} else {
    		for(i = 0; i < NUMBYTES; i++) {
    			printf("%02x ", (unsigned char)buffer[i]);
    		}
    		printf("\nok\n");
    	}
    	return 0;
    }
    Vielleicht hilfts

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  5. #5
    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 Klebwax Beitrag anzeigen
    Um aber mit der SW weiterzukommen, habe aus einem Beispiel-Code aus dem Netz ein Stück zusammengeschnitten, mit dem ich auf meinem Desktop-PC vermutlich das EEPROM meines Monitors auslesen kann. Wegen der Übersichtlichkeit sind die Adressen hardcoded und ein wirkliches Schreiben habe ich nicht probiert, um den Rechner nicht zu gefärden.

    Code:
    #include <linux/i2c-dev.h>
    #include <stdio.h>
    #include <fcntl.h>
    
    #define NUMBYTES 20
    
    int main() {
    
        int file;
        char filename[] = "/dev/i2c-0";
        char buffer[20];
        int i;
      
        file = open(filename, O_RDWR);
        if (file < 0) {
            perror("i2c-test open: ");
            return -1;
        }
    /* You can do plain I2C transactions by using read(2) and write(2) calls.
     * You do not need to pass the address byte; instead, set it through
     * ioctl I2C_SLAVE before you try to access the device.
     */
        if (ioctl(file, I2C_SLAVE, 0x50) < 0) {
            perror("i2c-test set slave address: ");
            return -1;
        }
        buffer[0] = 0;    // set read pointer in I2C slave
        if(write(file, buffer, 1) != 1) {
            perror("i2c-test write: ");
            return -1;
        }
            if (read(file, buffer, NUMBYTES) != NUMBYTES) {
            perror("i2c-test read: ");
            return -1;
        } else {
            for(i = 0; i < NUMBYTES; i++) {
                printf("x ", (unsigned char)buffer[i]);
            }
            printf("\nok\n");
        }
        return 0;
    }
    Vielleicht hilfts

    MfG Klebwax
    Also das Programm funktioniert. Er ließt die Zellen aus.
    Jetzt muss ich das nur mal mit einem Write kombinieren um zu sehen ob das auch klappt
    Danke dafür!

    Edit: Beim zweiten mal ausführen spuckt er aber nur 0xff aus. Wieso?
    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

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Kampi Beitrag anzeigen
    Also das Programm funktioniert. Er ließt die Zellen aus.
    Jetzt muss ich das nur mal mit einem Write kombinieren um zu sehen ob das auch klappt
    Danke dafür!

    Edit: Beim zweiten mal ausführen spuckt er aber nur 0xff aus. Wieso?
    $ sudo ./i2c-test
    00 ff ff ff ff ff ff 00 04 72 be 00 e7 7d 11 01 0b 14 01 03

    Das geht bei mir beliebig oft.

    Write bei einem EEPROM sollte so gehen:

    buffer[0] = Adresspointer im EEPROM
    buffer[1] = Datenbyte
    ..
    buffer[x] = Datenbyte

    write(fd, buffer, x+1)

    Wieviel man auf einmal schreiben kann, hängt vom EEPROM ab. Wenn man nicht auf eine Ready wartet, sollte man vor dem nächsten read oder write etwas Pause machen.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  7. #7
    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 Klebwax Beitrag anzeigen
    $ sudo ./i2c-test
    00 ff ff ff ff ff ff 00 04 72 be 00 e7 7d 11 01 0b 14 01 03

    Das geht bei mir beliebig oft.

    Write bei einem EEPROM sollte so gehen:

    buffer[0] = Adresspointer im EEPROM
    buffer[1] = Datenbyte
    ..
    buffer[x] = Datenbyte

    write(fd, buffer, x+1)

    Wieviel man auf einmal schreiben kann, hängt vom EEPROM ab. Wenn man nicht auf eine Ready wartet, sollte man vor dem nächsten read oder write etwas Pause machen.

    MfG Klebwax
    mmh ich weiß natürlich nicht ob das EEPROM in Ordnung ist. Vielleicht hat das Ding ja schon nen Schuss......
    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

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    Zitat Zitat von Kampi Beitrag anzeigen
    Der Pegelwandler von Sparkfun eignet sich aber nicht für I²C soweit ich sehe. I²C ist bidirektional und der ist nur für eine Richtung. Oder sehe ich das falsch?

    Pegelwandler ist bidirektional wegen der MOSFETs. Habe mir den auch schon selber aufgebaut. Nicht schön, aber schneller aufzubauen und günstiger als ein PCA9603 oder ähnliche Wandler.
    Klicke auf die Grafik für eine größere Ansicht

Name:	1__320x240_2012-02-09_20-21-09_994.jpg
Hits:	19
Größe:	6,6 KB
ID:	23398
    Grüße,
    Daniel

  9. #9
    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
    Gut.
    Das Programm teste ich heute/morgen mal. Wenn das klappt ist das Problem mit dem EEPROM schon mal beiseite. Dann bleibt nur noch der PSoC.... :/
    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. [ERLEDIGT] Raspberry Pi GPIO
    Von Kampi im Forum Raspberry Pi
    Antworten: 4
    Letzter Beitrag: 04.11.2012, 22:45
  2. [ERLEDIGT] Raspberry Pi Übertakten
    Von Kampi im Forum Raspberry Pi
    Antworten: 2
    Letzter Beitrag: 21.09.2012, 22:03
  3. [ERLEDIGT] Kommunikation AVR <-> Raspberry
    Von Goldenflash im Forum Raspberry Pi
    Antworten: 6
    Letzter Beitrag: 04.09.2012, 08:30
  4. Raspberry PI Lieferzeit
    Von Thalhammer im Forum Offtopic und Community Tratsch
    Antworten: 9
    Letzter Beitrag: 01.08.2012, 16:12
  5. Verkaufe Raspberry Pi zu verkaufen
    Von FD im Forum Kaufen, Verkaufen, Tauschen, Suchen
    Antworten: 8
    Letzter Beitrag: 03.07.2012, 07:57

Berechtigungen

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

LiFePO4 Speicher Test