Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: I2C Funktion Kategorie: I²C-Bus (von Robert - 30.06.2010 15:05)
Als Antwort auf I2C Funktion von Jenny - 30.06.2010 11:50
Ich nutze:
C-Control Pro Mega128
Hallo,

1.) Was meinst du mit "adresse"? Bei dem I2C-Bus hat jedes Device eine Adresse (die ersten 4 Bit),
dann 3 Bit für die interne Adressierung (das werden dann die Register vermutlich adressiert) und ein
letztes Bit für Read/Write (also ob du lesen oder schreiben willst). Kurz: y=Gerät, x=register, b=Zugriff:
yyyyxxxb = Erstes gesendet Paket nach Start-Kondition.
2.) "data" sind die Daten (das Byte), die/das ins EEPROM geschrieben wird.
3.) ">>" ist ein Bitschiebeoperator. Ein Register im diesem EEPROM wird anscheinend über ein Word
(2 Byte) adressiert. Da man das nicht auf einmal schicken kann, wird erst das höherwertige Byte
zuerst geschickt, dann das niederwertige.
Mehr Infos zu >> und << in der Hilfe.

Ich hoffe, ich konnte helfen.

P.S.: Du musst unterscheiden zwischen der Adresse auf dem I2C-Bus (erstes geschriebens Byte) und
der Adresse im EEPROM ("address").

> Hallo an alle,
>
> ich möchte eine Beschleunigungssensor (BMA150) mit meinem PRO BOT128 verbinden und
> anschlieÃ?end die Register des Sensore auslesen.
>
> Das ganze soll über I2C laufen.
>
> Nun habe ich den Aufbau, Funktion usw. der I2C SChnittstelle theoretisch verstanden,
> aber die Probleme sind nun bei der Umsetzung, sprich bei der Programmierung.
>
> Dazu habe ich das Handbuch von C-Control durchforstet und bin auf ein Beispiel gestoÃ?en:
>
> I2C Beispiel Seite 159
>
> >Beispiel: EEPROM 24C64 lesen und schreiben ohne I2C_Status Abfrage
> >
> >main(void)
> >{
> >>word address;
> >>byte data,EEPROM_data;
> >>
> >>address=0x20;
> >>data=0x42;
> >>
> >>I2C_Init(I2C_100kHz );
> >>// write data to 24C64 (8k x 8) EEPROM
> >>
> >>I2C_Start();
> >>I2C_Write(0xA0); // DEVICE ADDRESS : A0
> >>I2C_Write(address>>8); // HIGH WORD ADDRESS
> >>I2C_Write(address); // LOW WORD ADDRESS
> >>I2C_Write(data); // write Data
> >>I2C_Stop();
> >>
> >>AbsDelay(5); // delay for EEPROM Write Cycle
> >>
> >>// read data from 24C64 (8k x 8) EEPROM
> >>
> >>I2C_Start();
> >>I2C_Write(0xA0); // DEVICE ADDRESS : A0
> >>I2C_Write(address>>8); // HIGH WORD ADDRESS
> >>I2C_Write(address); // LOW WORD ADDRESS
> >>I2C_Start(); // RESTART
> >>I2C_Write(0xA1); // DEVICE ADDRESS : A1
> >>EEPROM_data=I2C_Read_NACK();
> >>I2C_Stop();
> >>Msg_WriteHex(EEPROM_data);
> >}
>
> 1.) Kann ich adresse im Programm gleichsetzten mit der Adresse meines Registers?
> 2.) Entspricht data im Programm, meine Grö�e des Registers z.B. 2 bit?
> 3.) address>>8 verstehe ich nicht
>
> Ist zeimlich viel geschrieben sorry, hoffe aber Ihr könnt mir nen kleinen Tipp geben.
> Vielen Dank im Voraus.
>
> GruÃ? Jenny


    Antwort schreiben


Antworten: