- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 34

Thema: einstellbarer zähler mit bascom???

  1. #21
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2006
    Ort
    Biberach
    Alter
    34
    Beiträge
    485
    Anzeige

    Powerstation Test
    Ja das kannst du so machen. Du hast 2 Tasten, mit der einen erhöhst du die Zeit um 10 Sekunden mit der anderen verringerst du sie um 10 Sekunden. Wenn nun die Taste zum Erhöhen gedrückt wird, kannst du die Variable Einstellung um 10 hochzählen (Einstellung = Einstellung + 10). Bei der anderen Taste das gleiche nur mit Minus. Wenn du die gewünschte Zeit mit Hilfe der beiden Tasten eingestellt hast (z.B. 400 Sekunden), drückst du die Start Taste und der Timer läuft 400 Sekunden.

    MfG

  2. #22
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    36
    Beiträge
    380
    also im prinzip so wie ich es geschrieben habe mit if then oder?
    und wie mache ich dass nun mit dem anschalten dass wenn ich den taster drücke dass es auch an bleibt bis es fertig gezählt hat. habe jetzt mal 0 und 1 ausprobiert aber is beides dass selbe problem.
    bei 1 ist der timer die ganze zeit an und geht nur während ich den taster drücke aus und wenn ich loslasse wieder an.
    und bei 0 bleibt er aus und geht nur wenn ich auf der taste bleibe an geht aber wieder aus wenn ich se loslasse.

  3. #23
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2006
    Ort
    Biberach
    Alter
    34
    Beiträge
    485
    Ja genauso wie du es beschrieben hast. Aber achte darauf, dass du nicht die Variable Sekunde verändern darfst, sondern die Variable Einstellung.

    MfG

  4. #24
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.10.2006
    Ort
    Hamburg
    Alter
    44
    Beiträge
    105
    Hi, xbgamer!
    Ich habe mal ein Zeitrelai mit dem AT90S2313 gebaut. Es hat 2 7-Segment Anzeigen und kann bis 99 sekunden eingestellt werden.
    Im "Ruhezustand" sind die Anzeigen aus. Wenn die Taste SET betätigt wird, gehen die Anzeigen an und man kann bei betätigter SET-Taste mit "+" und "-" Tasten die Zeit einstellen. Sobald die SET-Taste losgelassen wird, wird die eingestellte Zeit In den EEPROM geschrieben. Beim Betätigen der START-Taste Geht die Anzeige an und der Countdown läuft runter bis null, solange die Zeit läuft ist ein Relai angezogen, danach geht die Anzeige wider aus.

    Den Schaltplan und Die *.BAS Datei Lege ich bei.
    Man Lernt am besten indem man den fertigen Code analysiert.

    Code:
    'Zeitrelai
    'Lebi
    '26.09.06
    
    $regfile = "2313def.dat"
    $crystal = 3686400
    
    Hauptprogramm:                                              'Sprungmarke fuer Huptprogramm
    
    'Deklaration der SUBs fuer Tasten
    Declare Sub Pluspressed
    Declare Sub Minuspressed
    
    'port config
    Ddrb = &B11111111
    Ddrd = &B1000011
    
    'pool up
    Portd = &B0111100
    
    'Variablen Deklaration
    Dim Zeit As Byte , 1en As Byte , 10er As Byte , Ausgabebyte As Byte
    
    
    
    
    'Konstanten Einstellen
    Const Del = 7                                               'Multiplex zeit fuer 7-SegmentAnzeige
    Const Lt = 57600                                            'Lade timer auf 57600
    
    'Tasten Zuweisung
    Ustan Alias Pind.4                                          'Ustan=SET
    Minus Alias Pind.5
    Plus Alias Pind.3
    Pusk Alias Pind.2                                           'Pusk=START
    
    
    'Timer einstellen
    On Timer1 A1                                                'Beim Teimerueberlauf(Interrupt) gehe zum merker A1
    Config Timer1 = Timer , Prescale = 64                       'Frequenz wird gurch 64 geteilt
    Load Timer1 , Lt
                                                                  '3686400/8=460800,460800/256=1800 interrupst pro Sekunde
    Enable Interrupts
    
    
    'Hauptschleife
    Do
    
    'Tasten werden permanent abgefragt
    'wenn Taste "START" betaetigt, dann:
    'Relai an, Lese die Zeitwariable aus dem EEPROM, springe zu Unterprogramm "Anzeige"
    If Pusk = 0 Then
    Set Portd.1
    Readeeprom Zeit , 10
    Gosub Anzeige
    End If
    
    'wenn Taste "SET" Betaetigt, dann gehe zu Unterprogramm "Ustanovka/Einstellen"
    If Ustan = 0 Then Goto Ustanovka
    
    Loop
    
    
    
    
    'Unterprogramm "Anzeige"
    Anzeige:
    'Timer 1 aktivieren
    Enable Timer1
    
    'Sekunden 10er
    Ausgabebyte = Zeit Mod 10
    Portd.6 = 0
    If Ausgabebyte = 0 Then Portb = &B00000011
    If Ausgabebyte = 1 Then Portb = &B01101111
    If Ausgabebyte = 2 Then Portb = &B10001001
    If Ausgabebyte = 3 Then Portb = &B01001001
    If Ausgabebyte = 4 Then Portb = &B01100101
    If Ausgabebyte = 5 Then Portb = &B01010001
    If Ausgabebyte = 6 Then Portb = &B00010001
    If Ausgabebyte = 7 Then Portb = &B01101011
    If Ausgabebyte = 8 Then Portb = &B00000001
    If Ausgabebyte = 9 Then Portb = &B01000001
    Portb.0 = 1
    Waitms Del
    
    'Sekunden 1er
    Ausgabebyte = Zeit / 10
    Portd.6 = 1
    If Ausgabebyte = 0 Then Portb = &B00000011
    If Ausgabebyte = 1 Then Portb = &B01101111
    If Ausgabebyte = 2 Then Portb = &B10001001
    If Ausgabebyte = 3 Then Portb = &B01001001
    If Ausgabebyte = 4 Then Portb = &B01100101
    If Ausgabebyte = 5 Then Portb = &B01010001
    If Ausgabebyte = 6 Then Portb = &B00010001
    If Ausgabebyte = 7 Then Portb = &B01101011
    If Ausgabebyte = 8 Then Portb = &B00000001
    If Ausgabebyte = 9 Then Portb = &B01000001
    Portb.0 = 0
    Waitms Del
    If Zeit = 0 Then Goto A2
    Goto Anzeige
    
    
    A2:
    Disable Timer1
    Portd.6 = 1
    Portb.0 = 1
    Wait 1
    Portd.6 = 0
    Portb.0 = 0
    Reset Portd.1
    Goto Hauptprogramm
    
    
    A1:
    Load Timer1 , Lt
    Decr Zeit
    Return
    
    'Unterprogramm "Einstellen"
    Ustanovka:
    Readeeprom Zeit , 10
    Debounce Plus , 0 , Pluspressed , Sub And Ustan = 0
    Debounce Minus , 0 , Minuspressed , Sub And Ustan = 0
    
    'Anzeige beim Einstellen
    Ausgabebyte = Zeit Mod 10
    Portd.6 = 0
    If Ausgabebyte = 0 Then Portb = &B00000011
    If Ausgabebyte = 1 Then Portb = &B01101111
    If Ausgabebyte = 2 Then Portb = &B10001001
    If Ausgabebyte = 3 Then Portb = &B01001001
    If Ausgabebyte = 4 Then Portb = &B01100101
    If Ausgabebyte = 5 Then Portb = &B01010001
    If Ausgabebyte = 6 Then Portb = &B00010001
    If Ausgabebyte = 7 Then Portb = &B01101011
    If Ausgabebyte = 8 Then Portb = &B00000001
    If Ausgabebyte = 9 Then Portb = &B01000001
    Portb.0 = 1
    Waitms Del
    Ausgabebyte = Zeit / 10
    Portd.6 = 1
    If Ausgabebyte = 0 Then Portb = &B00000011
    If Ausgabebyte = 1 Then Portb = &B01101111
    If Ausgabebyte = 2 Then Portb = &B10001001
    If Ausgabebyte = 3 Then Portb = &B01001001
    If Ausgabebyte = 4 Then Portb = &B01100101
    If Ausgabebyte = 5 Then Portb = &B01010001
    If Ausgabebyte = 6 Then Portb = &B00010001
    If Ausgabebyte = 7 Then Portb = &B01101011
    If Ausgabebyte = 8 Then Portb = &B00000001
    If Ausgabebyte = 9 Then Portb = &B01000001
    Portb.0 = 0
    Waitms Del
    If Ustan = 0 Then Goto Ustanovka
    Goto Hauptprogramm
    
    
    Sub Pluspressed
    Incr Zeit
    If Zeit > 98 Then Zeit = 0
    Writeeeprom Zeit , 10
    End Sub
    
    Sub Minuspressed
    Decr Zeit
    If Zeit > 98 Then Zeit = 0
    Writeeeprom Zeit , 10
    End Sub
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken spl.jpg  
    Angehängte Dateien Angehängte Dateien

  5. #25
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    36
    Beiträge
    380
    wie meinst du dass mit einstellung = einstellung +10

    etwa if pinc.1 = 1 then einstellung = sekunde +10

  6. #26
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2006
    Ort
    Biberach
    Alter
    34
    Beiträge
    485
    Nicht ganz. In "einstellung" ist gespeichert, wie lange der Timer laufen soll (in Sekunden). Du darfst mit deiner Tastenabfrage die Variable "sekunde" nicht verändern, da diese nur vom Timer (ISR) geändert wird. Also du solltest es so schreiben:
    if pinc.1 = 1 then einstellung = einstellung +10

    Dadurch wird die Laufzeit vom Timer um 10 Sekunden erhöht. Wenn in "einstellung" vorher 200 gespeichert war, ist nach einem Tastendruck 210 gespeichert.

    MfG

  7. #27
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    36
    Beiträge
    380
    achso jetzt verstehe ich einstellung wird vom timer so erkannt.

  8. #28
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    36
    Beiträge
    380
    so hab jetzt mal weiter geschaut bin aber wieder gnadenlos gescheitert.
    des mit dem taster geht irgendwie immernoch net ich muss also immernoch die ganze zeut den taster drücken damit der timer läuft.

    aber jetzt mal folgendes.
    ich möchte es jetzt so haben. also led1 blinkt im sekundentakt munter los. wenn sie jetzt 10 mal geblinkt hat soll led 2 100ms aufblinken. und wenn 60 sekunden rumm sind soll led 3 100ms aufblinken.

    aber irgendwie bekomm ich des net ganz hin wenn ich des einfach so in die isr rein schreibe habe des jetzt mal so versucht:
    Timer0_isr:
    Tcnt0 = 26

    If Pinc.0 = 1 Then

    Incr Intzaehler

    If Intzaehler = 25 Then
    Intzaehler = 0
    Incr Zehntelsek
    End If

    If Zehntelsek = 10 Then
    If Minute < 5 Then
    Toggle Led1
    End If
    Incr Sekunde
    Zehntelsek = 0
    End If

    If Sekunde = 60 Then
    Led2 = 1
    Wait 1
    Led2 = 0
    Incr Minute
    End If

    End If

    Return

    vielleicht kann mir da jemand mal helfen und auch des mit dem taster vll mal erklären wie ich dass den hinbekommen könnte.

  9. #29
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2006
    Ort
    Biberach
    Alter
    34
    Beiträge
    485
    Hi,
    also das mit der Taste is doch einfach. Du darfst halt nicht den Eingang an der die Taste hängt in der ISR untersuchen, sondern eine Variable. Außerhalb der ISR setzt du diese Variable auf eins, wenn die Taste gedrückt wird:
    Code:
    Dim Taste as Bit
    Taste = 0
    
    ...
    
    If Pinc.0 = 1 Then                           'Das muss in eine Schleife
      Taste = 1
    Endif
    
    ....
    
    Timer0_isr: 
    Tcnt0 = 26 
    
    If Taste = 1 Then 
    
    ...

    Du verwendest in deiner ISR einen Wait Befehl. Dadurch kann die ISR nicht abgearbeitet werden, da nach ein paar Millisekunden ein neuer Interrupt ausgelöst wird. In einer ISR sollte so wenig wie möglich passieren (z.B. Variablen ändern). Und mit Hilfe dieser geänderten Variablen kannst du dann außerhalb der ISR die gewünschten Aktionen ausführen.

    Also mit 100ms aufblinken meinst du wohl, dass die LED 100ms angeht und danach wieder aus. Du musst auch hier mit Variablen arbeiten. Du setzt eine Variable auf 1 (anstatt Led2 = 1 Wait 1 Led2 = 0 ). Nun weiß das Programm, dass es beim nächsten Aufruf der ISR Led2 einschalten muss. Du fügst also eine If Abfrage dazu und schaltest in dieser die LED ein, zusätzlich musst du noch eine Variable hochzählen um zu wissen wieviel Zeit vergangen ist. Wenn die Zeit um ist wird die LED ausgeschaltet und alle Variablen wieder auf 0 gesetzt.

    MfG

  10. #30
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    36
    Beiträge
    380
    achso ok. des mit den variablen habe ich jetzt verstanden aber des mit dem schalter klappt irgendwie net ganz.
    so hab ichs jetzt aber ich muss immernoch drauf bleiben.
    Code:
    $regfile = "m8def.dat"
    $crystal = 1000000
    $baud = 9600
    Config Timer0 = Timer , Prescale = 64
    Config Portb.0 = Output
    Config Pinc.0 = Input
    Config Pinc.1 = Input
    Config Pinc.2 = Input
    
    Portc = &B00000111
    
    Led1 Alias Portb.0
    Led2 Alias Portb.1
    Led3 Alias Portb.2
    Dim Intzaehler As Integer
    Dim Zehntelsek As Integer
    Dim Sekunde As Integer
    Dim Minute As Integer
    Dim Sec_vorgabe As Integer
    Dim Taste as Bit
    Taste = 0
    
    Start Timer0
    Enable Timer0
    Enable Interrupts
    On Timer0 Timer0_isr
    
    
    Do
    If Pinc.0 = 1 Then
      Taste = 1
    End If
    Loop
    End
    
    Timer0_isr:
    Tcnt0 = 26
    
    If Pinc.0 = 1 Then
    
      Incr Intzaehler
    
      If Intzaehler = 25 Then
        Intzaehler = 0
        Incr Zehntelsek
      End If
    
      If Zehntelsek = 10 Then
        If Minute < 5 Then
          Toggle Led1
        End If
        Incr Sekunde
        Zehntelsek = 0
      End If
    
      If Sekunde = 60 Then
        Incr Minute
      End If
    
    End If
    
    Return

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress