www.mikrocontroller.net

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


Autor: hidalgo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hmm... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Codesammlung->Suche "DCF77", 2. Treffer:

Beitrag "DCF77 AVR-Assemblerbaustein"

Autor: hidalgo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: hidalgo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke schön!

nimmt ca. das doppelte, aber schon nicht schlecht!

hidalgo

Autor: gast (Gast)
Datum:
Angehängte Dateien:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehr kompakt (284 Bytes):

Beitrag "DCF77 Uhr in C mit ATtiny26"


Peter

Autor: hidalgo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: hidalgo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: hidalgo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das geht gewiss.....

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

Schönes WE

Autor: Peter Dannegger (peda)
Datum:

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

Ja.


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.