Bei den Kondensatoren bin ich mir nicht mehr sicher. Hab sie einfach aus meiner Box genommen (SMD 0805). Eine Pause hab ich eingebaut... war aber auch nicht des Rätsels Lösung. Anscheinend hab ich vergessen die Start-Condition auszuführen (StartI2C())... das hat mir schon mal beschert dass er mir nun lauter 6er ausgibt. Ich hab jetzt noch ein paar Sachen versucht. Ich weiß noch nicht wann er von mir ein AckI2C() braucht bzw. ein NotAckI2C... Diese Funktionen erzeugen eine (Not)-Acknowledge-Bedingung für den I2C. Hier mal der Code bis jetzt...
Code:
#pragma config WDTEN = OFF
#pragma config STVREN = OFF
#pragma config XINST = OFF
#pragma config CP0 = OFF, IESO = OFF, WDTPS = 1, DSWDTOSC = INTOSCREF
#pragma config OSC = INTOSC, T1DIG = OFF, LPT1OSC = OFF, FCMEN = OFF
//Include-Files
#include "p18f26j11.h"
#include "adc.h"
#include "stdlib.h"
#include "delays.h"
#include "stdio.h"
#include "usart.h"
#include "i2c.h"
//-----Main
void main(void)
{
unsigned char x=0;
unsigned char y=0;
unsigned char z=0;
int i=0;
int k=0;
int delay_var=10;
char degree;
//-----USART-Verbindung Bluetooth
Open1USART( USART_TX_INT_OFF &
USART_RX_INT_OFF &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH
, 12);
Delay10KTCYx(1000);
OpenI2C(MASTER,SLEW_OFF);
// SSPADD = 0x09;
StopI2C();
StartI2C();
if(WriteI2C(0x3C))
{
CloseI2C();
printf("Error 1");
}
if(WriteI2C(0x02))
{
CloseI2C();
printf("Error 2");
}
if(WriteI2C(0x00))
{
CloseI2C();
printf("Error 3");
}
IdleI2C();
StopI2C();
printf("test1\n\r");
/*
if(DataRdyI2C());
{
Delay10KTCYx(100);
printf("test2\n\r");
StartI2C();
WriteI2C(0x3D);
x = ReadI2C();
x = (x<<8)+ReadI2C();
IdleI2C();
StopI2C();
Delay10KTCYx(100);
}
*/
StartI2C();
IdleI2C();
if(DataRdyI2C());
{
printf("dataisready");
}
StopI2C();
while(1)
{
StartI2C();
IdleI2C();
WriteI2C(0x3D);
StopI2C();
Delay10KTCYx(100);
printf("flag1");
printf("flag2");
StartI2C();
IdleI2C();
x = ReadI2C();
IdleI2C();
x = (x << 8)+ReadI2C();
IdleI2C();
AckI2C();
IdleI2C();
StartI2C();
IdleI2C();
x = ReadI2C();
IdleI2C();
y = (y << 8)+ReadI2C();
IdleI2C();
AckI2C();
IdleI2C();
StartI2C();
IdleI2C();
z = ReadI2C();
IdleI2C();
z = (z << 8)+ReadI2C();
IdleI2C();
NotAckI2C();
IdleI2C();
StopI2C();
Delay10KTCYx(10);
printf("%d %d %d\n\r",x,y,z);
Delay10KTCYx(10);
if(Read1USART()=='1');
{
break;
}
}
}
Lesezeichen