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 Routineaufrufe. Um es besser zu verdeutlichen ist hier der Code.Code:config clock = soft
[schild=standard fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]Warum ????[/schild]
Wenn ich aber folgende Zeilen kompiliere habe ich eine Anzeige im LC-Display und kannCode:$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
auch über die Tastaur Einstellungen vornehmen.
Da ich aber eine Uhr brauche habe ich die Frage, ob ich den BefehlCode:$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...........auch anders programmieren kann ???Code:config clock = soft
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








Zitieren


Lesezeichen