Temperatur DS1820 ausgabe auf lcd

Gast #828480
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)
#828784
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
Persönliche Seite #828840
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.
Gast #828898
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.
#829325
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
#830161
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
#830200
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
Angehängte Dateien:
#830271
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
#830512
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
Angehängte Dateien:
#831102
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
#831362
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
#831386
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
#831409
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
#840986
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

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