-         

Ergebnis 1 bis 8 von 8

Thema: Countdown für Platinenbelichter =P~

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    02.10.2007
    Ort
    Saalfeld
    Alter
    29
    Beiträge
    78

    Countdown für Platinenbelichter =P~

    Anzeige

    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 : )

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    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:

    Code:
    $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

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    02.10.2007
    Ort
    Saalfeld
    Alter
    29
    Beiträge
    78
    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öö^^

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    das hab ich woll nicht ganz erklärt

    der 'timer bzw. countdown, uhr' ist im mainloop, da steht

    Code:
    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

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    23.04.2007
    Ort
    stuttgart
    Beiträge
    1.127
    hab sowas auch gebaut siehe hier:
    http://www.roboternetz.de/phpBB2/zei...716&highlight=
    der wird mit 4 tasten gestuert, sekunden / minuten +/- beie + tasten drücken start.
    wenn du willst kann ich dir den code geben...
    meine projekte: robotik.dyyyh

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.01.2007
    Ort
    westliches Pannonien
    Beiträge
    123
    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

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    23.04.2007
    Ort
    stuttgart
    Beiträge
    1.127
    bin nciht sicher ob das so alles stimmt, weil ich die letzte version nciht finde, aber so grob sollte es stimmen...

    Code:
     $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
    meine projekte: robotik.dyyyh

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.01.2007
    Ort
    westliches Pannonien
    Beiträge
    123
    @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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •