-         

Ergebnis 1 bis 4 von 4

Thema: Bereich zu klein?

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627

    Bereich zu klein?

    Anzeige

    Hallo,
    ich habe eine Relaissteuerung seit längerem in Betrieb.
    Nun sind Relais dazugekommen und da ist der Fehler entstanden.

    Anscheinend funktioniert nur 0-15 als Wert und ich benötige mindestens 16, besser mehr.
    Was muss ich ändern, damit ich mehr eintragen kann?

    es geht um diesen Programmteil: L.16 geht nicht mehr
    Code:
    Dim T1 As Byte , T2 As Byte  
    Dim L As Integer 
    
    '...
    
    Setzen:
         Portd.2 = L.1
         Portd.4 = L.2
         Portc.5 = L.3
         Portc.4 = L.4
         Portc.3 = L.5
         Portc.2 = L.6
         Portc.1 = L.7
         Portc.0 = L.8
         Portb.5 = L.9
         Portb.4 = L.10
         Portb.3 = L.11
         Portb.2 = L.12
         Portb.1 = L.13
         Portb.0 = L.14
         Portd.7 = L.15
         'Portd.6 = L.16
    Return
    Hier das (fast) ganze Programm:

    Code:
    'Timer0 = 8 Bit
      Config Timer0 = Timer , Prescale = 8
      On Timer0 Timer0_irq
      Const Timervorgabe_t0 = 78                                'Timeraufruf alle 178µs (10 Samples = 1 Bit = 1,778ms)
      Enable Timer0                                             'Hier werden die Timer aktiviert
      Enable Interrupts
    
    
    '16Bit Timer:
    Config Timer1 = Timer , Prescale = 64
    On Timer1 Timer1_irq
    Const Timervorgabe_t1 = 64286                               '100 mal pro Sekunde @ 8MHz
      Enable Timer1                                             'Hier werden die Timer aktiviert
      Enable Interrupts
    
    '-------------------------------------------------------------------------------
    'Variablen:
    '-------------------------------------------------------------------------------
    
    Dim Address_rc5 As Byte , Command_rc5 As Byte , Rc5_flag As Bit , Command_old As Bit
    
    'Taste 1-6 auf der FB
    Dim T1 As Byte , T2 As Byte
    
    Dim Status As Byte                                          'zeigt den Status der gewaehlten Lampe an NICHTS / AN / AUS
    
    Dim Empfang As Bit                                          'ist 0 wenn kein empfang (also 255 von Variable address)
    
    Dim Zaehler As Byte                                         'wenn = 100 dann 1 sec um
    Dim L As Integer
    
    Dim Setzen_merker As Bit                                    '1 = setzenroutine freigegeben
    Dim Z_timer1 As Byte                                        '100 = 1 sec
    
    Input_pin Alias Pind.3
    
    'Set Portd.3                                                'Pull Up für Empfänger
    
    Const An = 1
    Const Aus = 0
    Const Nichts = 255
    
    
      'Timing für 10 Samples Per Bit = 1,778ms
      Const Samples_early = 8                                   'Flanke Frühestens Nach 8 Samples
      Const Samples_late = 12                                   'Flanke Spätestens Nach 12 Samples
      Const Samples_min = 3                                     'Flanke Vor 3 Samples - > Paket Verwerfen
    
      'Variablen der IR-ISR
      Dim Sample As Byte                                        'eigentlich Bit, spart aber 46Byte ROM
      Dim Ir_lastsample As Byte                                 'zuletzt gelesenes Sample
      Dim Ir_bittimer As Byte                                   'zählt die Aufrufe von Timer_IRQ
      Dim Ir_data_tmp As Word                                   'Bitstream
      Dim Ir_bitcount As Byte                                   'Anzahl gelesener Bits
    
    
    
    '-------------------------------------------------------------------------------
    'Vor Programmstart:
    
    Zaehler = 0
    Status = Nichts
    '-------------------------------------------------------------------------------
    '-------------------------------------------------------------------------------
    'Hauptprogramm Do...Loop
    '-------------------------------------------------------------------------------
    '-------------------------------------------------------------------------------
    Print "Programm Start 38400 Baud..."
    Do
    
    
    If Rc5_flag = 1 Then
       Reset Rc5_flag
    
       If Address_rc5 = 10 Then                                 'Adresse 10=ASAT  /(0=TV FB)
             Incr Zaehler
              If Command_rc5.7 <> Command_old Then
                Zaehler = 0                                     'wenn ungleich also neuer Befehl, dann Zaehler zurücksetzen
                Status = Nichts
                Command_old = Command_rc5.7
              End If
    
            Reset Command_rc5.7                                 'reset toggle bit
    
            'Print Command_rc5
    
            Select Case Command_rc5
               Case 0 : Gosub Alles_aus                         'Print "CASE = 0"
               Case 1 : T1 = 1
                         T2 = 2
                         Gosub Lampe1
    
               Case 2 : T1 = 3
                         T2 = 4
                         Gosub Lampe1
    
               Case 3 : T1 = 5
                         T2 = 6
                         Gosub Lampe1
    
               Case 4 : T1 = 7
                         T2 = 8
                         Gosub Lampe1
    
               Case 5 : T1 = 9
                         T2 = 10
                         Gosub Lampe1
    
               Case 6 : T1 = 11
                         T2 = 12
                         Gosub Lampe1
    
               Case 7 : Gosub Gruppe_7
    
               Case 9 : Gosub Gruppe_9
    
               Case 12 : Gosub Alles_aus
    
               Case Else : Print "Fehler: " ; Command_rc5
            End Select
       End If
    End If
      '_______________________________________________________________________________
    If Z_timer1 > 40 And Setzen_merker = 1 Then                 'Schaltvert für Z_Timer1 ist Quarzfrequenz abhängig und soll bei langem Tastendruck verhindern
    Setzen_merker = 0                                           'dass wenn eine Lampe an ist und die zweite hinzukommt, dass die erste kurz aus geht!
    Gosub Setzen
    End If
    
    
    Loop
    End
    
    
    
    '-------------------------------------------------------------------------------
    'Relais ansteuern
    '-------------------------------------------------------------------------------
    
    'Status = so wie der aktuelle Status IST (nicht wie er sein soll!!!)
    
    
    Lampe1:
    '=============
    'aktuellen Status auslesen und setzen
             If Status = Nichts Then
                If L.t1 = 0 Then
                   Status = Aus
                Else
                   Status = An
                End If
             End If
    
    
    
    
             If Zaehler = 0 Then                                'WENN KURZ GEDRÜCKT WURDE
             'Print Zaehler ; " = Zaehler = 0"
                If Status = Aus Then                            'wenn lampe eingeschaltet werden soll dann
                   Set L.t1
                   'Print "L" ; T1 ; ":1"
    
                Else                                            'wenn lampe 1 = an
    
                   If L.t2 = 1 Then
                      Reset L.t2
                      'Print "L" ; T2 ; ":0"
                   Else
                      Reset L.t1
                      'Print "L" ; T1 ; ":0"
                   End If
    
                End If
             End If
    
    
    
    
    
    'WENN LANGE GEDRÜCKT WURDE
             If Zaehler > 2 Then
             'Print Zaehler ; " = Zaehler > 2"
    
                If Status = Aus Then
                   Set L.t2
                   'Print "Lange" ; T2 ; ":1"
                Else
                   If L.t2 = 0 Then
                      Set L.t1
                      Set L.t2
                      'Print "Lange" ; T1 ; ":1 und " ; T2 ; ":1"
                   End If
                End If
             End If
    
    Setzen_merker = 1
    'Print "Setzen_merker = " ; Setzen_merker
    
    If Zaehler = 0 Then                                         'die Variable soll nur bei kurzem Tastendruck eine Zeitverzögerung machen
    Z_timer1 = 0                                                'Timer1 zurücksetzen
    End If
    
    'Gosub Setzen
    Return
    
    'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    'XXXXXXXXX  P  R  O  B  L  E  M   XXXXXXXXXXXXXXXXXXXXXXXXX
    'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    Setzen:
    'Print " S E T Z E N "
    'Print Zaehler ; " Zaehler"
         Portd.2 = L.1
         Portd.4 = L.2
         Portc.5 = L.3
         Portc.4 = L.4
         Portc.3 = L.5
         Portc.2 = L.6
         Portc.1 = L.7
         Portc.0 = L.8
         Portb.5 = L.9
         Portb.4 = L.10
         Portb.3 = L.11
         Portb.2 = L.12
         Portb.1 = L.13
         Portb.0 = L.14
         Portd.7 = L.15
         'Portd.6 = L.16
    
         Print L.1 ; L.2 ; L.3 ; L.4 ; L.5 ; L.6
    
    
    Return
    
    
    Timer1_irq:
    Timer1 = Timervorgabe_t1
       If Z_timer1 < 255 Then
          Incr Z_timer1
       End If
    
    Return
    
    '*************************************************************************************
    'Quelle: Bascom-Forum
    
    Timer0_irq:
      Timer0 = Timervorgabe_t0
      Sample = Not Input_pin
    
      'bittimer erhöhen (bleibt bei 255 stehen)
      If Ir_bittimer < 255 Then Incr Ir_bittimer
    
      'flankenwechsel erkennen
      If Ir_lastsample <> Sample Then
    
         If Ir_bittimer <= Samples_min Then
           'flanke kommt zu früh: paket verwerfen
           Ir_bitcount = 0
         Else
           'nur Flankenwechsel in Bit-Mitte berücksichtigen
           If Ir_bittimer >= Samples_early Then
               If Ir_bittimer <= Samples_late Then
                 'Bit speichern
                  Shift Ir_data_tmp , Left , 1
                  Ir_data_tmp = Ir_data_tmp + Sample
                  Incr Ir_bitcount
               Else
                  'Flankenwechsel zu spät: Neuanfang mit gemessener Flanke
                  Ir_bitcount = 1
                  Ir_data_tmp = Sample
               End If
               'bittimer zurücksetzen wenn Timer > Samples_early
               Ir_bittimer = 0
           End If
         End If
    
        'Kontrolle des Startbits auf 1
         If Ir_bitcount = 1 Then Ir_bitcount = Ir_data_tmp.0
    
         'Alle 14 Bits gelesen?
         If Ir_bitcount >= 14 Then
           Command_rc5 = Ir_data_tmp                            'Bit 6 und 7 siehe unten
           Shift Ir_data_tmp , Right , 6
           Address_rc5 = Ir_data_tmp And &B00011111
           'For extended RC5 code, the extended bit is bit 6 of the command.
           Command_rc5.6 = Not Ir_data_tmp.6
           'The toggle bit is stored in bit 7 of the command
           Command_rc5.7 = Ir_data_tmp.5
           'Paket erfolgreich gelesen
           Set Rc5_flag
           'paket zurücksetzen
           Ir_bitcount = 0
         End If
    
      End If
      'sample im samplepuffer ablegen
      Ir_lastsample = Sample
    
    Return
    vielen Dank, Tobias
    ...

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.01.2007
    Ort
    westliches Pannonien
    Beiträge
    123
    Hallo!

    Ungetestet und ein Schuß ins Blaue:

    Nimm ein Long - sind 4 Byte sollte dann theoretisch von 0 - 31 gehen.

    Probiers mal.

    MfG

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Anscheinend funktioniert nur 0-15 als Wert und ich benötige mindestens 16, besser mehr.
    0-15 sind 16!

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627
    Hallo Rone,
    da hab ich wohl einen Denkfehler gemacht.
    Vielen Dank! Mit "LONG" funktioniert es und 0-31 reicht aus.

    Tobias
    ...

Ähnliche Themen

  1. RN-Mega8plus Bohrungen JP1 und JP2 für Stiftleisten zu klein
    Von Gerd_Loewe im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 5
    Letzter Beitrag: 16.03.2011, 13:30
  2. eagle Pads zu klein
    Von einballimwas im Forum Konstruktion/CAD/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 17
    Letzter Beitrag: 16.08.2008, 16:01
  3. Lötstopplack und Durchmesser zu klein?
    Von BlackDevil im Forum Konstruktion/CAD/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 4
    Letzter Beitrag: 26.07.2008, 13:49
  4. Servo Drehwinkel zu Klein
    Von PabloEscoba im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 8
    Letzter Beitrag: 09.05.2006, 09:51
  5. Servo Drehwinkel zu Klein ?!
    Von PabloEscoba im Forum Motoren
    Antworten: 2
    Letzter Beitrag: 07.05.2006, 09:30

Berechtigungen

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