Leuginio
15.09.2014, 12:01
Hallo,
Ich habe mir das DCF RS1 Modul von Robotikhardware bestellt. Jetzt stehe ich vor dem Problem wie ich die daten mit meinem Arduino einlesen kann.
Der Hersteller liefert ein Bascom Programm mit allerdings möchte ich das in c++ realisieren. Vieleicht könnte mir ja jemand das kurze Programm in c übersetzen.
Declare Sub Dcf_uhrzeitlesen()
'$programmer = 12 'MCS USB (Zeile weglassen wenn anderer Programmer)
'$prog &HFF , &HFF , &HD9 , &HFE 'Fusebits richtig programmieren (Quarz ein,Jtag aus)
$regfile = "m8adef.dat"
'$framesize = 32
'$swstack = 32
'$hwstack = 64
$framesize = 128
$swstack = 128
$hwstack = 128
$crystal = 3686400 'Quarzfrequenz
$baud = 9600 'Baudrate (Übertragungsgeschwindigkeit)
Baud = 9600
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 20x4
Cursor Off Noblink
Cls
Config Pinb.3 = Output 'LED
Led1 Alias Portb.3
'Diese Variablen enthalten nach dem Abruf die Uhrzeit und Datum Informationen
Dim Uhr_sek As Byte
Dim Uhr_min As Byte
Dim Uhr_std As Byte
Dim Uhr_tag As Byte
Dim Uhr_monat As Byte
Dim Uhr_jahr As Byte
Dim Uhr_wochentag As Byte
Dim Uhr_sommerzeit As Byte
Dim Uhr_zeitumschaltung As Byte
Dim Uhr_sync As Byte
Dim Bstart As Byte 'Enthaelt Byte Zeilenanfang immer 126
Dim Bende As Byte 'Enthaelt Byte Zeilenanfang immer 127
Dim Zeitgueltig As Byte
Wait 1
Zeitgueltig = 0
Do
Dcf_uhrzeitlesen
If Zeitgueltig = 1 Then
Locate 1 , 1
Lcd "abgeglichen "
Print "Heute haben wir den: " ; Uhr_tag ; "." ; Uhr_monat ; "." ; Uhr_jahr ; " " ; Uhr_std ; ":" ; Uhr_min ; ":" ; Uhr_sek ; " Wochentag:" ; Uhr_wochentag
Locate 2 , 1
Lcd Uhr_tag ; "." ; Uhr_monat ; "." ; Uhr_jahr
Locate 3 , 1
Lcd Uhr_std ; ":" ; Uhr_min ; ":" ; Uhr_sek ;
Locate 4 , 1
Lcd "Wochentag: " ; Uhr_wochentag
If Uhr_sommerzeit = 1 Then Print "Es gilt Sommerzeit!"
Print "Die Uhr wurde von " ; Uhr_sync ; " Minuten per Funk abgeglichen"
Print
Else
Locate 1 , 1
Lcd "nicht abgeglichen"
End If
Wait 3
Toggle Led1
Loop
'Hilfsfunktionen
'Diese Funktion ruft der Zeit im binären Modus ab
'und uerbergibt diese den globalen Uhr Variablen
Sub Dcf_uhrzeitlesen()
Config Pinb.2 = Input
If Pinb.2 = 1 Then 'DCF Uhrzeit bereits vorhanden?
'Kurz auf GND setzen um DCF Decoderzeit ausgeben zu lassen
Config Portb.2 = Output
Portb.2 = 0
Waitus 1
Config Pinb.2 = Input
Open "comB.2:2400,8,n,1" For Input As #1
Inputbin #1 , Bstart , Uhr_tag , Uhr_monat , Uhr_jahr , Uhr_std , Uhr_min , Uhr_sek , Uhr_wochentag , Uhr_sommerzeit , Uhr_zeitumschaltung , Uhr_sync , Bende
Close #1
Config Pinb.2 = Input
Uhr_tag = Uhr_tag - 65
Uhr_monat = Uhr_monat - 65
Uhr_jahr = Uhr_jahr - 65
Uhr_std = Uhr_std - 65
Uhr_min = Uhr_min - 65
Uhr_sek = Uhr_sek - 65
Uhr_wochentag = Uhr_wochentag - 65
Uhr_sommerzeit = Uhr_sommerzeit - 65
Uhr_zeitumschaltung = Uhr_zeitumschaltung - 65
Uhr_sync = Uhr_sync - 65
Zeitgueltig = 1
Else
Print "Zeit noch nicht verifiziert!"
End If
End Sub
Es geht hauptsächlich um das einlesen der Daten.
Danke schon mal im vorraus.
Ich habe mir das DCF RS1 Modul von Robotikhardware bestellt. Jetzt stehe ich vor dem Problem wie ich die daten mit meinem Arduino einlesen kann.
Der Hersteller liefert ein Bascom Programm mit allerdings möchte ich das in c++ realisieren. Vieleicht könnte mir ja jemand das kurze Programm in c übersetzen.
Declare Sub Dcf_uhrzeitlesen()
'$programmer = 12 'MCS USB (Zeile weglassen wenn anderer Programmer)
'$prog &HFF , &HFF , &HD9 , &HFE 'Fusebits richtig programmieren (Quarz ein,Jtag aus)
$regfile = "m8adef.dat"
'$framesize = 32
'$swstack = 32
'$hwstack = 64
$framesize = 128
$swstack = 128
$hwstack = 128
$crystal = 3686400 'Quarzfrequenz
$baud = 9600 'Baudrate (Übertragungsgeschwindigkeit)
Baud = 9600
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 20x4
Cursor Off Noblink
Cls
Config Pinb.3 = Output 'LED
Led1 Alias Portb.3
'Diese Variablen enthalten nach dem Abruf die Uhrzeit und Datum Informationen
Dim Uhr_sek As Byte
Dim Uhr_min As Byte
Dim Uhr_std As Byte
Dim Uhr_tag As Byte
Dim Uhr_monat As Byte
Dim Uhr_jahr As Byte
Dim Uhr_wochentag As Byte
Dim Uhr_sommerzeit As Byte
Dim Uhr_zeitumschaltung As Byte
Dim Uhr_sync As Byte
Dim Bstart As Byte 'Enthaelt Byte Zeilenanfang immer 126
Dim Bende As Byte 'Enthaelt Byte Zeilenanfang immer 127
Dim Zeitgueltig As Byte
Wait 1
Zeitgueltig = 0
Do
Dcf_uhrzeitlesen
If Zeitgueltig = 1 Then
Locate 1 , 1
Lcd "abgeglichen "
Print "Heute haben wir den: " ; Uhr_tag ; "." ; Uhr_monat ; "." ; Uhr_jahr ; " " ; Uhr_std ; ":" ; Uhr_min ; ":" ; Uhr_sek ; " Wochentag:" ; Uhr_wochentag
Locate 2 , 1
Lcd Uhr_tag ; "." ; Uhr_monat ; "." ; Uhr_jahr
Locate 3 , 1
Lcd Uhr_std ; ":" ; Uhr_min ; ":" ; Uhr_sek ;
Locate 4 , 1
Lcd "Wochentag: " ; Uhr_wochentag
If Uhr_sommerzeit = 1 Then Print "Es gilt Sommerzeit!"
Print "Die Uhr wurde von " ; Uhr_sync ; " Minuten per Funk abgeglichen"
Else
Locate 1 , 1
Lcd "nicht abgeglichen"
End If
Wait 3
Toggle Led1
Loop
'Hilfsfunktionen
'Diese Funktion ruft der Zeit im binären Modus ab
'und uerbergibt diese den globalen Uhr Variablen
Sub Dcf_uhrzeitlesen()
Config Pinb.2 = Input
If Pinb.2 = 1 Then 'DCF Uhrzeit bereits vorhanden?
'Kurz auf GND setzen um DCF Decoderzeit ausgeben zu lassen
Config Portb.2 = Output
Portb.2 = 0
Waitus 1
Config Pinb.2 = Input
Open "comB.2:2400,8,n,1" For Input As #1
Inputbin #1 , Bstart , Uhr_tag , Uhr_monat , Uhr_jahr , Uhr_std , Uhr_min , Uhr_sek , Uhr_wochentag , Uhr_sommerzeit , Uhr_zeitumschaltung , Uhr_sync , Bende
Close #1
Config Pinb.2 = Input
Uhr_tag = Uhr_tag - 65
Uhr_monat = Uhr_monat - 65
Uhr_jahr = Uhr_jahr - 65
Uhr_std = Uhr_std - 65
Uhr_min = Uhr_min - 65
Uhr_sek = Uhr_sek - 65
Uhr_wochentag = Uhr_wochentag - 65
Uhr_sommerzeit = Uhr_sommerzeit - 65
Uhr_zeitumschaltung = Uhr_zeitumschaltung - 65
Uhr_sync = Uhr_sync - 65
Zeitgueltig = 1
Else
Print "Zeit noch nicht verifiziert!"
End If
End Sub
Es geht hauptsächlich um das einlesen der Daten.
Danke schon mal im vorraus.