Danke für deine Antwort, Du hast mir schon mal sehr viel weiter
geholfen!
Die Libraries vom Peter Fleury hab ich bereits gefunden auch die
Register meines Kompasses habe ich schon ausfindig gemacht gehabt.
Jedoch weiß ich überhaupt nicht, wie ich aus dem Arduino Code nützliche
Informationen beziehen kann.
Ich habe auch schon ein weiteres Programm gefunden, mit dem man von
einem bestimmen Temperatur Chip (DS1621) die Temperatur auslesen kann.
Dieses hab ich schon an den LSM303DLM angepasst und schaut nun so aus:
1 |
|
2 | #include <avr/io.h>
|
3 | #include <util/delay.h>
|
4 | #include "i2cmaster.h"
|
5 | #include "twimaster.c"
|
6 |
|
7 | #ifndef F_CPU
|
8 | #warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000"
|
9 | #define F_CPU 4000000L
|
10 | #endif
|
11 | #define BAUD 9600L
|
12 | #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
|
13 | #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
|
14 | #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) // Fehler in Promille
|
15 | #define Dev24C02 0xA2 // device address of EEPROM 24C02, see datasheet
|
16 |
|
17 | #define DS1621_Write 0x9E
|
18 | #define DS1621_Read 0x9F
|
19 |
|
20 | void warte()
|
21 | {
|
22 | int i;
|
23 | for (i=0;i<10;i++)
|
24 | _delay_ms(20);
|
25 | }
|
26 |
|
27 |
|
28 | int main(void)
|
29 | {
|
30 | unsigned char ret, KompH, KompL, data, test;
|
31 | int i;
|
32 |
|
33 | DDRB = 0xff; // use all pins on port B for output
|
34 | PORTB = 0xff; // (active low LED's )
|
35 | UBRR0H = UBRR_VAL >> 8; /* Baudrate einstellen */
|
36 | UBRR0L = UBRR_VAL & 0xFF; /* Baudrate einstellen */
|
37 | UCSR0B |= (1<<TXEN0); /* UART TX einschalten */
|
38 | test = 'x';
|
39 |
|
40 | i2c_init(); // init I2C interface
|
41 |
|
42 | test = i2c_start(DS1621_Write);
|
43 | // test kann bei Bedarf ausgewertet werden
|
44 | test = i2c_write(0xEE);
|
45 | // test kann bei Bedarf ausgewertet werden
|
46 | i2c_stop();
|
47 |
|
48 | i2c_start(DS1621_Write);
|
49 | i2c_write(0xAA);
|
50 | i2c_stop();
|
51 | warte();
|
52 | while (1)
|
53 | {
|
54 | i2c_start(DS1621_Read);
|
55 | data = i2c_readAck();
|
56 | KompH = data;
|
57 | data = i2c_readNak();
|
58 | KompL = data;
|
59 | i2c_stop();
|
60 |
|
61 | while (!(UCSR0A & (1<<UDRE0)))
|
62 | { /* warten bis Senden moeglich */
|
63 | }
|
64 |
|
65 | UDR0 = KompH;
|
66 |
|
67 | for (i=0;i<10;i++)
|
68 | _delay_ms(100);
|
69 | warte();
|
70 | }
|
71 | }
|
Wie man sieht, sind in diesem Programm auch die Libraries vom Fleury
drin.
Könnte die Auslesung des Kompasses mit diesem Code funktionieren?
MfG,
Quadrox