LED Uhr Thermometer RTC DS1307 TWI I2C DS18B20 DS18s20 DS1822 1wire ATmega8 1MHz Assembler

OP #6496302
Lesenswert?

Ein kleines Beispiel einer Uhr mit Thermometer.

Kurz nach Programmstart wird die aktuelle Uhrzeit aus dem RTC geladen

und der Familycode des Sensors angezeigt,

dannach richtet sich das Temperatur-Berechnungsverfahren.

Beispiel: "FA:10" steht für einen DS18s20 -> Familycode x10

Da der AVR ohne Quarz, sondern nur mit seinem ungenauen 
RC-Generatorläuft, ist es besser, wenn die Zeit 1x pro Stunde erneut aus 
dem RTC geladen wird.

Minütlich wechselt die Anzeige zwischen Zeit und Temperatur.

Mit den beiden Tasten lässt sich die Uhrzeit einstellen, bei jedem 
Tastendruck ändert sich der Minuten bzw. Stundenwert.

Die neu eingestellte Zeit wird sofort in den RTC geschrieben und zur 
Kontrolle nochmals ausgelesen und angezeigt.

Blinkt die gelbe LED am RTC im Sekundentakt, dann war die 
RTC-Programmierung erfolgreich.

Die Helligkeit der LEDs ist für meine Anwendung ausreichend, steht in 
einer dunklen Ecke, bei Bedarf können diverse Treiber verwendet werden.

Nach der Temperaturmessung wird sofort der 1wire Pin gegen LOW gezogen, 
um eine unnötige Erwärmung des Sensors zu unterdrücken.

Zwei Testausgänge stehen zur Verfügung 1kHz und 500kHz.


Stromaufnahme: ca. 40mA

Bernhard
Angehängte Dateien:
Beitrag #6497516 wurde von einem Moderator gelöscht.
#6497564
Lesenswert?

Bernhard S. schrieb:
> Da der AVR ohne Quarz, sondern nur mit seinem ungenauen
> RC-Generatorläuft, ist es besser, wenn die Zeit 1x pro Stunde erneut aus
> dem RTC geladen wird.

Du könntest den Sekundentakt von der RTC über PD0 einlesen und die 
Software-Uhr damit betreiben (bzw. synchronisieren). Statt der 
Sekundentakt-LED könnte dann ein Dezimalpunkt blinken.

Noch besser: wenn du zwei von den 7-Segment-Anzeigen um 180 Grad gedreht 
einbaust, dann sehen die mittleren Dezimalpunkte fast wie ein 
Doppelpunkt aus.

Nur der Form halber: die BAT48 verbraucht im Sommer mehr Strom als die 
RTC. Da du sowieso 5 Volt runter teilst, musst du an der Stelle nicht 
sparen und kannst eine 1N4148 nehmen.
OP #6497570
Lesenswert?

> Sekundentakt von der RTC über PD0 einlesen...

> sparen und kannst eine 1N4148...

Danke "Bauform B.", sehr gute Tipps, Daumen hoch :-)


> Tja, also Faulheit

Nein, ich nenne es ökonomisch, Greta würde sich freuen.

Ach übrigens, wir dürfen nie nachdenken, wir müssen vordenken ^^

Wenn ich diese LEDs zu hell betreibe, steigen nicht nur die Stromkosten,

sondern meine bessere Hälfte würde das Blendwerk fürchterlich stören.
Gast #6500123
Lesenswert?

Bernhard S. schrieb:
> Jetzt muss ich auch noch die Versorgungsspannung etwas drosseln,

da wird ja der Helligkeitsunterschied der 1 und 8 bei 18.00 Uhr noch 
krasser,

Das macht man natürlich nicht auf diese Art, sondern in dem die AN-Zeit 
während des Multiplexens kürzer gemacht wird zu Gunsten einer längeren 
AUS Zeit während des Umschaltens.

Elegant programmiert durch einen Timer dessen Overflow-Interrupt das 
Multiplexen und Compare-Interrupt das blanking steuert.
Gast #6500251
Lesenswert?

Bauform B. schrieb:
> Bernhard S. schrieb:
>> Da der AVR ohne Quarz, sondern nur mit seinem ungenauen
>> RC-Generatorläuft, ist es besser, wenn die Zeit 1x pro Stunde erneut aus
>> dem RTC geladen wird.
>
> Du könntest den Sekundentakt von der RTC über PD0 einlesen und die
> Software-Uhr damit betreiben (bzw. synchronisieren). Statt der
> Sekundentakt-LED könnte dann ein Dezimalpunkt blinken.

Ja, entweder so wie Bauform B es vorgeschlagen hat, oder konfiguriere 
die Pins so um, dass INT0 oder INT1 frei wird, dann kannst du auch 
Interrupt gesteuert die RTC einlesen. Interrupt auf fallende Flanke 
einstellen und mit SQW/OUT der RTC verbinden. So habe ich das gemacht.
OP #6500344
Lesenswert?

> INT0 oder INT1 frei wird, dann kannst du auch
> Interrupt gesteuert die RTC einlesen

Das wäre auch eine mögliche Variante.

Oder auf einen freien Pin den Sekundentakt legen und diesen Pin mit dem 
1kHz Timer sampeln ;-)

> 1 und 8 bei 18.00 Uhr noch krasser

Sorry, aber ein Helligkeitsunterschied ist nicht erkennbar


> Das macht man natürlich nicht auf diese Art

Warum auf dieser Art nicht? Ist es verboten? Ist wieder alles 
schrecklich, nur weil Du es wieder nicht verstehst?


Lieber Moderator, git es irgendeine Möglichkeit gewisse User hier im 
Forum zu blocken; und zwar genau diese, welche gern alles beschmutzen 
und selber nichts vernüftiges vollbringen. Sogenannte 
Beitrags-Wichsmaschinen.

Danke

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren