- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 28

Thema: PWM und SOFTUART gleichzeitig

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #14
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    32
    Beiträge
    1.578
    Meinst du den letzten Code von mir? Was vermisst du den daran?
    Ok, werds mal mit 6 Bytes insgesamt probieren.

    Gruß
    Chris

    EDIT:
    Habs jetzt mal so probiert mit Start- und Stop-Byte, jedoch tut sich nichts... PWM wird zwar erzeugt, aber sie verändert sich nicht, d.h. die Werte werden nicht korrekt eingelesen?!
    ATTINY2313:
    Code:
    $regfile = "attiny2313.dat"
    $crystal = 16000000
    $framesize = 20
    $hwstack = 20
    $swstack = 20
    $baud = 19200
    
    
    
    Config Timer0 = Timer , Prescale = 1                        '100kHz
    Timer0 = 96
    On Timer0 Servo_irq
    Enable Timer0
    
    
    Config Portd.2 = Output
    Config Portd.3 = Output
    Config Portd.4 = Output
    Config Portd.5 = Output
    
    Const Start_byte = 0
    Const Stop_byte = 127
    
    Dim _start As Byte
    Dim _stop As Byte
    
    Dim Servo(4) As Byte
    Dim _ist As Byte
    Dim _bl(4) As Byte
    Dim I As Byte
    
    Const Min_servo = 65
    Const Max_servo = 160
    Const Diff_servo = Max_servo - Min_servo
    
    For I = 1 To 4
    _bl(i) = Min_servo
    Servo(i) = _bl(i)
    Next I
    
    
    Enable Interrupts
    
    
    Do
    
    
    Inputbin _start
    While _start <> Start_byte                                  'warte auf start
     Inputbin _start
    Wend
    Inputbin _bl(1) ; _bl(2) ; _bl(3) ; _bl(4) ; _stop
    
    If _stop = Stop_byte Then
     For I = 1 To 4
      If _bl(i) < Min_servo Then _bl(i) = Min_servo
      If _bl(i) > Max_servo Then _bl(i) = Max_servo
      Servo(i) = _bl(i)
     Next I
    End If
    
    
    Loop
    
    End
    
    
    Servo_irq:
    Timer0 = 96
    Incr _ist
    If _ist >= 200 Then _ist = 0
    If Servo(1) > _ist Then
     Portd.2 = 1
    Else
     Portd.2 = 0
    End If
    If Servo(2) > _ist Then
     Portd.3 = 1
    Else
     Portd.3 = 0
    End If
    If Servo(3) > _ist Then
     Portd.4 = 1
    Else
     Portd.4 = 0
    End If
    If Servo(4) > _ist Then
     Portd.5 = 1
    Else
     Portd.5 = 0
    End If
    Return
    ATMEGA8:
    Code:
    $regfile = "m8def.dat"
    $crystal = 16000000
    $framesize = 80
    $hwstack = 80
    $swstack = 80
    $baud = 19200
    
    
    Config Serialout = Buffered , Size = 20
    
    
    Config Timer2 = Timer , Prescale = 256
    On Timer2 Detectrxpause
    Enable Timer2
    
    Config Int1 = Rising
    On Int1 Getreceiver
    Enable Int1
    
    
    Config Pind.3 = Input
    Portd.3 = 0
    
    Const Start_byte = 0
    Const Stop_byte = 127
    
    Const _maxchannel = 4
    
    Dim Bufferbyte As Byte
    Dim Kanal(_maxchannel) As Byte
    Dim Channel As Byte
    Dim _bl(_maxchannel) As Byte
    Dim I As Byte
    
    Dim Max_kanal(_maxchannel) As Byte
    Dim Min_kanal(_maxchannel) As Byte
    Dim Diff_kanal(_maxchannel) As Byte
    
    
    For I = 1 To _maxchannel
     _bl(i) = 0
     Max_kanal(i) = 100
     Min_kanal(i) = 100
     Diff_kanal(i) = Max_kanal(i) - Min_kanal(i)
    Next I
    
    
    Enable Interrupts
    
    
    Do
    
    '(
    For I = 1 To _maxchannel
     If Kanal(i) > Max_kanal(i) Then
      Max_kanal(i) = Kanal(i)
      Diff_kanal(i) = Max_kanal(i) - Min_kanal(i)
     End If
     If Kanal(i) < Min_kanal(i) Then
      Min_kanal(i) = Kanal(i)
      Diff_kanal(i) = Max_kanal(i) - Min_kanal(i)
     End If
    Next I
    ')
    
    For I = 1 To _maxchannel
     _bl(i) = Kanal(i)                                          '- Min_kanal(i)
    Next I
    
    
    Printbin Start_byte ; _bl(1) ; _bl(2) ; _bl(3) ; _bl(4) ; Stop_byte
    
    Waitms 100
    
    
    Loop
    
    End
    
    
    Getreceiver:
    If Channel > 0 And Channel < 5 Then
      Kanal(channel) = Timer2
    End If
    Timer2 = 6
    Incr Channel
    Return
    
    Detectrxpause:
    Channel = 0
    Return
    Wo könnte mein Problem sein?
    Geändert von Che Guevara (14.05.2011 um 21:53 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