Für dieses Forum muß Javascript im Browser aktiviert werden!
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> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Für alle die, die auch immer Empfangsprobleme mit dem DCF77 haben, hier eine Alternative zum Stellen > der Systemzeit. Dabei wird über den XPort ein beliebiger HTTP-Server mit "HEAD" angefragt und der Header, > der als Echo zurückkommt ausgewertet. Sicherlich ist die Methode nicht so genau, wie ein DCF77, > da die Genauigkeit von der Genauigkeit des Webservers und der Antwortzeit abhängt. > > Der ConnectMode des XPort muss auf C4 gesetzt sein. > > <code> > /* ----------------------------------------------------------------- */ > /* */ > /* HTTP-Request um Zeit abzufragen */ > /* Format: */ > /* "HEAD / HTTP/1.1" + CRLF + "Host: www.tu-berlin.de" + CRLF + CRLF */ > /* */ > /* ----------------------------------------------------------------- */ > > function requestTime() > { > string send_String; > // Verbindung zum Server herstellen > cap.Capture(debug.HWCOM_CAPTURE); > send_String = "C130.149.4.134/80"; > str.putchar(send_String, 0x0D); > hwcom.print2(send_String); > wait hwcom.ready(); > // jetzt Message senden > send_String = "HEAD / HTTP/1.1"; > str.putchar(send_String, 0x0D); > str.putchar(send_String, 0x0A); > hwcom.print2(send_String); > send_String = "Host: www.tu-berlin.de"; > str.putchar(send_String, 0x0D); > str.putchar(send_String, 0x0A); > str.putchar(send_String, 0x0D); > str.putchar(send_String, 0x0A); > hwcom.print2(send_String); > wait hwcom.ready(); > cap.Release(debug.HWCOM_CAPTURE); > } > > > /* ----------------------------------------------------------------- */ > /* */ > /* Zeit und Datum stellen, mit Header aus HTTP-Request */ > /* */ > /* ----------------------------------------------------------------- */ > > > function setTime(byte buffer[]) > { > int i, start, t1, t2, t3; > for i = 0...62 > { > if buffer[i] == 13 and buffer[i + 1] == 10 > { > start = i + 13; > break; > } > } > t1 = (buffer[start] - 48) * 10 + (buffer[start + 1] - 48); // Tag > t3 = (buffer[start + 7] - 48) * 1000 + (buffer[start + 8] - 48) * 100 + > (buffer[start + 9] - 48) * 10 + (buffer[start + 10] - 48); // Jahr > // Monat: > i = buffer[start + 3] + buffer[start + 4] + buffer[start + 5]; > if i == 281 t2 = 1; > if i == 269 t2 = 2; > if i == 288 t2 = 3; > if i == 291 t2 = 4; > if i == 295 t2 = 5; > if i == 301 t2 = 6; > if i == 299 t2 = 7; > if i == 285 t2 = 8; > if i == 296 t2 = 9; > if i == 294 t2 = 10; > if i == 307 t2 = 11; > if i == 286 t2 = 12; > system.setdate(t3, t2, t1); // setzt auch das Sommerzeitflad DST neu > > t1 = (buffer[start + 12] - 48) * 10 + (buffer[start + 13] - 48); // Stunde > t2 = (buffer[start + 15] - 48) * 10 + (buffer[start + 16] - 48); // Minute > t3 = (buffer[start + 18] - 48) * 10 + (buffer[start + 19] - 48); // Sekunde > // Zeitverschiebung zur GMT und Sommerzeit berücksichtigen > if system.dst() > t1 = t1 + 2; > else > t1 = t1 + 1; > if t1 > 23 > t1 = t1 - 24; > system.settime(t1, t2, t3); > } > > /* ----------------------------------------------------------------- */ > /* */ > /* Empfangs-Thread */ > /* */ > /* ----------------------------------------------------------------- */ > > thread receive > { > byte first_byte, second_byte; > int anz_bytes, len; > byte rec_buffer[128]; > > hwcom.init(); > hwcom.setspeed(hwcom.SPEED_19200); > hwcom.setbuf(HWcombuf,128); // Empfangspuffer auf 128 Byte erhöhen > hwcom.flush(); // Buffer leeren > > loop > { > wait hwcom.rxd(); // 1. Byte empfangen > cap.Capture(debug.HWCOM_CAPTURE); > first_byte = hwcom.get(); > if first_byte == CMD // Befehlssequenz wird eingeleitet > { > // weitere Anweisungen... > } > else if first_byte == 72 // ein "H" empfangen > { > wait hwcom.rxd(); // 2. Byte empfangen > second_byte = hwcom.get(); > if second_byte == 84 // ein "T" empfangen, HEADer eines HTTP-Requests > { > len = hwcom.receive(rec_buffer, 80, 2000); > if len >= 64 setTime(rec_buffer); // Zeit und Datum stellen > } > } > hwcom.flush(); // Empfangspuffer leeren > cap.Release(debug.HWCOM_CAPTURE); > } > } > </code> > > Gruß > Jens