www.mikrocontroller.net

Forum: Projekte & Code Zeit + Temperatur auf LCD mit AVR


Autor: Peter Dannegger (peda)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Anbei das komplette Programm, Schaltplan und die Platine.

Die Uhr ist mit Sommerzeit und bis zum 31.12.2099.

Das File indexg.htm enthält eine ausführliche Erklärung der Funktion und 
aller Programmmodule.

Außerdem habe ich noch ein paar Praxistips zum einfacheren Programmieren 
gegeben und ich denke auch recht gut in diesem Programmbeispiel 
angewendet.

Daher könnte dieser Beitrag auch jene interessieren, die nichts mit dem 
AVR, LCD, 1-Wire, RTC usw. machen wollen.

Kommentare und Anregungen sind herzlich wilkommen.


Peter

Autor: emil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sehr schönes und hauptsache sinnvolles programm; die doku hat mir auch 
sehr gut gefallen - easy-going, verständlich und doch lernreich!

ach ja, das ist bestimmt eine meisterleistung: tiny12 hat 1024bytes rom 
und das programm belegt exakt 1024bytes :)

danke, peter, reife leistung, werde bestimmt etwas davon "klauen" :) 
nicht böse sein :)

emil

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Emil

Danke.

Das mit den 1024 Bytes täuscht aber. Warscheinlich, weil ich das 
Calibrationsbyte ans Ende geschrieben habe.

Es sind in Wirklichkeit noch etwa 7% (74 Bytes) frei.


Peter

Autor: Christian Schumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

gerne würde ich diese Schaltung nachbauen (die Hardware ist schon
fertig) jedoch zickt das Programm beim compilieren :-(
Ich arbeite mit dem AVR Studio 4; die erste Fehlermeldung ist in der
Tiny12 Definitionsdatei aufgetreten :
".equ  E2END  =3F" mag er nicht; ich habe es auf $03F
umgeschrieben,bekomme dann aber folgende Fehler :


Building project...
AVRASM: AVR macro assembler 2.0.28 (build 121 Jan 11 2005 10:28:51)
Copyright (C) 1995-2005 ATMEL Corporation
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(20): Including file
'C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\lcdtrtc.h'
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\lcdtrtc.h(2): Including file
'C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\tn12def.inc'
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\lcdtrtc.h(62): warning: Register r23
already defined by the .DEF directive
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(20): C:\Dokumente und
Einstellungen\Christian Schumann\Desktop\Temptime\lcdtrtc.h
included from here
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\lcdtrtc.h(71): warning: Register r31
already defined by the .DEF directive
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(20): C:\Dokumente und
Einstellungen\Christian Schumann\Desktop\Temptime\lcdtrtc.h
included from here
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(21): Including file
'C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\hardware.h'
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(22): Including file
'C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\macro.mac'
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(30): Including file
'C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\ovf0int.inc'
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(92): Including file
'C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\lcd164.inc'
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(93): Including file
'C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\1w_rtc.inc'
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(94): Including file
'C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\ds1994.inc'
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(95): Including file
'C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\gettime.inc'
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(96): Including file
'C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\1wire.inc'
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(97): Including file
'C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\outval.inc'
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(98): Including file
'C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\disptime.inc'
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(99): Including file
'C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\dispwday.inc'
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(100): Including file
'C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\dispdate.inc'
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(101): Including file
'C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\disptemp.inc'
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(102): Including file
'C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\measure.inc'
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(104): Including file
'C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\calc12_5.inc'
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\disptime.inc(19): error: Undefined symbol:
display_clock_ret
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(98): C:\Dokumente und
Einstellungen\Christian Schumann\Desktop\Temptime\disptime.inc
included from here
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\dispdate.inc(21): error: Undefined symbol:
display_date_ret
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(100): C:\Dokumente und
Einstellungen\Christian Schumann\Desktop\Temptime\dispdate.inc
included from here
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\disptemp.inc(35): error: Undefined symbol:
display_temp_ret
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(101): C:\Dokumente und
Einstellungen\Christian Schumann\Desktop\Temptime\disptemp.inc
included from here
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\measure.inc(50): error: Undefined symbol:
measure_ret
C:\Dokumente und Einstellungen\Christian
Schumann\Desktop\Temptime\2temp.asm(102): C:\Dokumente und
Einstellungen\Christian Schumann\Desktop\Temptime\measure.inc
included from here
Assembly failed, 4 errors, 2 warnings

Ich denke du arbeitest mit einem Macroassembler und habe mir schon mal
die "ASM" Batch Datei angesehen und die Pfade umgeschrieben; jedoch
leider ohne Erfolg ...

Bitte hilf mir... sonst muß ich die Hardware entsorgen ....

Thanks in advance !!

Christian

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich vermute mal, Du hast irgendwas am Quelltext geändert.

Mach mal ein komplettes Listing mit .list und .listmac und schau es Dir
in Ruhe an, warum er die Labels nicht findet.


Peter

Autor: Christian Schumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

sorry to bother you again !!

Also erst mal : Geniales, kurzes Programm !!
Habe mal das Hex File "gebrannt" und die Hardware spielt
einwandfrei;
leider nur mit falschem Datum und Uhrzeit da das *.asm file noch immer
zickt und auch ich die fehlenden Labels :
display_clock_ret
display_date_ret
display_temp_ret
measure_ret
in keiner der Include Dateien finden kann; fehlt bei dem Zip_file evtl.
eine Datei ??
Ich schwöre dir den Quellcode (noch nicht) verändert zu haben !!!
All diese _ret Labels sind die Beendigung von .inc Dateien; die
müssten dann ja im *.asm File oder anderen *.inc Dateien auftauchen,
oder ??
Ein Freund von mir (mit viel AVR Erfahrung) hat die gleichen Probleme
...
Bitte schau dir dein *zip File noch mal an oder maile mir die Datei
welche die fehlenden Befehle enthält.

1000 Dank im voraus !!!

Christian
P.S. ohne vollständige Assemblierung macht mein AVR Studio 4 leider
kein *.lst File

Autor: Christian Schumann (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Hallo Peter,
jetzt läuft's (fast).
Das Problem war wohl das Macro File welches vom doofen XP Rechner als
Macromedia File interpretiert wurde; habe es dann als *.txt File
gespeichert; diverse Sachen damit ausprobiert... anyway; nun wird's
gelesen und implementiert.
Aber ..... sobald ich versuche das Startdate, Time etc. zu verändern
hängt sich das Programm im AVR (anscheinend) auf. Das LCD wird
initialisiert und das war's ...die Assemblierung läuft fehlerfrei.
Mit den Originaldaten funktioniert's einwandfrei, aber wehe ich ändere
ein einziges Parameter ...
Hast du da 'ne Erklärung für ??
Muss der RTC erst wieder initalisiert werden wenn er mal mit anderem
Datum lief ??

Thanks in advance !!

Christian
P.S. LCD mit nur drei Ports und einem supergeilem Treiberprogramm;
danke !!! Ich werde nie wieder 11 Ports opfern müssen !!!!!

Autor: Christian Schumann (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hallo Peter,
sorry ich immer noch......
Also, ich habe die Return-labels manuell so gesetzt wie in deinem
listfile; nun funktioniert's 100% ig. Als Magic_key (o.ä) muss man nur
nach einer Änderung der Daten eine X-beliebige, aber andere, Zahl als
vor der Änderung eingeben; that's it !!
Ich habe (leider ohne Erfolg) versucht deinen LCD-Teiber auf einen
Mega-8 zu übertragen (4 MHz); ich kann an allen Konstanten
"herumschrauben" wie ich will und bekomme einfach die "Enable" Zeit
nicht lang genug ...
Vielelicht ein Thema für einen anderen Thread ??
Mit 2 Stück 74HCT590 und 16 Bit seriell wobei die ersten 4 bit für den
Kontrast, die zweiten 4 Bit für die LED Hintergrundbeleuchtung und die
restlichen 8 Bit für das LCD sind ??
Ein Platinenlayout kann ich gerne zur Verfügung stellen ....
Oder das LSB als Enable wenn die Bits seriell eingetroffen sind ??

Alles Gute wünscht

Christian

Autor: Klaus Oelsner (klaus)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hallo Christian,
den Fehler bei ".equ  E2END  =3F" bekomme ich nicht nur bei diesem
Beispiel sondern auch bei anderen Codes, wenn ich AVR-Studio verwende.
In diesem Fall hbe ich es mal mit WAVRASM übersetzt und erhalte keinen
Fehler. Also liegt es wohl am Assembler- oder ?

Gruß Klaus

Autor: Werner L (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hallo Christian und Klaus,
daß Problem mit ".equ E2END ..." habe ich gelöst durch Löschen der
tn12def.inc. Seit einiger Zeit sind beim AVRStudio Partdefinitionfiles
als xml-Dateien eingeführt, die der Assembler automatisch benutzt, wenn
die entsprechende ".include" Direktive ge-setzt ist.
Danke nochmals an Christian für die Lösung des "ret"-Problems. Hat
mir
viel Zeit gespart.
Unklar ist mir noch die Sache mit dem Magic-Byte. Ich bin nicht so
sicher, daß man dieses bei Verwendung anderer Angaben für die
Start-zeit nur "irgendwie" ändern muß. Peter D. schreibt, daß es
angepaßt werden muß, also stellt sich die Frage nach dem Algoritmus.
Hat da
schon jemand dran gearbeitet?
Gruß Werner

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Das Magic ist nur dazu da, damit die CPU weiß, ob die RTC schon
gestartet wurde.

Wenn es nicht stimmt, wird die im Programm definierte Startzeit geladen
und die RTC gestartet.

Das Stellen der RTC erfolgt also dadurch, daß man die Uhr zum richtigen
Zeitpunkt einschaltet. Will man sie neu stellen, muß man ein anderes
Magic nehmen.

Man kann sich natürlich auch andere Stellmethoden ausdenken, das sollte
ja nur als Beispiel für eigenen Versuche dienen.


Peter

Autor: Werner L (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hallo,
ich habe mich mit dem Nachbau des Projekts befaßt und möchte hier
einige Tipps geben, die Probleme vermeiden helfen können.

Zunächst zur Hardware:
Die Schaltung wurde 2003 entwickelt. Mittlerweile ist der DS1820 nicht
mehr in der Produktion. Als Ersatz dürfte sich der DS18S20 anbieten,
der weitgehend kompatibel ist. Ungeeignet ist hingegen der DS18B20, da
er einen anderen Aufbau des Temperatur-Registers besitzt.
Auch hatte ich Probleme mit der Beschaffung des DS1994 (jedenfalls zu
vernünftigen Preisen). Der DS2404 kann hier als Ersatz dienen. Er
benötigt einen externen 6pF Quarz.

Sodann für Benutzer des Studio4:
Beim Assemblieren treten die oben beschriebenen Fehler auf.
Also zunächst nur der Fehler mit der tn12def.inc. Wird dieser Fehler
korrigiert entweder über
".equ  E2END  =3F" in "....=$03F" oder durch Löschen der
tn12def.inc
findet der Assembler die Label

display_clock_ret
display_date_ret
display_temp_ret
measure_ret

nicht mehr, d.h. er kann die entsprechende Zeile in dem Macro incall in
der macro.mac nicht mehr richtig interpretieren.

Meine Lösung:
Verwendung des tiny13 mit Software-Stack

Hierzu:
in der init-Routine den Stack lokalisieren
Änderung der .include Direktive in tn13....
Das Macro incall löschen in der macro.mac
in den Dateien measure.inc etc. die entsprechenden Routinen mit "ret"
abschließen
in der asm-Datei aus den Makro-Aufrufen rcall-Aufrufe machen

Damit funktioniert das Programm dann auch im Studio4 einwandfrei.
Allerdings läuft meine RTC cirka 10 Sekunden pro Tag zu schnell, was
vielleicht damit zusammen hängt, daß ich entgegen der Spezifikation
einen 12,5pF Quarz verwende.

PS: Wer im übrigen an den Hintergründen für die Merkwürdigkeiten bei
der Abarbeitung des Makros incall interessiert ist, wird vielleicht in
der nächsten Zeit hier etwas erfahren können:

http://www.avrfreaks.net/index.php?name=PNphpBB2&f...


Gruß Werner

Autor: Werner L (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hallo,

ich vergaß darauf hinzuweisen, daß die Timer-Register im tiny13 anders
bezeichnet sind. Dies ist auch noch zu ändern, wenn man auf diesen Chip
umsteigen möchte.

Gruß Werner

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

Bewertung
-1 lesenswert
nicht lesenswert
Hallo,

ich werde den Thread mal wiederbeleben.

Erstmal danke an Peter für den Code!

Ich bin ziemlicher Anfänger und versuche gerade mich da reinzuarbeiten.
Ich habe versucht den Code für mich anzupassen.
Ich brauche aber nur den 1-wire-Teil. Ich habe versucht, das auf den
1-wire zu beschränken und mit meinem LCD zu kombinieren. Jetzt hab ich
das Programm zumindest soweit, daß ich beim Compilieren keine Fehler
mehr bekomme und im Sim. siehts auch ganz gut aus(zumindest mal der
Anfang).

Wenn ich das Programm jedoch in den ATMega16 rüberschiebe, tut sich auf
dem Display mal gar nichts. Es läuft noch nicht mal bis zum
clear-Befehl, und die Initialation und der clear des LCD funktioniert
einzeln, aber nicht in dem kompletten Programm.

Ich bin grad ratlos und stelle den Code mal hier rein, vielleicht
erbarmt sich ja jemand und schaut sich den mal an... ;-)

Vielen Dank schonmal,

->Sanlo

Autor: sanlo (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
hm... 18 Leute haben sich den Quellcode gezogen, aber keiner schreibt
nen Komentar dazu????

Ist mein Code so schlecht, daß es sich nicht lohnt darüber zu
schreiben, oder findet keiner einen Fehler? (Ich hab doch sicher einige
gemacht)

->Sanlo

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

Bewertung
-1 lesenswert
nicht lesenswert
also da der Quellcode wohl zu schlecht und keiner Antwort wert war, hab
ich die Sache nochmal von vorn angefangen.

Jetzt bin ich soweit, dass mir mein LCD "Temp1: 20.0°C" anzeigt, aber
der Wert stimmt nicht, und ich bekomme auch keine Änderung der Anzeige
bei Temp.änd.

Bin grad ein bisschen ratlos, was wohl daran liegt, dass ich PD´s Code
nicht vollständig verstehe (z.B. ROM_search ist mir völlig
schleierhaft, ich nehms als gegeben und i.O. hin)

Ich hoffe, diesmal hat jemand den ein oder anderen Tip.

Danke

->Sanlo

Autor: Christian Schumann (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hallo Sanlo,

sorry, ich habe seit diesem Projekt keine weiteren AVRs mehr
programmiert; Peter's Programm ist super professionell, leider aber
nicht wirklich "anfängergeeignet".
Ich suche gerade eine Routine für 2 Stück 1-wire Temperatursensoren um
eine Differenzmessung machen zu können; d.h. dieses Projekt ohne die
Zeitkomponente ... leider fehlt mir auch die Zeit dazu ...
Falls mir was am Programm auffällt melde ich mich; falls du 'ne Lösung
hast lass es mich bitte wissen.

Hang loose

Christian

Autor: Sanlo (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
mein Projekt ist ja ohne die Zeitkomponente, und die Voraussetzungen für
mehrere DS18s20 sind auch vorhanden.

Bei mir soll es dann so aussehen, dass drei Sensoren ausgelesen und
angezeigt werden. Zwei davon werden zum Ansteuern eines Ventils
verwendet. ( Das wird dann eine Steuerung für eine Solar-Poolheizung)
Ich weiß allerdings auch noch nicht, wie ich das dann mit der Hysterese
programmiere. Aber jetzt muss erstmal das Auslesen funktionieren, jetzt
der eine und danach für alle drei Sensoren.

->Sanlo

Autor: Peter Dannegger (peda)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
@Sanlo,

ich kann nur ZIP im Explorer öffnen (kein RAR).


Die Quarzfrequenz hast Du angepaßt (max 3,7MHz) ?

Bei über 3,7MHz müssen die Warteschleifen in w1_reset angepaßt werden
(weiteres Register nehmen).

JTAG-Fuses aus ?

w1_reset liefert present zurück ?

w1_rom_search liefert 00 .. 7F zurück ?


Peter

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

Bewertung
-1 lesenswert
nicht lesenswert
@Peter: habs gezippt...

Die Frequenz von 1 Mhz ist bei xtal eingetragen. Dann müsste der Rest
so klappen.

ups... nachdem ich die JTAG-Fuse ausgeschaltet habe, gibt mein LCD nur
noch eine flackernde Anzeige von sich. Die Zeichen aus der Anzeige
hüpfen jetzt wild durcheinender.

Was w1_reset und w1_rom_rearch zurückgibt weiß ich leider nicht, oder
kann man das über die ser. Schnittstelle irgendwie mit Ponyprog
auslesen?

->Sanlo

Autor: Sanlo (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Verdammt! meine Anzeige lässt sich auch durch Rücksetzten auf den
vorherigen Zustand vom JTAG nicht wiederherstellen.

Autor: Sanlo (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
hmmm... die 50us Pause in den LCD-Routinen war plötzlich zu kurz. Jetzt
klappts wieder.

->Sanlo

Autor: Peter Dannegger (peda)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
"hmmm... die 50us Pause in den LCD-Routinen war plötzlich zu kurz."

Plötzlich gibt es nicht, Du must was geändert haben. Versuche
herauszufinden, was Du geändert hattest. Dazu ist es sinnvoll bei der
Entwicklung z.B. täglich die letzte Version zu sichern (nicht die alte
überschreiben !).


Versuche mal systematisch vorzugehen.

Bringe erstmal das LCD zum laufen, dann eine Funktion zur Zahlenausgabe
und dann kannst Du debuggen.
D.h. an den Stellen, wo Du etwas bestimmtes erwartest aber etwas
falsches vermutest, lasse Dir den Wert ausgeben.


Peter

Autor: Sanlo (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
das kuriose ist, daß ich nur JTAG verändert habe und sonst nichts.
Vorher ging das LCD super.

Ich hänge jetzt grad beim Einlesen. In measure wird die ausgelesene
Temp. doch in temp2l und temp2h abgelegt, aber in display_temp ist
"z" der Temp.wert. Da gibt es kein temp2l und temp2h???

->Sanlo

Autor: Christian Schumann (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hi Sanlo, hi Peter,

ich finde, dass der Thread sich langsam etwas vom Grundthemaentfernt;
inzwischen arbeitet Sanlo auf einem Mega-16 ...

Sanlo,

schau dir mal bei "avrfreaks.net" Peter's Projekt an:
(du mußt dich erst als User anmelden)

"Multiple DS18[B]20 on LCD" auf dem Tiny 12; ich denke, dass ist eine
gute Grundlage für deine Aufgabe.
Es ist ja gerade interessant auf kleinen AVRs große Projekte zu
verwirklichen.
Ansonsten nutze die Analogports des Mega-16 und gehe einfach mit
Thermosensoren drauf ... aber die 1820 sind einfach geiler.. x-cuse my
language !

Peter,

danke, dass du noch immer Threads bearbeitest !!

Viel Spass und gutes Gelingen !!

Christian

Autor: Peter Dannegger (peda)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
"aber in display_temp ist "z" der Temp.wert."


Nein, ist es nicht !

Z ist nur der Zeiger darauf.
Schau Dir mal den LD-Befehl genau an.

Zeiger nimmt man immer dann, wenn verschiedene Werte mit der gleichen
Funktion bearbeitet werden sollen.


Peter

Autor: Sanlo (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
@Peter: also dein Code klingt für mich plausibel, ich kann keinen Fehler
finden (hätte mich auch gewundert).

Ich hab mit Sicherheit ein Timing-Problem. Ich muss wohl mal irgendwie
die Taktfrequenz checken. Rein theoretisch müsste das mit dieser
xtal-Formel super funktionieren (wenn ich sie richtig verstanden habe:
Zeit in us * Frequenz 1000000  Länge der Schleife(Anzahl Takte). Ich
hab auch auf der Befehlsliste nochmal die Anzahl der Takte überprüft,
eigentlich müsste es passen.

Aber wenn ich das mal als Probe auf die Warteschleifen vom LCD
übertrage (50 us), dann ist das viel zu kurz. Ich komme laut Formel 50
* 1000000 / 1000000 /3 gibt 16,67. Ich hab jetzt mal getestet, bis
wohin die Schleife zählen muss, um eine stabile Anzeige zu erhalten.
Das ist bei 77 Dez, oder 4d hex.

Irgendwo ist da der Wurm drin.

Die Takteinstellungen im ATMega hab ich auf Standart gelassen. d.h. 1
Mhz interner Oszi. Vielleicht stimmt damit was nicht.

Sanlo

Autor: Sanlo (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
so... der ATMega hat irgendwie ne Macke, trotz eingestellter
Standart-Werte hat er ne größere Freq.,ich hab zum Glück mehrere davon.
Ich hab jetzt einen Neuen genommen und jetzt passt das mit der
xtal-Formel.

jetzt zeigt er dauernd -110.5 °C an. Das kann ja wohl auch nicht ganz
sein...


->Sanlo

Autor: Sanlo (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
aha... der Zeiger ist schuld! Ich hab die Pointeradressen vergessen.
Wonach geht man beim Einstellen der Adressen? Welche Werte nimmt man?

->Sanlo

Autor: Peter Dannegger (peda)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
"Wonach geht man beim Einstellen der Adressen? Welche Werte nimmt
man?"

Na genau die Adresse, wo man vorher den Wert abgelegt hat, den man nun
anzeigen will. Schau mal ins *.h-File (temp_ptr).


Peter

Autor: Sanlo (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
so jetzt zeigt er eine Temp. an, und wenn ich alle drei Sensoren
anschließe bekomme ich nur den letzten Sensor angezeigt (Vermute ich
zumindest, da es der mit der längsten Leitung ist.

Was muss ich jetzt machen, um alle drei Werte angezeigt zu bekommen?

Sorry, daß ich nerve Peter, aber dein Programm ist so komplex, daß ich
manche Sachen echt nicht verstehe.

Ich hoffe, du hast Mitleid und hilfst mir noch ein bisschen. ;-)

Danke, Sanlo

Autor: Sanlo (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
ok teilweise gefunden. Hab in lcd_data den lcd_count nicht hochgezählt.
Jetzt hab ich zwei Werte.

...und den dritten krieg ich auch noch... :-)

->Sanlo

Autor: Sanlo (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
ist das Prog nur für 2 Sens. geeignet? Ich hab jetzt zum Testen mal aus
display_temp den Teil rauskopiert, der die Temp. anzeigt, also von
"get low byte" bis zur Anzeige von "°C".

Interessanterweise zeigt er für den dritten Sensor 0.0°C an. Ich glaub,
ich werd erstmal den Sensor checken.

->Sanlo

Autor: Peter Dannegger (peda)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
"ist das Prog nur für 2 Sens. geeignet?"

So siehts aus. Der Tiny12 hat ja nicht viel Speicher.

Und so werden die 2 letzten Lesungen gespeichert:
rcall   w1_byte_rd                      ;low byte
mov     temp2l, temp1l
mov     temp1l, a0
rcall   w1_byte_rd                      ;high byte
mov     temp2h, temp1h
mov     temp1h, a0


Sollte leicht auf 3 erweiterbar sein.
Man könnts natürlich auch für Pointer umschreiben.


Peter

Autor: Sanlo (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
juhuuuuu...

Danke Peter, du hast mir wieder den richtigen Tip gegeben. Jetzt zeigt
er alle drei Temps richtig an!

->Sanlo

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

Bewertung
-1 lesenswert
nicht lesenswert
so fall es jemanden interessiert...

meine Variante mit Bild vom Versuchsaufbau

->Sanlo

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

Bewertung
-1 lesenswert
nicht lesenswert
hey könnts ma da weiter helfen,versuch ds180 auszulesen,schaff des ned 
mit dem 1 wire port,muss des in c programmiern.

bitte,bin schon verzweifelt

Autor: Peter Dannegger (peda)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Wer mich kennt weiß, daß ich keinen Entrarer installiert hab.

Bezieht sich die Frage denn wirklich auf meinen Beispielkode ?

Ansonsten, Hijacker verkrümeln sich bitte ins Fragen-Forum.


Wie lautet überhaupt die Frage ?

Ohne konkrete Frage keine Antwort.


Peter

Autor: Dubbster (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
wie ich 1 byte dem ds1820 übermitteln kann!

Autor: Dubbster (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
hey,was könnte da nicht stimmen,wenn er immer schreibt SCON undefined 
indentifier

#include<reg517.h>
#include<stdio.h>


//---------------------------------------
// Initialize serial port
//---------------------------------------



void InitSerial(void)
{
    TMOD = 0x20;    // Timer 1=8-Bit-relod
    TH1  = 0xFD;    // TH1
  TR1   = 1;      // Timer 1 starten
  SCON = 0x52;    // Freigabe von Sender & Empfänger
}

jedoch bin ich der meinung,dass der quellcode korrekt ist!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Och nö, nochn Hijacker.

Ein bischen Benimmse schadet auch in Foren nicht.


Peter

Autor: Jens Grumme (jensgrumme)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einen schönen Guten Morgen, bin seit heut morgen neu hier im Forum.

Ich beschäftige mich seit gut einer Woche mit dem Thema microcontrollern 
und habe auch schon die ersten klein Versuche sprich LED Blinken zu 
lassen und auch Lauflicht erfolgreich zu programmieren.

Besitze folgende Hardware.

Die Atmega 16, 32 und den 644. Das AtmelmStudio 6.
Habe dann noch ein LCD Modul AV 2040 von Conrad.

Jetzt wollte ich ganz gern auf dem LCD Modul Uhrzeit Datum und 
Temperatur anzeigen lassen.

Kann ich den, den hier oben zur Verfügung stehenden Quellcode benutzen, 
wie gesagt habe nur die drei Controller zur Verfügung.

Oder muss ich das Programm dann noch anpassen .

Würde mich über Antworten freuen.

Bis dahin wünsche ich euch noch ein schönes Weihnachtsfest.


Mit Freundlich Grüßen
Jens Grumme

Autor: Christian S. (roehrenvorheizer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Benutzen kanst Du den Code natürlich.
Du wirst die PORT-Ein- und Ausgänge an die von Dir aufgebaute Schaltung 
anpassen müssen sowie einige Registernamen an deine Mega-Typen anpassen 
müssen. Dabei hilft Dir die Registertabelle am Ende des Datenblattes 
weiter. Du suchst also das Register des originalen Prozessors in dessen 
Datenblatt heraus und suchst im Datenblatt des neuen Prozessors das 
Register mit der gleichen Funktionalität heraus.


Dann fehlerfrei compilieren für Deinen Prozessor und in den Flash des µC 
laden.


Gruß

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.