Difference between revisions of "I2C/Slave Example (Deutsch)"

From Ethersex_Wiki
Jump to: navigation, search
(Created page with "In diesem Beispiel wird gezeigt wie man eine TWI Verbindung zwischen Ethersex und einem zweiten AVR herstellen kann.<br/> == Konfiguration == Zuerst muss Ethersex konfiguriert we…")
 
(format)
Line 1: Line 1:
 +
{{i18n|I2C/Slave Example}}
 
In diesem Beispiel wird gezeigt wie man eine TWI Verbindung zwischen Ethersex und einem zweiten AVR herstellen kann.<br/>
 
In diesem Beispiel wird gezeigt wie man eine TWI Verbindung zwischen Ethersex und einem zweiten AVR herstellen kann.<br/>
 
== Konfiguration ==
 
== Konfiguration ==
Line 25: Line 26:
 
Nun senden wir einen ECMD Befehl:
 
Nun senden wir einen ECMD Befehl:
 
<source lang=c>
 
<source lang=c>
if(!(i2c_start( E6WR ))) //Slave bereit zum schreiben?
+
if(!(i2c_start( E6WR ))) //Slave bereit zum schreiben?
{
+
{
i2c_write('i');
+
  i2c_write('i');
i2c_write('p');
+
  i2c_write('p');
i2c_write('\0'); //Befehl muss 0 Terminiert werden!
+
  i2c_write('\0'); //Befehl muss 0 Terminiert werden!
}
+
}
 
 
 
 
 
</source>
 
</source>
 
== Daten Empfangen ==
 
== Daten Empfangen ==
Line 38: Line 37:
 
Ethersex empfängt nun den Befehl und Wertet ihn automatisch aus. Jetzt müssen wir nur mehr das Ergebnis auslesen:
 
Ethersex empfängt nun den Befehl und Wertet ihn automatisch aus. Jetzt müssen wir nur mehr das Ergebnis auslesen:
 
<source lang=c>
 
<source lang=c>
if(!(i2c_rep_start( E6RD ))) //Slave bereit zum lesen?
+
if(!(i2c_rep_start( E6RD ))) //Slave bereit zum lesen?
{
+
{
for(n=0;n<E6BUFLEN;n++)
+
  for(n=0;n<E6BUFLEN;n++)
                {
+
  {
                        E6_data[n] = i2c_readAck();
+
    E6_data[n] = i2c_readAck();
                        if(E6_data[n] == '\0')
+
    if(E6_data[n] == '\0')
                                break;
+
      break;
                        if(E6_data [n] == '\n')
+
    if(E6_data [n] == '\n')
                        {
+
    {
                                E6_data[n+1] = '\0';
+
      E6_data[n+1] = '\0';
                                break;
+
      break;
                        }
+
    }
                }
+
  }
+
  i2c_readNak();              
  i2c_readNak();
+
  i2c_stop();
             
+
}
                i2c_stop();
 
}
 
 
 
 
 
 
</source>
 
</source>
 
Nun haben wir die IP Adresse im E6_data Array stehen.
 
Nun haben wir die IP Adresse im E6_data Array stehen.

Revision as of 17:34, 7 April 2012

In diesem Beispiel wird gezeigt wie man eine TWI Verbindung zwischen Ethersex und einem zweiten AVR herstellen kann.

Konfiguration

Zuerst muss Ethersex konfiguriert werden.

Menuconfig -> Protocols -> ECMD -> I2C aktivieren

Die Standardadresse ist 8 und die Pufferlänge 50

In diesem Beispiel wird die TWI Lib von P. Fleury verwendet.

Definition

Zuerst Definieren wir die Adresse für Lesen und Schreiben

#define  E6WR (0x8 << 1) | I2C_WRITE
#define  E6RD (0x8 << 1) | I2C_READ

Befehl senden

Danach benötigen wir einen Puffer für die Ausgelesenen Daten Z.B.

#define E6BUFLEN 50
char E6_data[E6BUFLEN];

Nun senden wir einen ECMD Befehl:

if(!(i2c_start( E6WR ))) //Slave bereit zum schreiben?
{
  i2c_write('i');
  i2c_write('p');
  i2c_write('\0'); //Befehl muss 0 Terminiert werden!
}

Daten Empfangen

Ethersex empfängt nun den Befehl und Wertet ihn automatisch aus. Jetzt müssen wir nur mehr das Ergebnis auslesen:

if(!(i2c_rep_start( E6RD ))) //Slave bereit zum lesen?
{
  for(n=0;n<E6BUFLEN;n++)
  {
    E6_data[n] = i2c_readAck();
    if(E6_data[n] == '\0')
      break;
    if(E6_data [n] == '\n')
    {
      E6_data[n+1] = '\0';
      break;
    }
  }				
  i2c_readNak();               
  i2c_stop();
}

Nun haben wir die IP Adresse im E6_data Array stehen.