- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Mit Taster einen Timer starten ?

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Du kannst mit dem Programm ja Sekunden zählen und in der Routine die Sekunden bis 60 hochzählen lassen. Bis 60 Erreicht ist dann die LED leuchten lassen.
    Nach 60 Sekunden halt ausschalten.
    Du kannst ja durch erneutes drücken des Tasters die Sekunden wieder auf 0 setzen.
    Jetzt einen Code zu geben (der auch für alle anderen passt, die sowas in der Art machen wollen) ist schwer, ohne zu wissen, was das Programm evtl sonst noch können soll.


    $regfile = "m16def.dat"
    $crystal = 3686400

    Config Timer1 = Timer, Prescale = 64

    Config Pinc.2 = Output
    Led3 Alias Portc.2

    On Timer1 Timer_irq

    Const Timervorgabe = 7936

    Dim Sekunden as Byte

    Enable Timer1
    Enable Interrupts

    Do
    If Sekunden <60 then Set LED3
    Reset LED3
    Loop


    Timer_irq:
    Timer1 = Timervorgabe
    Incr Sekunden
    Return

    Das Programm sollte bei 3,86MHz wie du sie auch hattest nach dem Start eine Minute die LED leuchten lassen.

    If PIND.2 = 0 Then Enable Timer1

    würde den Timer erst starten wenn der Taster gedrückt wurde. Allerdings musst du die Zeile vorher im Code wo er schon gestartet wird entfernen.

    Soviel muss als Hilfestellung reichen. Mehr geht nur wenn man genau weiss, was das Programm machen soll. Der Taster wird ja auchnicht dauerhaft abgefragt wenn das Programm größer ist. Evtl ist ein Interrupt notwendig. Aber ohne es genau zu wissen muss dir das zum üben erstmal reichen.

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    03.10.2004
    Alter
    57
    Beiträge
    50
    Danke

    Für dein Script.
    Werde es heute Abend testen und weiters schreiben.

    mfg

    Enterprise

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    03.10.2004
    Alter
    57
    Beiträge
    50
    Der Timer ist spitze.
    Habe nun das Script etwas verändert.
    Ich möchte mit dem drücken des Taster auf Pind.5 die Minute Starten
    um die LED zum leuten bringen.
    Nach der Minute kann ich die Taste drücken so oft ich will das Programm wird nicht mehr gestartet.
    Was muss ich im Script ändern.
    Dass ich wieder die Minute starten kann.

    Code:
    '###########################################################################
    
    $regfile = "m8def.dat"
    $crystal = 3686000
    Declare Sub Tastendruck
    
    Config Timer1 = Timer , Prescale = 64
    
    Ddrd = &B01000000
    Portd.5 = 1
    
    
    Config Pinc.2 = Output
    Led3 Alias Portc.2
    
    
    Config Pinc.3 = Output
    Led4 Alias Portc.3
    
    On Timer1 Timer_irq
    
    Const Timervorgabe = 7936
    
    Enable Timer1
    Enable Interrupts
    Dim Sekunden As Byte
    
    '---------------------------------------------------------------------------
    
    Do
    
      Debounce Pind.5 , 0 , Tastendruck , Sub
    
    
    Loop
    
    
    '---------------------------------------------------------------------------
    
    Timer_irq:
    
      Timer1 = Timervorgabe
    
       Toggle Led3
    
       Incr Sekunden
    
       Return
    
    '--------------------------------------------------------------------------
    Sub Tastendruck
    
    '  Portd.6 = Not Portd.6
    
      Do
       If Sekunden < 60 Then Set Led4
          Reset Led4
      Loop
    
    End Sub
    
      End
    mfg

    Enterprise

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    Der Timer bringt deine LED3 ans blinken und zählt den Wert für Sekunden hoch.

    Deine Routinen für die Tasten schaltet LED4, allerdings nicht sehr sinnvoll.

    Wenn Sekunden < 60 wird LED4 gesetzt und sofort wieder zurückgesetzt.
    Da Sekunden eine Byte-Variable ist, und in deinem Programm immer nur hochgezählt wird, läuft sie bei 256 über.

    Dein Taster wird zwar in einer Endlosschleife abgefragt, sobald du ihn drückst, springt die Routine aber in eine andere Endlosschleife die deine LED4 einige tausend mal pro Sekunde ein- und wieder ausschaltet. So schnell kann kein Mensch gucken.
    Dein Taster wird danach gar nicht mehr abgefragt, ist also egal wie oft du da drauf rumdrückst.

    Insgesamt ergibt das Ganze für mich recht wenig Sinn.

    Was muss ich im Script ändern.
    Ich befürchte fast alles. Erst mal ein bischen Basic lernen wäre dafür bestimmt recht hilfreich. Guck dir z.B. mal in der Bascom-Hilfe die Befehle Do, Loop, Sub, Return usw. an.

    Wenn du in deinem Programm in eine Unterroutine verzweigst, sollte es in der Regel irgendwann aus dieser wieder zurückkommen.
    Das "End SUB" in deiner Routine Tastendruck wird aber gar nicht erreicht, weil davor ein "Loop" steht und die Routine daher zum "Do" darüber zurückspringt.

    Ist nicht böse gemeint, aber ich glaube, wenn dir jemand das fertige Programm postet nutzt dir daas wenig. Versuch lieber erst mal zu verstehen, was in deinem Programm passiert und probier selber ein bischen rum.

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Nach der Minute kann ich die Taste drücken so oft ich will das Programm wird nicht mehr gestartet.
    Was muss ich im Script ändern.
    Dass ich wieder die Minute starten kann.
    Wunderbar, es hat geklappt. Ich meine damit nicht das das Programm läuft, sondern die Einsicht, das das alles nicht mal ebend so ist.

    Wie recycle schon schrieb. Da hängt noch so einiges mehr dran.
    Selbst wenn man soweit ist, das im Gedanken der Programmablauf steht und man weiss, was man will, wird man zu Anfang noch feststellen, das es dann doch nicht immer so klappt wie man es sich denkt.
    Es müssen ggf. einige Taster Vorrang gegenüber anderen tastern haben.
    Z.B. ein Not-Aus-Taster muss immer funktionieren. Egal an welcher Stelle das Progamm grade steht. Und wenn man Not-Aus drückt, gedrückt hält und noch einen zweiten Taster dazu drückt, darf das Programm nicht wieder anlaufen.

    Wie es im Leben so ist, muss man alles erst erlernen.
    http://www.rowalt.de/mc/index.htm
    Arbeite am besten man den Kurs da durch. Ach wenn es auf dem ersten Blick nicht so aussieht, aber es geht da um AVR's und Bascom.
    Wenndu die Möglichkeit hast, drucke dir die Seiten aus. Ich glaube es sind do um die 20 Seiten.
    Da kannst du schnell die Zusammenhänge und Grundeigenschaften lernen. Und es ist kostenlos im Gegensatz zu Büchern.

    Wie ich schon weiter oben geschrieben habe, musst du dir erstmal genau überlegen, was dein Programm können soll.
    1. Soll in den 60 Sekunden ggf. noch was anderes passieren?
    2. Wenn 1. Ja: Braucht man dafür auch einen Timer? Wenn Ja, welche Zeiten muss der haben. Wie kann ich beide auf einen Nenner bringen.
    3. Was soll passieren, wenn der Taster 62 Sekunden lang gedrückt wird? Sollen die 60 Sekunden dann nochmal anfangen abzulaufen oder erst wenn der Taster mind. einmal losgelassen wurde.
    4. Was soll passieren, wenn der Taster vor Ablauf der Zeit nochmal gedrückt wird? Soll dann die Zeit verlängert werden? Soll das Zeit abgebrochen werden. Also quasi ausschalten.
    5. Soll dreimal drücken bewirken, das die Zeit 3 Minuten läuft? Wenn ja, in welcher Zeit soll das drücken akzeptiert werden.

    Das klingt alles sehr hart, ist es auch

    Beim Programmieren (egal ob Mikrocontroller oder PC) Sollte ein Großteil der Zeit für die Planung beansprucht werden. Somit hat man es später einfacher.

    Fang erstmal klein an. Arbeite den Kurs durch. Dann überlege dir selbst Aufgabenstellungen die du lösen willst. Wenn du Hilfe brauchst, such hier im Forum ob schonmal jemand das Problem hatte und die Lösung dir hilft.
    Wenn nicht, kannst du immer noch fragen. Wie du hier auch schon gesehen hast, bekommst du ja Hilfe. Aber es bringt wirklich nichts, wenn du jetzt einen fertigen Code bekommst, ihn aber nicht verstehst.

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress