- LiFePO4 Speicher Test         
Ergebnis 1 bis 4 von 4

Thema: Bereich zu klein?

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

    Bereich zu klein?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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
    94
    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/3D-Druck/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/3D-Druck/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
  •  

Solar Speicher und Akkus Tests