Hallo zusammen, ich versuche mich zur Zeit am Auslesen eines BMP280 über i2c. Leider ist mein C noch nicht so gut, als dass ich die Lib von Bosch vollständig verstanden habe. Hier der Link zur Library: https://github.com/BoschSensortec/BMP280_driver Ich habe mir ein kleines Programm für einen Mega8 geschrieben, leider funktioniert es nicht. Das ist das Programm:
1 | #define F_CPU 3686400UL
|
2 | #define UART_BAUD_RATE 115200
|
3 | |
4 | #include <avr/io.h> |
5 | #include <util/delay.h> |
6 | #include <stdbool.h> |
7 | #include <avr/interrupt.h> |
8 | #include <stdlib.h> |
9 | |
10 | #include "bmp280.h" |
11 | #include "uart.h" |
12 | |
13 | //******************** Globale Variablen definieren *********************
|
14 | |
15 | struct bmp280_t bmp280; |
16 | s32 Temp_Baro = 0; |
17 | u32 Druck_Baro = 0; |
18 | |
19 | char Buffer1[16]; |
20 | char Buffer2[16]; |
21 | char Buffer3[16]; |
22 | char Buffer4[16]; |
23 | |
24 | bool init_OK; |
25 | bool setpower_OK; |
26 | bool read_OK; |
27 | |
28 | |
29 | int main(void) |
30 | {
|
31 | //************************ Initialisierungen ************************
|
32 | sei(); |
33 | uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); |
34 | TWBR = 0x0A; |
35 | TWCR |= (1<<TWEN); |
36 | _delay_ms(1000); |
37 | |
38 | //*********** Adresse in die "bmp280"-Struktur schreiben ************
|
39 | |
40 | uart_puts("BMP280: Setze Adresse...\r\n"); |
41 | bmp280.dev_addr = 0x76; |
42 | _delay_ms(1000); |
43 | |
44 | //********************* BMP280 initialisieren ***********************
|
45 | |
46 | uart_puts("BMP280: Initialisiere...\r\n"); |
47 | init_OK = bmp280_init(&bmp280); |
48 | _delay_ms(1000); |
49 | |
50 | //************** Arbeitsmodus des BMP280 einschalten ****************
|
51 | |
52 | uart_puts("BMP280: Setze PowerMode...\r\n"); |
53 | setpower_OK = bmp280_set_power_mode(BMP280_NORMAL_MODE); |
54 | _delay_ms(1000); |
55 | |
56 | uart_puts("BMP280: Starte Schleife...\r\n"); |
57 | _delay_ms(1000); |
58 | |
59 | while (1) |
60 | {
|
61 | //*************** Druck und Temperatur auslesen *****************
|
62 | uart_puts("BMP280: Lese Daten...\r\n"); |
63 | read_OK = bmp280_read_pressure_temperature(&Druck_Baro, &Temp_Baro); |
64 | _delay_ms(5000); |
65 | |
66 | }
|
67 | }
|
Leider bekomme ich auf dem UART nur folgendes: BMP280: Setze Adresse... BMP28BMP280: Setze Adresse... BMP28BMP280: Setze Adresse... BMP28BMP280: Setze Adresse... BMP28BMP280: Setze Adresse... BMP28BMP280: Setze Adresse... BMP28BMP280: Setze Adresse... BMP28BMP280: Setze Adresse... BMP28BMP280: Setze Adresse... BMP28BMP280: Setze Adresse... BMP28BMP280: Setze Adresse... BMP28BMP280: Setze Adresse... Was mache ich falsch, warum bleibt der µC beim setzen der Adresse hängen? Für Ideen und auch Ratschläge bin ich sehr dankbar! LG, Sebastian