From 56d9bdd39ed36c36e9a61411b86c76d5228b2133 Mon Sep 17 00:00:00 2001 From: sicarius Date: Sun, 11 Feb 2007 18:32:03 +0000 Subject: Added lot's of code-files used during work --- source/ct-Bot/Documentation/TWI-Treiber.htm | 70 +++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 source/ct-Bot/Documentation/TWI-Treiber.htm (limited to 'source/ct-Bot/Documentation/TWI-Treiber.htm') diff --git a/source/ct-Bot/Documentation/TWI-Treiber.htm b/source/ct-Bot/Documentation/TWI-Treiber.htm new file mode 100644 index 0000000..524774d --- /dev/null +++ b/source/ct-Bot/Documentation/TWI-Treiber.htm @@ -0,0 +1,70 @@ + + + + + +

Carsten Giesen (info@cnau.de)

+

TWI-Treiber (I2C)

+

Die gesammte Kommunikation mit der TWI Schnittstelle steckt in TWI_driver.c +und TWI_driver.h.
Angesprochen wird der Treiber �ber "Send_to_TWI(tx_frame)" +daf�r sind aber ein paar Vorarbeiten n�tig.

+

Zur Vereinfachung hier ein Beispiel am Beispiel vom SRF10:

+


char +temp[2];                 +//Array um Platz f�r die Befehle zu schaffen
char +state;                     +//Platz f�r das Ergebniss der Aktion
tx_type +tx_frame[2];     //Hier wird der Container geschaffen

+

+

state = SUCCESS;         +//Vorbelegen, da manche Aktionen nur Sinn machen, wenn state=SUCCESS

+

//Jetzt gehts los:
tx_frame[0].slave_adr = address+W; //Die Adresse des +Ziel-Bausteins
tx_frame[0].size = 2; //Wie viele Befehle (Daten) sollen +�bertragen werden
tx_frame[0].data_ptr = temp; //der Pointer f�r die +Befehle
tx_frame[0].data_ptr[0] = SRF10_COMMAND;     +//Der erste Befehl ist normaler Weise das +Register, 
                                                                                        +//welches Angesprochen werden soll
tx_frame[0].data_ptr[1] = +metric_unit;                     +//Was soll gemacht werden (hier eine Messung in cm)
tx_frame[1].slave_adr = +OWN_ADR;                     +//Damit wird dem Treiber klar gemachtm das er fertig ist.
state = +Send_to_TWI(tx_frame);                             +//Und jetzt wird alles �bergeben

In State steht jetzt ob der Befehl +erfolgreich war, oder nicht.

Wie man Daten empf�ngt, am Beispiel Register +auslesen:

+

uint8 srf10_read_register(unsigned char srf10_register)
{
char +temp;                     +//Variable um Platz f�r die Befehle zu schaffen
char +value;                     +//Variable um Platz f�r die Resultate zu schaffen
char +state;                     +//Platz f�r das Ergebniss der Aktion
tx_type +tx_frame[3];     //Hier wird der Container +geschaffen
state = SUCCESS;         +//Vorbelegen, da manche Aktionen nur Sinn machen, wenn state=SUCCESS
value = +0;
tx_frame[0].slave_adr = +address+W;          //Die Adresse +des Ziel-Bausteins
tx_frame[0].size = +1;                                        +//Wie viele Befehle (Daten) sollen �bertragen werden
tx_frame[0].data_ptr = +&temp;                      +//der Pointer f�r die Befehle
tx_frame[0].data_ptr[0] = +srf10_register;     //Der erste Befehl ist normaler Weise +das +Register,
                                                                            +//welches Angesprochen werden soll
tx_frame[1].slave_adr = +address+R;             +//Die Adresse des Ziel-Bausteins +R f�r lesen
tx_frame[1].size = +1;                                         +//Wie viele Daten sollen gelesen werden
tx_frame[1].data_ptr = +&value;                     +//der Pointer f�r die Daten
tx_frame[2].slave_adr = +OWN_ADR;         //Damit wird dem +Treiber klar gemachtm das er fertig ist.
state = +Send_to_TWI(tx_frame);                 +//Und jetzt wird alles �bergeben
srf10_state = state;
return +value;
}

+

Man kann also gut sehen, das beide Aktionen, schreiben und lesen kombiniert +werden k�nnen.

-- cgit v1.2.3