PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wetterstation mit Uhr?!?



zwanzischmark
25.11.2005, 17:28
Hallo,

Ich habe mich dran gemacht an meiner Wetterstation weiterzuarbeiten und wollte eigentlich eine Uhr integrieren. Ich hab das Gefühl das das an der nicht Multitask-Fähigkeit eines M32 scheitert. Meine Wetterstation hat mitlerweile 10 Temp sensoren (DS18B20) und der Uhrenbaustein ist ein PCF8583. Getrennt voneinander Laufen die Programme problemlos, aber zusammen läuft die Uhr nur solange bis das Programm anfängt die Sensoren auszulesen.

Der Programmablauf sieht ca. so aus:

-Uhr wird gestellt
-10 Sensoren werden ausgelesen
-Temps werden angezeigt, auf min/max Werte kontroliert und entsprechend auf dem Display ausgegeben
-30sec Pause bis die Sensoren wieder abgefragt werden
-ein 1sec Timer liest die Uhr aus und zeigt Sie an


gibt es ne chance die Uhr (Sekundengenau) anzuzeigen oder soll ichs lieber Minutengenau machen und gucken ob das mehr erfolg bringt.

Flite
25.11.2005, 17:55
Hallo!

Schaut eigentlich so aus, wie wenn das mit einem M32 (= ATmega32?) gut klappen sollte. Du musst nur immer alles der Reihenfolge nach ablaufen lassen. Selbst wenn er dann mal länger brauchen sollte um 10 Sensoren abzufragen, dann springt die Uhr eben zwei Sekunden weiter. Aber ich denke, dass das problemlos machbar sein sollte. 1 Sekunde ist verdammt viel Zeit - da kannst du massig Sachen machen.

Wo genau liegt denn das Problem, wie hast du das programmiert (BASCOM, C, Hardware TWI, ...) und vielleicht kannst du das Programm online stellen.

Ich denke, dass wir das schon hinkriegen.

Viele Grüße
Flite

zwanzischmark
25.11.2005, 18:18
Hallo,

das eine Sekunde lang ist stimmt sicher, aber so wie ich dich verstehe meinst du das ich z.B. zwischen zwei Sensoren immer die Zeit auslesen soll. Das funktioniert mit sicherheit, aber ist halt nicht sonderlich schön, weil die Zeit dann anfängt zu springen wenn z.b. in einer Sekunde 2mal ausgelesen wird und dann erst wieder 2sec später oder so.

Meine Frage war genauer gesagt ob es mit Timer Möglich ist. Dann wird ja egal was das Programm grade macht in die Timerroutine gesprungen und das klappt zusammen irgendwie nicht. Was mich wundert das es beim auslesen der Sensoren nicht wirklich Probleme gibt, aber die Zeit springt auf ??:??:?? sobald die Sensoren ausgelesen werden. Es hängt also irgendwie am auslesen des Uhrenbausteins....

mein Programm passt nicht hier rein, man darf nur 20.000 Zeichen schreiben...

zwanzischmark
25.11.2005, 18:22
ich hab mal das unwichitge rausgekürzt. Alles was mit der Uhr zu tun hat ist in 2 querbalken gefassst:


$regfile = "m32def.dat"
$framesize = 16
$swstack = 256
$hwstack = 128
$crystal = 16000000
$baud = 9600

Declare Function Decigrades(byval Sc(9) As Byte) As Integer
Declare Sub Ziffer(byval X As Byte , Byval Y As Byte , Byval Z As Byte)
Declare Sub Minmax(byval Id As String , Byval Nr As Byte , Byval Y1 As Byte)
Declare Sub Temp(byval Pin As Byte)
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Declare Sub Settime(byval S As Byte , Byval M As Byte , Byval H As Byte , Byval D As Byte , Byval Month As Byte)
Declare Sub Gettime
Config Timer1 = Timer , Prescale = 256
Config I2cdelay = 5
Config Sda = Portd.4
Config Scl = Portd.3
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Config Pind.4 = Input
Config Pind.5 = Input
Config Pind.6 = Input
Config Porta = Output
Config Portc = Output
Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portc , Ce = 3 , Cd = 0 , Wr = 2 , Rd = 1 , Reset = 4 , Fs = 6 , Mode = 6
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
On Timer1 Timer_irq
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Const Timervorgabe = 3036
Dim First As Byte
Dim Rset As Boolean
Dim I As Byte
Dim Ta As Single
Dim Temp As Integer
Dim Temp2 As String * 3
Dim Temp3 As Integer
Dim Dstemp(8) As Byte
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim Dsid3(8) As Byte
Dim Dsid4(8) As Byte
Dim Dsid5(8) As Byte
Dim Dsid6(8) As Byte
Dim Dsid7(8) As Byte
Dim Dsid8(8) As Byte
Dim Dsid9(8) As Byte
Dim Dsid10(8) As Byte
Dim Dsid11(8) As Byte
Dim Dsid12(8) As Byte
Dim Sc(9) As Byte
Dim Minn(12) As Integer
Dim Maxx(12) As Integer
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Dim S As Byte , M As Byte , H As Byte , D As Byte , Month As Byte
Dim Wm As Byte , Yd As Byte
Dim K As String * 20
Enable Timer1
Enable Interrupts

Cls
Cursor Off
Waitms 100

Call Settime(0 , 0 , 0 , 24 , 6)
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------


Wait 2

First = 2
Portd.3 = 1
Dstemp(1) = &H28
'-------------------------------------------------------------------------------
Dsid1(2) = &H61 'Paul
Dsid1(3) = &HC1
Dsid1(4) = &H81
Dsid1(8) = &H53
'-------------------------------------------------------------------------------
Dsid2(2) = &H80 'Wohnzimmer
Dsid2(3) = &H13
Dsid2(4) = &H82
Dsid2(8) = &H18
'-------------------------------------------------------------------------------
'Dsid3(2) = &H22
'Dsid3(3) = &H42
'Dsid3(4) = &H15
'Dsid3(8) = &H15
'-------------------------------------------------------------------------------
'Dsid4(2) = &HFA
'Dsid4(3) = &H85
'Dsid4(4) = &H15
'Dsid4(8) = &H03
'-------------------------------------------------------------------------------
Dsid5(2) = &HD0 'Küche
Dsid5(3) = &H24
Dsid5(4) = &H82
Dsid5(8) = &HE3
'-------------------------------------------------------------------------------
Dsid6(2) = &H5E 'Flur
Dsid6(3) = &HC1
Dsid6(4) = &H81
Dsid6(8) = &H9A
'-------------------------------------------------------------------------------
Dsid7(2) = &H4A 'Keller
Dsid7(3) = &HC6
Dsid7(4) = &H81
Dsid7(8) = &H4C
'-------------------------------------------------------------------------------
Dsid8(2) = &HD2 'Gisela
Dsid8(3) = &H45
Dsid8(4) = &H82
Dsid8(8) = &H51
'-------------------------------------------------------------------------------
Dsid9(2) = &H12 'Vorlauf
Dsid9(3) = &HAD
Dsid9(4) = &H81
Dsid9(8) = &HA2
'-------------------------------------------------------------------------------
Dsid10(2) = &H73 'Eingang
Dsid10(3) = &HAE
Dsid10(4) = &H81
Dsid10(8) = &H18
'-------------------------------------------------------------------------------
Dsid11(2) = &H71 'Out
Dsid11(3) = &H2B
Dsid11(4) = &H27
Dsid11(8) = &HCF
'-------------------------------------------------------------------------------
Dsid12(2) = &H64 'Büro
Dsid12(3) = &HAC
Dsid12(4) = &H9B
Dsid12(8) = &H66
'-------------------------------------------------------------------------------


'Locate 1 , 32 : Lcd "18:41:13"
Locate 1 , 1 : Lcd " 05.06.2005 min max"
Locate 3 , 1 : Lcd "Paul --.-" : Showpic 72 , 16 , Nrg2 : Showpic 112 , 16 , Nrg2 : Showpic 148 , 16 , Nrg2
Locate 4 , 1 : Lcd "Flur --.-" : Showpic 72 , 24 , Nrg2 : Showpic 112 , 24 , Nrg2 : Showpic 148 , 24 , Nrg2
Locate 5 , 1 : Lcd "Eing. --.-" : Showpic 72 , 32 , Nrg2 : Showpic 112 , 32 , Nrg2 : Showpic 148 , 31 , Nrg2
Locate 6 , 1 : Lcd "Bad --.-" : Showpic 72 , 40 , Nrg2 : Showpic 112 , 40 , Nrg2 : Showpic 148 , 40 , Nrg2
Locate 7 , 1 : Lcd "Keller --.-" : Showpic 72 , 48 , Nrg2 : Showpic 112 , 48 , Nrg2 : Showpic 148 , 48 , Nrg2
Locate 8 , 1 : Lcd "B ro --.-" : Showpic 72 , 56 , Nrg2 : Showpic 7 , 56 , Nrue : Showpic 112 , 56 , Nrg2 : Showpic 148 , 56 , Nrg2
Locate 9 , 1 : Lcd "K che --.-" : Showpic 72 , 64 , Nrg2 : Showpic 7 , 64 , Nrue : Showpic 112 , 64 , Nrg2 : Showpic 148 , 64 , Nrg2
Locate 10 , 1 : Lcd "Wohnz. --.-" : Showpic 72 , 72 , Nrg2 : Showpic 112 , 72 , Nrg2 : Showpic 148 , 72 , Nrg2
Locate 11 , 1 : Lcd "Vorl. --.-" : Showpic 72 , 80 , Nrg2 : Showpic 112 , 80 , Nrg2 : Showpic 148 , 80 , Nrg2
Locate 12 , 1 : Lcd "Nachl. --.-" : Showpic 72 , 88 , Nrg2 : Showpic 112 , 88 , Nrg2 : Showpic 148 , 88 , Nrg2
Locate 13 , 1 : Lcd "Gisela --.-" : Showpic 72 , 96 , Nrg2 : Showpic 112 , 96 , Nrg2 : Showpic 148 , 96 , Nrg2
Locate 14 , 1 : Lcd "OUT 1 --.-" : Showpic 72 , 104 , Nrg2 : Showpic 112 , 104 , Nrg2 : Showpic 148 , 104 , Nrg2
Locate 15 , 1 : Lcd "OUT 2 --.-" : Showpic 72 , 112 , Nrg2 : Showpic 112 , 112 , Nrg2 : Showpic 148 , 112 , Nrg2

Line(0 , 10) -(239 , 10) , 255
Line(77 , 0) -(77 , 127) , 255
Line(113 , 0) -(113 , 127) , 255
Line(149 , 0) -(149 , 127) , 255

Locate 10 , 26 : Lcd "IN"
Locate 14 , 26 : Lcd "OUT"
Showpic 206 , 103 , Nrp
Showpic 232 , 103 , Nrg
Showpic 206 , 71 , Nrp
Showpic 232 , 71 , Nrg

Do
'-------------------------------------------------------------------------------
Locate 3 , 9 'Paul 01
For I = 2 To 4
Dstemp(i) = Dsid1(i)
Next
Dstemp(8) = Dsid1(8)
Call Temp(6) 'Temperature
If Temp <> 850 Then
Call Ziffer(170 , 71 , 1)
Call Ziffer(188 , 71 , 2)
Call Ziffer(214 , 71 , 3)
End If
Call Minmax( "010" , 1 , 3)
'-------------------------------------------------------------------------------
Locate 4 , 9 'Flur 06
For I = 2 To 4
Dstemp(i) = Dsid6(i)
Next
Dstemp(8) = Dsid6(8)
Call Temp(5)
Call Minmax( "020" , 6 , 4)
'-------------------------------------------------------------------------------
Locate 5 , 9 'Eingang 10
For I = 2 To 4
Dstemp(i) = Dsid10(i)
Next
Dstemp(8) = Dsid10(8)
Call Temp(5)
Call Minmax( "030" , 10 , 5)
'-------------------------------------------------------------------------------
Locate 7 , 9 'Keller 07
For I = 2 To 4
Dstemp(i) = Dsid7(i)
Next
Dstemp(8) = Dsid7(8)
Call Temp(4)
Call Minmax( "050" , 7 , 7)
'-------------------------------------------------------------------------------
Locate 8 , 9 'Büro 12
For I = 2 To 4
Dstemp(i) = Dsid12(i)
Next
Dstemp(8) = Dsid12(8)
Call Temp(4)
Call Minmax( "060" , 12 , 8)
'-------------------------------------------------------------------------------
Locate 9 , 9 'Küche 05
For I = 2 To 4
Dstemp(i) = Dsid5(i)
Next
Dstemp(8) = Dsid5(8)
Call Temp(6)
Call Minmax( "070" , 5 , 9)
'-------------------------------------------------------------------------------
Locate 10 , 9 'Wohnzimmer 02
For I = 2 To 4
Dstemp(i) = Dsid2(i)
Next
Dstemp(8) = Dsid2(8)
Call Temp(5)
Call Minmax( "080" , 2 , 10)
'-------------------------------------------------------------------------------
Locate 11 , 9 'Vorlauf 09
For I = 2 To 4
Dstemp(i) = Dsid9(i)
Next
Dstemp(8) = Dsid9(8)
Call Temp(6)
Call Minmax( "090" , 9 , 11)
'-------------------------------------------------------------------------------
'(
Locate 12 , 9 'Nachlauf
For I = 2 To 4
Dstemp(i) = Dsid10(i)
Next
Dstemp(8) = Dsid10(8)
Temperature
Call Minmax( "100" , 10 , 12)
')
'-------------------------------------------------------------------------------
Locate 13 , 9 'Gisela 08
For I = 2 To 4
Dstemp(i) = Dsid8(i)
Next
Dstemp(8) = Dsid8(8)
Call Temp(6)
Call Minmax( "110" , 8 , 13)
'-------------------------------------------------------------------------------
Locate 14 , 9 'OUT1 11
For I = 2 To 4
Dstemp(i) = Dsid11(i)
Next
Dstemp(8) = Dsid11(8)
Call Temp(6)
If Temp <> 850 Then
Call Ziffer(170 , 103 , 1)
Call Ziffer(188 , 103 , 2)
Call Ziffer(214 , 103 , 3)
End If
Call Minmax( "120" , 11 , 14)
'-------------------------------------------------------------------------------
If First = 2 Then
First = 1
Elseif First = 1 Then
First = 0
Else
Wait 20
End If
If Rset = 1 Then
First = 1
Rset = 0
End If
Loop

End

Light:
Portd.4 = 1
Wait 5
Portd.4 = 0
Return

Rst:
Rset = 1
Return

'------------------------------------------------------------------------------'
' S T A R T T E M P '
'------------------------------------------------------------------------------'
Sub Temp(byval Pin As Byte) ' actual measuring
1wreset Pind , Pin ' reset the bus
1wwrite &H55 , 1 , Pind , Pin
1wwrite Dstemp(1) , 8 , Pind , Pin
1wwrite &H44 , 1 , Pind , Pin ' Convert T
Waitus 750
1wreset Pind , Pin
1wwrite &H55 , 1 , Pind , Pin
1wwrite Dstemp(1) , 8 , Pind , Pin
1wverify Dstemp(1) , Pind , Pin 'Issues the "Match ROM "
If Err = 0 Then
1wwrite &HBE , 1 , Pind , Pin
Sc(1) = 1wread(9 , Pind , Pin) 'read bytes into array
If Sc(9) = Crc8(sc(1) , 8) Then
Temp = Decigrades(sc(9))
If Temp <> 850 Then
Ta = Temp / 10
If Temp < 100 Then Lcd " "
Lcd Fusing(ta , "#.#")
End If
End If
Else
Lcd "Err "
End If
Waitms 500
End Sub


Sub Minmax(byval Id As String * 3 , Byval Nr As Byte , Byval Y1 As Byte)
If Temp <> 850 Then
Print Id ; Temp

If First = 0 Then
If Temp < Minn(nr) Then
Minn(nr) = Temp
End If
If Temp > Maxx(nr) Then
Maxx(nr) = Temp
End If
Else
Maxx(nr) = Temp
Minn(nr) = Temp
End If

Locate Y1 , 15
Ta = Minn(nr) / 10
If Minn(nr) < 100 And Minn(nr) > 0 Then Lcd " "
Lcd Fusing(ta , "#.#")

Locate Y1 , 21
Ta = Maxx(nr) / 10
If Maxx(nr) < 100 And Maxx(nr) > 0 Then Lcd " "
Lcd Fusing(ta , "#.#")
Temp = 850
End If
End Sub

Function Decigrades(byval Sc(9) As Byte)
Decigrades = 0
Decigrades = Makeint(sc(1) , Sc(2))
Decigrades = Decigrades * 10
Decigrades = Decigrades / 16
End Function
'------------------------------------------------------------------------------'
' E N D T E M P '
'------------------------------------------------------------------------------'

Sub Ziffer(byval X As Byte , Byval Y As Byte , Byval Z As Byte)
If Temp < 100 And Temp >= 0 Then
Showpic 170 , Y , Leer
If Z = 1 Then X = 188
If Z = 2 Then X = 214
If Z = 3 Then Exit Sub
End If

If Temp < 0 And Temp > -100 Then
Showpic 170 , 103 , Minus
Else
If Temp < -100 Then
Showpic 152 , 103 , Minus
End If
End If

If Temp < 10 And Temp > -10 Then
Showpic 188 , 103 , Nr0
If Z = 1 Then X = 214
If Z = 2 Then Exit Sub
If Z = 3 Then Exit Sub
If Temp < 0 Then Z = 2
End If

If Temp < -10 And Temp > -100 Then
If Z = 1 Then X = 188
If Z = 2 Then X = 214
If Z = 3 Then Exit Sub
Z = Z + 1
End If

If Temp < -100 Then
Z = Z + 1
Else
Showpic 152 , 103 , Leer
End If

Temp2 = Str(temp)
Temp2 = Mid(temp2 , Z , 1)
Select Case Val(temp2)
Case 0 : Showpic X , Y , Nr0
Case 1 : Showpic X , Y , Nr1
Case 2 : Showpic X , Y , Nr2
Case 3 : Showpic X , Y , Nr3
Case 4 : Showpic X , Y , Nr4
Case 5 : Showpic X , Y , Nr5
Case 6 : Showpic X , Y , Nr6
Case 7 : Showpic X , Y , Nr7
Case 8 : Showpic X , Y , Nr8
Case 9 : Showpic X , Y , Nr9
End Select
End Sub

'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Sub Gettime()
I2cstart 'generate start
I2cwbyte &HA0 'write addres of PCF8583
I2cwbyte 2 'select second register
I2cstart 'generate repeated start
I2cwbyte &HA1 'write address for reading info
I2crbyte S , Ack 'read seconds
I2crbyte M , Ack 'read minuts
I2crbyte H , Ack 'read hours
I2crbyte Yd , Ack 'read year and days
I2crbyte Wm , Nack 'read weekday and month
I2cstop 'generate stop

'Print Bcd(h) ; ":" ; Bcd(m) ; ":" ; Bcd(s)
'Print Bcd(yd) ; " Month : " ; Bcd(wm)
Locate 1 , 32
Lcd Bcd(h) ; ":" ; Bcd(m) ; ":" ; Bcd(s)
'Locate 3 , 1
'Lcd H ; ":" ; M ; ":" ; S
'Locate 5 , 1
'Lcd Bcd(yd) ; " " ; Bcd(wm)
'Locate 7 , 1
'Lcd Yd ; " " ; Wm
End Sub


Sub Settime(s As Byte , M As Byte , H As Byte , D As Byte , Month As Byte)
S = Makebcd(s) 'seconds
M = Makebcd(m) 'minuts
H = Makebcd(h) 'hours
D = Makebcd(d) 'days
Month = Makebcd(month) 'months

I2cstart 'generate start
I2cwbyte &HA0 'write address
I2cwbyte 0 'select control register
I2cwbyte 8 'set year and day bit for masking
I2cstop 'generate stop


I2cstart 'generate start
I2cwbyte &HA0 'write mode
I2cwbyte 2 'select seconds Register
I2cwbyte S 'write seconds
I2cwbyte M 'write minuts
I2cwbyte H 'write hours
I2cwbyte D 'write days
I2cwbyte Month 'write months
I2cstop
End Sub

Timer_irq:
Timer1 = Timervorgabe
Call Gettime()
Return
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------

Nr0:
$bgf "0.bgf"
Nr1:
$bgf "1.bgf"
Nr2:
$bgf "2.bgf"
Nr3:
$bgf "3.bgf"
Nr4:
$bgf "4.bgf"
Nr5:
$bgf "5.bgf"
Nr6:
$bgf "6.bgf"
Nr7:
$bgf "7.bgf"
Nr8:
$bgf "8.bgf"
Nr9:
$bgf "9.bgf"
Nrp:
$bgf "p.bgf"
Nrg:
$bgf "g.bgf"
Nrg2:
$bgf "g2.bgf"
Nrue:
$bgf "ue.bgf"
Leer:
$bgf "leer.bgf"
Minus:
$bgf "minus.bgf"

Marco78
25.11.2005, 20:14
Du kannst das Programm aber hochladen. Das bringt noch viel mehr als nur den Code zu posten.

Am M32 kannst du auch einen Uhrenquarz anschliessen und die Zeit da auslesen und anzeigen lassen.
Allerdings ist es eine Anforderung an die Programmierung. Es klappt nicht, wenn der Timer grade die Zeit ändern will und ein Sensor einen Wert auf's LCD schreiben will. Dann stürzt das LCD ab! Und das ist nicht wörtlich gemeint, sondern wirklich so.

Du müsstest in der Timer-ISR alle Anzeigen realisieren.

zwanzischmark
25.11.2005, 20:18
hm das Problem hab ich eigentlich nicht... das Display läuft Stabil nur bei der Zeit kommen halt nur Fragezeichen

http://www.zwanzischmark.de/temp.jpg

Marco78
25.11.2005, 21:00
hm das Problem hab ich eigentlich nicht...
Kannst du ja auch nicht haben, weil die Zeit nicht durch den Timer des AVR erzeugt wird, sondern ausgelesen wird (IIC) und alles schön der Reihe nach auf's Display geschrieben wird.
By the Way: Selbst ein PC ist nicht wirklich Multitaskfähig!
Der arbeitet auch Befehl für Befehl ab.

Die ? kommen doch sicherlich vom IIC-Bus, oder? Im Code habe ich keine gefunden.
Sehe ich das richtig, das du Timer1 nicht benutzt und als Interrupts (zu denen ich auch Timer und sonstiges zähle) nur INT1 verwendest?

Wo kommt den ?55 her? Ich das nur ein Zeilenüberlauf? Sind 55 evtl die Sekunden?

zwanzischmark
25.11.2005, 21:08
ich verwende Timer 1. Ist nur alles auskommentiert in dem quellcode, weil ich das Testweise wieder rausgeschmissen hab. Ich sollte den mal richtig posten sorry,... so ist das mit den auskommentierten sachen etwas schwierig. Die Fragezeichen kommen vom Prinzip vom IIC, -ja, aber wie gesagt die ersten 2sec in denen keine sensoren abgefragt werden läuft die Uhr. Die 55 kommt denk ich zustande weil er nachdem er in den timer springt die cursorposition ändert und da dann ne Temp hinschreibt.

edit: ich hab jetz ma den ganzen kram rausgemacht der verwirrt

Marco78
25.11.2005, 21:43
Ich kann die ISR für Timer1 garnicht finden.
Wenn ich morgen Abend von der Arbeit komme kopiere ich mir das mal in Bascom. Der ganze Code wäre ja auch nicht verkehrt. Aber wenn du nicht willst.

Was spricht denn gegen den asynchronen Modus des Timers für die Uhr?

zwanzischmark
25.11.2005, 21:50
Das ist der ganze code ;) ich hab nur sachen rausgemacht die einfach noch aus irgendwelchen tests drinen waren.

meinst du mit ISR das hier:

Timer_irq:
Timer1 = Timervorgabe
Call Gettime()
Return


das mit dem asynchronen modus kommt in betracht wenn ich weiss warum das so nicht geht ;)

zwanzischmark
26.11.2005, 10:33
ich hab den fehler gefunden *g* es war tatsächlich ein Teil vom code schuld den ich nicht mehr verwendet hab. Ich hab am anfang einen Port über den IIC läuft auf 1 gesetzt. Da hing mal die beleuchtung dran oder so. Jetzt Funktioniert alles zusammen Problemlos.

Ich müsste nur die cursorposition zwischenspeichern (vom Display zurücklesen) damit er mir nicht immer die Temps hinter die Uhrzeit setzt wenn die Uhr ausgelesen wird. Werd ich mal schauen wie das geht, aber wenns grad einer weiss bitte posten :)
achja und zweidimensionale Arrays gibts in Bascom nicht oder?