Arduino Code übersetzen

#3971834
Lesenswert?

Ich brauche mal eure Hilfe. Und zwar versuche ich den Arduino Code in
nicht-Arduino Code zu übersetzen.

Gegeben:
1
void RDA5807_ReadW(int i_cnt)
2
{
3
   Wire.beginTransmission(RDA5807_adrr);            // Device 0x11 for random access
4
   Wire.write(0x0C);                                // Start at Register 0x0C
5
   Wire.endTransmission(0);                         // restart condition
6
   Wire.requestFrom(RDA5807_adrr,2*i_cnt, 1);       // Retransmit device address with READ, followed by 8 bytes
7
   for (int i=0; i<i_cnt; i++)                      // Loop for Read data    
8
   {aui_RDS[i]=256*Wire.read()+Wire.read();}        // Read Data into Array of Unsigned Ints
9
   Wire.endTransmission();                  
10
}

Und hier meine Übersetzung mit Fleury Lib i2cmaster.h:
1
void RDA5807_ReadW(int i_cnt)
2
{  int readL, readH;
3
   char buffer[50];
4

5
   i2c_start(RDA5807_adrr);                    // Device 0x11 for random access
6
   i2c_write(0x0C);                                // Start at Register 0x0C
7
   i2c_rep_start(RDA5807_adrr+I2C_READ);                         // restart condition
8
   for (int i=0; i<i_cnt; i++)                      // Loop for Read data    
9
   {  readH=i2c_readNak();
10
      readL=i2c_readNak();
11
      aui_RDS[i]=256*readH+readL;
12
    sprintf(buffer,"Read: aui_RDS[%i]=%x\n",i,aui_RDS[i]);
13
    uart_puts(buffer);
14

15
    }        // Read Data into Array of Unsigned Ints
16
   i2c_stop();                  
17
}

Ich bekomme komische Werte heraus, daher ist meine Abfrage wohl falsch.
Read: aui_RDS[0]=18ff
Read: aui_RDS[1]=ffff
Read: aui_RDS[2]=ffff
Read: aui_RDS[3]=ffff

Da die Fleury_Lib mit 8-bit i2c-Adressen arbeitet, ist
RDA5807_adrr=0x11<<1;
#3972537
Lesenswert?

Thomas K. schrieb:
> Hier müsste es doch i2c_readAck heissen!

ganz genau

nur das letzte abzuholende Byte bekommt readNak();

hier mal 2 Byte aus der RTC für Temperatur:
1
  i2c_start_wait(DS3231+I2C_WRITE);  // set device address and write mode
2
  i2c_write(MSB_TEMP);
3
  i2c_rep_start(DS3231+I2C_READ);     // set device address and read mode
4
  __temp=i2c_readAck();
5
  __temp<<=8;
6
  __temp|=i2c_readNak();
7
  i2c_stop();
8
  __temp>>=6;
#3973064
Lesenswert?

jjflash schrieb:
> am Mittwoch bin ich wieder zu Hause... wenn du magst, kann ich dir ein
> Demoprogramm für den Atmega168 und dem Rda5807 aus einem Radio von mir
> extrahieren.... ist für den AVR-GCC geschrieben...

Hallo jjflash,
wie kann ich zu dem Angebot nein sagen. :-)

Vielen Dank auch den anderen für dem Hinweis mit dem Nak/Ack.

Vielen Dank,
Pete77

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren