Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > <basic>// Beispielprogramm um den DS18S20 Temperatur Sensor von Dallas Maxim zu lesen > // mit Berechnung der CRC Prüfsumme - bei Fehler extra Zeile > char Text[40]; > int ret,Heiz,i,Secure; > int temp, Heiztemp; > byte rom_code[8]; > byte scratch_pad[9]; //'9ehemals > byte Serienschutz[8]; > char Fehler; > byte CRC_Wert; > #define One_Wire_Port 35 //'e3, hier das Port für den Sensor > > > > > void main(void) > { > do > { > ret = OneWire_Reset(One_Wire_Port); > if (ret == 0) > { > Text= "Kein Sensor gefunden"; > Msg_WriteText(Text); > goto Ende; > } > // Ändern der Konfiguration (Default 12 Bit) nun 9 Bit > // OneWire_Write(0xcc) ' ROM überspringen Kommando > OneWire_Write(0x4e); // Master issues Write Scratchpad command > OneWire_Write(0x7F); // Master sends three data bytes to scratchpad ..TH > OneWire_Write(0xFF); // sicherheitshalber niedrigste Temp in Tl .....TL > // OneWire_Write(0b00011111) // für 9 Bit und config Bitanzahl ..9-12 > // OneWire_Write(0b00111111) // für 10 Bit > // OneWire_Write(0b01011111) // für 11 Bit > OneWire_Write(0b01111111); // für 12 Bit > ret = OneWire_Reset(One_Wire_Port); // #define One_Wire_Po > if (ret == 0) > { > Text= "Kein Sensor gefunden"; > Msg_WriteText(Text); > goto Ende; > } > OneWire_Write(0xcc); //' ROM überspringen Kommando > OneWire_Write(0x44); //' starte Temperatur Messung Kommando > > AbsDelay(1000); > > OneWire_Reset(One_Wire_Port); // ' PortA.7 > OneWire_Write(0xcc); //' ROM überspringen Kommando > OneWire_Write(0xbe); //' lese scratch_pad Kommando > for (i=0; i<9; i++) //' komplettes scratchpad lesen > { > scratch_pad[i]= OneWire_Read(); > Msg_WriteText(" " ); > Msg_WriteWord(i ); > Msg_WriteText(":=" ); > Msg_WriteHex(scratch_pad[i]); > } > //'SCRATCHPAD (Power-up State) > //'byte 0 Temperature LSB (50h) > //'byte 1 Temperature MSB (05h) EEPROM > //'byte 2 TH Register or User Byte 1* TH Register or User Byte 1 > //'byte 3 TL Register or User Byte 2* TL Register or User Byte 2 > //'byte 4 Configuration Register* Configuration Register > //'byte 5 Reserved (FFh) > //'byte 6 Reserved (0Ch) > //'byte 7 Reserved (10h) > //'byte 8 CRC* > Msg_WriteText(" crc=" ); > CRC_Wert=CRC_8(); > Msg_WriteHex(CRC_Wert); //Berechnete CRC ausgeben > Fehler = CRC_Wert - scratch_pad[8]; > if (Fehler == 0) Msg_WriteText(" ok" ); > else > { > Msg_WriteChar(13); > Msg_WriteText(" Fehler=" ); > Msg_WriteInt(Fehler); > } > Msg_WriteChar(13); > Text = "Temperatur: "; > Msg_WriteText(Text); > temp = scratch_pad[1] * 256 + scratch_pad[0]; > Msg_WriteFloat(temp /16.0); //'hier das Komma wichtig .. für 12Bit > //'mit DS1822 > Msg_WriteChar(99); > Msg_WriteText(" Dez=" ); > Msg_WriteWord(scratch_pad[0] ); > Msg_WriteChar(13); > > } > while(1); > > Ende: // Label Ende > > } > > > > byte CRC_8(void) > { > int Schleifen_count; > byte Pruf_Byte, CRC, Bit_Count, Wert_Bit; > CRC = 0; > for (Schleifen_count = 0; Schleifen_count < 8; Schleifen_count++) > { // die 8 Byte werden berechnet (0-7) > Bit_Count = 8; > Pruf_Byte = scratch_pad[Schleifen_count]; > do > { // jedes Bit wird extra hinzuberechnet > Wert_Bit = (CRC ^ Pruf_Byte) & 0x01; > if ( Wert_Bit == 0x01 ) CRC = CRC ^ 0X18; // 0X18= X^8+X^5+X^4+X^0 > CRC = 0x7F & (CRC >> 1); > if ( Wert_Bit == 0x01 ) CRC = CRC | 0x80; > Bit_Count--; > Pruf_Byte = Pruf_Byte >> 1; > } while (Bit_Count > 0); > } > return CRC; > }</basic>