PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RN-Minicontrol und DS1621, Probleme



placasoft
28.11.2006, 16:32
Hi,
ich habe nun endlich meine Minicontrol zumlaufen gebracht. Nun will ich über den I2C und dem daran angeschloßenen Temp. sensor DS1621 die Temp. auslesen.

Ich habe den DS1621 so an den I2C angeschloßen :

DS1621 I2C
SDA - SDA
SCL - SCl
Gnd - GND
Tout -
Vdd - 5V
A0 - GND
A1 - GND
A2 - GND

Ist das so richtig?

Hier ist der Code den ich von hier geladen habe, was muss ich ändern das er mir einfach via Com port die Temp zeigt? Würde mich echt freuen wenn ihr mir helfen könntet ;)





'------------------------------------die anweisungen für prozessor,use.-------------------------------------------------
$regfile = "m168def.dat"
$crystal = 16000000 'Quarzfrequenz
$baud = 9600
$hwstack = 32
$framesize = 32
$swstack = 32


Config Scl = Portc.5
Config Sda = Portc.4

Config Pind.6 = Output
Portd.6 = 0

Dim ___lcdno As Bit
Config Lcdpin = Pin , E = Portc.3 , E2 = Portd.7 , Rs = Portc.2 , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5
Config Lcd = 20 * 4
Dim Convert_strg As String * 10
Declare Sub Showvalue_komma1(byval Format As String)as Byte
Dim Device As Byte
Dim Deviceread As Byte
Dim Lowtemp As Byte
Dim Hightemp As Byte
Dim Value As Word '!!!!!!!
I2cinit

Device = 144 'Wenn alle Adressleitungen des 1621 auf GND sind.
Deviceread = 145

'----------------------------------------------Hauptprogramm------------------------------------------------------------
Do

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

I2cstart
I2cwbyte Device
I2cwbyte &HAA 'Temperaturmessung Lesekommando
I2cstop

I2cstart
I2cwbyte Deviceread
I2crbyte Lowtemp , Ack 'LSB holen
I2crbyte Hightemp , Nack 'MSB holen
I2cstop

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

Print
Cursor Off
Cls
Cursor 1 , 1
Lcd Showvalue_komma1()
Waitms 500 'kurze Pause
Loop
End
'------------------------------------------------------------
Sub Showvalue_komma1()
Convert_strg = Str(value)
Convert_strg = Format(convert_strg , " 0.00")
Lcd Convert_strg
End Sub

linux_80
29.11.2006, 00:29
Hallo,

anschluss passt, Programm hab ich das grad probiert:

'
$regfile = "attiny2313.dat"
$crystal = 16000000
$baud = 9600

Config Scl = Portb.7
Config Sda = Portb.5

Dim Device As Byte
Dim Deviceread As Byte
Dim Lowtemp As Byte
Dim Hightemp As Byte

I2cinit

Device = &H90
Deviceread = &H91

Print
Print "DS1621 Temperatur"

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

I2cstart
I2cwbyte Device
I2cwbyte &HAA 'Temperaturmessung Lesekommando

I2cstart
I2cwbyte Deviceread
I2crbyte Lowtemp , Ack 'LSB holen
I2crbyte Hightemp , Nack 'MSB holen
I2cstop

Print Lowtemp ; "," ;

If Hightemp = &H80 Then
Print "5"
Else
Print "0"
End If

Waitms 700
Loop

End

Ich hab jetzt aber nicht genauer geschaut, ob das mit einer negativen Temperatur mit dem ,5 so stimmt !

placasoft
29.11.2006, 09:31
Ok, wenn ich daheim bin werde ich es gleich mal testen. THX

Noch eine kleine Frage, und zwar Arbeite ich zum ersten mal mit dieser Programmiersprache, wenn ich eine Funktion erstelle z.B:

Sub Test_Funktion()
Print "Test"
End Sub

Wie kann ich diese ausführen? Bei C war es ja einfach nur :

Test_Funktion();

und dann ging es ... wie mache ich das hier?

MfG
Placa und nochmal THX für die Hilfe

Rage_Empire
29.11.2006, 11:26
versuch mal "call Test_Funktion()"

wobei es hier keine Funktion sondern eine Sub ist. ;-)

placasoft
29.11.2006, 11:54
OK und wie erstelle ich eine Funktion :D

ThX ;)

Rage_Empire
29.11.2006, 12:43
nicht mir "sub" sondern "Function"

declare function test() as Integer
bla
bla
bla
text=bla
end function

EASY? In der Bascom-Hilfe müssten Beispiele Hierzu sein

placasoft
29.11.2006, 13:59
Alles klar, nun habe ich aber noch ein weiteres Problem und zwar scheint es so also ob sich die MiniControl aufhängt nach : "I2cwbyte Device", an was kann das liegen?

MfG
Placa

linux_80
29.11.2006, 18:18
Sollte eigentlich nur passieren, wenn der I2C-Bus nicht richtig zusammengeschraubt ist, zB. keine Pullups.
Bei mir funktioniert es (mein Beispiel)

placasoft
29.11.2006, 21:37
Also ich habe meine Minicontrol fertig gekauft, gibt es möglichkeiten um herauszufinden was kaputt ist?

linux_80
29.11.2006, 22:41
Als erstes könnte man messen ob an den beiden Leitungen vom I2C-Bus in etwa 5V anliegen, dann kommts auch noch drauf an wie lange das Kabel zum 1621 ist.
Je länger umso schlechter die Datenübertragung.

placasoft
30.11.2006, 06:17
4.91 V kommt auf Port 7 raus, den Port5 nutze ich nicht, das Kabel ist vllt ca 15 CM lang.

EDIT :

Das ganze hängt auch wenn nichts am I2C hängt,

Rage_Empire
30.11.2006, 11:50
Sind die Pullup-Widerstände vorhanden (bei SCK und SDA)?

placasoft
30.11.2006, 12:00
Was für Pullup Widerstände?

placasoft
01.12.2006, 10:39
Kann mir keiner helfen? =/

linux_80
01.12.2006, 18:15
Wenn du das fertige RN-MiniCtrl hast, dann sind die Pullups schon drauf,
die zwei Widerstände gleich neben dem I2C -Stecker.
Die Pullups sind dazu da, den Pegel der Leitungen auf High (5V) zu halten, wenn grad nix los ist, deswegen hab ich oben gefragt, ob die ca. 5V haben !

placasoft
01.12.2006, 22:50
Aso ok, aber an was kann der fehler liegen? Kann eine einstellung falsch sein?

linux_80
02.12.2006, 00:51
Haben wir schon gefragt, ober Dein M168 auch mit den 16MHz läuft ?
Hast Du die Fusebits umgestellt, bzw. überprüft ?

placasoft
02.12.2006, 11:02
So sind meine Fusebits einstellungen :
http://jojobobby.jo.funpic.de/fuse.jpg

placasoft
03.12.2006, 16:55
Ich dreh echt durch jedes mal wenn ich den I2C port anschalte bleibt die ganze Minicontrol hängen. Dafür muss es doch eine Lösung geben? Was kann ich vllt noch falschgemacht haben? Ist vllt die Minicontrol kaputt?

MfG
Placa

linux_80
03.12.2006, 17:26
Es ist halt so, das wir von hier aus nix sehen können,
wenn Du das Board fertig gekauft hast ist es normalerweise OK.

Hast Du schon mal kontrolliert ob die Löterei um den DS1621 auch so passt, kein Brücken usw.

Ist der Jumper für die 5V auf den I2C-Bus gesteckt (I2C5V), damit der DS1621 Strom bekommt ?

Mehr kann man aus der Ferne erstmal nicht sagen.

Ist bei den Fusebits das letzte wirklich auf 0, oder ist das nur beim Ausdrucken verrutscht ?
Das sollte auf 1 sein, Fusebit Q mein ich !

placasoft
03.12.2006, 18:29
Also Jumper für 5V ist gesetzt, q fusebit ist auf 1, keine Brücken beim Sensor. Echt kommisch das ganze, Linux 80 paar fragen noch.
Aus dem Code :

Device = &H90
Deviceread = &H91

Woher hat du das? Kann sein das es daran liegt? Weil sich das Teil ja aufhängt direkt nach " I2cwbyte Device", desweitern woher weiß ich dass das stimmt :

Config Scl = Portb.7
Config Sda = Portb.5

Thx für die Hilfe, linux 80 hast du vllt icq?

MfG
Placa

linux_80
03.12.2006, 20:26
Die Adresse steht im Datenblatt, wenn Du alle Adressleitungen vom DS1621 auf GND gelegt hast ist das &H90, für Read kommt eins dazu, also &H91. Bei Dir steht 144, das ist dasgleiche in Dezimal.

An welchen Pins deine Leitungen liegen musst Du wissen, bei mir ist es so wie oben in meinem Programm.
Beim M168 ist das normalerweise PC4 für SDA und PC5 für SCL, das hast Du aber eh schon so oben, ich musste das nur ändern weil ich ein anderes Board verwendet habe !

Und den richtigen AVR bei $regfile verwenden, falls Du meins kopiert hast.

placasoft
04.12.2006, 00:07
NA ENDLICH :D ... ich habe den Fehlergefunden, habe was bei den Ports falsch ich depp -.- Komischer weiße wird mir eine Temperatur angezeigt von 144? Das kann ja net sein oder ;)