Scuido
13.02.2008, 19:21
Hallo,
kann mir irgendjemand helfen?? Habe das halbe Forum auf den Kopf
gestellt und nix zum LM75 mit PIC16F877A gefunden.
Mein Problem, ich möchte nur eine I²C verbindung herstellen. Der Pic
soll nur die Temp ohne "0,5" und ohne "-" auslesen. Ich bekomme aber
noch nichteinmal ne reaktion vom LM75. Ich weiß nicht mehr weiter. Habe
da wohl anscheind irgendetwas nicht verstanden :(
Mein Compiler CC5X
Danke schonmal im voraus.
Gruß
André
/********************************* Include ************************************************** ******/
#include <C:\cc5\16F877A.H>
#include <C:\cc5\delay20.c>
/********************************* Globale Variabeln **********************************************/
/********************************* Funktion ************************************************** *****/
void main(void)
{
/////////////////////******************** Var ***********************///////////////////////////////
char h_byte;
/////////////////////******************** I/O ***********************///////////////////////////////
TRISB = 0b.0000.0000;
TRISC = 0b.1111.1111;
/////////////////////***************** Einstellen der Werte ********************///////////////////////////////
PORTB = 0;
SSPADD = 12; // für I²C -> bei 20MHz = 385kHz
SSPCON = 0b.00001000; // für master-mode
SSPEN = 1;
anfang:
/////////////////////******************** Schleife ******************///////////////////////////////
/* Pointer ausrichten */
SSPIF = 0;
SEN = 1; // // // // // // //
while(!SSPIF); // Bus übernehmen //
SSPIF = 0; // // // // // // //
SSPBUF = 0x90; // // // // // // //
while(!SSPIF); // LM75 Adresse
SSPIF = 0; // // // // // // //
SSPBUF = 0; // // // // // // //
while(!SSPIF); // Temp addressieren
SSPIF = 0; // // // // // // //
PEN = 1; // // // // // // //
while(!SSPIF); // Bus freigeben
SSPIF = 0; // // // // // // //
/* Byte des Pointers auslesen */
SEN = 1; // // // // // // //
while(!SSPIF); // Bus übernehmen //
SSPIF = 0; // // // // // // //
SSPBUF = 0x91; // // // // // // // // // // // // //
while(!SSPIF); // LM75 Adresse mit Leseanweisung //
SSPIF = 0; // // // // // // // // // // // // //
RCEN = 1; // // // // // // // // // // // // //
while(!SSPIF); // LM75 "starte" lesen //
SSPIF = 0; // // // // // // // // // // // // //
h_byte = SSPBUF;
PEN = 0; // // // // // // // // // // // // //
while(!SSPIF); // Bus freigeben //
SSPIF = 0; // // // // // // // // // // // // //
PORTB = h_byte;
Delay1ms(100);
goto anfang;
}
/************************************************** ***********************************************/
kann mir irgendjemand helfen?? Habe das halbe Forum auf den Kopf
gestellt und nix zum LM75 mit PIC16F877A gefunden.
Mein Problem, ich möchte nur eine I²C verbindung herstellen. Der Pic
soll nur die Temp ohne "0,5" und ohne "-" auslesen. Ich bekomme aber
noch nichteinmal ne reaktion vom LM75. Ich weiß nicht mehr weiter. Habe
da wohl anscheind irgendetwas nicht verstanden :(
Mein Compiler CC5X
Danke schonmal im voraus.
Gruß
André
/********************************* Include ************************************************** ******/
#include <C:\cc5\16F877A.H>
#include <C:\cc5\delay20.c>
/********************************* Globale Variabeln **********************************************/
/********************************* Funktion ************************************************** *****/
void main(void)
{
/////////////////////******************** Var ***********************///////////////////////////////
char h_byte;
/////////////////////******************** I/O ***********************///////////////////////////////
TRISB = 0b.0000.0000;
TRISC = 0b.1111.1111;
/////////////////////***************** Einstellen der Werte ********************///////////////////////////////
PORTB = 0;
SSPADD = 12; // für I²C -> bei 20MHz = 385kHz
SSPCON = 0b.00001000; // für master-mode
SSPEN = 1;
anfang:
/////////////////////******************** Schleife ******************///////////////////////////////
/* Pointer ausrichten */
SSPIF = 0;
SEN = 1; // // // // // // //
while(!SSPIF); // Bus übernehmen //
SSPIF = 0; // // // // // // //
SSPBUF = 0x90; // // // // // // //
while(!SSPIF); // LM75 Adresse
SSPIF = 0; // // // // // // //
SSPBUF = 0; // // // // // // //
while(!SSPIF); // Temp addressieren
SSPIF = 0; // // // // // // //
PEN = 1; // // // // // // //
while(!SSPIF); // Bus freigeben
SSPIF = 0; // // // // // // //
/* Byte des Pointers auslesen */
SEN = 1; // // // // // // //
while(!SSPIF); // Bus übernehmen //
SSPIF = 0; // // // // // // //
SSPBUF = 0x91; // // // // // // // // // // // // //
while(!SSPIF); // LM75 Adresse mit Leseanweisung //
SSPIF = 0; // // // // // // // // // // // // //
RCEN = 1; // // // // // // // // // // // // //
while(!SSPIF); // LM75 "starte" lesen //
SSPIF = 0; // // // // // // // // // // // // //
h_byte = SSPBUF;
PEN = 0; // // // // // // // // // // // // //
while(!SSPIF); // Bus freigeben //
SSPIF = 0; // // // // // // // // // // // // //
PORTB = h_byte;
Delay1ms(100);
goto anfang;
}
/************************************************** ***********************************************/