i2c.h-Dateireferenz

Definitionen und Funktionen zum I2C Bus. Mehr ...

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define READ   1
#define WRITE   0
#define ACK   1
#define NAK   0
#define SDA   PC3
#define SCL   PC2
#define SDA_DDR   DDRC
#define SCL_DDR   DDRC
#define SDA_PIN   PINC
#define SCL_PIN   PINC
#define SDA_PORT   PORTC
#define SCL_PORT   PORTC
#define NOP   asm volatile("nop")
#define QDEL   NOP; NOP; NOP; NOP; NOP
#define HDEL   QDEL; QDEL
#define SDA_HI   SDA_PORT |= (1 << SDA)
#define SDA_LO   SDA_PORT &= ~(1 << SDA)
#define SCL_HI   SCL_PORT |= (1 << SCL)
#define SCL_LO   SCL_PORT &= ~(1 << SCL)
#define SCL_TOGGLE   HDEL; SCL_HI; HDEL; SCL_LO
#define I2C_START   SDA_LO; QDEL; SCL_LO
#define I2C_STOP   HDEL; SCL_HI; QDEL; SDA_HI; HDEL

Funktionen

void InitI2C (void)
 I2C Bus Initialisieren.
unsigned char WriteI2C (unsigned char byte)
 Daten ueber I2C schreiben.
unsigned char ReadI2C (unsigned char nak)
 Daten aus I2C Bus lesen.
unsigned char StartI2C (unsigned char device)
 Datenaustausch starten.
void StopI2C (void)
 Datenaustausch Stoppen.


Ausführliche Beschreibung

Definitionen und Funktionen zum I2C Bus.

I2C Einfuehrung
I2C ist ein 2 Draht Bus-System das von Philips entwickelt wurde. Dazu wird lediglich eine Datenleitung und eine Taktleitung benötigt (und natuerlich eine gemeinsame Masseleitung). Es gibt eine Reihe von ICs mit I2C Bus Schnittstelle (Digital Port Erweiterungen, A/D Wandler, EEPROMs etc.) Damit ergibt sich eine Vielzahl von Moeglichkeiten um die begrenzten IO Ressourcen des ASUROs zu erweitern. Bis zu 127 Teilnehmer sind an einem I2C Bus anschliessbar. Dazu werden lediglich 2 Port Pis des ASUROs benötigt. Bie meissten ATmel AVR Prozessoren unterstuetzen die I2C Schnittstelle per Hardware, TWI (Two Wire Interface) genannt.
I2C am ASURO
Die Hardware TWI (I2C) Ports sind beim ASURO leider durch den Batterie Abfrage A/D Port und dem Tastsensor A/D Port belegt. Um die I2C Schnittstelle ohne Umbau des ASUROs zu realisieren, wird der I2C BUs mit Software emuliert. Dabei werden füer den I2C Bus die Ports der ASURO Erweiterungsplatine verwendet. Dies sind ADC2 fuer die I2C Taktleitung (SCL) und ADC3 fuer die I2C Datenleitung (SDA). Leider geht dadurch die Funktion des Liniensensors verloren. Da die beiden Fototransistoren ebenfalls die Ports ADC2 und ADC3 belegen. Ausloeten braucht man die Fototransistoren zum Glueck nicht.
I2C Anwendungen
Ueber den I2C Bus lassen sich z.B. folgende Erweiterungen realisieren.
Autoren:
raid_ox
Version:
V001 - 17.02.2007 - raid_ox
Erste Implementierung

V002 - 10.02.2007 - m.a.r.v.i.n
Absplittung von asuro.h in eigene Header-Datei,
Doxygen Kommentare (KEINE Funktionsänderung)

Definiert in Datei i2c.h.


Makro-Dokumentation

#define ACK   1

Definiert in Zeile 73 der Datei i2c.h.

#define HDEL   QDEL; QDEL

Definiert in Zeile 89 der Datei i2c.h.

#define I2C_START   SDA_LO; QDEL; SCL_LO

Definiert in Zeile 98 der Datei i2c.h.

#define I2C_STOP   HDEL; SCL_HI; QDEL; SDA_HI; HDEL

Definiert in Zeile 99 der Datei i2c.h.

#define NAK   0

Definiert in Zeile 74 der Datei i2c.h.

#define NOP   asm volatile("nop")

Definiert in Zeile 87 der Datei i2c.h.

#define QDEL   NOP; NOP; NOP; NOP; NOP

Definiert in Zeile 88 der Datei i2c.h.

#define READ   1

Definiert in Zeile 71 der Datei i2c.h.

#define SCL   PC2

Definiert in Zeile 79 der Datei i2c.h.

#define SCL_DDR   DDRC

Definiert in Zeile 81 der Datei i2c.h.

#define SCL_HI   SCL_PORT |= (1 << SCL)

Definiert in Zeile 94 der Datei i2c.h.

#define SCL_LO   SCL_PORT &= ~(1 << SCL)

Definiert in Zeile 95 der Datei i2c.h.

#define SCL_PIN   PINC

Definiert in Zeile 83 der Datei i2c.h.

#define SCL_PORT   PORTC

Definiert in Zeile 85 der Datei i2c.h.

#define SCL_TOGGLE   HDEL; SCL_HI; HDEL; SCL_LO

Definiert in Zeile 97 der Datei i2c.h.

#define SDA   PC3

Definiert in Zeile 78 der Datei i2c.h.

#define SDA_DDR   DDRC

Definiert in Zeile 80 der Datei i2c.h.

#define SDA_HI   SDA_PORT |= (1 << SDA)

Definiert in Zeile 91 der Datei i2c.h.

#define SDA_LO   SDA_PORT &= ~(1 << SDA)

Definiert in Zeile 92 der Datei i2c.h.

#define SDA_PIN   PINC

Definiert in Zeile 82 der Datei i2c.h.

#define SDA_PORT   PORTC

Definiert in Zeile 84 der Datei i2c.h.

#define WRITE   0

Definiert in Zeile 72 der Datei i2c.h.


Dokumentation der Funktionen

void InitI2C ( void   ) 

I2C Bus Initialisieren.

Parameter:
keine 
Rückgabe:
nichts
Siehe auch:
SDA_HI, SCLHI
Funktionsweise:
Schaltet PC2 und PC3 als Ausgang. und Setze die Pins als High

Definiert in Zeile 48 der Datei i2c.c.

00049 {
00050   SDA_DDR |= (1 << SDA);        
00051   SCL_DDR |= (1 << SCL);        
00052   SDA_HI;             
00053   SCL_HI;             
00054 }

unsigned char ReadI2C ( unsigned char  ack  ) 

Daten aus I2C Bus lesen.

Parameter:
ack NAK oder ACK
Rückgabe:
erhaltene Daten
Siehe auch:
SDA_HI, SDA_LO, SCL_HI, SCL_TOGGLE, HDEL

Definiert in Zeile 115 der Datei i2c.c.

00116 {
00117   unsigned char i, byte = 0;
00118   
00119   SDA_HI;
00120   SDA_DDR &= ~(1 << SDA);
00121   
00122   for (i=0; i<8; i++)
00123   {
00124   HDEL;
00125     SCL_HI;
00126     byte <<= 1;
00127     byte |= (SDA_PIN & (1 << SDA)) >> SDA;
00128     HDEL;
00129     SCL_LO;
00130   }
00131 
00132   SDA_DDR |= (1 << SDA);
00133 
00134   if (ack)
00135     SDA_LO;                             // ack
00136   else
00137     SDA_HI;                             // nak
00138 
00139   SCL_TOGGLE;
00140   SDA_HI;
00141 
00142   return byte;
00143 }

unsigned char StartI2C ( unsigned char  device  ) 

Datenaustausch starten.

Parameter:
device Addresse der I2C Gerät
Rückgabe:
antwort

Definiert in Zeile 159 der Datei i2c.c.

00160 {
00161   I2C_START;
00162   return WriteI2C (device);
00163 }

void StopI2C ( void   ) 

Datenaustausch Stoppen.

Parameter:
nichts 
Rückgabe:
nichts

Definiert in Zeile 179 der Datei i2c.c.

00180 {
00181   SDA_LO;
00182   I2C_STOP;
00183 }

unsigned char WriteI2C ( unsigned char  byte  ) 

Daten ueber I2C schreiben.

Parameter:
byte daten
Rückgabe:
antwort
Siehe auch:
SDA_HI, SDA_LO, SCL_HI, SCL_TOGGLE, HDEL

Definiert in Zeile 72 der Datei i2c.c.

00073 {
00074   unsigned char i;
00075   
00076   for (i=8; i>0; i--)
00077   {
00078     if ( byte & (1<<(i-1)) )
00079       SDA_HI;
00080     else
00081       SDA_LO;         
00082     SCL_TOGGLE;         
00083   }
00084   SDA_HI;             
00085 
00086   SDA_DDR &= ~(1 << SDA);
00087   HDEL;
00088   SCL_HI;
00089   byte = SDA_PIN & (1 << SDA);
00090 
00091   HDEL;
00092   SCL_LO;
00093   SDA_DDR |= (1 << SDA);
00094   HDEL;
00095 
00096   return (byte == 0);
00097 }


Erzeugt am Sun Nov 18 18:24:53 2007 für ASURO Library von  doxygen 1.5.1-p1