Hallo Freunde der hohen Programmierkunst,
nach krankheitsbedingter längerer Enthaltsamkeit vonPc und Lötkolben greife ich jetzt wieder an. Natürlich mit einem Problem!!
Da mein UV Belichter durch jahrelangen Nichtgebrauch irgendwohin diffundiert ist, eine neuer einiges kostet, habe ich mich zum Selbstbau mittels 300 UV-LEDs (bei ebay für sehr kleines Geld zu bekommen) entschieden.
Hardware ist fertig und funktioniert. (Wenn Intersse besteht kann ich Schaltung un Layout zur Verfügung stellen). Die Software läuft auch und macht fast alles was sie soll, nur nicht auf Knopfdruck starten.
Die Idee: Über zwei Taster wird die Belichtungszeit eingestellt und durch einen weiteren Tastendruck der Countdown und über Relais die Beleuchtung gestartet. Den Zeitverlauf kann man über eine 7-Seg Anzeige verfolgen.
Nach Ablauf der Zeit stoppt der Timer und die Relais schalten erneut. (Mehrere Relais, da ich ein dreiteiliges Netzteil gebaut habe mit drei äquivalenten Ausgängen)
Zeit kann ich stellen, den Countdown starten nicht
Vielleicht kann mal jemand von euch drüberschauen. Ist mit Sicherheit ein saublöder Fehler (sind Fehler nicht immer saublöd??), aber ich steh völlig auf dem Schlauch.
Vorerst schon mal vielen Dank
Gerd
nach krankheitsbedingter längerer Enthaltsamkeit vonPc und Lötkolben greife ich jetzt wieder an. Natürlich mit einem Problem!!
Da mein UV Belichter durch jahrelangen Nichtgebrauch irgendwohin diffundiert ist, eine neuer einiges kostet, habe ich mich zum Selbstbau mittels 300 UV-LEDs (bei ebay für sehr kleines Geld zu bekommen) entschieden.
Hardware ist fertig und funktioniert. (Wenn Intersse besteht kann ich Schaltung un Layout zur Verfügung stellen). Die Software läuft auch und macht fast alles was sie soll, nur nicht auf Knopfdruck starten.
Die Idee: Über zwei Taster wird die Belichtungszeit eingestellt und durch einen weiteren Tastendruck der Countdown und über Relais die Beleuchtung gestartet. Den Zeitverlauf kann man über eine 7-Seg Anzeige verfolgen.
Nach Ablauf der Zeit stoppt der Timer und die Relais schalten erneut. (Mehrere Relais, da ich ein dreiteiliges Netzteil gebaut habe mit drei äquivalenten Ausgängen)
Zeit kann ich stellen, den Countdown starten nicht
Code:
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
Ddrd = &B01111111
Ddrb = &B11111111
Ddrc = &B00000111
Config Portb = Output
Config Portc.0 = Output
Relais1 Alias Portc.0
Relais1 = 0
Config Portc.1 = Output
Relais2 Alias Portc.1
Relais2 = 0
Config Portc.2 = Output
Relais3 Alias Portc.2
Relais3 = 0
Config Pinc.3 = Input
Portc.3 = 1
Taster_sekundenstellen Alias Pinc.3
Config Pinc.4 = Input
Portc.4 = 1
Taster_minutenstellen Alias Pinc.4
Config Pinc.5 = Input
Portc.5 = 1
Taster_start Alias Pinc.5
Config Pind.7 = Output
Led Alias Portd.7
'Sekundentakt erzeugen
On Timer1 Ontimer1
Config Timer1 = Timer , Prescale = 256 '1Hz
Tcnt1 = 34286
Enable Timer1
Stop Timer1
'Multiplexfrequenz erzeugen
On Timer0 Ontimer0
Config Timer0 = Timer , Prescale = 64
Enable Timer0
Tcnt0 = 224
Enable Interrupts
Dim Wert As Byte
Dim Multiplex As Word
Dim Sek_einer As Byte
Sek_einer = 5 'Testeinstellung
Dim Sek_zehner As Byte
Sek_zehner = 2 'Testeinstellung
Dim Min_einer As Byte
Min_einer = 2 'Testeinstellung
Dim Min_zehner As Byte
Min_zehner = 1 'Testeinstellung
multiplex =1
'Main
Do
Debounce Taster_sekundenstellen , 0 , Sekunden_stellen , Sub
Debounce Taster_minutenstellen , 0 , Minuten_stellen , Sub
Debounce Taster_start , 0 , Los , Sub
Loop
Ontimer1:
Tcnt1 = 34286
Toggle Led
If Sek_einer > 0 Then
Decr Sek_einer
Else
If Sek_zehner > 0 Then
Decr Sek_zehner
Sek_einer = 9
Else
If Min_einer > 0 Then
Decr Min_einer
Sek_zehner = 5
Sek_einer = 9
Else
If Min_zehner > 0 Then
Decr Min_zehner
Min_einer = 9
End If
End If
End If
End If
' -------------------Uhr ist auf Null gelaufen-----------------
'
If Sek_einer = 0 And Sek_zehner = 0 And Min_einer = 0 And Min_zehner = 0 Then
Stop Timer1
Relais1 = 1 : Relais2 = 1 : Relais3 = 1
End If
Return
'-----------------Interrupt-Routinen -----------------------------
Ontimer0:
Tcnt0 = 224
'Hier wird die Umschaltsequenz (Multiplexen) erzeugt!
Multiplex = Multiplex * 2 '1,2,4,8,
If Multiplex = 16 Then Multiplex = 1
Portd = &B00000000 'Alle Segmente vor dem Umschalten ausschalten
Portb = Multiplex
If Multiplex = 1 Then Wert = Sek_einer 'Ab hier erfolgt die Zuordnung von Anzeige und Wert
If Multiplex = 2 Then Wert = Sek_zehner
If Multiplex = 4 Then Wert = Min_einer
If Multiplex = 8 Then Wert = Min_zehner
'Hier erfolgt die die Auswahl (Dekodierung) welche Segmente leuchten sollen
Select Case Wert
Case 0
Portd = &B00111111 '0
Case 1
Portd = &B00000110 '1
Case 2
Portd = &B01011011 '2
Case 3
Portd = &B01001111 '3
Case 4
Portd = &B01100110 '4
Case 5
Portd = &B01101101 '5
Case 6
Portd = &B01111101 '6
Case 7
Portd = &B00000111 '7
Case 8
Portd = &B01111111 '8
Case 9
Portd = &B01101111 '9
Case Else
Portd = &B00000000 'Anzeige dunkel schalten
End Select
Return
'------------------Stell-Routine für Sekunden------------
Sekunden_stellen:
Incr Sek_einer
If Sek_einer = 10 Then
Sek_einer = 0
Sek_zehner = Sek_zehner + 1
If Sek_zehner = 6 Then
Sek_zehner = 0
End If
End If
Return
'------------------Stell-Routine für Minuten------------
Minuten_stellen:
Incr Min_einer
If Min_einer = 10 Then
Min_einer = 0
Min_zehner = Min_zehner + 1
If Min_zehner = 6 Then
Min_zehner = 0
End If
End If
Return
'-----------------Start Countdown---------------
Los:
Relais1 = 0 : Relais2 = 0 : Relais3 = 0
Start Timer1
Return
Return
Vielleicht kann mal jemand von euch drüberschauen. Ist mit Sicherheit ein saublöder Fehler (sind Fehler nicht immer saublöd??), aber ich steh völlig auf dem Schlauch.
Vorerst schon mal vielen Dank
Gerd