Funkuhr
-
hi...
ja...
mfg uwe
-
Dann geh mal auf http://msdn.microsoft.com/library/en-us/dnwbgen/html/msdn_serial.asp?frame = true
der Artickel hat mir sehr weitergeholfen, als ich die Signale einer Spezialtastatur verarbeiten musste.
Allerdings, glaube ich brauchst du nicht zu unterescheiden, ob es eine 0 oder eine 1 ist. Die Signale kommen schon so an. Du kannst also direkt auf 0 oder 1 prüfen.
-
hallo...
Danke, aber das hat mich nicht wirklich weiter gebracht....
mfg uwe
-
Original erstellt von uwemd:
**hallo...Danke, aber das hat mich nicht wirklich weiter gebracht....
mfg uwe**
Was ist denn dein Problem??? So weit ich gesehen habe steht da alles was du brauchst!!! Was ist das überhaupt für eine beknackte Übermittlung??? Mit der Methode ("Fällt das Signal 200ms aus...") kannst du dir doch noch nichtmal 1 Byte pro Sekunde holen, geschweige denn eine Uhrzeit... Kleiner Tip: Lies dir die Beschreibung deiner Funkuhr und den MSDN-Artikel nochmal durch. Kann mir nicht vorstellen, dass ein Signal so übermittelt wird. Warum schickt die Uhr nicht sofort über einen A/D-Wandler einsen und nullen auf ein vorgegebenes Signal des Programms??? Ich kenne die Doku zu der Uhr nicht, aber normalerweise geht sowas so in der Art...
1.) Du schickst ein Signal zu der Uhr (z.B. eine 1)
2.) Die Uhr schickt dir die Zeit binär zurück... Dann kannst du diese umrechnen in Stunden, Minuten und Sekunden...So wie du es beschrieben hast kann es IMHO nicht gehen aus folgendem Grund:
Du weißt nicht wann die Folge von einsen und nullen anfängt -> Du liest an beliebiger Stelle ein -> Das Ergebnis der zurückgegebenen Bits ist verschoben und nicht komplett -> Falsche Uhrzeit...MFG,
MaSTaH
-
Ein kleines Beispiel:
// Includes #include <conio.h> #include <math.h> // Defines #define LPT1 888 // ReadSerialFromLPT: // Funktion liest 8 Bits seriell vom LPT1 ein und gibt den Wert als Byte zurück... int ReadSerialFromLPT() { _outp(LPT1,0); _outp(LPT1,1); int value, a, result=0; _outp(LPT1, 0); result = 0; for(int i = 0; i < 8; i++) { value = _inp(LPT1+1); if(value & 128) a = 0; else a = 1; result = result + a * pow(2, 7 - i); _outp(LPT1,2); _outp(LPT1,0); } return result; }
Vorsicht, ist uralter (und unausgereifter) C-Code... Ich weiß garnicht ob es _inp und _outp überhaupt noch gibt und von welchem OS die noch unterstützt werden (NT/2K/XP glaub ich nicht)... Besser komplett neu schreiben. Hier ist ein Prinzip erklärt wie man seriell (zwar vom LPT1 aber wg. dem A/D-Wandler TLC549 kein lesen von ganzen Bytes) ein Byte einliest... Hoffe das hilft... Wenn nicht vergessen...
-
Hi…
Also ich mache folgendes,
ich lese die schnittstelle ein und in lpByte steht das das was ich eingelesen habe. oder?DWORD len = 1; char lpByte [1] ; DWORD dwBytesRecive; HANDLE hComm; hComm = CreateFile ("COM1",GENERIC_READGENERIC_WRITE,0,0,OPEN_EXISTING,0,0); DCB dcbCommPort; dcbCommPort.DCBlength = sizeof(DCB); GetCommState(hComm, &dcbCommPort); BuildCommDCB("9600,N,8,1", &dcbCommPort); SetCommState(hComm, &dcbCommPort); ReadFile(hComm, lpByte, len, &dwBytesRecive,NULL ); CloseHandle (hComm);
mfg uwe
-
hallo...
hier mal ein link wo es infos zum DCF77 signal gibt
[url] http://www.wolfgang-back.com/DCF77.htm [/url]mfg uwe
-
hallo uwemd,
mit welchem OS soll denn das Programm laufen, wenns unter NT, 2000 od. XP
laufen soll, darfst Du im letzten Parameter von ReadFile() kein NULL
uebergeben, hier muss die Overlapped-Struktur stehen.
-
Original erstellt von devfred:
**hallo uwemd,mit welchem OS soll denn das Programm laufen, wenns unter NT, 2000 od. XP
laufen soll, darfst Du im letzten Parameter von ReadFile() kein NULL
uebergeben, hier muss die Overlapped-Struktur stehen.
**
Stimmt AFAIK garnicht. Dann darf die Anzahl der zu lesenden Bytes nur nicht 0 sein wenn overlapped NULL ist...
-
hi...
ja wie bekomme ich nun raus, ob das bit 0 oder 1 ist?
mfg uwe
-
hoch...
ich habe noch keine ahnung
mfg uwe