- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 28

Thema: PWM und SOFTUART gleichzeitig

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    32
    Beiträge
    1.578

    [Geändert] PID-Regler für Tricopter mit Wii Motion Plus

    Hallo,

    für mein momentanes Projekt benötige ich einen AVR, der über 1 Pin Daten empfängt (SOFTUART), diese dann zerlegt und anschließend mittels PWM ausgibt. Beispiel:

    Der ATMEGA8 sendet "120*90*100*200"
    Jetzt soll mein zweiter AVR (ein ATTINY45) diesen String empfangen und in 4 Teile zerlegen:
    1. "120"
    2. "90"
    3. "100"
    4. "200"

    Diese 4 Strings soll er nun auf 4 verschiedene PWM-Ausgänge geben. Der PWM-Teil läuft soweit, jedoch nur, solange ich meinen Split-Befehl auskommentiere.
    Hier mal mein Programm:
    Code:
    $regfile = "attiny45.dat"
    $crystal = 8000000
    $framesize = 60
    $hwstack = 60
    $swstack = 60
    
    
    Open "COMB.0:19200,8,N,2,INVERTED" For Input As #1
    
    Config Pinb.0 = Input
    
    
    
    Config Servos = 3 , Servo1 = Portb.3 , Servo2 = Portb.2 , Servo3 = Portb.4 , Servo4 = Portb.1 , Reload = 4 , Intervall = 10
    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Portb.3 = Output
    Config Portb.4 = Output
    
    
    Dim _input As String * 15
    Dim _data(4) As String * 5
    Dim _lenght As Byte
    Dim _bl(4) As Byte
    Dim _blold(4) As Byte
    Dim I As Byte
    
    
    Const Min_servo = 11
    Const Max_servo = 70
    
    
    'STARTUP###########
    _input = ""
    _lenght = 0
    For I = 1 To 4
     _bl(i) = Min_servo
     _blold(i) = _bl(i)
     Servo(i) = _bl(i)
    Next I
    I = 0
    '##################
    
    
    Enable Interrupts
    
    
    
    Do
    
    
    Input #1 , _input Noecho
    _lenght = Split(_input , _data(1) , "*")
    If _lenght > 0 Then
    For I = 1 To 4
    _bl(i) = Val(_data(i))
    Servo(i) = _bl(i)
    Next I
    _input = ""
    _lenght = 0
    End If
    
    
    Loop
    
    End
    Sobald der Split-Befehl im Programm steht, wird die PWM-ISR teilweise blockiert und meine Signale stimmen nicht mehr.
    Was kann ich nun dagegen tun? Den Split-Befehl rausnehmen und das Ganze irgendwie anders lösen?
    Meine Hardware sieht so aus:
    Ein Atmega8 lest ein WM+ und einen 4CH-Empfänger (über Summensignal) ein und errechnet daraus 4 versch. Werte für 3 BLM und 1 Servo.
    Diese 4 Werte muss ich nun an den ATTINY45 (als "PWM-Controller") senden (habe nur 1 Pin). Dieser soll dann seinen 4 PWM-Ausgängen diese 4 Werte zuweisen. Die PWM-Frequenz liegt bei 50Hz.

    Über ein paar konstruktive Ideen würde ich mich sehr freuen.
    Gruß
    Chris
    Geändert von Che Guevara (16.05.2011 um 16:54 Uhr)

Ähnliche Themen

  1. 2 ISR gleichzeitig?
    Von DerSchatten im Forum C - Programmierung (GCC u.a.)
    Antworten: 15
    Letzter Beitrag: 26.01.2010, 09:48
  2. Problem ISP und USI als i2c gleichzeitig
    Von vklaffehn im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 16.08.2007, 14:46
  3. 8 Aufgaben gleichzeitig?
    Von Athlonxp2000 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 28.12.2006, 14:15
  4. 2 Interrupts gleichzeitig???
    Von x8r im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 23.01.2006, 18:49
  5. 16 IOs und LCD (quasi-gleichzeitig)
    Von lanzelot im Forum C-Control II
    Antworten: 13
    Letzter Beitrag: 01.02.2005, 04:21

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress