Archiv verlassen und diese Seite im Standarddesign anzeigen : Countdown für Platinenbelichter =P~
Inkoknito
17.09.2008, 21:11
hallo,
ich habe vor einen Platinenbelichter zu bauen. Dazu will ich über ein Display die zeit einstellen können, entweder über ein Poti oder ein drehencoder (würde mir am besten gefallen) der pro takt eine sekunde macht) oder 2 taster.
hab auch schon mal im Forum und im inet nachgeschaut und gelesen aber so richtig komm ich nich drauf wie ich das angehen soll.
vieleicht kann mir einer, einen Gedankenanstoß gebn, so einen kleinen nur : ) man will ja auch selber was lernen^^
zu auswahls stehen quarze mit 4, 8, 12 Mhz.
besten dank schon mal : ) ](*,) ](*,) ](*,)
Che Guevara
17.09.2008, 21:40
hallo inkoknito ;-)
also mit einem drehencoder kenne ich mich persönlich leider nicht sehr gut aus :-(
ich kann dir die bedinung via 2 taster beschreiben:
es gibt dafür im prinzip zwei möglichkeiten:
1. du hängst beide taster an einen externen interrupt (gegen gnd). diese sollten aber entprellt sein, egal welche möglichkeit du wählst! wenn t1 eins gedrückt ist, springt das prog aus der hauptschleife in die interrupt-routine und darin kannst du dann einstellen, um wieviel secunden deine zeit verlängert/verkürtzt werden soll. hier mal ein kleines beispiel:
$regfile = "......."
$crystal = "......"
config pina.0 = output
config pina.1 = input
porta.1 = 1
porta.0 = 0
config lcd = x * y
config lcdpin = .......
config lcdbus = ....
initlcd
cls
locate 1 , 1
lcd "Belichtungscountdown"
wait 1
cls
enable int0
enable int1
enable interrupts
config int0 = falling
config int1 = falling
on int0 isr_von_int0
on int1 isr_von_int1
dim t as word
t = xy 'voreinstellen der 'normalen' laufzeit
do
if pina.1 = 0 then
porta.0 = 1 'beliechtungsgerät
wait t
porta.0 = 0
cls
locate 1 , 1
lcd "Belichtung beendet!"
wait 1
cls
else
locate 1 , 1
lcd "Bitte Starten Sie das Programm zum belichten!!"
endif
loop
end
isr_von_int0:
t = t + 1 'erhöhen des wertes um 1
return
isr_von_int1:
t = t - 1 'erniedriegen (!!) des wertes um 1
return
ich hoffe, das prog hilft dir ein wenig weiter.
welchen quarz du verwendest, spielt hier keine große rolle, allerdings würde ich den kleinsten verwenden, da dieser nicht so viel strom verbraucht als ein größerer.
2. die zweite möglichkeit ist, die taster einfach im hauptprogramm abzufragen und dann den zeitwert (t) zu erhöhen/ernidriegen.
anschließend kann das eig prog gestartet werden.
allerdings hat die 1. methode hier einen vorteil:
man kann den wert auch noch während der belichtung verändern, was bei der 2. möglichkeit nicht mehr geht.....
falls du noch eine frage hast (oder du ein codebeispiel der 2. methode möchtest), helfe ich dir gerne weiter.
ich hoffe, ich habe dir jetzt nicht die ganze arbeit abgenommen, da du ja auch etwas dabei lernen sollst/willst ;-)
gruß
chris
Inkoknito
17.09.2008, 21:44
cool danke das hilft mir schon sehr viel weiter : )
nur kruz ne frage zum Program, wo verbirgt sicht jetzt der eigentlich timer bzw Countdown, uhr?
das seh ich nich ganz. und ne start taste oder so?
mfg dangöö^^
Che Guevara
17.09.2008, 21:55
das hab ich woll nicht ganz erklärt :-)
der 'timer bzw. countdown, uhr' ist im mainloop, da steht
if pina.1 = 0 then
porta.0 = 1 'beliechtungsgerät
wait t
porta.0 = 0
cls
locate 1 , 1
lcd "Belichtung beendet!"
wait 1
cls
else
locate 1 , 1
lcd "Bitte Starten Sie das Programm zum belichten!!"
endif
das if pina.1 = 0 then schaltet (wenn pina.1 auf gnd gezogen wird) die beleuchtung ein (diese hängt an porta.0). dann wird t secunden lang gewartet, um dann die beleuchtung wieder auszuschalten. t wird in den zwei routinen der interrupts verändert.
das ganze ist allerdings nicht sooo genau (bei insgesamt 10 minuten beleuchtungsdauer gibt es etwa eine abweichung von einer halben minute). wenn du es genauer haben willst, dann schreib ich dir morgen noch mal was anderes, aber jetzt muss ich jetzt dann pennen, morgen hab ich schule :-(
nochwas:
in den routinen von int0 und int1 steht
t = t + 1
bzw.
t = t - 1
da muss stehen:
t = t + 30
bwz.
t = t - 30
damit kann man die zeit im halbe minuten schritt verändern. ich hoffe, das reicht dir, kann man aber ganz leicht ändern.
gruß
chris
hab sowas auch gebaut siehe hier:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=39716&highlight=
der wird mit 4 tasten gestuert, sekunden / minuten +/- beie + tasten drücken start.
wenn du willst kann ich dir den code geben...
Hallo!
@goara!
Setz mich seit kürzerem mit µC's auseinander. Da ich leider keine
Vorkenntnisse im Programmieren habe, wäre es nett, wenn Du mir Deinen
Code zukommen lassen könntest. Versuche so gut es eben geht, aus
diversen Codeteilen zu lernen wie man es richtig angeht.
Vielen Dank
Rone
bin nciht sicher ob das so alles stimmt, weil ich die letzte version nciht finde, aber so grob sollte es stimmen...
$regfile = "m8def.dat"
$crystal = 8000000
'-----LCD-----
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
'----Ports----
Config Pinb.1 = Output
Uv Alias Portb.1
Config Pinb.0 = Input
Config Pind.7 = Input
Config Pind.6 = Input
Config Pind.5 = Input
Minplus Alias Portb.0
Secplus Alias Portd.7
Minminus Alias Portd.6
Secminus Alias Portd.5
'-----VAR-----
Dim Bel_min As Integer
Dim Bel_sec As Integer
Dim Rest_min As Byte
Dim Rest_sec As Byte
Dim Start_uv As Bit
'-----Subs-----
Declare Sub Zeile1
Declare Sub Zeile2
Cls
Locate 1 , 1
Lcd "Hallo :)"
Wait 1
Bel_min = 0
Bel_sec = 0
Rest_min = 0
Rest_sec = 0
Start_uv = 0
Do
If Start_uv = 0 Then ' Einstellmodus
If Pinb.0 = 0 Then
Incr Bel_min
End If
If Pind.7 = 0 And Pind.5 = 1 Then
Incr Bel_sec
End If
If Pind.6 = 0 Then
Decr Bel_min
End If
If Pind.5 = 0 And Pind.6 = 1 Then
Decr Bel_sec
End If
If Bel_min < 0 Then 'überlauf
Bel_min = 0
End If
If Bel_sec < 0 Then
Bel_sec = 0
End If
If Bel_min >= 60 Then 'überlauf
Bel_min = 0
End If
If Bel_sec >= 60 Then
Bel_sec = 0
End If
Waitms 200
Zeile1
End If
If Pind.7 = 0 And Pind.5 = 0 Then ' Starten Stoppen
If Start_uv = 0 Then
Start_uv = 1
Rest_sec = Bel_sec
Rest_min = Bel_min
Else
Start_uv = 0
End If
End If
If Start_uv = 1 Then
Uv = 1
If Rest_sec = 0 Then
If Rest_min > 0 Then
Decr Rest_min
Rest_sec = 60
end if
if Rest_min = 0 Then
Uv = 0
Start_uv = 0
Locate 2 , 1
Lcd "*Fertig*"
end if
End If
Wait 1
Decr Rest_sec
Zeile2
End If
Loop
Sub Zeile1
Locate 1 , 1
If Bel_min < 10 Then
If Bel_sec < 10 Then
Lcd "Tg=0" ; Bel_min ; ":0" ; Bel_sec
Else
Lcd "Tg=0" ; Bel_min ; ":" ; Bel_sec
End If
Else
If Bel_sec < 10 Then
Lcd "Tg=" ; Bel_min ; ":0" ; Bel_sec
Else
Lcd "Tg=" ; Bel_min ; ":" ; Bel_sec
End If
End If
End Sub
Sub Zeile2
Locate 2 , 1
If Rest_min < 10 Then
If Rest_sec < 10 Then
Lcd "Tr=0" ; Rest_min ; ":0" ; Rest_sec
Else
Lcd "Tr=0" ; Rest_min ; ":" ; Rest_sec
End If
Else
If Rest_sec < 10 Then
Lcd "Tr=" ; Rest_min ; ":0" ; Rest_sec
Else
Lcd "Tr=" ; Rest_min ; ":" ; Rest_sec
End If
End If
End Sub
@goara!
Vielen Dank für den Code.
Wenn denn Fehler drin sind machts auch nichts. Beim Fehler ausbügeln
kann man ja auch eine Menge lernen. Aber wie schon gesagt, mir geht's
eher um das Konzept.
Danke nochmal
MfG
Rone
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.