PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Programm



trinity4711
31.07.2007, 11:39
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
config clock = soft aufrufe. Um es besser zu verdeutlichen ist hier der Code.
Warum ????


$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.

$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
config clock = softauch 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

for_ro
31.07.2007, 15:23
Hi,
ich denke, du hast wohl keinen externen Quarz für die Uhr an TOSC1 und TOSC2 dran, weil du Anschlüsse dafür (PC.6 und PC.7) fürs Display verwendest. Das wird nicht gehen.

Gruß

Rolf

Vitis
31.07.2007, 16:30
normalen Timer0, Timer1 oder Timer2 verwenden
und halt Langzeitkorrekturwert ermitteln.
Für Clock = soft brauchts n Uhrenquarz

trinity4711
01.08.2007, 10:42
danke für eure Antwort: Man sollte sich halt etwas intensiver mit der Materie befassen, dann passieren nicht solche Fehler.

gruss trinity4711

for_ro
01.08.2007, 11:12
Wenn die Anschlüsse PC.2 und PC.3 noch frei sind, würde ich die LCD Pin DB6 und DB7 da drauf legen und dann einen kleinen Uhrenquarz mit 32768 Hz an PC.6 und PC.7 anschließen. Die kriegst für ein paar Cent oder aus irgendeinem alten Kleingerät mit Uhr drin. Z.B. alte Digital Armbanduhr, Taschenrechner mit Uhr usw.
Dann kannst du die ganzen in Bascom verfügbaren Date-Time Fkten benutzen und musst die nicht selber programmieren.

Gruß Rolf