Hallo zusammen,
ich habe einen MSP430FG439 an den ich gerne den BMP085 Drucksensor
anschließen möchte. Der Sensor hat nur I2C und bei dem yC ist diese
Schnittstelle nicht in Hardware vorhanden. Somit würde ich diese gerne
mit Hilfe der Softwarevariante "erzeugen".
http://www.mikrocontroller.net/articles/MSP430_Codebeispiele#I2C.2FTWI_in_Software
Habe dazu die beiden I/Os P3.5 (SCL) und P3.7 (SDA) genommen.
In einem ersten Schritt möchte ich nun den Bus-initialisieren, den
Sensor durch senden von 0xEE (Adresse + write) ansprechen und dann
überprüfen, ob das Acknowledgement gessetzt wird.
In der i2c.c Datei steht nun folgendes:
1 | #define SDA BIT7
|
2 | #define SCL BIT5
|
3 |
|
4 | #define I2CWAIT wait(0);
|
5 |
|
6 | /*************************/
|
7 |
|
8 | static void SetLowSDA()
|
9 | {
|
10 | P3DIR |= SDA;
|
11 | I2CWAIT
|
12 | }
|
13 | static void SetHighSDA()
|
14 | {
|
15 | P3DIR &= ~SDA;
|
16 | I2CWAIT
|
17 | }
|
18 |
|
19 | static void SetLowSCL()
|
20 | {
|
21 | P3OUT &= ~SCL;
|
22 | I2CWAIT
|
23 | }
|
24 | static void SetHighSCL()
|
25 | {
|
26 | P3OUT |= SCL;
|
27 | I2CWAIT
|
28 | }
|
29 | /*************************/
|
30 | /* To initialize the bus */
|
31 | /*************************/
|
32 | void i2cInit()
|
33 | {
|
34 | P3SEL &= ~SDA;
|
35 | P3SEL &= ~SCL;
|
36 |
|
37 | P3OUT &= ~SCL;
|
38 | P3OUT &= ~SDA;
|
39 |
|
40 | P3DIR |= SCL;
|
41 | P3DIR &= ~SDA;
|
42 |
|
43 | SetHighSCL();
|
44 | SetLowSDA();
|
45 | SetHighSDA();
|
46 | }
|
Bei Pegeländerung wird SCL auf high bzw. low gesetzt bleibt jedoch immer
Output.
Soweit ist mir das alles klar. Jedoch bei SDA wechsele ich zwischen
Input (SetHighSDA()) bzw. Output (SetLowSDA()). Ich denke, dass dies
nötig ist um das Acknowledgement abzufragen.
Brauche ich aber nicht noch eine weitere Funktion um die drei
SDA-Zustände
output low - output high - input
setzen zu können?
Bzw. wäre es nicht logischer in SetLowSDA() den PIN auf input zu setzen,
da dies ja dann auch einen low Pegel auf der Leitung entspricht?
Würde mich sehr freuen, wenn jemand meine Newbie-Frage hier beantworten
könnte. Vielen Dank schonmal.