Forum: Mikrocontroller und Digitale Elektronik Temperatur DS1820 ausgabe auf lcd


von Kay B. (newbie)


Angehängte Dateien:

Lesenswert?

hallo,
habe ein kleines testprogramm für den DS1820 funktioniert sowet,aber wie 
bekomme ich meine gemessene Temperatur aufs display.

mfg kay

von Kay B. (newbie)


Lesenswert?

hallo,
kann mir denn niemand weiterhelfen die daten aufs display darzustellen
für eine antwort wäre ich sehr dankbar
mfg kay

von Stefan B. (stefan) Benutzerseite


Lesenswert?


von Jürgen (Gast)


Lesenswert?

Nimm BASCOM und quäl dich nicht mit Assembler ;-)
Damit ist es eigentlich banal einen Wert auf einem LCD ausgeben zu 
lassen.

Aber für manche ist ja der Weg das Ziel.

von Kay B. (newbie)


Angehängte Dateien:

Lesenswert?

hallo,

so habe es jetzt mal so wie in 
http://www.mikrocontroller.net/articles/AVR-Tutori...
versucht funktioniert immer noch nicht ,bin bald am verzweifeln 
vielleicht könnte mir jemand weiterhelfen
danke
mfg
kay

von Jörg X. (Gast)


Lesenswert?

> funktioniert immer noch nicht
Na dann sieh's ein - du kannst das einfach nicht, lass es sein...

;)
Nein , im ernst: wie wäre es mit einer Fehlermeldung, mit der 
irgendjemand was anfangen kann?
 - WAS FUNKTIONIERT NICHT?????
 - was erwartest du, was passiert stattdesen??
Und rück ein paar Informationen raus:
 - welchen AVR benutzt du?
 - Ist die Schaltung korrekt(evtl. hier posten)?
 - Hast du da wirklich einen ds1820 (beim Hersteller steht "No longer 
available")?
 - reagiert der ds1820 (evtl. mit LED, USART o.ä. anzeigen)?
 - Kannst du konstante daten auf dem LCD anzeigen (zeichen, strings 
etc..)?
   - wenn das geht: kannst du eine konstante Zahl anzeigen?

hth. Jörg
ps.: vielleicht bin ich auch nur ein übertriebener 
"strukturiertes-Programmieren"-Fan, aber zig-tausend Warte-Funktionen 
sieht für mich grausam aus (auch die werden im AVR-Tutorial 
behandelt)

von Kay B. (newbie)


Lesenswert?

hallo,

>  - WAS FUNKTIONIERT NICHT?????
>  - was erwartest du, was passiert stattdesen??

der eingelesene temperaturwert des ds1820 bekomme ich nicht auf mein lcd 
angezeigt sonder nur wirre zeiche

> Und rück ein paar Informationen raus:
>  - welchen AVR benutzt du?
atmega128-16 mit 14,745600MHz

>  - Ist die Schaltung korrekt(evtl. hier posten)?
schaltung ist so aufgebaut wie im daten blatt
der DS1820 ist an PortD.0 angeschlossen
sensor: gng->gnd , Vdd->5Volt , DQ->PD.0 mit Pullup 4,7K

>  - Hast du da wirklich einen ds1820 (beim Hersteller steht "No longer
> available")?
ja habe ich bei reichelt bestellt

>  - reagiert der ds1820 (evtl. mit LED, USART o.ä. anzeigen)?
ja geht
>  - Kannst du konstante daten auf dem LCD anzeigen (zeichen, strings
> etc..)?
>    - wenn das geht: kannst du eine konstante Zahl anzeigen?
ja das funktioniert



mfg kay

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Kay B. wrote:
> hallo,
>
> so habe es jetzt mal so wie in
> http://www.mikrocontroller.net/articles/AVR-Tutori...
> versucht funktioniert immer noch nicht ,bin bald am verzweifeln
> vielleicht könnte mir jemand weiterhelfen
> danke
> mfg
> kay

Als ich schrieb "insbesondere der Abschnitt" hiess das nicht, dass du 
die ganze LCD-Initialisierung weglassen sollst ;-)

Im Moment erkenne ich in deinem Programm

1/ Die Ansteuerung des Sensors

2/ Eine seltsame LCD-Routine allerdings ohne Initialisierung und mit 
anderen Namen und anderem Code als in dem von mir empfohlenen 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD

3/ komische, mir nicht erklärliche Anweisungen
1
LOCATE 0,5            ;Position  
2
print8  ztausend
3
print8  tausend
4
print8  hundert
5
print8  zehner

Wahrscheinlich gehört das zu der Library
1
.include"LCD_4x27ohneBusyRW.inc"  ;LCD-Routinen f?eilen-LCDs mit HD44780
2
.include"PRINT.inc"               ;LCD-Augabe-Routinen mit HD44780

Da du weder deren Sourcecode noch einen Link angegeben hast, kann ich 
nicht viel sagen, wie die Library sinnvoll zu benutzen ist.

von Kay B. (newbie)


Angehängte Dateien:

Lesenswert?

hallo ,
habs jetzt die lcd ansteuerung soübernommen wie im 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD

jetzt zeigt der ds1820 046 grad an obwohl es hier nur 21grad sind??

gibt es denn noch eine ander möglichkeit die warteschleifen zu umgehen

vielleicht könnte mal jemand drüberschauen.

mfg kay

von holger (Gast)


Lesenswert?

Aus dem Datenblatt:

The temperature sensor
output has 9-bit resolution, which corresponds to 0.5°C steps.

>jetzt zeigt der ds1820 046 grad an obwohl es hier nur 21grad sind??

Wenn man 46 durch zwei teilt kommt man auf 23.

von Kay B. (newbie)


Lesenswert?

guten morgen,

die temperratur wird richtig dargestellt das geht erstmal
nuN HÄTT ICH DA NOCH EINE FRAGE,
ich würde gerne 4 DS1820 am bus anschliessen aber wie lese ich nun von 
jeden DS1820 die ident aus und wie spreche den sensor zb. Nr.3 an oder 
Nr.1
vielleicht könnte mir da nochmal einer weiterhelfen
danke
mfg kay

von Kay B. (newbie)


Lesenswert?

hallo
kann mir denn denn keiner weiterhelfen
für eine antwort wäre ich dankbar
kay

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

da gibt's 2 Möglichkeiten ...
1; du baust dir die Routine, die mehrere Sensoren erkennen kann
  -> ist im Datenblatt beschieben  (schwirig!)

2; du kannst die ID des Sensors auch auslesen (0x33), schaffe einfach 
eine Möglichkeit die ID über dein Display auszugeben. Schliesse dann 
alle Sensoren nacheinander einzeln an, und lies die ID's aus. Dann 
kannst du die ID's in dein Prog. einbauen. Das Kommando zur 
Konvertierung kannst du noch an alle Sensoren schicken (0xCC 0x44). Beim 
auslesen musst du die Sensoren einzeln ansprechen (0x55 + 64Bit ID).

Sascha

von Kay B. (newbie)


Angehängte Dateien:

Lesenswert?

Sascha Weber wrote:
> Hallo,
>
> da gibt's 2 Möglichkeiten ...
> 1; du baust dir die Routine, die mehrere Sensoren erkennen kann
>   -> ist im Datenblatt beschieben  (schwirig!)
>
> 2; du kannst die ID des Sensors auch auslesen (0x33), schaffe einfach
> eine Möglichkeit die ID über dein Display auszugeben. Schliesse dann
> alle Sensoren nacheinander einzeln an, und lies die ID's aus. Dann
> kannst du die ID's in dein Prog. einbauen. Das Kommando zur
> Konvertierung kannst du noch an alle Sensoren schicken (0xCC 0x44). Beim
> auslesen musst du die Sensoren einzeln ansprechen (0x55 + 64Bit ID).
>
> Sascha

hallo,
ich habe die 2.möglichkeit versucht aber bekomme immer nur 127 
angezeigt,
hab dann bei read_scratchpad:0x33 eingefügt, kriege das einfach nicht 
hin egal welchen sensor ich einsetze vielleicht könnte mir einer bitte 
ein bischen weiterhelfen beim auslesen der ID.

mfg kay

von Sascha W. (sascha-w)


Lesenswert?

hat das auslesen  der ID funktioniert ??

Sascha

von Kay B. (newbie)


Lesenswert?

Sascha Weber wrote:
> hat das auslesen  der ID funktioniert ??
>
> Sascha

nein
mfg kay

von Sascha W. (sascha-w)


Lesenswert?

0x33 senden und dann 8 Byte einlesen -> sollte die ID ergeben.

Sascha

von Kay B. (newbie)


Lesenswert?

Sascha Weber wrote:
> 0x33 senden und dann 8 Byte einlesen -> sollte die ID ergeben.
>
> Sascha

hallo,
so ich habe bei  ""read_scratchpad:0x33 eingefügt"" anstelle von 0xBE
kriege aber immer nur 127 angezeigt

habe das programm nochmal angehängt

von Kay B. (newbie)


Angehängte Dateien:

Lesenswert?

hier das programm

von Sascha W. (sascha-w)


Lesenswert?

an Stelle von SKIP-Rom (0xCC) brauchst du den Befehl Match-ROM (0x55)

deine Routine:
write 0xCC  ;SKIP-ROM (an alle Sensoren)
write 0x44  ;Convert T
;Pause

write 0x55  ;an alle Sensoren
write 0xBE  ;READ Scratchpad
8x read um das Scratchpad einzulesen

mit ID:
write 0x55  ;SKIP-ROM (an alle Sensoren)
write 0x44  ;Convert T
;Pause

write 0x55  ;Match-ROM (an Sensor mit ID)
8x write (ID)  ;ID des Sensors senden
write 0xBE  ;READ Scratchpad
8x read um das Scratchpad einzulesen

----------------
um die ID auszulesen
write 0x33  ;READ-ROM
8x read um die ID des angeschlossenen Sensors zu lesen (nur 1 Sensor!!)


Sascha

von Kay B. (newbie)


Lesenswert?

hallo,
werd das morgen mal umsetzen muss jetzt nach arbeit
mfg
kay

von Sascha W. (sascha-w)


Lesenswert?

na dann guten Nacht ...

von Kay B. (newbie)


Angehängte Dateien:

Lesenswert?

hallo,

hallo so die ID eines einzelnen sensors kann ich auslesen,
4-sensoren möchte ich gerne am buss anschliessen.
sensor1=ID068
sensor1=ID072
sensor1=ID008
sensor1=ID021

nun habe ich bei ""rom_id"" anstelle von 0x33(id eines enzelnen sensors)
0x55  und werden nur nullen angezeigt

wie spreche nun die einzelnen sensoren mit ihrer ID an(die ID hab ich ja 
jetzt) UND WIE BEKOMME und wie bekomm ich die einzelnen temperraturwerte 
der sensoren aufs display

vielleicht kann mir da bitte nochmal einer weiterhelfen

mfg kay

von marvin m. (Gast)


Lesenswert?


von Sascha W. (sascha-w)


Lesenswert?

@Kay

> hallo so die ID eines einzelnen sensors kann ich auslesen,
> 4-sensoren möchte ich gerne am buss anschliessen.
> sensor1=ID068
> sensor1=ID072
> sensor1=ID008
> sensor1=ID021
>
das ist keine ID! Die ID ist 64bit lang, das macht dann 8Byte

> nun habe ich bei ""rom_id"" anstelle von 0x33(id eines enzelnen sensors)
> 0x55  und werden nur nullen angezeigt
0x55 + 8Byte ID + 0xBE

> wie spreche nun die einzelnen sensoren mit ihrer ID an(die ID hab ich ja
> jetzt) UND WIE BEKOMME und wie bekomm ich die einzelnen temperraturwerte
> der sensoren aufs display

PS: hab gestern Abend auch paar Fehler eingetippt ...


Sascha

von Kay B. (newbie)


Angehängte Dateien:

Lesenswert?

hallo,
habe bei skip_rom 0x55 geschrieben anstelle von 0xcc aber es werden mir 
nur nullen angezeigt und als temperraturwert 128 verändert sich auch 
nicht, bin bald amverzweifeln, hab den code nochmal drangehängt

kay

von Sascha W. (sascha-w)


Angehängte Dateien:

Lesenswert?

so jetzt mal mit Anhang ...

Sascha

von Kay B. (newbie)


Angehängte Dateien:

Lesenswert?

hallo sascha,
habe es jetzt so umgeändert wie im anhang von dir beschrieben
die ID und die Temperratur werden angezeigt,
wenn ich das richtig verstanden habe wäre das für einen sensor,
habe denn quelltext mal angehängt vielleicht wäre es möglich mal 
drüberzuschauen obs so richtig ist
danke
mfg kay

von Sascha W. (sascha-w)


Lesenswert?

nun ja ...

>rcall reset_pulse
>rcall rom_id       ;Match Rom senden
;OK ID des Sensors auslesen

>rcall read_sens
;hat hier nix zu suchen
>
>    rcall reset_pulse
>  rcall skip_rom
>  rcall convert_t
;OK - alle Sensoren auffordern die Temp. zu messen

>    rcall reset_pulse
;OK
>  rcall skip_rom
;hier muss jetzt
 rcall read_sens
;hin um DIESEN einen Sensor auszuwähen
;SKIP-Rom würde wieder alle Sensoren gleichzeitig ansprechen
>  rcall read_scratchpad
;und dessen Daten auszulesen
>  rcall reset_pulse
--------

Um mehrere Sensoren auszulesen schreibst du die ID's von Display ab und 
baust sie in das Programm fest ein. (Am besten als Tabelle im Flash 
ablegen)


Sascha

von Kay B. (newbie)


Lesenswert?

HALLO;
ERSTMAL DANKE FÜR DIE MÜHE,

ich habe jetzt eine ID-tabelle erstmal nur für einen sensor
ID_Tabelle: ;sensor 1
.db "008076023056000004000037",0

aber wie rufe ich mit meiner tabelle den sensor auf
;*********************************************************************** 
**

read_sens:


   ldi ZL, LOW(ID_Tabelle*2)
           ldi ZH, HIGH(ID_Tabelle*2)
;;EINEN Sensor auslesen
  ldi temp, 0x55        ; MATCH-ROM
  mov befehl, temp
  rcall write_command

  ;lds befehl,id_rom+0
  ;rcall write_command
  ;lds befehl,id_rom+1
  ;rcall write_command
  ;lds befehl,id_rom+2
  ;rcall write_command
  ;lds befehl,id_rom+3
  ;rcall write_command
  ;lds befehl,id_rom+4
  ;rcall write_command
  ;lds befehl,id_rom+5
  ;rcall write_command
  ;lds befehl,id_rom+6
  ;rcall write_command
  ;lds befehl,id_rom+7
  ;rcall write_command
ret

VIELLEICHT KÖNNTEST DU MIR DA NOCH EINBISCHEN WEITERHELFEN
SO DIE ARBEIT RUFT
DANKE MFG KAY

von Sascha W. (sascha-w)


Lesenswert?

> ich habe jetzt eine ID-tabelle erstmal nur für einen sensor
> ID_Tabelle: ;sensor 1
> .db "008076023056000004000037",0
;die ID sind 8 Zahlen
-->> 008 076 023 056 000 004 000 037
.db  8,76,23,56,0,4,0,37
>
> aber wie rufe ich mit meiner tabelle den sensor auf
> ;*********************************************************************** **
>
> read_sens:
>
>
>    ldi ZL, LOW(ID_Tabelle*2)
>    ldi ZH, HIGH(ID_Tabelle*2)
> ;;EINEN Sensor auslesen
>   ldi temp, 0x55        ; MATCH-ROM
>   mov befehl, temp
>   rcall write_command
;OK
       ldi    temp3,8     ;8 Byte ausgeben
loop:  lpm    befehl,Z+   ;Byte aus Flash holen
       rcall  write_command
       dec    temp3
       brne   loop
> ret

Sascha

von Kay B. (newbie)


Lesenswert?

hallo Sascha,
erstmal vielen dank für die gedult und mühe
nun wollte ich das in ein anderes programm einbinden da aber indem keine 
oberen register mehr frei sind, das geht dann nun nicht

danke nochmals

mfg kay

von Kay B. (newbie)


Angehängte Dateien:

Lesenswert?

hallo ,
die ausgabe auf den lcd funktioniert so nun wollte ich die ausgabe nicht 
aufs lcd sonder über uart da bekomme ich bei ID  immer 255 und bei der 
temperatur immer 000 angezeigt,
als mcu verwende ich jetzt ein mega8 4Mhz
vielleicht könnte mir jemand weiterhelfen

mfg kay

von Kay B. (newbie)


Lesenswert?

hallo,
so das senden zum pc funktioniert jetzt nun wolte ich die daten nicht 
zum pc schicken sondern zum mega128 aber wie werte ich sie nun aus um 
sie aufs display zubekommen.

wäre sehr freundlich wenn mir einer von euch bitte ein bischen 
weiterhelfen könnte
bin bald am vezweifeln
danke
mfg
kay

von Kay B. (newbie)


Angehängte Dateien:

Lesenswert?

HALLO,
kann mir denn keiner weiterhelfen bitte

die ausgabe zum pc funktioniert
würde gerne die daten anstatt zum pc zum mega128 schicken uart0
bloss wie verarbeite ich die ankommenden daten sind ja nur 3 ziffern 
zB.023 , 23Grad

über eine antwort wäre ich sehr dankbar

mfg
kay

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.