unsigned long long fuehler1=0xE4000000AB97AC28,fuehler2=0x89000000A88CBA28,fuehler5=0xD80000019B65B428; unsigned long long fuehler6=0x7E0000019B8CEC28,fuehler7=0x9200000230007E28,fuehler8=0x1C0000022FDF0928; unsigned long long fuehler9=0xA0000002466E5728,fuehler10=0x4F00000246868D28,fuehler11=0x3A000002879FB528; unsigned long long fuehler12=0x2900000287BFB028,fuehler13=0xCC000002AFE4A128,fuehler14=0x92000002B0137B28; unsigned long long fuehler15=0xAC000002BDB34728,fuehler16=0x56000002BDCC4C28,fuehler17=0xAA0000028B874328; unsigned long long fuehler18=0x290000028BB7F328,fuehler19=0x0F000003E90D6028,fuehler20=0x4A000003E91E3328; unsigned long long fuehler21=0x64000003E91C5128,fuehler22=0x23000003E8E49B28,fuehler23=0xE0000003E8F8DE28; unsigned long long fuehler24=0xAD000003ADBDF628,fuehler25=0xCD000003ADB45C28,fuehler26=0xB4000003ADA4FF28; unsigned long long fuehler27=0x1B000003AD972728,fuehler28=0x72000003ADAEC628,fuehler29=0xbdaaaaaa00000028; unsigned long long fuehler30=0xC9000005D9D26228,fuehler31=0x27000005DA731228; unsigned long long fuehler32=0x72000003ADAEC628,fuehler33=0x7000000929D55828,fuehler34=0xAE0000092D7B8F28; void reset_18B20(void); void send_18B20(char data); unsigned char owReadByte(void); unsigned char owReadBit(void); void starte_wandlung(void); unsigned char temp27_lesen(void); unsigned char temp29_lesen(void); unsigned char temp30_lesen(void); unsigned char temp31_lesen(void); //unsigned char temp33_lesen(void); int ds18b20_nr27_lesen(void); int ds18b20_nr29_lesen(void); int ds18b20_nr30_lesen(void); int ds18b20_nr31_lesen(void); //void temp30_ausgeben(void); //void temp31_ausgeben(void); //void temperatur_messen(void); void sende_seriennummer_ds18B20SN (unsigned long long SN); void SN_auslesen(void); unsigned char SNA,SNB,SNC,SND,SNE,SNF,SNG,SNH; unsigned int temp27,temp29,temp30,temp31,temp32,temp33,temp34, mw27,mw31; #define ONE_WIRE_PIN BIT7 #define ONE_WIRE_IN P3IN #define ONE_WIRE_OUT P3OUT #define ONE_WIRE_DIR P3DIR #define OW_IN P3IN // doppelt #define OW_OUT P3OUT #define OW_DIR P3DIR #define OW_PIN BIT7 void starte_wandlung(void) { reset_18B20(); send_18B20(0xcc); //send CCH,Skip ROM command send_18B20(0x44); __delay_cycles(7500); //750? ms 7500 } int ds18b20_nr27_lesen(void) { reset_18B20(); send_18B20(0x55); sende_seriennummer_ds18B20SN (fuehler27); send_18B20(0xbe); temp27_lesen(); return(temp27); } int ds18b20_nr29_lesen(void) { reset_18B20(); send_18B20(0x55); sende_seriennummer_ds18B20SN (fuehler29); send_18B20(0xbe); temp29_lesen(); return(temp29); } int ds18b20_nr30_lesen(void) { reset_18B20(); send_18B20(0x55); sende_seriennummer_ds18B20SN (fuehler30); send_18B20(0xbe); temp30_lesen(); return(temp30); } int ds18b20_nr31_lesen(void) { reset_18B20(); send_18B20(0x55); sende_seriennummer_ds18B20SN (fuehler31); send_18B20(0xbe); temp31_lesen(); return(temp31); } void reset_18B20(void) { ONE_WIRE_DIR |= ONE_WIRE_PIN; ONE_WIRE_OUT &= ~ONE_WIRE_PIN; __delay_cycles(300); ONE_WIRE_OUT |= ONE_WIRE_PIN; ONE_WIRE_DIR &= ~ONE_WIRE_PIN; __delay_cycles(300); } void send_18B20(char data) { char i; for(i=8;i>0;i--) { ONE_WIRE_DIR |=ONE_WIRE_PIN; ONE_WIRE_OUT &= ~ONE_WIRE_PIN; // __delay_cycles(2); __delay_cycles(1); if(data & 0x01) { ONE_WIRE_OUT |= ONE_WIRE_PIN; } __delay_cycles(15); ONE_WIRE_OUT |= ONE_WIRE_PIN; ONE_WIRE_DIR &= ~ONE_WIRE_PIN; data >>=1; } } unsigned char owReadBit(void) // liest 1 Bit { unsigned char lineState; OW_OUT &= ~OW_PIN; // pull pin low to start timeslot OW_DIR |= OW_PIN; // P5.4 output // __delay_cycles(3); // A=6us but we cannot make it that short. __delay_cycles(1); // Change pin to input waiting for slave to put the data OW_DIR &= ~OW_PIN; // Release the bus, the line will go high as it is pulled up to Vcc by a resistor //__delay_cycles(10); // Wait E=9us __delay_cycles(5); lineState = OW_IN & OW_PIN; // Sample input to read a bit __delay_cycles(13); // F=55us to complete the read slot return (lineState); } unsigned char owReadByte(void) { unsigned char i; unsigned int value = 0; for (i=0;i<8;i++) //2 Bytes werden gelesen { if(owReadBit()){ value |=0x01<>8); send_18B20 ((SN&0xFF0000)>>16); // Byte 3 send_18B20 ((SN&0xFF000000)>>24); // Byte 4 send_18B20 ((SN&0xFF00000000)>>32); // Byte 5 send_18B20 ((SN&0xFF0000000000)>>40); // Byte 6 send_18B20 ((SN&0xFF000000000000)>>48); // Byte 7 send_18B20 ((SN&0xFF00000000000000)>>56); // Byte 8 } unsigned char temp29_lesen(void) { unsigned char i; unsigned int value = 0; for (i=0;i<16;i++) //2 Bytes werden gelesen { if(owReadBit()){ value |=0x01<2.Zeile Anfang char z,c; char txt5[9]; float mw27; ??? mw27=temp29/16.0; // .0 muss angehängt werden, damit Nachkommazahlen erzeugt werden sprintf(txt5,"%08.4f",mw27); // 6 Stellen for (z=0; z<8;z++) { c=txt5[z]; Daten_schreiben(c); } } void temp29_ausgeben(void) { Adresse(0xC0); // 0xC0 -->2.Zeile Anfang char z,c; char txt5[9]; float mw29; mw29=temp29/16.0; // .0 muss angehängt werden, damit Nachkommazahlen erzeugt werden sprintf(txt5,"%08.4f",mw29); // 6 Stellen for (z=0; z<8;z++) { c=txt5[z]; Daten_schreiben(c); } } void temp30_ausgeben(void) { Adresse(0xC0); // 0xC0 -->2.Zeile Anfang char z,c; char txt5[9]; float mw30; mw30=temp30/16.0; // .0 muss angehängt werden, damit Nachkommazahlen erzeugt werden sprintf(txt5,"%08.4f",mw30); // 6 Stellen for (z=0; z<8;z++) { c=txt5[z]; Daten_schreiben(c); } } void temp31_ausgeben(void) { lcd_write_command(LCD_CMD_CURSOR_LA,80); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); char z,c; char txt5[9]; float mw31; mw31=temp31/16.0; // .0 muss angehängt werden, damit Nachkommazahlen erzeugt werden sprintf(txt5,"%08.4f",mw31); // 6 Stellen for (z=0; z<8;z++) { c=txt5[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } } void temperatur_messen(void) { starte_wandlung(); ds18b20_nr31_lesen(); temp31_ausgeben(); } void SN_auslesen(void) { unsigned char i,rom_c[8]; reset_18B20(); send_18B20(0x33); __delay_cycles(100); for (i=0;i<8;i++) //2 Bytes werden gelesen ?? { rom_c[i] =owReadByte(); } SNA =(rom_c[0]); SNB =(rom_c[1]); SNC =(rom_c[2]); SND =(rom_c[3]); SNE =(rom_c[4]); SNF =(rom_c[5]); SNG =(rom_c[6]); SNH =(rom_c[7]); } void Teil_SN_ausgeben(void) // läuft nicht richtig, Ausweg: mit Mauszeiger lesen { // unter SN_auslesen(void) char z,c; char txt5[3]; lcd_write_command(LCD_CMD_CURSOR_LA,26); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(txt5,"%02X",SNH); for (z=0; z<3;z++) { c=txt5[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } lcd_write_command(LCD_CMD_CURSOR_LA,29); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(txt5,"%02X",SNG); for (z=0; z<2;z++) { c=txt5[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } lcd_write_command(LCD_CMD_CURSOR_LA,32); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(txt5,"%02X",SNF); for (z=0; z<2;z++) { c=txt5[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } lcd_write_command(LCD_CMD_CURSOR_LA,35); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(txt5,"%02X",SNE); for (z=0; z<2;z++) { c=txt5[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } lcd_write_command(LCD_CMD_CURSOR_LA,38); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(txt5,"%02X",SND); for (z=0; z<3;z++) { c=txt5[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } lcd_write_command(LCD_CMD_CURSOR_LA,41); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(txt5,"%02X",SNC); for (z=0; z<2;z++) { c=txt5[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } lcd_write_command(LCD_CMD_CURSOR_LA,44); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(txt5,"%02X",SNB); for (z=0; z<2;z++) { c=txt5[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } lcd_write_command(LCD_CMD_CURSOR_LA,47); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(txt5,"%02X",SNA); for (z=0; z<2;z++) { c=txt5[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } } */