- LiFePO4 Speicher Test         
Ergebnis 1 bis 8 von 8

Thema: Problem: ATTiny13 mit RC-Servosignal/WS2803 LED-Treiber

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    25.11.2012
    Beiträge
    5

    Problem: ATTiny13 mit RC-Servosignal/WS2803 LED-Treiber

    Hallo,

    nachdem ich nun selber nicht mehr weiter komme, versuche ich nun einen barmherzigen Bascom-Helfer zu finden, der mir vielleicht weiter helfen kann.

    Ich habe ein ATMega8-Programm welches mir abhängig von einem durch einen Interrupt ausgelöstes Event (Servo-Signal aus einem RC-Empfänger), Lichtspielereien an einem WS2803 LED-Treiber ermöglicht.

    Soweit funktioniert auch mit dem Mega8 alles wie ich es möchte. Allerdings wollte ich aufgrund von Platzersparnis nun einen ATTiny13 verwenden. Dieser hat allerdings nur einen 8-bit-Timer. Aber ich glaube mein portiertes Programm hat schon mit dem Interrupt Probleme. Hier der Quellcode in Bascom:

    Code:
    $regfile = "ATtiny13.dat"                                   'es handelt sich um einen ATTiny13
    $crystal = 9600000                                          'der eingebauter RC-Oszillator läuft mit 9,6 Mhz
    $hwstack = 32
    $swstack = 10
    $framesize = 10
    
    
    Config Portb = Output                                       'Alle IO-Pins als Ausgang
    Ddrb.1 = 0                                                  'B1 = Interrupt also Eingang
    
    Dim I As Byte
    Dim J As Byte
    Dim K As Byte
    
    Dim Reading As Bit
    Dim Timer_wert As Byte
    Dim Error As Bit
    
    Clk1 Alias Portb.0
    Data1 Alias Portb.2
    
    'Timer1 konfigurieren
    Config Timer0 = Timer , Prescale = 1024
    
    'Interrupt Int0 auf wechselndes Signal konfigurieren
    Config Int0 = Change
    
    
    '======================================================
    'Initialisierungen
    '======================================================
    
    'Zuweisung der Interrupt-Service-Routinen
    On Int0 On_int0
    On Timer0 On_timer0
    
    'Timer-Freigabe
    Enable Timer0
    Stop Timer0
    
    'Freigabe der Interrupt-Routinen
    Enable Int0
    Enable Interrupts
    
    '======================================================
    'Hauptprogramm - Lauflicht mit 5 LEDs an einem WS2803
    '======================================================
    
    Do
          If Timer_wert < 200 Then
    
          K = 1
          Do
    
          Gosub Reset_ws2803
    
          For J = 1 To 18
             For I = 1 To 8
                If J = K Then Data1 = 1 Else Data1 = 0
                Gosub Clk_ws2803
             Next I
          Next J
          Waitms 7
    
          K = K + 1
    
          Loop Until K > 5
    
          End If
    
    Loop
    End
    
    
    '======================================================
    'Unterprogramme
    '======================================================
    
    On_int0:                                                    'Interrupt
       'Den Timer starten mit steigender Flanke
       If Reading = 0 Then
          Start Timer0
          Reading = 1
       'Den Timer stoppen mit fallender Flanke
       Else
          Stop Timer0
          Timer_wert = Timer0
          Timer0 = 0
          Reading = 0
       End If
       'Error-Bit rücksetzen
       Error = 0
    Return
    
    
    On_timer0:                                                  'Timer
       'Error-Bit stzen
       Error = 1
       Reading = 0
       Stop Timer0
       Timer_wert = 0
    Return
    
    
    'WS2803 LED-Treiber resetten
    Reset_ws2803:
       Clk1 = 0
       Waitus 600
    Return
    
    'WS2803 alle LEDs aus
    Clear_ws2803:
       For J = 1 To 18
          For I = 1 To 8
             Data1 = 0
             Gosub Clk_ws2803
          Next I
       Next J
    Return
    
    'WS2803 Clocksignal
    Clk_ws2803:
       Clk1 = 0
       Waitus 1
       Clk1 = 1
       Waitus 1
    Return
    Sobald ich die Fernsteuerung einschalte, blinken die LEDs undefiniert. Ansonsten laufen sie anständig durch. Ich habe den Timer auch zum Test mal herausgenommen und das Timer-Unterprogramm "On_timer0" komplett geleert aber immer der gleiche Müll. Ich denke der Interrupt vermurkst mir das Timing für den WS2803 aber auf dem Mega8 lief es ja einwandfrei. Ich weiss ehrlich keinen Rat mehr. Hat von euch vielleicht jemand eine Idee?

    P.S.:
    R/C-Signal ist mit 50 Hz PWM moduliert und variiert je nach Reglerstellung zwischen 1-2 ms. Der Interrupt-Pin ist mit diesem Signal verbunden. Bei steigender Flanke wird der Timer gestartet und mit fallender Flanke wieder gestoppt.

    Der WS2803 wird seriell mit Graustufen für 18 LEDs befüllt. Ich beschränke mich auf "volle Helligkeit". D.h. ich schiebe 18 x 8bit für die Graustufen in den Chip, hier 18 x den Binärwert für 256. Die Ansteuerung funktioniert wie gesagt soweit, bis ich eben den R/C-Sender einschalte und der Interrupt-Pin dann seine Signalwechsel bekommt.

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo Poettie,
    ich glaube nicht, dass du 18 mal den Wert 256 rausschickst, maximal gehen 255 in 8 Bit. Tatsächlich schickt deine Schleife aufgrund der Abfrage J=K wahrscheinlich das hier raus:
    255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0

    Wieso der Int dazwischenfunken soll, sehe ich noch nicht.
    Jedenfalls würde ich die Synchronisierung uber das Bit Reading anders machen. Wenn dies einmal aus dem Tritt kommt, passt das nicht mehr. Daher würde ich dir empfehlen, den Wert des Eingangs abzufragen.
    If PinB.1 = 1 Then 'dann war es eine steigende Flanke
    Zeige doch mal dein funktionierendes Programm für den M8.

Ähnliche Themen

  1. [ERLEDIGT] ATtiny13: Problem mit ADC Abfrage!
    Von bnitram im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 23.05.2011, 20:23
  2. ATtiny13 Problem mit PWM
    Von stefan8010 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 21.05.2011, 09:25
  3. Suche 3.3V RGB-LED-Treiber mit integriertem Step-Up
    Von Goblin im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 4
    Letzter Beitrag: 24.04.2010, 15:26
  4. Problem ASURO-LIB I2C mit SAA1064 LED-Treiber
    Von mmittler im Forum Asuro
    Antworten: 0
    Letzter Beitrag: 01.10.2008, 05:26
  5. [gelöst]Problem mit Interrupt Attiny13
    Von OEP im Forum Assembler-Programmierung
    Antworten: 2
    Letzter Beitrag: 19.04.2007, 09:47

Berechtigungen

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

Solar Speicher und Akkus Tests