www.mikrocontroller.net

Forum: Codesammlung Zeit + Temperatur auf LCD mit AVR

Autor: peter dannegger (Gast)
Datum: 18.06.2003 19:08
Dateianhang: lcdtrtc.zip (85,8 KB, 4208 Downloads)

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: 19.06.2003 00:40

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 (Gast)
Datum: 19.06.2003 10:20

@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: 17.07.2005 09:24

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: 18.07.2005 09:54

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: 16.08.2005 17:17

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: 16.08.2005 19:42

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: 22.08.2005 19:52

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: 25.09.2005 20:49

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: 26.09.2005 09:35

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: 26.09.2005 10:21

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: 23.10.2005 11:35

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&a...


Gruß Werner
Autor: Werner L (Gast)
Datum: 23.10.2005 11:44

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: 02.07.2006 21:32
Dateianhang: Test_1-wire2.zip (13,3 KB, 325 Downloads)

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: 10.07.2006 21:46

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: 18.07.2006 11:24
Dateianhang: LCD_1-wire.rar (3,9 KB, 282 Downloads)

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: 18.07.2006 15:45

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: 18.07.2006 23:36

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: 19.07.2006 09:37

@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: 19.07.2006 10:15
Dateianhang: LCD_1-wire.zip (4,2 KB, 238 Downloads)

@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: 19.07.2006 10:24

Verdammt! meine Anzeige lässt sich auch durch Rücksetzten auf den
vorherigen Zustand vom JTAG nicht wiederherstellen.
Autor: Sanlo (Gast)
Datum: 19.07.2006 10:38

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

->Sanlo
Autor: Peter Dannegger (peda)
Datum: 20.07.2006 08:26

"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: 20.07.2006 09:27

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: 20.07.2006 09:41

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: 20.07.2006 11:34

"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: 21.07.2006 11:09

@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: 21.07.2006 12:22

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: 21.07.2006 22:26

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: 23.07.2006 19:25

"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: 24.07.2006 15:58

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: 24.07.2006 16:12

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: 24.07.2006 16:30

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: 24.07.2006 16:52

"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: 24.07.2006 19:43

juhuuuuu...

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

->Sanlo
Autor: Sanlo (Gast)
Datum: 26.07.2006 22:29
Dateianhang: Poolsteuerung.zip (103,9 KB, 516 Downloads)

so fall es jemanden interessiert...

meine Variante mit Bild vom Versuchsaufbau

->Sanlo
Autor: Dubbster (Gast)
Datum: 14.11.2006 18:50
Dateianhang: temp.rar (40,7 KB, 284 Downloads)

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: 14.11.2006 23:11

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: 17.11.2006 12:45

wie ich 1 byte dem ds1820 übermitteln kann!
Autor: Dubbster (Gast)
Datum: 19.11.2006 11:09

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: 19.11.2006 17:17

Och nö, nochn Hijacker.

Ein bischen Benimmse schadet auch in Foren nicht.


Peter

Antwort schreiben

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

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel





Hinweis: der Originalbeitrag ist mehr als 6 Monate alt.

webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net