00001 /* PICCOLO project 00002 * Copyright (c) 2010-2011 Istvan Cserny (cserny@atomki.hu) 00003 * 00004 */ 00005 #include "piccolo_all.h" 00006 #include "piccolo_i2c.h" 00007 00028 void LM75_init(uint8 addr) { 00029 i2c_start(); //Új tranzakciót kezdünk 00030 i2c_putc(addr &0xFE); //Slave cím és write mód 00031 i2c_putc(0x01); //A vezérlőregiszter címe 00032 i2c_putc(0x18); //Konfiguráció beállítása (FT=6,normal mode) 00033 i2c_stop(); //A tranzakció vége 00034 } 00035 00040 int LM75_readTemp(uint8 addr) { 00041 union16 temp; 00042 i2c_start(); 00043 i2c_putc(addr & 0xFE); //Slave cím és írás mód 00044 i2c_putc(0x00); //A TEMP regiszter címe 00045 i2c_rstart(); //RESTART a módváltáshoz 00046 i2c_putc(addr | 0x01); //Slave cím és olvasás mód 00047 temp.hi_byte=i2c_getc(I2C_ACK); //egy bájt fogadása nyugtázással (fokok) 00048 temp.lo_byte=i2c_getc(I2C_NAK); //törtész olvasása, negatív nyugtázással 00049 i2c_stop(); //tranzakció vége 00050 return ((int16)temp.word); 00051 } 00052 00058 void LM75_kiiras(int16 data) { 00059 int32 tmp32; 00060 tmp32=(data*10L + 128L)/256; //tizedfokokra számítjuk át, kerekítéssel 00061 outdec(tmp32,1); //Kiíratás, egy tizedesre 00062 outString(" C (0x"); 00063 out4hex((uint16)data); //Nyers adat hexadcimális kiírása 00064 outString(") "); 00065 } 00066 00067 void main(void) { 00068 int16 temp; 00069 InitializeSystem(); 00070 while (!usb_cdc_kbhit()) { //Várunk a CDC Terminálra 00071 ProcessIO(); 00072 } 00073 i2c_init(100); //100 kHz-es I2C bitráta 00074 LM75_init(0x90); //a T1 hőmérő beállítása normál módba 00075 LM75_init(0x92); //a T2 hőmérő beállítása normál módba 00076 outString("\nIsten hozott a PICCOLO projekthez!\n"); 00077 outString("2xLM75_i2c.c program, MCU: "); 00078 #if defined(__18F4550) 00079 outString("PIC18F4550\n"); 00080 #elif defined(__18F14K50) 00081 outString("PIC18F14K50\n"); 00082 #endif 00083 while (1) { 00084 delay_ms(2000); 00085 temp=LM75_readTemp(0x90); //első hőmérő kiolvasása 00086 outString("T1 = "); 00087 LM75_kiiras(temp); //a hőmérséklet kiíratása 00088 temp=LM75_readTemp(0x92); //második hőmérő kiolvasása 00089 outString("T2 = "); 00090 LM75_kiiras(temp); //a hőmérséklet kiíratása 00091 outString("\n"); 00092 } 00093 }