Forum: Compiler & IDEs DCF 77 in C bei ca. 300 Byte ATTINY ?


von hidalgo (Gast)


Lesenswert?

Hallo Leute,

ich programmiere hier an einer Uhr und würd gern noch DCF77 dazu nehmen.

Der DCF-Pin müsste gepollt werden (10 ms Timer ist vorhanden) - ich ahbe 
allerdings nur noch ca. 300 Byte frei (ATTINY2313).

An den Code gibt es nur wenige Ansprüche, mir würde es reichen, wenn die 
Uhr alle Stunde mal mit dem DCF abgeglichen wird.

Ist das machbar bzw. hat das schon jemand hinbekommen?

Gruez hidalgo

von Hmm... (Gast)


Lesenswert?

Codesammlung->Suche "DCF77", 2. Treffer:

Beitrag "DCF77 AVR-Assemblerbaustein"

von hidalgo (Gast)


Lesenswert?

Vielen Dank,

aber ich habe das nicht umsonst im GCC Forum gepostet und in den Titel 
"C" mit reingeschrieben ;-)
(ich habe hier auch schon diversen Code im Forum und in der Sammlung 
angeschaut)

Mir geht es um

-compiliert ca. 300 Byte Flash (oder sehr klein)

-ohne INT0 Benutzung (ist schon vergeben)

Gruez

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Ob es in 300 Bytes geht, weiss ich nicht. Hängt viel davon ab, was du 
bereits im Code hast. Arbeitet mit 10ms Timer und per Pollen in der ISR

DCF77-Auswertung für Funkuhren
http://www.gjlay.de/pub/c-code/dcf77.html

von hidalgo (Gast)


Lesenswert?

Danke schön!

nimmt ca. das doppelte, aber schon nicht schlecht!

hidalgo

von gast (Gast)


Angehängte Dateien:

Lesenswert?

probier mal meinen code, ich habs auch über polling gemacht
hab aber die pausen gepollt (war zuverlässiger)

von Peter D. (peda)


Lesenswert?

Sehr kompakt (284 Bytes):

Beitrag "DCF77 Uhr in C mit ATtiny26"


Peter

von hidalgo (Gast)


Lesenswert?

den Code von Peter hatte ich schon mal so diagonal angeschaut, da wird 
aber irgendwie an einem Timer "rumgemacht" - da habe ich keine Reserven 
mehr!

Der von "Gast" sieht irgendwie passiger aus(?).

Aber ich muss mir das noch genau anschauen - allen Postern erst mal 
schönen Dank!

Gruez

von Peter D. (peda)


Lesenswert?

hidalgo wrote:
> den Code von Peter hatte ich schon mal so diagonal angeschaut, da wird
> aber irgendwie an einem Timer "rumgemacht" - da habe ich keine Reserven
> mehr!

Der Timer wird ja nicht exclusiv benötigt, sondern man hängt sich in 
einen bereits benutzten Timerinterrupt mit rein, der ein passendes 
Intervall ermöglicht.

Ganz ohne irgendne Zeitbasis kannst Du DCF-77 nicht dekodieren.


Peter

von hidalgo (Gast)


Lesenswert?

Hallo Peter,

mal abgesehen davon, das ich deinen Code noch nicht 100%ig verstanden 
habe...

Du veränderst doch TCNT0 in deinem Programm - oder dient das nur dazu, 
den 10ms Interrupt aus einem "ungeraden" Quarz zu erzeugen?

Meine Idee ist folgende - ich habe einen 10ms Interrupt aus dem 
Pinchange- (Uhr läuft netzsynchron).
Dort könnte ich den DCF Pin abfragen und im Hauptprogamm dann dann die 
Uhr ab und zu stellen.

Als Takt habe ich ansonsten den internen Oszillator.

Schönes WE

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Hi hidalgo,

der obige Assembler-Baustein sieht doch gut aus, er passt von der 
Registerverwendung jedenfalls in das C-ABI, so daß die 
Registerverwendung nicht gcc in die Quere kommt.

Das Modul von C aus verwenden geht so:

1) Zeug umschreiben von Atmel-asm zu GNU-asm. Ist flott gemacht.
2) Die Daten werden als C-Struct angelegt, dazu nen C-Header schreiben.
3) Als Assembler-Modul dem Projekt hinzufügen, die Hauptfunktion im 
Header deklarieren und vom C aus aufrufen (wohl die dcf77_start).

von hidalgo (Gast)


Lesenswert?

Ja, das geht gewiss.....

aber ich bin halt nicht so der asm Crack - behalte ich mir als 
Notvariante vor.

Schönes WE

von Peter D. (peda)


Lesenswert?

hidalgo wrote:
> dient das nur dazu,
> den 10ms Interrupt aus einem "ungeraden" Quarz zu erzeugen?

Ja.


Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.