Forum: Mikrocontroller und Digitale Elektronik I2C - Mehrere Register mit einmal beschreiben


von Hanswurst (Gast)


Lesenswert?

Hallo,

ist es möglich, mit der wire.h Lib für Arduino mit einem Rutsch mehrere 
Register zu beschreiben?

quasi:
1
Wire.begin(); 
2
Wire.beginTransmission(Adresse); 
3
Wire.write(Register1);
4
Wire.write(Daten1);
5
Wire.write(Register2);
6
Wire.write(Daten2);
7
Wire.endTransmission(true);

von Jim M. (turboj)


Lesenswert?

Kommt schwerstens auf den I²C Slave selbst an.

von N2 (Gast)


Lesenswert?

Hi,

Im Normalfall ja :-)
Allerdings müssen dann die Register aufeinander folgen.

Oder Du machst eine Repeated Start Condition.


Also:

Start - Slaveaddresse - Registeradresse - Daten Register +0 - Daten 
Register +1 - …. Stop


Oder:

Start - Slave Adresse - Registeradresse - Daten Register - Repeated 
Start - Slave Adresse - neue Registeradresse - Daten neues Register - 
Stop


Gruß
N2

von Veit D. (devil-elec)


Lesenswert?

Hallo,

sieht nach Arduino aus?

Wire.begin gehört ins setup

und in einer Funktion zum Bsp. kannste aufeinanderfolgende Register wie 
folgt beschreiben
1
bool set_RTC_Alarm (int i2c_adresse, byte Stunde, byte Minute, byte Sekunde)
2
{
3
  bool error = false;                     // Fehlerstatus setzen        
4
       
5
  Wire.beginTransmission(i2c_adresse);
6
  Wire.write(0x07);                       // setzen auf Registernummer bzw. dort wo es losgehen soll
7
  Wire.write(decToBcd(Sekunde));          // setze Alarmzeit auf xx Sekunden im Register 07h
8
  Wire.write(decToBcd(Minute));           // setze Alarmzeit auf xx Minuten  im Register 08h
9
  Wire.write(decToBcd(Stunde));           // setze Alarmzeit auf xx Stunden  im Register 09h
10
11
  if (Wire.endTransmission() > 0 )  {     
12
    error = true;                         // I2C Busfehler
13
  }  
14
  return error;    
15
}

Ansonsten musste immer mit endTransmission enden und beginTransmission 
anfangen, wenn die Register nicht hintereinander liegen.

von Alter Nörgler (Gast)


Lesenswert?

N2 schrieb:
> Hi,
>
> Im Normalfall ja :-)
> Allerdings müssen dann die Register aufeinander folgen.
>
> Oder Du machst eine Repeated Start Condition.

Was aber nicht jeder Slave versteht. Das klein gedruckte im 
Datenblatt...

von Hanswurst (Gast)


Lesenswert?

Veit D. schrieb:
> Ansonsten musste immer mit endTransmission enden und beginTransmission
> anfangen, wenn die Register nicht hintereinander liegen.

Das wollte ich wissen. Danke.

von Peter D. (peda)


Lesenswert?

Manche Slaves sind konfigurierbar, ob ein Autoincrement erfolgen soll 
oder nicht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.