TWI_Ausschnitt.c


1
// tab = 3
2
3
uint8_t  i = 10;
4
5
while(1)
6
  {
7
  buffer[0] = HYT221_ADR;          // Adresse für TWI-Write
8
  TWI_MA_Start_Transceiver_With_Data(buffer, 1);
9
10
  if (!(TWI_LastTransOK()))        // Prüfen, ob Slave ein ACK gesendet hat
11
    {
12
    puts_p(PSTR("TWI-Write-Error"));
13
    put_c(13);
14
    return(0);
15
    }
16
17
  delay_10ms(10);              // Wartezeit 100ms (50ms reicht nicht aus)
18
19
  buffer[0]++;                // Adresse für TWI-Read incrementieren
20
  TWI_MA_Start_Transceiver_With_Data(buffer, 5);   // Daten via TWI einlesen
21
  TWI_MA_Get_Data_From_Transceiver(buffer, 5);    // Daten abholen
22
23
  if (!(TWI_LastTransOK()))        // dieser Test kann auch entfallen
24
    {
25
    puts_p(PSTR("TWI-Read-Error"));
26
    put_c(13);
27
    return;
28
    }
29
30
  if (buffer[1]  & 0b11000000)       // Bit.7/6 des ersten Datenbytes testen,
31
    {                      // wenn gesetzt, dann ist der Sensor noch busy
32
    i--;
33
    put_c('+');
34
    put_c(' ');                // wenn diese Ausgabe erfolgt, dann war die Wartezeit zu kurz !
35
    }
36
37
  else                      // wenn Bit.7/6 nicht gesetzt sind
38
    {
39
    break;                  // die Schleife while(1) beenden
40
    }
41
42
  if (!(i))                  // wenn i-Versuche erfolglos waren,
43
    {                      // dann beenden
44
45
    puts_p(PSTR("Modul busy"));
46
    put_c(13);
47
    return(0);                // Abbrechen, 0 Byte wurden geschrieben
48
    }
49
  }