DCF-Uhr mit Pollin DCF-Modul in Bascom

OP Persönliche Seite #1347750
Hi,

Ferienzeit = Bastelzeit

Anbei mal meine Version einer einfachen Uhr.

Die Ausgabe erfolgt über Uart auf ein Nokia Miniterminal.
Beitrag "Minniterminal mit Nokia 3310 LCD und 4x4 Tasten"
Genutzt wird auch der 3,3V Regler für die Versorgung des
mega8(L) und des Empfangsmoduls (Gesamtstrom 11mA)
Ich habe festgestellt das bei 5V das Test-Empfangsmodul nach einer
Zeit aussetzt.
Pon wird 250ms auf Low gehalten.
Die Softuhr zählt bei Empfangsstörungen weiter.
Im Display blinken die Strings "--" bei richtiger Ausrichtung
der Antenne.
Der Controller ist mit 30% ausgelastet und kann mit Stunden-Beep
usw. erweitert werden

Alles in Allem ein Wochenendprojekt und mit einem Pollin-Display
unter 10 Euro machbar.

Wigbert
Angehängte Dateien:
#4585435
Olaf S. schrieb:
> ich will deine uhr nachbauen
> kannst du mir den bas-cod
> in einen hex code kompilieren
> (für den PIC16F628A und atmega8l)

Achtung, es hat mich 5 zerschossene Pollinmodule gekostet als ich hier 
lesen durfte das die neueren nicht mehr 5V können obwohl das alte 
Datenblatt beigelegt war!
Pollin schickte aber Ersatz mit richtigen Datenblätter!
#4650793
'*********************************************************************** 
********
'* 
------------------------------------------------------------------------ 
---  *
'*                       DCF-Uhr von Pollin 
*
'* 
------------------------------------------------------------------------ 
---  *
'*********************************************************************** 
********

'Dies ist ein kleines Testprogramm zum Ausprobieren des DCF77-Empfängers
'von Pollin
'Das DCF-Modul wird mit 3,3V über dem Miniterminal versorgt,
'optimale Antennenausrichtung wenn Portd.5 blinkt bzw. die
'"--" Zeichen im Display blinken



'Die $Include Zeichenausgabe_3310.bas
'im selben Verzeichnis kopieren




'Von Wigbert Picht
'Elektro-Picht@gmx.de
'Vers.19.07.09

'Ausgabe über:Nokia 3310-Minitermial über RS232 Schnittstelle
'mit Positionszeiger
'mit erstellen der Prüfsumme
'nach: Steffen Taubmann
'stta@gmx.de


'!!!Diese Software ist nur für den privaten Gebrauch bestimmt!!!
'  !!!Komerzielle Anwendungen bedürfen meiner Zustimmung!!!

'----------------------------------------------------------------------- 
--------

$regfile = "m8def.dat"                                      'mein AVR, 
ein L Typ
$crystal = 3686400                                          'Quarz wegen 
Softuhr Genauigkeit u. Baudratenfehler
$baud = 9600 
'Baudeinstellung für mein Miniterminal


$hwstack = 128
$swstack = 128
$framesize = 128

'----------------------------------------------------------------------- 
--------
'Miniterminal-Anzeige konfigurieren (6 Zeilen / 14 Zeichen )
'----------------------------------------------------------------------- 
--------

Config Com1 = Dummy , Synchrone = 0 , Parity = Even , Stopbits = 1 , 
Databits = 8 , Clockpol = 0       'nicht veränderbar

Dim Text As String * 14                                     '14 Zeichen 
max in einer Zeile
Declare Sub Position(byval X As Byte , Byval Y As Byte) 
'Positionszeiger
Declare Sub Nprint                                          'Ausgabe



'----------------------------------------------------------------------- 
--------
'DCF77 von Pollin konfigurieren
'----------------------------------------------------------------------- 
--------
'            __________
'           I            I
'           I          O I VCC
'           I            I
'           I          O I GND
'           I            I
'           I          O I Pinb.1(Dat)
'           I            I
'           I          O I Pinb.2(Pon)
'           I____________I
'

'Config Dcf77 = Pind.2 , Debug = 1 , Inverted = 0 , Check = 2 , Update = 
0 , Updatetime = 30 , Switchpower = 0 , Secondticks = 50 , Timer1sec = 1 
, Powerlevel = 1 , Timer = 1

Config Dcf77 = Pinb.1 , Timer = 1 , Debug = 1 , Inverted = 0 , Timer1sec 
= 1 , Check = 1

Config Pind.5 = Output                                      'LED
Config Pinb.2 = Output                                      'Pon

'----------------------------------------------------------------------- 
--------
'was so immer gebraucht wird
'----------------------------------------------------------------------- 
--------
Portb.1 = 0                                                 '**** Pullup 
abschalten Wichtig !!!!*****
Portb.2 = 1                                                 'Für Pon 
Aktiv

Waitms 200                                                  'Zeit für 
High von Pon(250ms)
Printbin &H02 ; &H43 ; &H41 ;                               'Display 
löschen
Waitms 50

Portb.2 = 0                                                 'Für Pon low

Dim I As Integer
Dim Sec_old As Byte , Dcfsec_old As Byte
Dim Wochentag As String * 12 , Wochentag_old As String * 12
Dim Zeit As String * 10
Dim Datum As String * 10 , Datum_old As String * 10

Config Date = Dmy , Separator = .

Enable Interrupts

Sec_old = 99 : Dcfsec_old = 99                              ': 
DCF_Debug_Timer = 0


'----------------------------------------------------------------------- 
--------
'Start mit "Bla Bla Bla"
'----------------------------------------------------------------------- 
--------
Text = "DCF-Uhr"
Waitms 50
Position 4 , 0                                              'X Sind Die 
Zeichen(0 -13), Y Entsprechend Die Zeilen(0 -5)
Call Nprint                                                 'zur Sub und 
String mit Prüfsumme ausgeben
'Print "Test DCF-Uhr"                                        'Debugg
Wait 1

'----------------------------------------------------------------------- 
--------
'Hier geht es endlich los:
'----------------------------------------------------------------------- 
--------

Do

  For I = 1 To 78                                           'vorher 78
     Waitms 10
     If Sec_old <> _sec Then
        Exit For
     End If
     If Dcfsec_old <> Dcf_sec Then
        Exit For
     End If
  Next

 Waitms 120
  Sec_old = _sec
  If Dcf_sec <> Dcfsec_old Then Gosub Led

  Dcfsec_old = Dcf_sec

  Zeit = Time$
  Text = Zeit                                               'Was die 
Stunde geschlagen hat
  Waitms 50
  Position 3 , 2                                            'X Sind Die 
Zeichen(0 -13), Y Entsprechend Die Zeilen(0 -5)
  Call Nprint                                               'zur Sub und 
String mit Prüfsumme ausgeben

  Datum = Date$                                             'Datum nur 
ausgeben wenn neues Datum empfangen wird
If Datum <> Datum_old Then
If _sec = 15 Then
  Text = Datum
  Waitms 50
  Position 3 , 3                                            'X Sind Die 
Zeichen(0 -13), Y Entsprechend Die Zeilen(0 -5)
  Call Nprint                                               'zur Sub und 
String mit Prüfsumme ausgeben
  Datum_old = Datum
End If
End If

Gosub Wochenauswahl
If Wochentag <> Wochentag_old Then                          'Wochentag 
nur neu ausgeben, wenn neuer Tag beginnt
If _sec = 30 Then
  Text = Wochentag
  Waitms 50
  Position 2 , 5                                            'X Sind Die 
Zeichen(0 -13), Y Entsprechend Die Zeilen(0 -5)
  Call Nprint                                               'zur Sub und 
String mit Prüfsumme ausgeben
Wochentag_old = Wochentag                                   'welcher Tag 
ist denn heute
End If
End If


'Debugger:

'Print Time$ ; " " ; Date$ ; " " ; Time(dcf_sec) ; " " ; Date(dcf_day) ; 
" " ; Bin(dcf_status) ; " " ; Bin(dcf_bits) ; " " ; Bdcf_impuls ; " " ; 
Bdcf_pause

Loop

'----------------------------------------------------------------------- 
--------
'  Sub's
'----------------------------------------------------------------------- 
--------



Led:
Toggle Portd.5                                              'Ausgabe 
Sekundentakt für Ausrichtung der DCF-Antenne
If Portd.5 = 1 Then
   Text = "--"                                              'Einfach 2 
String's "-" mit toggeln lassen
  Else
   Text = "  "
  End If
  Position 6 , 1                                            'X Sind Die 
Zeichen(0 -13), Y Entsprechend Die Zeilen(0 -5)
  Call Nprint                                               'zur Sub und 
String mit Prüfsumme ausgeben
Return

Wochenauswahl:

   Select Case Dayofweek()                                  'Wochentag 
Auswahl

     Case 0 : Wochentag = "  Montag  "
     Case 1 : Wochentag = " Dienstag "
     Case 2 : Wochentag = " Mittwoch "
     Case 3 : Wochentag = "Donnerstag"
     Case 4 : Wochentag = " Freitag  "
     Case 5 : Wochentag = " Samstag  "
     Case 6 : Wochentag = " Sonntag  "

   End Select

Return


'----------------------------------------------------------------------- 
--------

$include Zeichenausgabe_3310.bas                            'Berechnung 
der Zeichenkette fürs Miniterminal

End


'----------------------------------------------------------------------- 
--------

ist das  richtig ???
(ist mein erster versuch mit bascom)
Gast #4651134
> ist das  richtig ???

Soll das ein Scherz sein?

Was glaubst du, wie viele Leute imstande sind, das ganze Programm 
anhand einer Sichtkontrolle zu prüfen?

Probiere es aus, dann weißt du, ob es in Ordnung ist.
Gast #4651404
Kann es sein, dass du vor einem extrem niedrig auflösenden Monitor 
sitzt, und es dir deshalb schwer fällt ein "kleines L" von einer "Eins" 
zu unterscheiden?
Es gab hier irgendwo auch schon mal einen Thread, dass diese beiden 
Zeichen nicht gut zu unterscheiden sind.
(Anhang: 1:1 Bildausschnitt von iPad Pro)
Angehängte Dateien:
(Firma: Vescomp) #4651425
John schrieb:
> Kann es sein, dass du vor einem extrem niedrig auflösenden Monitor
> sitzt, und es dir deshalb schwer fällt ein "kleines L" von einer "Eins"
> zu unterscheiden?

 Nein, momentan 25 inch auf 1920x1080.
 Aber MEGA8l gibt es immer noch nicht (vielleicht gerade deswegen).
 ATmega8L schon...
Gast #4651452
Marc V. schrieb:
> Aber MEGA8l gibt es immer noch nicht (vielleicht gerade deswegen).

Steht da ja auch nicht, da steht atmega8l ... warum gibst Du nicht 
einfach mal einen Irrtum zu?


Marc V. schrieb:
> Olaf S. schrieb:
>> jetzt brauche ich nur noch
>> die Fuse-Bits für den atmega8l
>
>  Da musst du aber warten bis Microchip/ATMEL diesen rausbringt.
Gast #4651465
L oder l ist genauso egal wie at oder AT bzw. MEGA oder mega ... jeder 
weiß, was gemeint ist, weil es keine Verwechslungsmöglichkeit gibt.

Oder hab ich was verpasst?
Gast #4651727
> jetzt brauche ich nur noch
> die Fuse-Bits für den atmega8l

Die Fuse Bits befinden sich im Mikrocontroller, und du kannst sie mit 
dem ISP-Tool deiner Wahl einstellen.

Wie lautet deine Frage dazu?
Gast #4652635
Das hängt gemeinerweise von deinem Programm ab. Manche stellen eine 
aktivierte Fuse als HIGH dar, andere wiederum als LOW.

Am besten benutzt du einen "Online Fuse Calculator" und überträgst dann 
die davon erzeugten Hexadezimalzahlen in dein Flash Tool. Damit bist du 
auf der sicheren Seite.

http://www.engbedded.com/fusecalc/

Benutze die Einstellung "Ext RC. OSC" mit dem passenden Frequenzbereich 
und der höchsten Startup Time.

Alle anderen Settings lässt du an Besten auf den Vorgabewerten.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.