- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 10

Thema: Programm und Timer vertragen sich nicht

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    11.09.2013
    Ort
    Riesa
    Beiträge
    6

    Programm und Timer vertragen sich nicht

    Hallo Bascom-Fans,

    ich hätte da mal 'ne Frage. Ich bin noch etwas neu in der Branche und habe nun endlcih mal ein etwas umfangreiches Programm zum laufen gebracht. Nun sollte zum Schluss nur noch eine Blinkfunktion eingebaut werden. Dazu habe ich einen Timer aktiviert nach dem Vorbild wie es in jedem Toutorial angezeigt ist.

    Config Timer1 = Timer , Prescale = 8
    Enable Timer1
    On Timer1 Timer1_isr
    Enable Interrupts
    Const Timer1startwert = 49911
    Timer1 = Timer1startwert

    Programm...

    Timer1_isr:
    Timer1 = Timer1startwert
    Toggle Leds_reset
    Return

    Probehalber habe ich hier erst einmal einen Ausgang mit LED blinken lassen. Das funktioniert auch gut. Doch leider sind keine Taster mehr bedienbar und das Programm rührt sich nicht mehr. Wenn ich "Enable Interrupts" herauskommentiere geht alles ganz normal.
    Ich habe keine Ahnung wo der Fehler liegen könnte und bitte mal um Hilfe.

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Moin Behri!

    Dazu müssten wir mal wissen was die Taster mit dem Controller überhaupt machen, was es für ein Controller ist, etc., etc. Am besten postest Du mal den ganzen (!) Code, dann lässt sich der Fehler schon viel einfacher finden als wenn wir die berühmte Glaskugel verwenden müssen

    Und wenn Du vor den Code das Steuerzeichen CODE in eckigen Klammern schreibst, und nach dem Code [/CODE], wird das Programm auch viel besser lesbar, weil man es rauf- und runterscrollen kann!

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    11.09.2013
    Ort
    Riesa
    Beiträge
    6
    Danke dass Ihr Euch der Sache annehmt.
    Das ganze soll eine Spielsstandsanzeige für Tischtennis sein.
    Es ist ein ATMega8.Takterzeugung intern. Programmiert habe ich über die SPI-Schnittstelle. An ihr befindet sich auch ein Portexpander mit 74HC595 für die 7-Segmentanzeigen. Die LEDs befinden sich in den Tastern und sollen signalisieren welche Taster gerade zu bedienen sind. es funktioniert alles sehr gut und es soll nur das blinken mit "waitms" durch einen Timer ersetzt werden. Die Leds_reset blinken zu lassen ist nur der Versuch den Timer generell zu testen. Ich will später stattdessen eine bit-Variable toggeln und die im Code verarbeiten.

    Code:
    '
    
    '$sim
    $regfile = "m8def.dat"
    $crystal = 1000000
    
    Config Timer1 = Timer , Prescale = 8
    Enable Timer1
    On Timer1 Timer1_isr
    Enable Interrupts
    Const Timer1startwert = 49911
    Timer1 = Timer1startwert
    
    Config Portc.0 = Output
    Config Portc.1 = Output
    Config Portc.2 = Output
    Config Portc.3 = Output
    Config Portc.4 = Output
    
    Config Pinb.0 = Input
    Config Pinb.1 = Input
    Portb.0 = 1
    Portb.1 = 1
    
    Ddrd = &B00000011
    Portd = &B11111100
    
    Ddrc = &B00011111
    
    Leds_zaehlen Alias Portc.0
    Led_rueckwaerts Alias Portc.1
    Leds_wahl Alias Portc.2
    Led_weiter Alias Portc.3
    Leds_reset Alias Portc.4
    
    Poti Alias Portc.5
    
    Ta_reset Alias Pind.2
    Ta_weiter Alias Pind.3
    Ta_wahl_gs Alias Pind.4
    Ta_wahl_seite_aufschl Alias Pind.5
    Ta_wahl_seite_gast Alias Pind.6
    Ta_rueckwaerts Alias Pind.7
    
    Ta_baelle_li Alias Pinb.0
    Ta_baelle_re Alias Pinb.1
    
    Dim Var_hauptschleife As Byte
    
    Const Const_anz_start = 0
    Const Const_anz_wahl = 1
    Const Const_anz_00 = 2
    Const Const_anz_01 = 3
    Const Const_anz_satzende = 4
    Const Const_anz_satzpause = 5
    Const Const_anz_seitenwechsel = 6
    Const Const_anz_spielende_1 = 7
    Const Const_anz_spielende_2 = 8
    Const Ein = 1
    Const Aus = 0
    Const Ja = 1
    Const Nein = 0
    
    Dim Var_ausgabearray(8) As Byte
    
    Dim Flag_aufschlagseite_gewaehlt As Bit
    Dim Flag_gast_gewaehlt As Bit
    Dim Flag_ende As Bit
    Dim Flag_heim_gewaehlt As Bit
    Dim Var_anzahl_der_gewinnsaetze As Byte
        Var_anzahl_der_gewinnsaetze = 3
    
    
    Dim Flag_satzende As Bit
    Dim Flag_spielende As Bit
    Dim Flag_gh As Bit
    Dim Flag_hg As Bit
    Dim Flag_gh_start As Bit
    Dim Flag_hg_start As Bit
    Dim Flag_aufschlag As Bit
    Dim Flag_aufschlag_li As Bit
    Dim Flag_aufschlag_re As Bit
    
    Dim Var_baelle_li As Byte
    Dim Var_baelle_re As Byte
    Dim Var_saetze_li As Byte
    Dim Var_saetze_li_2 As Byte                                 'nur für spielendeprüfung
    Dim Var_saetze_re As Byte
    Dim Var_saetze_re_2 As Byte                                 'nur für spielendeprüfung
    
    'Dim Var_ziffer_baelle_li As Word                            'At Var_baelle_li_ziffer Overlay
    'Dim Var_ziffer_baelle_re As Word                            'At Var_baelle_re_ziffer Overlay
    
    Dim Var_baelle_li_ziffer_e As Byte                          'At Var_ziffer_baelle_li Overlay
    Dim Var_baelle_li_ziffer_z As Byte                          'At Var_ziffer_baelle_li + 1 Overlay
    Dim Var_baelle_re_ziffer_e As Byte                          'At Var_ziffer_baelle_re Overlay
    Dim Var_baelle_re_ziffer_z As Byte                          'At Var_ziffer_baelle_re + 1 Overlay
    Dim Var_saetze_li_ziffer As Byte
    Dim Var_saetze_re_ziffer As Byte
    
    Dim Var_einer_baelle_li As Byte
    Dim Var_zehner_baelle_li As Byte
    Dim Var_einer_baelle_re As Byte
    Dim Var_zehner_baelle_re As Byte
    
    Dim Var_ziffernwahl As Byte
    Dim Var_ziffernwahl_baelle_li As Byte
    Dim Var_ziffernwahl_baelle_re As Byte
    
    Dim Var_ziffer As Byte
    
    Dim Var_betaetigt_gh As Bit
    Dim Var_betaetigt_aufschlagwahl As Bit
    Dim Var_alles_gewaehlt__weiter_moegl As Byte
    
    Dim Var_summe_baelle As Byte
    Dim Var_differenz_baelle As Integer
    Dim Var_summe_gs As Byte
    
    Dim Flag_seitenwechsel_erfolgt As Bit
    
    Dim Var_seite_im_spiel_vor_sw_ent As Byte
    Dim Var_seite_im_spiel_nach_sw_ent As Byte
    
    Dim Flag_aufschlag_2 As Byte
    
    Dim Flag_rw_gezaehlt As Bit
    
    
    Dim A As Byte
    Dim B As Byte
    Dim C As Byte
    Dim D As Byte
    Dim E As Word
    Dim F As Byte
    Dim G As Byte
    Dim H As Byte
    
    
    Declare Sub Sub_ausgabe_anzeige                             'gibt die aktuellen Bytes aus ohne sie zu verändern
    Declare Sub Sub_ausgabe_anzeige_00
    Declare Sub Sub_ausgabe_anzeige_satzpause
    
    Declare Sub Sub_schleife_anz_start
    Declare Sub Sub_schleife_anz_wahl
    Declare Sub Sub_schleife_anz_00
    Declare Sub Sub_schleife_anz_satzende
    Declare Sub Sub_schleife_anz_satzpause
    Declare Sub Sub_schleife_anz_spielende
    
    Declare Sub Sub_gewinnsaetze_festlegen
    Declare Sub Sub_seitenwahl_1
    Declare Sub Sub_seitenwahl_2
    Declare Sub Sub_aufschlagwahl_1
    Declare Sub Sub_aufschlagwahl_2
    Declare Sub Sub_zaehlen_li
    Declare Sub Sub_zaehlen_re
    Declare Sub Sub_ziffernwahl
    Declare Sub Sub_ziffernwahl_baelle_li
    Declare Sub Sub_ziffernwahl_baelle_re
    Declare Sub Sub_rechnung_aufschlag
    Declare Sub Sub_seitenwechsel_satzende
    Declare Sub Sub_seitenwechsel_entscheid_1
    Declare Sub Sub_seitenwechsel_entscheid_2
    Declare Sub Sub_seitenwechsel_entscheid_3
    Declare Sub Sub_saetze_hochzaehlen
    Declare Sub Sub_saetze_hochzaehlen_2
    
    Config Spi = Hard , Interrupt = On , Data Order = Lsb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4
    Spiinit
    
    Config Debounce = 50
    
    
          Hauptschleife:
             Do
                Select Case Var_hauptschleife 
                Case Const_anz_start : Goto Schleife_anz_start 
                Case Const_anz_wahl : Goto Schleife_anz_wahl 
                Case Const_anz_00 : Goto Schleife_anz_00
                Case Const_anz_satzende : Goto Schleife_anz_satzende 
                Case Const_anz_satzpause : Goto Schleife_anz_satzpause 
                Case Const_anz_spielende_1 : Goto Schleife_anz_spielende_1
                Case Const_anz_spielende_2 : Goto Schleife_anz_spielende_2 
                End Select
             Loop
    
    
    Schleife_anz_start:
    Do
          Var_ausgabearray(1) = 0                               'ev.LED's Tablau      -gfedcba
          Var_ausgabearray(2) = 0                               'rechts Sätze
          Var_ausgabearray(3) = 0                               'Bälle rechts Einer
          Var_ausgabearray(4) = 0                               'Bälle rechts Zehner
          Var_ausgabearray(5) = 0                               'G/H + Satzende + Aufschlaganzeige
          Var_ausgabearray(6) = 0                               'Bälle links Einer
          Var_ausgabearray(7) = 0                               'Bälle links Zehner
          Var_ausgabearray(8) = 0                               'links Sätze
    
          Leds_zaehlen = 0                                      'Tableau Bedienung
          Led_rueckwaerts = 0                                   'Tableau Bedienung
          Leds_wahl = 0                                         'Tableau Bedienung
          Led_weiter = 1                                        'Tableau Bedienung
          Leds_reset = 0                                        'Tableau Bedienung
    
       Gosub Sub_ausgabe_anzeige
       Debounce Ta_weiter , 0 , Sub_schleife_anz_wahl , Sub
       Goto Hauptschleife
    
    Loop
    
    Schleife_anz_wahl:
    Do
          Var_ausgabearray(1) = 0                               'ev.LED's Tablau      -gfedcba
          Var_ausgabearray(2) = 0                               'rechts Sätze
          Var_ziffernwahl = Var_anzahl_der_gewinnsaetze
          Gosub Sub_ziffernwahl
          Var_ausgabearray(3) = Var_ziffer                      'Bälle rechts Einer
          Var_ausgabearray(4) = 0                               'Bälle rechts Zehner
          Var_ausgabearray(5) = &B00000000                      '0=heim.1=gast/.2=AUF-re/.3=Ende/.4=AUF-li .
             Var_ausgabearray(5).0 = Flag_gh                    'Flag_gh
             Var_ausgabearray(5).1 = Flag_hg                    'Flag_hg
             Var_ausgabearray(5).2 = Flag_aufschlag_li
             Var_ausgabearray(5).3 = Flag_ende
             Var_ausgabearray(5).4 = Flag_aufschlag_re
          Var_ausgabearray(6) = &B01101101                      'Bälle links Einer
          Var_ausgabearray(7) = &B00111101                      'Bälle links Zehner
          Var_ausgabearray(8) = 0                               'links Sätze
    
          Leds_zaehlen = 0                                      'Tableau Bedienung
          Led_rueckwaerts = 1                                   'Tableau Bedienung
          Leds_wahl = 1                                         'Tableau Bedienung
          Led_weiter = 0                                        'Tableau Bedienung
          Leds_reset = 0                                        'Tableau Bedienung
       Gosub Sub_ausgabe_anzeige
    
       If Var_alles_gewaehlt__weiter_moegl = 2 Then
       Led_weiter = 1
    Debounce Ta_weiter , 0 , Sub_schleife_anz_satzpause , Sub
       End If
    
    Debounce Ta_wahl_gs , 0 , Sub_gewinnsaetze_festlegen , Sub
    
       If Var_betaetigt_gh = 0 Then
    Debounce Ta_wahl_seite_gast , 0 , Sub_seitenwahl_1 , Sub
       Else
    Debounce Ta_wahl_seite_gast , 0 , Sub_seitenwahl_2 , Sub
       End If
    
          If Var_betaetigt_aufschlagwahl = 0 Then
    Debounce Ta_wahl_seite_aufschl , 0 , Sub_aufschlagwahl_1 , Sub
       Else
    Debounce Ta_wahl_seite_aufschl , 0 , Sub_aufschlagwahl_2 , Sub
       End If
    
       Goto Hauptschleife
    
    Loop
    
    
    Schleife_anz_00:
    
    Do
    
    Flag_satzende = 0
    Flag_ende = 0
    
    Debounce Ta_baelle_li , 0 , Sub_zaehlen_li , Sub
    Debounce Ta_baelle_re , 0 , Sub_zaehlen_re , Sub
    
    Gosub Sub_rechnung_aufschlag
    
    Gosub Sub_ausgabe_anzeige_00
    
          Leds_zaehlen = 1                                      'Tableau Bedienung
          Led_rueckwaerts = 0                                   'Tableau Bedienung
          Leds_wahl = 0                                         'Tableau Bedienung
          Led_weiter = 0                                        'Tableau Bedienung
          Leds_reset = 0                                        'Tableau Bedienung
    
    Pruefung_sw_vorwaerts:
    
    A = Var_saetze_li + 1
    B = Var_saetze_re + 1
    
    
    If A < Var_anzahl_der_gewinnsaetze Then
    Goto Kein_seitenwechsel
          Else
          If B < Var_anzahl_der_gewinnsaetze Then
          Goto Kein_seitenwechsel
                Else
                If Flag_seitenwechsel_erfolgt = 1 Then
                Goto Kein_seitenwechsel
    
                         Else
                         If Var_baelle_li = 5 Then
                               Zurueck1:
    
                               Leds_zaehlen = 0                 'Tableau Bedienung
                               Led_rueckwaerts = 0              'Tableau Bedienung
                               Leds_wahl = 0                    'Tableau Bedienung
                               Led_weiter = 1                   'Tableau Bedienung
                               Leds_reset = 0                   'Tableau Bedienung
    
    
    
                               Debounce Ta_weiter , 0 , Sub_seitenwechsel_entscheid_1 , Sub
    
                               Var_ausgabearray(6) = 0          'Blinken der"5"
                               Gosub Sub_ausgabe_anzeige        '
                               Waitms 30                        '
                               Var_ziffernwahl = Var_baelle_li  '
                               Gosub Sub_ziffernwahl_baelle_li  '
                               Gosub Sub_ausgabe_anzeige_00     '
                               Waitms 30                        '
    
    
    
                               Select Case C
                               Case 1 :
                               Flag_seitenwechsel_erfolgt = 1
                               Sub_seitenwechsel_entscheid_2
                               Case 0 : Goto Zurueck1
                               End Select
                               C = 0
    
                               Leds_zaehlen = 1                 'Tableau Bedienung
                               Led_rueckwaerts = 0              'Tableau Bedienung
                               Leds_wahl = 0                    'Tableau Bedienung
                               Led_weiter = 0                   'Tableau Bedienung
                               Leds_reset = 0                   'Tableau Bedienung
    
    
                            Else
                            If Var_baelle_re = 5 Then
                               Zurueck2:
    
                               Leds_zaehlen = 0                 'Tableau Bedienung
                               Led_rueckwaerts = 0              'Tableau Bedienung
                               Leds_wahl = 0                    'Tableau Bedienung
                               Led_weiter = 1                   'Tableau Bedienung
                               Leds_reset = 0                   'Tableau Bedienung
    
                               Debounce Ta_weiter , 0 , Sub_seitenwechsel_entscheid_1 , Sub
    
    
                               Var_ausgabearray(4) = 0          'Blinken der"5"
                               Gosub Sub_ausgabe_anzeige        '
                               Waitms 30                        '
                               Var_ziffernwahl = Var_baelle_re  '
                               Gosub Sub_ziffernwahl_baelle_re  '
                               Gosub Sub_ausgabe_anzeige_00     '
                               Waitms 30
    
    
    
    
                               Select Case C
                               Case 1 :
                               Flag_seitenwechsel_erfolgt = 1
                               Sub_seitenwechsel_entscheid_2
                               Case 0 : Goto Zurueck2
                               End Select
                               C = 0
    
                               Leds_zaehlen = 1                 'Tableau Bedienung
                               Led_rueckwaerts = 0              'Tableau Bedienung
                               Leds_wahl = 0                    'Tableau Bedienung
                               Led_weiter = 0                   'Tableau Bedienung
                               Leds_reset = 0                   'Tableau Bedienung
    
    
                            End If
                         End If
    
                End If
          End If
    End If
    
    A = 0
    B = 0
    
    
    
    
    Kein_seitenwechsel:
    
    'Sub_satzendepruefung
    Var_differenz_baelle = Var_baelle_li - Var_baelle_re
    
    If Var_baelle_li > 10 Then
       Goto Differenztest
    End If
    
    If Var_baelle_re > 10 Then
       Goto Differenztest
          Else
          Goto Kein_satzende
    End If
    
    Differenztest:
    If Var_differenz_baelle > 1 Then
       Flag_satzende = 1
       Var_hauptschleife = Const_anz_satzende
       Gosub Sub_saetze_hochzaehlen_2
    
             Else
                If Var_differenz_baelle < -1 Then
                Flag_satzende = 1
                Var_hauptschleife = Const_anz_satzende
                Gosub Sub_saetze_hochzaehlen_2
            Else
            Goto Kein_satzende
       End If
    End If
    
    Kein_satzende:
    
    'spielendepruefung:
    If Var_anzahl_der_gewinnsaetze = Var_saetze_li_2 Then
       Var_hauptschleife = Const_anz_spielende_1
       Flag_spielende = 1
    End If
             If Var_anzahl_der_gewinnsaetze = Var_saetze_re_2 Then
             Var_hauptschleife = Const_anz_spielende_1
             Flag_spielende = 1
             End If
    
    
    
    
    'Gosub Sub_satzendepruefung
    'Gosub Sub_spielendepruefung
    
    Flag_ende = Flag_satzende
    
    
    
    Goto Hauptschleife
    
    Loop
    
    
    Schleife_anz_satzende:
    Do
    
       Flag_ende = 1
       Flag_aufschlag_li = 0
       Flag_aufschlag_re = 0
    
    
          Leds_zaehlen = 0                                      'Tableau Bedienung
          Led_rueckwaerts = 0                                   'Tableau Bedienung
          Leds_wahl = 0                                         'Tableau Bedienung
          Led_weiter = 1                                        'Tableau Bedienung
          Leds_reset = 0                                        'Tableau Bedienung
    
       Gosub Sub_ausgabe_anzeige_00
    
    
    
       If Flag_spielende = 1 Then
          Debounce Ta_weiter , 0 , Sub_schleife_anz_spielende_1 , Sub
             Else
             Debounce Ta_weiter , 0 , Sub_seitenwechsel_satzende , Sub
       End If
    
       Goto Hauptschleife
    
    Loop
    
    
    Schleife_anz_satzpause:
    
    Do
    
    Gosub Sub_ausgabe_anzeige_satzpause
    
          Leds_zaehlen = 0                                      'Tableau Bedienung
          Led_rueckwaerts = 0                                   'Tableau Bedienung
          Leds_wahl = 0                                         'Tableau Bedienung
          Led_weiter = 1                                        'Tableau Bedienung
          Leds_reset = 0                                        'Tableau Bedienung
    
    Debounce Ta_weiter , 0 , Sub_schleife_anz_00 , Sub
    
    Goto Hauptschleife
    
    Loop
    
    
    Schleife_anz_spielende_1:
    
    Do
    
       Flag_ende = 1
       Flag_aufschlag_li = 0
       Flag_aufschlag_re = 0
    
    
          Leds_zaehlen = 0                                      'Tableau Bedienung
          Led_rueckwaerts = 0                                   'Tableau Bedienung
          Leds_wahl = 0                                         'Tableau Bedienung
          Led_weiter = 1                                        'Tableau Bedienung
          Leds_reset = 0                                        'Tableau Bedienung
    
       Gosub Sub_ausgabe_anzeige_00
    
    
    Debounce Ta_weiter , 0 , Sub_schleife_anz_spielende_2 , Sub
    
    'Goto Hauptschleife
    
    If Var_hauptschleife = Const_anz_spielende_2 Then
    Goto Schleife_anz_spielende_2
    End If
    
    Loop
    
    
    Schleife_anz_spielende_2:
    
    Gosub Sub_saetze_hochzaehlen
    
    Do
    
    Gosub Sub_ausgabe_anzeige_satzpause
    
    
                               Leds_zaehlen = 0                 'Tableau Bedienung
                               Led_rueckwaerts = 0              'Tableau Bedienung
                               Leds_wahl = 0                    'Tableau Bedienung
                               Led_weiter = 0                   'Tableau Bedienung
                               Leds_reset = 1                   'Tableau Bedienung
    
    'Debounce Ta_weiter , 0 , Sub_reset , Sub
    
    If Var_hauptschleife = Const_anz_start Then
    Goto Hauptschleife
    End If
    
    Loop
    
    
    End
    
    '_____________________________________________________________________________________________________________________
    
    
    Sub_ausgabe_anzeige:
       Spiout Var_ausgabearray(1) , 8
    Return
    
    '_______________________________________________________________________________
    Sub_ausgabe_anzeige_satzpause:
    
       Var_ziffernwahl = Var_baelle_li
       Gosub Sub_ziffernwahl_baelle_li
    
    
       Var_ziffernwahl = Var_baelle_re
       Gosub Sub_ziffernwahl_baelle_re
    
    
       Var_ziffernwahl = Var_saetze_li
       Gosub Sub_ziffernwahl
       Var_saetze_li_ziffer = Var_ziffer
    
    
       Var_ziffernwahl = Var_saetze_re
       Gosub Sub_ziffernwahl
       Var_saetze_re_ziffer = Var_ziffer
    
       Flag_ende = 1
    
          Var_ausgabearray(1) = 0                               'ev.LED's  -gfedcba
          Var_ausgabearray(2) = Var_saetze_re_ziffer            'rechts Sätze
          Var_ausgabearray(3) = 0                               'Bälle rechts Einer
          Var_ausgabearray(4) = 0                               'Bälle rechts Zehner
          Var_ausgabearray(5) = 0                               '0=heim.1=gast/.2=AUF-re/.3=Ende/.4=AUF-li)
             Var_ausgabearray(5).0 = Flag_gh                    'Flag_gh
             Var_ausgabearray(5).1 = Flag_hg                    'Flag_hg
             Var_ausgabearray(5).2 = 0
             Var_ausgabearray(5).3 = Flag_ende
             Var_ausgabearray(5).4 = 0
          Var_ausgabearray(6) = 0                               'Bälle links Einer
          Var_ausgabearray(7) = 0                               'Bälle links Zehner
          Var_ausgabearray(8) = Var_saetze_li_ziffer            'links Sätze
    
    
    
       Spiout Var_ausgabearray(1) , 8
    Return
    
    Sub_ausgabe_anzeige_00:
    
       Var_ziffernwahl = Var_baelle_li
       Gosub Sub_ziffernwahl_baelle_li
    
    
       Var_ziffernwahl = Var_baelle_re
       Gosub Sub_ziffernwahl_baelle_re
    
    
       Var_ziffernwahl = Var_saetze_li
       Gosub Sub_ziffernwahl
       Var_saetze_li_ziffer = Var_ziffer
    
    
       Var_ziffernwahl = Var_saetze_re
       Gosub Sub_ziffernwahl
       Var_saetze_re_ziffer = Var_ziffer
    
    
          Var_ausgabearray(1) = 0                               'ev.LED's  -gfedcba
          Var_ausgabearray(2) = Var_saetze_re_ziffer            'rechts Sätze
          Var_ausgabearray(3) = Var_einer_baelle_re             'Bälle rechts Einer
          Var_ausgabearray(4) = Var_zehner_baelle_re            'Bälle rechts Zehner
          Var_ausgabearray(5) = 0                               '0=heim.1=gast/.2=AUF-re/.3=Ende/.4=AUF-li)
             Var_ausgabearray(5).0 = Flag_gh                    'Flag_gh
             Var_ausgabearray(5).1 = Flag_hg                    'Flag_hg
             Var_ausgabearray(5).2 = Flag_aufschlag_li
             Var_ausgabearray(5).3 = Flag_ende
             Var_ausgabearray(5).4 = Flag_aufschlag_re
          Var_ausgabearray(6) = Var_einer_baelle_li             'Bälle links Einer
          Var_ausgabearray(7) = Var_zehner_baelle_li            'Bälle links Zehner
          Var_ausgabearray(8) = Var_saetze_li_ziffer            'links Sätze
    
    
    
       Spiout Var_ausgabearray(1) , 8
    Return
    
    
    
    'Subs für den Taster "Weiter"__________________
    
    Sub_schleife_anz_start:
       Var_hauptschleife = Const_anz_start
    Return
    
    Sub_schleife_anz_wahl:
       Var_hauptschleife = Const_anz_wahl
    Return
    
    Sub_schleife_anz_00:
       Var_hauptschleife = Const_anz_00
    Return
    
    Sub_schleife_anz_01:
       Var_hauptschleife = Const_anz_01
    Return
    
    Sub_schleife_anz_satzende:
       Var_hauptschleife = Const_anz_satzende
    Return
    
    Sub_schleife_anz_satzpause:
       Var_hauptschleife = Const_anz_satzpause
    Return
    
    Sub_schleife_anz_seitenwechsel:
       Var_hauptschleife = Const_anz_seitenwechsel
    Return
    
    Sub_schleife_anz_spielende_1:
       Var_hauptschleife = Const_anz_spielende_1
    Return
    
    Sub_schleife_anz_spielende_2:
       Var_hauptschleife = Const_anz_spielende_2
    Return
    
    
    'Subs "Wahl"______________
    
    Sub_gewinnsaetze_festlegen:
       If Ta_rueckwaerts = 0 Then
          If Var_anzahl_der_gewinnsaetze > 1 Then
          Var_anzahl_der_gewinnsaetze = Var_anzahl_der_gewinnsaetze - 1
          End If
       End If
    
       If Ta_rueckwaerts = 1 Then
          If Var_anzahl_der_gewinnsaetze < 9 Then
          Var_anzahl_der_gewinnsaetze = Var_anzahl_der_gewinnsaetze + 1
          End If
       End If
    Return
    
    
    Sub_seitenwahl_1:                                           'wenn die Seitenwahl noch nicht betätigt wurde
       Var_betaetigt_gh = 1
    
       'Flag_gh_start = 1
    
       Var_summe_gs = Var_saetze_li + Var_saetze_re
    
       Flag_gh = Var_summe_gs.0
       Flag_hg = Not Flag_gh
    
    Var_alles_gewaehlt__weiter_moegl = Var_betaetigt_gh + Var_betaetigt_aufschlagwahl
    
    Return
    
    
    Sub_seitenwahl_2:                                           'wenn die Seitenwahl schon einmal erfolgt ist
       Var_betaetigt_gh = 1
       Var_alles_gewaehlt__weiter_moegl = Var_betaetigt_gh + Var_betaetigt_aufschlagwahl
    
       Toggle Flag_gh_start
       'Toggle Flag_hg_start
    
       Var_summe_gs = Var_saetze_li + Var_saetze_re
       Var_seite_im_spiel_vor_sw_ent = Var_summe_gs + Flag_gh_start
       Var_seite_im_spiel_nach_sw_ent = Var_seite_im_spiel_vor_sw_ent + Flag_seitenwechsel_erfolgt
    
       Flag_gh = Var_seite_im_spiel_nach_sw_ent.0
       Flag_hg = Not Flag_gh
    
    
    Return
    
    
    Sub_aufschlagwahl_1:
       Var_betaetigt_aufschlagwahl = 1
       Flag_aufschlag = 1
       Flag_aufschlag_li = Flag_aufschlag
       Var_alles_gewaehlt__weiter_moegl = Var_betaetigt_gh + Var_betaetigt_aufschlagwahl
    Return
    
    
    Sub_aufschlagwahl_2:
       Var_betaetigt_aufschlagwahl = 1
       Var_alles_gewaehlt__weiter_moegl = Var_betaetigt_gh + Var_betaetigt_aufschlagwahl
       Toggle Flag_aufschlag
       Flag_aufschlag_li = Flag_aufschlag
       Flag_aufschlag_re = Not Flag_aufschlag_li
    
       'Toggle Flag_aufschlag_re
    Return
    
    
    Sub_ziffernwahl:
    
    Select Case Var_ziffernwahl
    
       Case 0 : Var_ziffer = &B00111111
       Case 1 : Var_ziffer = &B00000110
       Case 2 : Var_ziffer = &B01011011
       Case 3 : Var_ziffer = &B01001111
       Case 4 : Var_ziffer = &B01100110
       Case 5 : Var_ziffer = &B01101101
       Case 6 : Var_ziffer = &B01111101
       Case 7 : Var_ziffer = &B00000111
       Case 8 : Var_ziffer = &B01111111
       Case 9 : Var_ziffer = &B01101111
       Case Else : Var_ziffer = &B01000000
    End Select
    Return
    
    
    Sub_ziffernwahl_baelle_li:
    
    
    Var_einer_baelle_li = Var_ziffernwahl Mod 10
    Var_ziffernwahl = Var_ziffernwahl - Var_einer_baelle_li
    Var_ziffernwahl = Var_ziffernwahl / 10
    
    Var_zehner_baelle_li = Var_ziffernwahl Mod 10
    Var_ziffernwahl = Var_ziffernwahl - Var_zehner_baelle_li
    Var_ziffernwahl = Var_ziffernwahl / 10
    
    If Var_baelle_li < 10 Then
    
    Select Case Var_einer_baelle_li
       Case 0 : Var_einer_baelle_li = &B00111111
       Case 1 : Var_einer_baelle_li = &B00000110
       Case 2 : Var_einer_baelle_li = &B01011011
       Case 3 : Var_einer_baelle_li = &B01001111
       Case 4 : Var_einer_baelle_li = &B01100110
       Case 5 : Var_einer_baelle_li = &B01101101
       Case 6 : Var_einer_baelle_li = &B01111101
       Case 7 : Var_einer_baelle_li = &B00000111
       Case 8 : Var_einer_baelle_li = &B01111111
       Case 9 : Var_einer_baelle_li = &B01101111
       Case Else : Var_einer_baelle_li = &B01000000
    End Select
    
    Var_zehner_baelle_li = 0
    
    Else
    
    Select Case Var_einer_baelle_li
       Case 0 : Var_einer_baelle_li = &B00111111
       Case 1 : Var_einer_baelle_li = &B00000110
       Case 2 : Var_einer_baelle_li = &B01011011
       Case 3 : Var_einer_baelle_li = &B01001111
       Case 4 : Var_einer_baelle_li = &B01100110
       Case 5 : Var_einer_baelle_li = &B01101101
       Case 6 : Var_einer_baelle_li = &B01111101
       Case 7 : Var_einer_baelle_li = &B00000111
       Case 8 : Var_einer_baelle_li = &B01111111
       Case 9 : Var_einer_baelle_li = &B01101111
       Case Else : Var_einer_baelle_li = &B01000000
    End Select
    
    Select Case Var_zehner_baelle_li
       Case 0 : Var_zehner_baelle_li = &B00111111
       Case 1 : Var_zehner_baelle_li = &B00000110
       Case 2 : Var_zehner_baelle_li = &B01011011
       Case 3 : Var_zehner_baelle_li = &B01001111
       Case 4 : Var_zehner_baelle_li = &B01100110
       Case 5 : Var_zehner_baelle_li = &B01101101
       Case 6 : Var_zehner_baelle_li = &B01111101
       Case 7 : Var_zehner_baelle_li = &B00000111
       Case 8 : Var_zehner_baelle_li = &B01111111
       Case 9 : Var_zehner_baelle_li = &B01101111
       Case Else : Var_zehner_baelle_li = &B01000000
    End Select
    
    End If
    
       Return
    
    
    Sub_ziffernwahl_baelle_re:
    
    
    Var_einer_baelle_re = Var_ziffernwahl Mod 10
    Var_ziffernwahl = Var_ziffernwahl - Var_einer_baelle_re
    Var_ziffernwahl = Var_ziffernwahl / 10
    
    Var_zehner_baelle_re = Var_ziffernwahl Mod 10
    Var_ziffernwahl = Var_ziffernwahl - Var_zehner_baelle_re
    Var_ziffernwahl = Var_ziffernwahl / 10
    
    If Var_baelle_re < 10 Then
    
    
    
    
    Select Case Var_einer_baelle_re
       Case 0 : Var_zehner_baelle_re = &B00111111
       Case 1 : Var_zehner_baelle_re = &B00000110
       Case 2 : Var_zehner_baelle_re = &B01011011
       Case 3 : Var_zehner_baelle_re = &B01001111
       Case 4 : Var_zehner_baelle_re = &B01100110
       Case 5 : Var_zehner_baelle_re = &B01101101
       Case 6 : Var_zehner_baelle_re = &B01111101
       Case 7 : Var_zehner_baelle_re = &B00000111
       Case 8 : Var_zehner_baelle_re = &B01111111
       Case 9 : Var_zehner_baelle_re = &B01101111
       Case Else : Var_zehner_baelle_re = &B01000000
    End Select
    
    Var_einer_baelle_re = 0
    
    Else
    
    Select Case Var_einer_baelle_re
       Case 0 : Var_einer_baelle_re = &B00111111
       Case 1 : Var_einer_baelle_re = &B00000110
       Case 2 : Var_einer_baelle_re = &B01011011
       Case 3 : Var_einer_baelle_re = &B01001111
       Case 4 : Var_einer_baelle_re = &B01100110
       Case 5 : Var_einer_baelle_re = &B01101101
       Case 6 : Var_einer_baelle_re = &B01111101
       Case 7 : Var_einer_baelle_re = &B00000111
       Case 8 : Var_einer_baelle_re = &B01111111
       Case 9 : Var_einer_baelle_re = &B01101111
       Case Else : Var_einer_baelle_re = &B01000000
    End Select
    
    Select Case Var_zehner_baelle_re
       Case 0 : Var_zehner_baelle_re = &B00111111
       Case 1 : Var_zehner_baelle_re = &B00000110
       Case 2 : Var_zehner_baelle_re = &B01011011
       Case 3 : Var_zehner_baelle_re = &B01001111
       Case 4 : Var_zehner_baelle_re = &B01100110
       Case 5 : Var_zehner_baelle_re = &B01101101
       Case 6 : Var_zehner_baelle_re = &B01111101
       Case 7 : Var_zehner_baelle_re = &B00000111
       Case 8 : Var_zehner_baelle_re = &B01111111
       Case 9 : Var_zehner_baelle_re = &B01101111
       Case Else : Var_zehner_baelle_re = &B01000000
    End Select
    
    End If
    
    
    Return
    
    
    Sub_zaehlen_li:
       If Ta_rueckwaerts = 0 Then
          If Var_baelle_li > 0 Then
          Decr Var_baelle_li
          Flag_rw_gezaehlt = 1
       End If
       End If
       If Ta_rueckwaerts = 1 Then
          Incr Var_baelle_li
          Flag_rw_gezaehlt = 0
       End If
    Return
    
    
    Sub_zaehlen_re:
       If Ta_rueckwaerts = 0 Then
          If Var_baelle_re > 0 Then
          Decr Var_baelle_re
          Flag_rw_gezaehlt = 1
       End If
       End If
       If Ta_rueckwaerts = 1 Then
          Incr Var_baelle_re
          Flag_rw_gezaehlt = 0
       End If
    Return
    
    
    Sub_rechnung_aufschlag:
    
    Var_summe_baelle = Var_baelle_li + Var_baelle_re
    
    Flag_aufschlag_2 = Flag_aufschlag + Flag_seitenwechsel_erfolgt
    
    If Var_summe_baelle > 19 Then
       Goto Satzverlaengerung
       Else
          If Flag_aufschlag_2.0 = 0 Then
          Flag_aufschlag_li = Var_summe_baelle.1
          Flag_aufschlag_re = Not Flag_aufschlag_li
          Goto Ende_aufschlagrechnung
       Else
          If Flag_aufschlag_2.0 = 1 Then
          Flag_aufschlag_re = Var_summe_baelle.1
          Flag_aufschlag_li = Not Flag_aufschlag_re
          Goto Ende_aufschlagrechnung
       End If
       End If
    End If
    
    Satzverlaengerung:
    
       If Flag_aufschlag_2.0 = 0 Then
          Flag_aufschlag_li = Var_summe_baelle.0
          Flag_aufschlag_re = Not Flag_aufschlag_li
       End If
    
       If Flag_aufschlag_2.0 = 1 Then
          Flag_aufschlag_re = Var_summe_baelle.0
          Flag_aufschlag_li = Not Flag_aufschlag_re
       End If
    
    Ende_aufschlagrechnung:
    
    Return
    
    
    Sub_seitenwechsel_satzende:
    
    'If Var_baelle_li > Var_baelle_re Then
    'Incr Var_saetze_li
    'End If
    
    'If Var_baelle_re > Var_baelle_li Then
    'Incr Var_saetze_re
    'End If
    
    'Return
    
    
    Gosub Sub_saetze_hochzaehlen
    
    
    A = Var_saetze_li                                           'Sätze Tauschen
    B = Var_saetze_re
    Var_saetze_li = B
    Var_saetze_re = A
    A = 0
    B = 0
    
    A = Var_saetze_li_2                                         'Sätze Tauschen_2
    B = Var_saetze_re_2
    Var_saetze_li_2 = B
    Var_saetze_re_2 = A
    A = 0
    B = 0
    
    
    
    
    
    
    'Toggle Flag_gh                                              'Heim/Gast tauschen
    'Toggle Flag_hg
       Var_summe_gs = Var_saetze_li + Var_saetze_re
       Var_seite_im_spiel_vor_sw_ent = Var_summe_gs + Flag_gh_start
       Var_seite_im_spiel_nach_sw_ent = Var_seite_im_spiel_vor_sw_ent + Flag_seitenwechsel_erfolgt
    
       Flag_gh = Var_seite_im_spiel_nach_sw_ent.0
       Flag_hg = Not Flag_gh
    
    
    
    Var_baelle_li = 0
    Var_baelle_re = 0
    
    Var_hauptschleife = Const_anz_satzpause
    
    
    Return
    
    
    Sub_saetze_hochzaehlen:
    
    If Var_baelle_li > Var_baelle_re Then                       'Sätze weiterzählen
    Incr Var_saetze_li
    End If
    If Var_baelle_re > Var_baelle_li Then
    Incr Var_saetze_re
    End If
    
    Return
    
    
    Sub_saetze_hochzaehlen_2:
    
    If Var_baelle_li > Var_baelle_re Then                       'Sätze weiterzählen
    Incr Var_saetze_li_2
    End If
    If Var_baelle_re > Var_baelle_li Then
    Incr Var_saetze_re_2
    End If
    
    Return
    
    
    Sub_seitenwechsel_entscheid_1:
    
    C = 1
    
    Return
    
    
    Sub_seitenwechsel_entscheid_2:
    
       'Flag_seitenwechsel_erfolgt = 1
    
       Var_summe_gs = Var_saetze_li + Var_saetze_re
       Var_seite_im_spiel_vor_sw_ent = Var_summe_gs + Flag_gh_start
       Var_seite_im_spiel_nach_sw_ent = Var_seite_im_spiel_vor_sw_ent + Flag_seitenwechsel_erfolgt
    
       Flag_gh = Var_seite_im_spiel_nach_sw_ent.0
       Flag_hg = Not Flag_gh
    
       A = Var_baelle_li                                        'Bälle Tauschen
       B = Var_baelle_re
       Var_baelle_li = B
       Var_baelle_re = A
       A = 0
       B = 0
    
    
    Return
    
    Sub_seitenwechsel_entscheid_3:
    
       'Flag_seitenwechsel_erfolgt = 1
    
       Var_summe_gs = Var_saetze_li + Var_saetze_re
       Var_seite_im_spiel_vor_sw_ent = Var_summe_gs + Flag_gh_start
       Var_seite_im_spiel_nach_sw_ent = Var_seite_im_spiel_vor_sw_ent - Flag_seitenwechsel_erfolgt
    
       Flag_gh = Var_seite_im_spiel_nach_sw_ent.0
       Flag_hg = Not Flag_gh
    
       A = Var_baelle_li                                        'Bälle Tauschen
       B = Var_baelle_re
       Var_baelle_li = B
       Var_baelle_re = A
       A = 0
       B = 0
    Return
    
    
    Timer1_isr:
    'nop
    Timer1 = Timer1startwert
    Toggle Leds_reset
    Return

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    O-kay - durch DIESEN Code werde ich so schnell nicht durchsteigen....

    Macht aber fast nix. Du beschreibst ja zwei Dinge: Erstens steht und fällt das Problem mit dem Freigeben der Interrupts, und zweitens führt das Problem dazu, dass der Controller "stehenbleibt". Das ganze klingt ein bisschen nach einem Stack-Overflow, d.h. der Speicherbereich, in dem alle möglichen Register bei Interrupts, Subs und ähnlichem abgelegt werden, reicht nicht aus. Ist das der Fall, hängt sich der Controller auf.

    Um zu verifizieren ob es tatsächlich der Timer1-Interrupt ist, könntest Du ja mal das Enable Interrupts stehen lassen, und stattdessen "Enable Timer1" aus dem Code löschen. Wenn der Fehler sich dann genauso verhält, kann es eigentlich nur mit dem Timer1-Interrupt zu tun haben.

    Du könntest dann mal versuchen, den Hardware- und Software-Stack zu vergrößern. Wenn nichts anderes definiert wird, legt Bascom sie beim Mega8 m.W. mit je 32 Bytes an. Probier doch mal z.B. 40:

    $hwstack = 40
    $swstack = 40

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    11.09.2013
    Ort
    Riesa
    Beiträge
    6
    Zitat Zitat von sauerbruch Beitrag anzeigen
    o-kay - durch diesen code werde ich so schnell nicht durchsteigen....
    hatte ich schon fast geahnt. Deshalb war auch der code nicht im ersten beitrag. Ich will von niemandem verlangen, sich den code zu verinnerlichen. Ich musste auch ein paar kommentare löschen, damit es in den beitrag passt. Ich bin guter dinge, dass wir weiterhin nach dem ausschlussverfahren der sache auf dem grund kommen.


    Zitat Zitat von sauerbruch Beitrag anzeigen
    Um zu verifizieren ob es tatsächlich der timer1-interrupt ist, könntest du ja mal das enable interrupts stehen lassen, und stattdessen "enable timer1" aus dem code löschen. Wenn der fehler sich dann genauso verhält, kann es eigentlich nur mit dem timer1-interrupt zu tun haben.
    das hatte keinen Erfolg

    Zitat Zitat von sauerbruch Beitrag anzeigen
    Du könntest dann mal versuchen, den hardware- und software-stack zu vergrößern. Wenn nichts anderes definiert wird, legt Bascom sie beim mega8 m.w. Mit je 32 bytes an. Probier doch mal z.b. 40:

    $hwstack = 40
    $swstack = 40
    Ich hab's auch noch mal verdoppelt (ob auch immer das Sinn macht) es tat sich nichts.

    Ich hatte auch mal statt Timer1 den Timer0 verwendet. es war das gleiche Spiel.

    Es scheint als ob es etwas mit den Interrupts zu tun hat. Wenn ich nur die Interrups einschalte um sie im Timer zu verwenden muss ich doch nicht die Interrupts ausschalten die sonst durch PINs ausgelöst werden, oder? Es ist doch auch egal, ob solche PINs Ein- oder Ausgänge sind, oder?


    Eine Sache die ich beobachte habe und die vielleicht wichtig sein könnte:
    Wenn ich die Reset-Taste betätige (PIN1) und unmittelbar hinterher die anderen Tasten, dann funktioniert das Programm für eine Sekunde für 1 bis drei Schritte und bleibt dann erst stehen.
    Das Compiliern zeigt mir 67% Speicheauslastung (weis nicht ob diese Info gebraucht wird).

    Behri

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Wenn ich die Reset-Taste betätige (PIN1) und unmittelbar hinterher die anderen Tasten, dann funktioniert das Programm für eine Sekunde für 1 bis drei Schritte und bleibt dann erst stehen.
    Dann wäre doch mal interessant, ob diese Zeit sich deutlich verlängert, wenn Du den Timer ordentlich langsamer machst. Nimm doch mal einem Prescaler von 64 und keinen Timerstartwert, dann sollte Timer1 alle ca. 4 Sekunden überlaufen anstatt alle 125 ms wie bisher.

    (*im-trüben-rumstocher...)

    P.S.: Und es ist absolut richtig, dass man all die anderen Interrupts nicht extra "ausschalten" muss. Das sind sie ganz von alleine nach dem Power-On-Reset, und nur die explizit aktivierten Interrupts (enable...) werden ausgeführt.

Ähnliche Themen

  1. Antworten: 14
    Letzter Beitrag: 17.02.2011, 17:30
  2. emc2 und Step3d vertragen sich nicht
    Von MisterMou im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 1
    Letzter Beitrag: 08.04.2010, 16:49
  3. Timer2 (Uhrenquarz) und Timer0 PWM vertragen sich nicht
    Von Marten83 im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 23.04.2009, 13:41
  4. dcf77 und ds1820 vertragen sich nicht...
    Von Mosi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 19
    Letzter Beitrag: 22.09.2007, 21:27
  5. AVR-DOS und LCD vertragen sich nicht - warum?
    Von vampi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 07.08.2007, 22:24

Berechtigungen

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

LiFePO4 Speicher Test