- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 22 von 22

Thema: Mit Taster von einem Loop zum nächsten springen

  1. #21
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Anzeige

    Powerstation Test
    Zitat Zitat von Bow-Hunter Beitrag anzeigen
    Hab ich da was falsch kopiert? Folgende Fehlermeldung kommt.
    Hallo Glenn, hat Sauerbruch schon erläutert. Die Deklarationen der Variablen könnte so aussehen (und es könnten immer noch welche fehlen?):
    Code:
     '### Alle Variablen können als Byte deklariert werden (spart Speicher im kleinen Tiny13)
    .
    .
    Dim Anzahlmodi As Byte
    Dim Modus As Byte
    Dim Anzahlphasen as Byte
    Dim Phase as Byte
    
    Modus = 1
    Anzahlmodi = 3
    .
    .

    Code:
    Compare0a = 116                                             '99,84ms Interruptperiode bei 1,2MHz µC-Takt
    Config Timer0 = Timer , Prescale = 1024 , Clear_timer = 1   'Timer0 im Clear Timer on Comparematch
    
    On Compare0a Isr_blink                                      'ISR wird bei Compare Match A aufgerufen
    Und könntest du mir diesen Bereich etwas genauer erklären?
    Mit dem Config Timer0 Kommando wird der Timer in den Clear Timer on Compare Match Mode gebracht. Erklärt im RN Wiki http://rn-wissen.de/wiki/index.php/T..._Match_mode.29 (und im Datenblatt zum Tiny13 ). Compare0a=116 setzt das OCR0A Register, so daß der Timer0 nach 116 Schritten wieder bei 0 an zu zählen fängt. Der Presacaler 1024 sorgt dafür, das der Timer mit 1/1024stel des Systemtaktes läuft. Er läuft also mit 1200000Hz/1024 = 1171,875Hz, braucht also für einen Schritt 1/1171,875Hz = 0,000853s. Für 116 (OCR0A) Schritte plus 1 = 117 * 0,000853s = 0,099801s.
    Der Timer läuft also in knapp 100ms von 0 auf 116 (116Schritte) dann wieder auf 0 (117ter Schritt) und erzeugt jedesmal wenn er auf 116 ist einen ComparematchA Interrupt.
    Mit On Compare0a Isr_blink werden also alle ca 100ms die LEDs geschaltet. Der Code ist nicht ganz vollständig. Es fehlt noch "Enable Compare0a" und "Enable Interrupts" direkt nach "On Compare0a .."

    Dadurch, daß die ISR (Interrupt Service Routine) immer nur alle 100ms die LEDs schaltet, kann ein Druck auf die Taste erst nach maximal 125ms - aber nicht länger - sichtbar werden. (100ms wg. Interruptfrequenz und 25ms Verzögerung durch die Debounce Routine). Falls da was stört, könnte man sich noch was überlegen...

    Gruß und hoffentlich klappts
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  2. #22
    Neuer Benutzer Öfters hier
    Registriert seit
    23.12.2013
    Beiträge
    21
    Hab das "Dim Pattern As Byte" vergessen.
    Jetzt funktioniert alles einwandfrei. Vielen Dank für die Tatkräftige Unterstützung.
    Hätte das so nie herausgefunden.

    Finaler Code:
    Code:
    $regfile = "attiny13.dat"
    $crystal = 1200000
    $hwstack = 34                                               '### hwstack vergrößern. Wichtig bei Verwendung von Interrupts
    $swstack = 10
    $framesize = 10
    
    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Portb.3 = Output
    Config Portb.4 = Output
    Config Pinb.0 = Input
    
    
    Dim Anzahlmodi As Byte
    Dim Modus As Byte
    Dim Anzahlphasen as Byte
    Dim Phase As Byte
    Dim Pattern As Byte
    
    Modus = 1
    Anzahlmodi = 3
    
                                                                '### Alle Variablen können als Byte deklariert werden (spart Speicher im kleinen Tiny13)
    
                                                                '### Der Timer0 wird für die Blink- bzw. Schaltfrequenz konfiguriert
    
    Compare0a = 116                                             '99,84ms Interruptperiode bei 1,2MHz µC-Takt
    Config Timer0 = Timer , Prescale = 1024 , Clear_timer = 1   'Timer0 im Clear Timer on Comparematch
    
    On Compare0a Isr_blink
    
    Enable Compare0a
    
    Enable Interrupts                                    'ISR wird bei Compare Match A aufgerufen
    
                                                                '### In der Haupschleife steht nur die Tastenabfrage inclusive Tastenentprellung
    
    Do                                                          'Beginn Hauptschleife
      Debounce Pinb.0 , 1 , Changemodus , Sub                   'Führt Unterprogramm aus, wenn Pinb.0 auf 1 wechselt
    Loop                                                        'Ende Hauptschleife
    
                                                                '### Nach Tastendruck wird dieses Unterprogramm ausgeführt, daß den Lichteffekt weiterschaltet und
                                                                '### die nötigen Parameter für die Interruptserviceroutine setzt.
    
    Changemodus:                                                'Unterprogramm setzt Werte für Lichteffekt nach Tastendruck
      Disable Compare0a                                         'Vermeidet Inkonsistenzen in der ISR
      If Modus < Anzahlmodi Then Incr Modus Else Modus = 1
      Select Case Modus
        Case 1 : Anzahlphasen = 0                               'Muß Anzahl der Daten in den DATA-Zeilen entsprechen
        Case 2 : Anzahlphasen = 5                               'Wert von 0 = ein Eintrag, 5 = sechs Einträge bei DATA
        Case 3 : Anzahlphasen = 1                               '.
      End Select
      Phase = 0
      Enable Compare0a
    Return
    
    
                                                                '### In der Interruptserviceroutine wird alle 100ms das neue Schaltmuster für die LEDs gelesen und
                                                                '### die LEDs geschaltet.
    
    Isr_blink:                                                  'wird alle ca. 100ms aufgerufen und schaltet die LEDs
      If Phase < Anzahlphasen Then Incr Phase Else Phase = 0    'setzt die nächste Effektphase
      Select Case Modus                                         'entsprechend dem Modus wird das Bitmuster für LEDs geholt
        Case 1 : Pattern = Lookup(phase , Lichteffekt1)
        Case 2 : Pattern = Lookup(phase , Lichteffekt2)
        Case 3 : Pattern = Lookup(phase , Lichteffekt3)
      End Select
      Portb.1 = Pattern.3                                       'LED wird geschaltet
      Portb.2 = Pattern.2                                       'LED wird geschaltet
      Portb.3 = Pattern.1                                       'LED wird geschaltet
      Portb.4 = Pattern.0                                       'LED wird geschaltet
    Return
    End                                                         'end program
    
    
                                                                '### Hier sind die Schaltmuster abgelegt.
    
    Lichteffekt1:
    Data &B0000
    
    Lichteffekt2:
    Data &B1010 , &B1001 , &B1010 , &B0101 , &B0110 , &B0101
    
    Lichteffekt3:
    Data &B1111 , &B0000

    Hab mal meinen Verwendungszweck gefilmt...

    https://www.dropbox.com/s/9huyg7qzqg...94432.mp4?dl=0

    So, die eine Baustelle ist fertig, jetzt kommt die Nächste...

    https://www.roboternetz.de/community...trom-An-Aus%29

Seite 3 von 3 ErsteErste 123

Ähnliche Themen

  1. Drei Led´s mit einem Taster unabhängig von einander schalten
    Von p@ty im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 61
    Letzter Beitrag: 10.07.2014, 13:03
  2. von einem zu anderem springen?
    Von robots4-ever im Forum Software, Algorithmen und KI
    Antworten: 2
    Letzter Beitrag: 08.04.2012, 21:24
  3. Screens wechseln mit 2 Taster (oder mit einem Taster)
    Von tordy im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 14.07.2009, 14:39
  4. 3 Taster von RN-LCD-Adapter mit einem Port abfragen
    Von masabuana im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 20.07.2007, 13:23
  5. Von Unterprogramm zum Hauptprogrammanfang springen
    Von Hübi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 06.02.2007, 19:15

Berechtigungen

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

LiFePO4 Speicher Test