Hallo liebe Forumsgemeinde,

ich bin ein Anfänger, was die Programmierung angeht. Ich möchte einen Temperatursensor(DS1621) via I2C mit einem LPC 1769 ansteuern. Als Entwicklungsumgebung kommt Coocox mit dem GCC Compiler zum Einsatz.
Ich habe auch schon ein paar mögliche Lösungswege gefunden, allerdings komme ich noch nicht an einen Logikanalyser bzw einem Oszi ran, um zu überprüfen, ob überhaupt Signale ankommen.
Vielleicht kann der eine oder andere mal drüber schauen und mir sagen, ob ich auf dem richtigen Weg bin?

Includes mit anschließender Initialisierung der I2C-Peripherie:
Code:
#define  Start_Convert_Temp	                0xEE 	/*Deklaration des Registers Start_Convert_Temp*/
#define  Read_Temp 			        0xAA 	//Deklaration des Registers Read_Temp
#define  DS1621_Write 		                0x90 	//Schreibender Zugriff
#define  DS1621_Read		                0x91 	//lesender Zugriff
#define I2CDevice_M LPC_I2C0		//Auswahl der Peripherie -> I2C0
#define I2CDEV_S_ADDR                       (0x90>1)	//Grundadresse ohne R/W-Bit 0x48


I2C_Init(I2CDevice_M,100000);               //Einstellen der Taktrate -> 100kHz
I2C_Cmd(I2CDevice_M,ENABLE);             // Einschalten der I2C-Peripherie


1. Lösungsansatz
Hier habe ich die Funktionen, die Dank der Bibliotheken bereitgestellt werden benutzt. (Im Anhang)

Code:
/****** Temperatur Messen****/

				int TempH, TempL;

				I2C_Start(I2CDevice_M);						//Starten im Master Mode
				I2C_SendByte(I2CDevice_M,DS1621_Write);		//Slave ansprechen 0x90
				I2C_SendByte(I2CDevice_M,Start_Convert_Temp);	//Beginn der Temperaturmessung 0xEE
				I2C_STOP(I2CDevice_M);				//Eigentliche Messung beenden (?)

				I2C_Sart(I2CDevice_M);				//Nochmaliger Start
				I2C_SendByte(I2CDevice_M,DS1621_Write);		//Slave Ansprechen 0x90
				I2C_SendByte(I2CDevice_M,Read_Temp);			//gemessene Temperatur lesen 0xAA
				I2C_STOP(I2CDevice_M);
				_delay_ms(200);							//200ms dem Sensor Zeit zum Messen der Temperatur geben


		/******** Temperatur anzeigen lassen *****/

				I2C_Start(I2CDevice_M);				//Starten im Master Mode
				I2C_SendByte(I2CDevice_M,DS1621_Write);		// 0x90
				I2C_STOP(I2CDevice_M);

				I2C_Start(I2CDevice_M);
				I2C_SendByte(I2CDevice_M,DS1621_Read);
				TempH=I2C_GetByte(I2CDevice_M,*retdat,!FALSE ack); /*schauen, was ich MIT den *retdat machen muss..*/
				TempL=I2C_GetByte(I2CDevice_M,*retdat,0 ack);
				I2C_STOP(I2CDevice_M);
				ret=(TempH*1+TempL/256);
2. Lösungsansatz
Hierbei benutze ich nicht die mitgelieferten Funktionen, sondern schreibe meine eigenen..Man beachte, die Syntax

Code:
1. Versuch----------------------------------------------------------------------
	        //Transmit

	        void I2C_write(void)
			{
	        	I2C_M_SETUP_Type transferMCfg;
				transferMCfg.sl_addr7bit = I2CDEV_S_ADDR;   //0x48, muss Grundadresse sein, da hier nur 7 bit zulässig sind
				transferMCfg.tx_data = DS1621_Write;		//0x90
				transferMCfg.tx_length = 1;					//ist es nicht besser, einen buffer anzugeben?
				transferMCfg.rx_data = 0					
				transferMCfg.rx_length = NULL;
				transferMCfg.retransmissions_max = 3;
				I2C_MasterTransferData(I2CDevice_M, &transferMCfg, I2C_TRANSFER_POLLING);
			}

	        void I2C_send(void)
	        {
	        	I2C_M_SETUP_Type receiveMCfg;				// statt transfer -> receive ??
	        	transferMCfg.sl_addr7bit = I2CDEV_S_ADDR;            //0x48
	        	transferMCfg.tx_data = DS1621_Read;			//0x91
	        	transferMCfg.tx_length = 1;
	        	transferMCfg.rx_data = Read_Temp			        //Temperatur abholen 0xEE
	        	transferMCfg.rx_length = NULL;
	        	transferMCfg.retransmissions_max = 2;
	        	I2C_MasterTransferData(I2CDevice_M, &transferMCfg, I2C_TRANSFER_POLLING);
	        }

Der Code soll später noch um eine LCD Anzeige erweitert werden.
Aber erstmal wollte ich das Programmgerüst zum Laufen bringen.. Ist das so ok? Kann ich vielleicht die I2C Bibliothek von Fleury nehmen, aber die Bibliothek von CooCox für den LCD?
Ich weiß echt nicht mehr weiter..

Glg Tom