Phyres
11.05.2013, 21:27
Hallo allerseits!
Ich arbeite gerade an der Verbindung(I2C) zwischen einem PIC(PIC18f87j11) und einem Temperatursensor(Tmp100na).
Die beiden Busleitungen arbeiten beim senden korrekt aber sobald ich versuche etwas zu empfangen bekomme ich als erstes Byte den zuletzt gesendeten Wert wieder und dann kommt nichts mehr und der PIC vergammelt in der warte schleife.
#include <p18f87j11.h>
#include<pic18.h>
#define _XTAL_FREQ 20000000
#pragma config XINST=OFF
void i2c_Wait(void)
{
while (PIR1bits.SSP1IF == 0);
PIR1bits.SSP1IF = 0;
}
void i2c_Restart(void)
{
i2c_Wait();
SSP1CON2bits.RSEN=1;
}
void i2c_Write(unsigned char data)
{
SSP1BUF = data;
i2c_Wait();
}
void AcknI2C1(void)
{
SSP1CON2bits.ACKDT = 0;
SSP1CON2bits.ACKEN = 1;
}
unsigned char ReaI2C1(void)
{
SSP1CON2bits.RCEN = 1;
i2c_Wait();
return ( SSP1BUF );
}
void main(void)
{
SSP1STAT = 0b11000000;
TRISC=0b00011000;
OSCCON = 0b01111010;
SSP1CON1 = 0b0001000;
SSP1CON1bits.SSPEN=1
SSP1CON1bits.SSPEN1=1;
SSPADD = 12;
while(1)
{
//Senden
PIR1bits.SSP1IF = 0;
SSP1CON2bits.SEN = 1;
i2c_Wait();
i2c_Write(0b10010010);
i2c_Write(0b00000000);
i2c_Write(0b10010010);
SSP1CON2bits.PEN=1;
//Empfangen
unsigned char tmp1;
unsigned char tmp2;
tmp1 = ReaI2C1();
AcknI2C1();
tmp2 = ReaI2C1();
}
}
Ich verwende MPLABX / Xc8
Meine Vermutung liegt darin das der Fehler in der Initialisierung liegt aber ich hab bereits die Datenblätter von Sensor sowie von Controller mehrfach durchgelesen(den I2C-Part) und nichts gefunden...
Danke im voraus!
Ich arbeite gerade an der Verbindung(I2C) zwischen einem PIC(PIC18f87j11) und einem Temperatursensor(Tmp100na).
Die beiden Busleitungen arbeiten beim senden korrekt aber sobald ich versuche etwas zu empfangen bekomme ich als erstes Byte den zuletzt gesendeten Wert wieder und dann kommt nichts mehr und der PIC vergammelt in der warte schleife.
#include <p18f87j11.h>
#include<pic18.h>
#define _XTAL_FREQ 20000000
#pragma config XINST=OFF
void i2c_Wait(void)
{
while (PIR1bits.SSP1IF == 0);
PIR1bits.SSP1IF = 0;
}
void i2c_Restart(void)
{
i2c_Wait();
SSP1CON2bits.RSEN=1;
}
void i2c_Write(unsigned char data)
{
SSP1BUF = data;
i2c_Wait();
}
void AcknI2C1(void)
{
SSP1CON2bits.ACKDT = 0;
SSP1CON2bits.ACKEN = 1;
}
unsigned char ReaI2C1(void)
{
SSP1CON2bits.RCEN = 1;
i2c_Wait();
return ( SSP1BUF );
}
void main(void)
{
SSP1STAT = 0b11000000;
TRISC=0b00011000;
OSCCON = 0b01111010;
SSP1CON1 = 0b0001000;
SSP1CON1bits.SSPEN=1
SSP1CON1bits.SSPEN1=1;
SSPADD = 12;
while(1)
{
//Senden
PIR1bits.SSP1IF = 0;
SSP1CON2bits.SEN = 1;
i2c_Wait();
i2c_Write(0b10010010);
i2c_Write(0b00000000);
i2c_Write(0b10010010);
SSP1CON2bits.PEN=1;
//Empfangen
unsigned char tmp1;
unsigned char tmp2;
tmp1 = ReaI2C1();
AcknI2C1();
tmp2 = ReaI2C1();
}
}
Ich verwende MPLABX / Xc8
Meine Vermutung liegt darin das der Fehler in der Initialisierung liegt aber ich hab bereits die Datenblätter von Sensor sowie von Controller mehrfach durchgelesen(den I2C-Part) und nichts gefunden...
Danke im voraus!