PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ich verzweifle hier gleich (DS1621)



ensacom
06.11.2007, 19:48
Ich bin hier echt am verzweifeln.
Also ich habe ein RN-Board und einen Temperatursensor DS1621
Ich habe den Temperatursensor wie folgt an meinen AtMega32 angeschlossen.


DS1621 AtMega32
SDA PC1
SCL PC0
GND GND
A0 GND
A1 GND
A2 GND
VDD +5V

Folgenden Code benutze ich zum testen.
Da ich keinen RS232-Port am Laptop habe und ich mein erst heute gekauftes Display nicht anschließen kann, teste ich meinen ebenfalls heute gekauften Temperatursensor indem ich sage dass das Board, wenn eine Temperatur überschritten wird, piepen soll.

Hier der Code den ich hier im Forum gefunden habe.



'-------------------------------------------------------------------------------
'----- Beispiel für das Auslesen des Temperatursensors DS1621/1631 ------------
' HR 2006
'
'Anmerkung: Dieses Beispiel ist sowohl für den 1621 als auch für den 1631
'geeignet. Der 1631 wird dabei im 1621 Kompatibilitätsmodus betrieben.
'Auf die Auswertung negativer Temperaturen wird verzichtet.
'-------------------------------------------------------------------------------

$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600

$hwstack = 32
$swstack = 32
$framesize = 32

Config Scl = Portc.0
Config Sda = Portc.1

Portc.0 = 1 'Pin wird auf High, also 5V geschaltet
Portc.1 = 1


Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450 'BEEP


I2cinit 'entbehrlich
'-------------------------------------------------------------------------------
Declare Sub Readtemp(byval Device As Byte)
Declare Sub Convertvalue_komma1()

Dim Value As Word
Dim Ton As Integer
Dim Convert_strg As String * 10

Const Ds1 = 150 'ggf. anpassen
'----------------------------- Hauptprogramm -----------------------------------

Do
Call Readtemp(ds1)
Call Convertvalue_komma1()
Print Convert_strg
Waitms 500
Loop

End

'----------------------------- Subroutinen -------------------------------------

'Readtemp liest die Temperatur und stellt sie nach Aufruf in der Variable Value
'in 10tel Grad zu Verfügung. Übergeben wird die Deviceadresse des Sensors.

Sub Readtemp(byval Device As Byte)
Local Deviceread As Byte
Local Lowtemp As Byte
Local Hightemp As Byte

Deviceread = Device + 1

I2cstart
I2cwbyte Device
I2cwbyte &HEE 'Temperaturmessung anstoßen
I2cstop

I2cstart
I2cwbyte Device
I2cwbyte &HAA 'Temperaturmessung Lesekommando
I2cstop

I2cstart
I2cwbyte Deviceread
I2crbyte Lowtemp , Ack 'LSByte holen (Ganze Grad)
I2crbyte Hightemp , Nack 'MSByte holen (0,5 Grad Indikator)
I2cstop

Value = Lowtemp * 10
If Hightemp = 128 Then
Value = Value + 5
End If

If Hightemp > 10 Then
Ton = 550
End If


If Hightemp > 40 Then
Ton = 250
End If




End Sub

'-------------------------------------------------------------------------------
'Convertvalue_komma1 wandelt Value in einen String mit einer Nachkommastelle.
'Es wird gezeigt wie ein Zahlenwert in ein String gewandelt wird und dieser
'formatiert werden kann.
'Alternativ kann natürlich auch die "/10, Mod 10 Methode" angewandt werden.

Sub Convertvalue_komma1()

Convert_strg = Str(value)
Convert_strg = Format(convert_strg , " 0.0")

End Sub
'---------------------------------


Das Problem ist nun dass er ständig piept.
Bei Const Ds1 = 150 steht "gegebenenfalls anpassen"
Anpassen auf welchen Wert?

Ich hoffe mir kann einer helfen weil ich echt langsam die Geduld verliere.

Danke

Michael
06.11.2007, 20:13
Hallo ensacom,


Anpassen auf welchen Wert?
auf den Wert der Adresse (Datenblatt) plus dem eingestellten an den Adresspins (hier null)

Sind externe Pullups vorhanden? Ohne die geht es nicht, Portc.0(1) = 1 ist sinnlos.

Gruß, Michael

ensacom
06.11.2007, 20:25
Also wie ich das verstanden habe, hat das RN-Board externe Pullups.
Nur wie, was, wo stelle ich da was ein dass es geht?
Wo sehe ich ob diese Pullups vorhanden sind?

Habe hier https://www.roboternetz.de/wissen/index.php/RN-Control gesehen dass das mit dem Portc.0 = 1

Muss ich da jetzt an SDA und SC1 Widerstände zwischenschalten?
Wie groß sollten die denn dann sein?
Ich stecke die Kabel einfach zum testen in die Leiste auf dem RN-Board

Michael
06.11.2007, 20:43
Hallo ensacom,

meines Wissens sind die Pullup-Widerstände auf dem Board schon vorhanden.

Die Adresse laut Datenblatt muß mit der Adresse in deiner Software übereinstimmen, sonst geht es nicht.

Gruß, Michael

ensacom
06.11.2007, 20:49
Ja aber welche Adresse?
Ich weiß auch gar nicht was ds1 bedeuten soll

radbruch
06.11.2007, 20:54
Hallo

Meinen attiny13 ohne Pipser, UART, Display oder LEDs debuge ich, indem ich die Messwerte ins eeprom schreibe und dieses dann per ISP auslese. Vielleicht hilft dir das. (EEProm-Beispielfunktionen gibts im Datenblatt)

Gruß

mic

ensacom
06.11.2007, 20:56
Sollte halt wissen wie man das macht.
Also wie schreibe ich die Werte ins eeprom und wie kann ich die mit BASCOM auslesen?

habe nur einen USB-ISP also keinen seriellen oder parallelen Port

Michael
06.11.2007, 21:06
Hallo ensacom,


Ja aber welche Adresse?
hast du das Datenblatt des DS1621 gelesen?
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2737 Seite 8+9


Ich weiß auch gar nicht was ds1 bedeuten soll
das ist die o.g. Adresse

Gruß, Michael

radbruch
06.11.2007, 21:12
Hallo

Leider kenne ich bascom und seine Möglichkeiten nicht. Die Beispiele im Datenblatt sind in Assembler und C. Das sind aber nur ein paar Zeilen die sich bestimmt auch nach bascom übertragen lassen. Hauptsächlich geht es dabei um das richtige Timeing beim EEProm-Schreiben.

Wenn man nach "bascom AND eeprom" sucht, findet man z.B. diesen Thread:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=30446
Scheinbar hat bascom schon fertige Routinen:

readeeprom und writeeeprom. Und es kann wohl Variablen direkt im EEProm anlegen:

Dim a as eram byte
dim b as eram word
dim c as eram long

Ich plapper aber nur nach...

EEProm auslesen müßte mit einem USB-ISP-Interface funktionieren, allerdings weiß ich nicht, ob bascom dies unterstützt. Wenn nicht, kannst du z.B. avrdude verwenden. Das kann auch USB-ISP-Interfaces ansprechen.

Gruß

mic

ensacom
06.11.2007, 21:24
Hm also das mit der Adresse ds1 verstehe ich nicht. Jetzt steht ja 150 im code. Keine Ahnung was da gemeint ist und welchen Wert ich eingeben muss. Ich bekomme keine Temperatur ausgelesen und es biept auch nichts.

StevieL
06.11.2007, 23:40
Hallo,

hast du noch nicht im Datenblatt nachgeschaut? Da steht doch alles:

Die Systemadresse ist 1001. Da alle Adresseingängen auf Masse gelegt wurden folgt dann 000 und dann dann das Schreib-/Lesebit.

Somit hat dein Chip als Schreibaddresse &B10010000 und als Leseaddresse &B10010001. Du musst also die Addresse vermutlich auf 144 ändern (habe den Code nicht angeschaut).