Hallo zusammen,
ich versuche seit Tagen (und Nächten) mein Programm für meine Terrarium/Kuehlraum-Steuerung zu schreiben. Nach dem ich keine Fehlermeldungen mehr hatte, programmierte ich meinen mega32. Doch dann...........
Nichts passierte. Ich vermutet das das Programm sich aufhängt und zwar wenn ich die Routine
Code:
config clock = soft
aufrufe. Um es besser zu verdeutlichen ist hier der Code.
[schild=standard fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]Warum ????[/schild]
Code:
$regfile = "M32def.dat"
$crystal = 8000000
Ddrb = &B10111000
Config Portb.5 = Output
Config Portb.6 = Input
Config Portb.7 = Output
Config Portd = Input
Ddrd = &B11111111
Portb = &B11111111
Config Portc = Output
Ddra = 00000000
Porta = 255
Dim Tage As Byte
Dim Count As Byte
Dim Stunden As Byte
Dim Abtau_status As Byte
Dim Tag_str As String * 10
Dim Plus As Byte
Dim Minus As Byte
Dim Uhrzeit(10) As Byte 'enthält die uhrzeit und das datum vorteil kann leicht erweitert werden.
Dim Abtau_std As Byte
Dim Abtau_min As Byte
Dim Uhrzeit_std As String * 2
Dim Uhrzeit_min As String * 2
Dim Uhrzeit_save(10) As Eram Byte At &H10
Dim Abtau_status_save As Eram Byte At &H01
Dim Minute As Byte
Dim Sekunde As Byte
Dim Licht As Bit
Dim W As Word
Dim V_alt As Single
Dim Temperatur_bit As Bit
Dim Abtau_bit As Bit
Dim Klima As Bit
Dim Relais_aus As Byte
Dim S1 As Bit
'Const Refer = 1.1593
Deflcdchar 0 , 4 , 4 , 14 , 31 , 4 , 4 , 4 , 4 ' replace ? with number (0-7)
Deflcdchar 1 , 31 , 21 , 21 , 31 , 4 , 21 , 21 , 31 ' replace ? with number (0-7)Deflcdchar 1 , 32 , 32 , 4 , 14 , 21 , 4 , 4 , 4 ' replace ? with number (0-7)
Deflcdchar 2 , 4 , 10 , 10 , 31 , 31 , 31 , 14 , 4
Deflcdchar 3 , 4 , 14 , 14 , 31 , 32 , 32 , 32 , 32 ' replace ? with number (0-7)Deflcdchar 3 , 4 , 14 , 14 , 31 , 31 , 32 , 32 , 32 ' replace ? with number (0-7)
Deflcdchar 4 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 '° Zeichen
Cls
Config Lcd = 16 * 4 , Chipset = Ks077
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.1 , Rs = Portc.0
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'Einzelmessung und Referenzspannung 5 Volt
Initlcd
Wait 1
Initlcd
Enable Interrupts
Start Adc
'Abhier geht nix mehr !!!!!!!!!!
Config Date = Dmy , Separator = / ' Deutsches-Format
Config Clock = Soft '
'Das Format ist: Tag/Monat/Jahr
Date$ = "18/04/07"
Time$ = "00:00:00"
Cursor Off Noblink
For Count = 1 To 4
Uhrzeit(count) = Uhrzeit_save(count) 'nach stromausfall wecker zurückspeichern
Next Count
Abtau_status = Abtau_status_save
Uhrzeit_std = Str(uhrzeit(1)) + Str(uhrzeit(2)) 'wandelt zahl in string um und packt 2 zahlen in eine speicherstelle
Uhrzeit_min = Str(uhrzeit(3)) + Str(uhrzeit(4)) ' 00000001+ 00000010 = 0000000100000010 ----> "12 "
Abtau_std = Val(uhrzeit_std)
Abtau_min = Val(uhrzeit_min)
'Licht = 1
Cls
Set Temperatur_bit
Gosub Temperatur
'Set Portb.7
'####################################
Do
Gosub Tastenabfrage
Gosub Page
'If _sec = 10 Or _sec = 50 Then
Set Temperatur_bit 'Hauptroutine
Gosub Temperatur
'End If
Gosub Displaylicht
Wenn ich aber folgende Zeilen kompiliere habe ich eine Anzeige im LC-Display und kann
auch über die Tastaur Einstellungen vornehmen.
Code:
$regfile = "M32def.dat"
$crystal = 8000000
'Config Portc = Output
'Config Portd = Input
'Config Portg = Input
'Portg.0 = 1
'Config Portc = Output
'Config Portd = Output
'Ddrd = 00000100
'Porta = 255
Dim Count As Byte
Dim Stunden As Byte
Dim Temp As Byte
Dim Tag As Byte
Dim Tag_str As String * 2
Dim Plus As Byte
Dim Minus As Byte
Dim Uhrzeit(10) As Byte 'enthält die uhrzeit und das datum vorteil kann leicht erweitert werden.
Dim Uhr_help As Byte
Dim Uhrzeit_std As String * 2
Dim Uhrzeit_min As String * 2
Dim Tag_datum As String * 2
Dim Monat As String * 2
Dim Jahr As String * 2
'Enable Interrupts
'LC-Display initalisieren
Config Lcd = 20 * 4
Config Lcdmode = Port
Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.1 , Rs = Portc.0
'Config Lcdmode = Bus
Initlcd
'Wait 1
'Initlcd
Cursor Off
Cls
'Config Date = Dmy , Separator = . ' Deutsches-Format
'Config Clock = Soft '
'
'Date$ = "18/04/07"
'Time$ = "00:00:00"
Do
Gosub Page
Gosub Tastenabfrage 'Hauptprogramm
Loop
End
Tag:
'Tag = Dayofweek()
Select Case Tag
Case 0 : Tag_str = "Mo" 'Die softclock liefert nur zahlen von
Case 1 : Tag_str = "Di" 'zahlen von 0-6 dewswegen muss
Case 2 : Tag_str = "Mi" 'die zahl in einem string gewandelt werden
Case 3 : Tag_str = "Do"
Case 4 : Tag_str = "Fr"
Case 5 : Tag_str = "Sa"
Case 6 : Tag_str = "So"
End Select
Return
Config Debounce = 50
Tastenabfrage:
Debounce Pind.3 , 0 , Taste_rechts , Sub
Return
'##########################################
Uhrstellen:
Debounce Pind.5 , 0 , Tasteplus , Sub
Debounce Pind.6 , 0 , Tasteminus , Sub
Debounce Pind.3 , 0 , Taste_rechts_uhr , Sub
Debounce Pind.7 , 0 , Taste_links , Sub
Debounce Pind.4 , 0 , Enter_raus , Sub
Return
'----------------------------------------
Tasteplus:
If Plus = 1 Then Incr Uhrzeit(1)
If Plus = 2 Then Incr Uhrzeit(2)
If Plus = 3 Then Incr Uhrzeit(3)
If Plus = 4 Then Incr Uhrzeit(4)
If Plus = 5 Then Incr Uhrzeit(5)
If Plus = 6 Then Incr Uhrzeit(6)
If Plus = 7 Then Incr Uhrzeit(7)
If Plus = 8 Then Incr Uhrzeit(8)
If Plus = 9 Then Incr Uhrzeit(9)
If Plus = 10 Then Incr Uhrzeit(10)
If Uhrzeit(1) > 2 Then Uhrzeit(1) = 0
If Uhrzeit(2) > 9 Then Uhrzeit(2) = 0
If Uhrzeit(3) > 5 Then Uhrzeit(3) = 0
If Uhrzeit(4) > 9 Then Uhrzeit(4) = 0
If Uhrzeit(5) > 3 Then Uhrzeit(5) = 0
If Uhrzeit(6) > 9 Then Uhrzeit(6) = 0
If Uhrzeit(7) > 1 Then Uhrzeit(7) = 0
If Uhrzeit(8) > 9 Then Uhrzeit(8) = 0
If Uhrzeit(9) > 9 Then Uhrzeit(9) = 0
If Uhrzeit(10) > 9 Then Uhrzeit(10) = 0
Return
'-----------------------------
Tasteminus:
If Plus = 1 Then Decr Uhrzeit(1)
If Plus = 2 Then Decr Uhrzeit(2)
If Plus = 3 Then Decr Uhrzeit(3)
If Plus = 4 Then Decr Uhrzeit(4)
If Plus = 5 Then Decr Uhrzeit(5)
If Plus = 6 Then Decr Uhrzeit(6)
If Plus = 7 Then Decr Uhrzeit(7)
If Plus = 8 Then Decr Uhrzeit(8)
If Plus = 9 Then Decr Uhrzeit(9)
If Plus = 10 Then Decr Uhrzeit(10)
If Uhrzeit(1) > 2 Then Uhrzeit(1) = 2
If Uhrzeit(2) > 9 Then Uhrzeit(2) = 9
If Uhrzeit(3) > 5 Then Uhrzeit(3) = 5
If Uhrzeit(4) > 9 Then Uhrzeit(4) = 9
If Uhrzeit(5) > 3 Then Uhrzeit(5) = 3
If Uhrzeit(6) > 9 Then Uhrzeit(6) = 9
If Uhrzeit(7) > 1 Then Uhrzeit(7) = 0
If Uhrzeit(8) > 9 Then Uhrzeit(8) = 0
If Uhrzeit(9) > 9 Then Uhrzeit(9) = 0
If Uhrzeit(10) > 9 Then Uhrzeit(10) = 0
Return
'-----------------
Taste_rechts:
Cursor On Noblink
Cls
Plus = 1
Locate 1 , 8
Lcd "--:--"
Locate 2 , 8
Lcd "00/00/07"
Locate 1 , 8
Do
Gosub Uhrstellen
Select Case Plus
Case 1 : Locate 1 , 8
Lcd Uhrzeit(1)
Locate 1 , 8
Case 2 : Locate 1 , 9
Lcd Uhrzeit(2)
Locate 1 , 9
Case 3 : Locate 1 , 11
Lcd Uhrzeit(3)
Locate 1 , 11
Case 4 : Locate 1 , 12
Lcd Uhrzeit(4)
Locate 1 , 12
Case 5 : Locate 2 , 8
Lcd Uhrzeit(5)
Locate 2 , 8
Case 6 : Locate 2 , 9
Lcd Uhrzeit(6)
Locate 2 , 9
Case 7 : Locate 2 , 11
Lcd Uhrzeit(7)
Locate 2 , 11
Case 8 : Locate 2 , 12
Lcd Uhrzeit(8)
Locate 2 , 12
Case 9 : Locate 2 , 14
Lcd Uhrzeit(9)
Locate 2 , 14
Case 10 : Locate 2 , 15
Lcd Uhrzeit(10)
Locate 2 , 15
End Select
Loop Until Pind.3 = 0
Uhrzeit_std = Str(uhrzeit(1)) + Str(uhrzeit(2)) 'wandelt zahl in string um und packt 2 zahlen in eine speicherstelle
Uhrzeit_min = Str(uhrzeit(3)) + Str(uhrzeit(4)) ' 00000001+ 00000010 = 0000000100000010 ----> "12 "
Tag_datum = Str(uhrzeit(5)) + Str(uhrzeit(6))
Monat = Str(uhrzeit(7)) + Str(uhrzeit(8))
Jahr = Str(uhrzeit(9)) + Str(uhrzeit(10))
'_hour = Val(uhrzeit_std )
'_min = Val(uhrzeit_min) 'umwanden vom string in eine zahle und übergabe an die uhr internen variablen.
'_day = Val(tag_datum)
'_month = Val(monat)
'_year = Val(jahr)
'_sec = 00
Cls
Return
'-----------------------------
Taste_links:
Decr Plus
If Plus > 10 Then Plus = 10
Return
'------------------------------
Enter:
Return
'------------------------
Enter_raus:
Return
Taste_rechts_uhr:
Incr Plus
If Plus > 10 Then Plus = 1
Return
'############# und so weiter...........
Da ich aber eine Uhr brauche habe ich die Frage, ob ich den Befehl
Code:
config clock = soft
auch anders programmieren kann ???
Vielleicht sollte ich noch erwähnen das ich ein vierzeiliges Display mit einem SED1278 Kontroller benutzte; soll HD44780 kompatibel sein.
Wäre dankbar, wenn mir jemand helfen könnte.
Gruss trinity4711
Lesezeichen