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