tuxer
12.03.2007, 22:45
Hallo,
ich versuche mit dem RnFunk128-Board das Kompassmodul CMPS03 über I2C anzusteuern. Mit der mitgelieferten BASCOM-Demo funktioniert es ohne Probleme. Da ich aber lieber in C programmiere (und BASCOM unter Linux nicht funktioniert :wink: ) , habe ich ein Programm geschrieben, welches die twimaster.c von P. Fleury verwendet und zum Test erstmal die Firmwareversion des Moduls ausliest und per UART an den PC schickt. Übertrage ich das Programm auf den Controller, wird das Programm automatisch gestartet, nachdem die Programmierung abgeschlossen ist. Dann funktioniert das Programm auch. Schalte ich aber das Board aus, entferne das Programmierkabel und schalte es anschließend wieder ein, kann der Microcontroller die Version nicht auslesen, er wartet scheinbar ewig auf die Daten.
Hier der Quellcode des Programms:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <inttypes.h>
#include <string.h>
#include <stdlib.h>
#include "radio.h"
#include "usart.h"
#include "adc.h"
#include "i2cmaster.h"
#include "cmps03.h"
int read_compass()
{
int data;
i2c_start(0xc0);
i2c_write(0);
i2c_stop();
i2c_start(0xc1);
data = i2c_readNak();
i2c_stop();
return data;
}
int main(void)
{
char ret;
int direction;
char msg[5];
ret = usart_init(B9600);
i2c_init();
memset(msg, 0, 5);
usart_send("uc code test\n\r", 14);
direction = read_compass();
itoa(direction, msg, 10);
msg[3] = '\n';
msg[4] = '\r';
usart_send(msg, 5);
usart_send("uc code afte\n\r", 14);
return 0;
}
Hoffe jemand kann mir helfen.
ich versuche mit dem RnFunk128-Board das Kompassmodul CMPS03 über I2C anzusteuern. Mit der mitgelieferten BASCOM-Demo funktioniert es ohne Probleme. Da ich aber lieber in C programmiere (und BASCOM unter Linux nicht funktioniert :wink: ) , habe ich ein Programm geschrieben, welches die twimaster.c von P. Fleury verwendet und zum Test erstmal die Firmwareversion des Moduls ausliest und per UART an den PC schickt. Übertrage ich das Programm auf den Controller, wird das Programm automatisch gestartet, nachdem die Programmierung abgeschlossen ist. Dann funktioniert das Programm auch. Schalte ich aber das Board aus, entferne das Programmierkabel und schalte es anschließend wieder ein, kann der Microcontroller die Version nicht auslesen, er wartet scheinbar ewig auf die Daten.
Hier der Quellcode des Programms:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <inttypes.h>
#include <string.h>
#include <stdlib.h>
#include "radio.h"
#include "usart.h"
#include "adc.h"
#include "i2cmaster.h"
#include "cmps03.h"
int read_compass()
{
int data;
i2c_start(0xc0);
i2c_write(0);
i2c_stop();
i2c_start(0xc1);
data = i2c_readNak();
i2c_stop();
return data;
}
int main(void)
{
char ret;
int direction;
char msg[5];
ret = usart_init(B9600);
i2c_init();
memset(msg, 0, 5);
usart_send("uc code test\n\r", 14);
direction = read_compass();
itoa(direction, msg, 10);
msg[3] = '\n';
msg[4] = '\r';
usart_send(msg, 5);
usart_send("uc code afte\n\r", 14);
return 0;
}
Hoffe jemand kann mir helfen.