Also mal ganz langsam für mich:

Ich habe ein Programm geschrieben und bin avon ausgegangen, das ich mit dem externen 20MHz Quarz arbeite. Da ich aber die Werte nicht errechnet sondern nach Empfinden eingestellt habe (z.b. Geschwindigkeit Übeblendeffekt) weiß ich nun naürlich nicht was ich eigendlich eingestellt habe...

Also hier das falsche Programm, welches aber funktioniert! Nur leider keine UART hat:

Code:
'-------------------------------------------------------------------------------
' Modellbauschalter 4/8Kanal mit ATtiny2313 und hardware PWM
'-------------------------------------------------------------------------------
'Beschreibung:

 '4Steuerkanäle von Fernsteuerung auf 8 µC - Ausgänge
 'Das Hi-Signal vom Empfänger wird mit "Pulsein" ermittelt!
 'Knüppelstellung mitte hat ca. 121 Zeiteinheiten bei einem 3.6864 MHz Quarz!
 'guter Schaltbereich für:
 'oben  einschalten ca.: 140 ->  bei 8 MHz int. = 9 ->  bei 20 MHz = 200
 'unten einschalten ca.: 100 ->  bei 8 MHz int. = 6 ->  bei 20 MHz = 100
 'Der mit "Pulsein" gemessene Wert wird in Pulsbreite1-4 ausgegeben.
 'Kanal1-3u/o wird zum speichern benutzt, damit damit nicht bei jedem Durchlauf
 'über "toggle" geschaltet wird, sondern erst wieder,
 'wenn der Knüppel vorher in Nullstellung gewesen ist!
 '"toggle" schaltet den Ausgang von Hi auf Low und wieder zurück!
 'Der PNP Transistor BD 238 schaltet bei einem LOW Signal 5V auf die LED
 'Nicht angeschlossene Kanäle müssen auf einen angeschlossenen Kanal gebrückt
 'werden, damit der Eingang nicht abgefragt wird - da kein Signal kommt wartet
 'das Programm, bis ein ERROR nach ca.650ms kommt!

 'Wenn beide Funktionen von Kanal 2 geschaltet haben wird die
 'Unterbodenbeleuchtung im wechsel über PWM gesteuert!


 'FUSE BITs SETZEN!!!!!!
 'Wenn er mit 8 MHz intern laufen soll (also kein externer Quarz):
 'Fusebit A987 wie es war (0100:intern RC 8MHz)
 'Fusebit C -> 1:Divide clock by 8 disabled


'-------------------------------------------------------------------------------
'Konfiguration µC:
$regfile = "ATtiny2313.dat"                                 'ATtiny2313-Deklarationen
$crystal = 20000000                                         'interne Frequenz bei ATtiny2313
$baud = 9600                                                'Baudrate der UART: 9600 Baud

'-------------------------------------------------------------------------------
'Ein- Ausgänge:
Ddrd = &B1000011                                            '1 Ausgang, 0 Eingang = Pin PD6,1+0 als Ausgang / PD5-2 als Eingang
Ddrb = &B11111111                                           '1 Ausgang, 0 Eingang = Pin PB7-0 als Ausgang
Portb = &B11111111                                          'PB0...PB7 auf High setzen

'-------------------------------------------------------------------------------
'Variablen auswertung FB
 Dim Pulsbreite1 As Word                                    'Knüppelstellung Knüppel 1                  '
 Dim Pulsbreite2 As Word
 Dim Pulsbreite3 As Word
 Dim Pulsbreite4 As Word

 Dim Kanal1o As Bit                                         'Speicher von Knüppel 1 OBEN
 Dim Kanal1u As Bit                                         'Speicher von Knüppel 1 UNTEN
 Dim Kanal2o As Bit
 Dim Kanal2u As Bit
 Dim Kanal3o As Bit
 Dim Kanal3u As Bit

 Dim Led1 As Byte
 Dim Led1m As Byte                                          'LED1 Merker
 Dim Led2 As Byte
 Dim Led2m As Byte
 Dim Led1pause As Word                                      'Als Pause zwischen den Lichteffekten für die UnterBodenbel.

 Dim Portb3 As Bit                                          'PWM
 Dim Portb4 As Bit                                          'PWM


'-------------------------------------------------------------------------------
'Konfiguration Timer:
 Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
 Config Timer0 = Timer , Prescale = 256                     'Teiler
 Enable Timer0                                              'timer einschalten
 On Timer0 Ledcount                                         'Unteprogramm aufrufen
 Enable Interrupts                                          'interrupts  einschalten


'-------------------------------------------------------------------------------
' HAUPTPROGRAMM
'-------------------------------------------------------------------------------
 Led1 = 255                                                 'PWM Startwert vorgeben
 Led2 = 1                                                   'PWM Startwert vorgeben


Do                                                          'Do Loop Schleife

'Print "U-Boden toggle: " ; Portb3
'Print "U-Boden toggle: " ; Portb4
'Print "Led1: " ; Led1
'Print "Led2: " ; Led2


'Hardware PWM mit Timer1   U N D
'FB auswerten: Umschaltung von normal auf PWM

 If Portb3 = 0 And Portb4 = 0 Then

 Compare1a = Led1                                           '=PB3  /  max 255
 Compare1b = Led2                                           '=PB4  /  max 255

 Else
   If Portb3 = 0 Then
   Compare1a = 255
   Else
   Compare1a = 0
   End If

   If Portb4 = 0 Then
   Compare1b = 255
   Else
   Compare1b = 0
   End If

 End If




'FB auswerten:
'Umschaltung von normal auf PWM


'Kanal 1 LICHT HINTEN:
'____________________

Pulsein Pulsbreite1 , Pind , 5 , 1                          'Pulsbreite auslesen (1=High Impuls)
'Knüppel rastend OBEN
    If Pulsbreite1 > 9 And Kanal1o = 0 Then                 'wenn Knüppel oben und Kanal1oben=0 dann
    Toggle Portb.1                                          'Pin 1 mal schalten (entweder auf Hi oder Low je nach vorherigem zustand)
    Kanal1o = 1                                             'Variable Kanal1o setzen damit nicht neu getoggled werden kann
    End If
    If Pulsbreite1 < 9 Then                                 'Wenn Knüppel nicht oben dann
    Kanal1o = 0                                             'Variable Kanal1o RÜCKsetzen damit neu getoggled werden kann
    End If
'Knüppel rastend UNTEN
    If Pulsbreite1 < 6 And Kanal1u = 0 Then
    Toggle Portb.0
    Kanal1u = 1
    End If
    If Pulsbreite1 > 6 Then
    Kanal1u = 0
    End If



'Kanal 2 UNTERBODEN:
'___________________

Pulsein Pulsbreite2 , Pind , 4 , 1                          'Pulsbreite auslesen (1=High Impuls)
'Knüppel rastend OBEN
    If Pulsbreite2 > 9 And Kanal2o = 0 Then
    Toggle Portb3
    Kanal2o = 1
    End If
    If Pulsbreite2 < 9 Then
    Kanal2o = 0
    End If
'Knüppel rastend UNTEN
    If Pulsbreite2 < 6 And Kanal2u = 0 Then
    Toggle Portb4                                           'ACHTUNG PB4!!! nicht PB2!!!
    Kanal2u = 1
    End If
    If Pulsbreite2 > 6 Then
    Kanal2u = 0
    End If



'Kanal 3:
'________

Pulsein Pulsbreite3 , Pind , 3 , 1                          'Pulsbreite auslesen (1=High Impuls)
'Knüppel rastend OBEN
    If Pulsbreite3 > 9 And Kanal3o = 0 Then
    Toggle Portb.5
    Kanal3o = 1
    End If
    If Pulsbreite3 < 9 Then
    Kanal3o = 0
    End If
'Knüppel rastend UNTEN
    If Pulsbreite3 < 6 And Kanal3u = 0 Then
    Toggle Portb.2                                          'ACHTUNG PB2!!!  nicht PB4!!!
    Kanal3u = 1
   End If
    If Pulsbreite3 > 6 Then
    Kanal3u = 0
    End If



'Kanal 4 (Taster / Taster):
'________

Pulsein Pulsbreite4 , Pind , 2 , 1                          'Pulsbreite auslesen (1=High Impuls)
'Knüppel tastend OBEN
    If Pulsbreite4 > 9 Then                                 'Knüppel oben
    Portb. 7 = 0                                            'Port PB 7 setzen
    Else                                                    'sonst
    Portb. 7 = 1                                            'Port PB 7 zurücksetzen
    End If
'Knüppel tastend UNTEN
    If Pulsbreite4 < 6 Then                                 'Knüppel unten
    Portb. 6 = 0                                            'Port PB 6 setzen
    Else                                                    'sonst
    Portb. 6 = 1                                            'Port PB 6 zurücksetzen
    End If



'Automatikfunktion für Scheinwerfer:    GEPRÜFT MIT HARDWARE OK
'___________________________________

    If Portb.0 = 0 Or Portb.1 = 0 Then                      'Wenn PB0 oder PB1 Hi sind dann
    Portd.6 = 0                                             ' PD6 setzen
    Else                                                    'sonst
    Portd.6 = 1                                             'PD6 RÜCKsetzen
    End If

 Loop



 'Unterprogramme:
 '_______________

 Ledcount:                                                  'Farbwechsel über Timer1

    Timer0 = 150                                            'LED´s wechseln die Farbe mit ca 2 Hz


 'While Led1pause < 1000                                      'wenn Led1Pause < 100 dann Schleife bearbeiten
 'Incr Led1pause
 'Print "Led1Pause: " ; Led1pause

    '---LED1---
    If Led1 = 255 Then                                      'Wenn Led1 100% dann Merker zum hochzählen setzen
     Led1m = 0
    End If

    If Led1 = 0 Then                                        'Wenn Led1 0% dann Merker zum runterzählen setzen
     Led1m = 1
    End If

    'Zähler1 hoch/runter
    If Led1m = 1 Then
     Incr Led1                                              'Wenn Merker Led1m = 1 -> um 1 hochzählen
    End If

    If Led1m = 0 Then
     Decr Led1                                              'um 1 runterzählen
    End If


    '---LED2---
    If Led2 = 255 Then
     Led2m = 0
    End If

    If Led2 = 0 Then
     Led2m = 1
    End If

    'Zähler1 hoch/runter
    If Led2m = 1 Then
     Incr Led2                                              'um 1 hochzählen
    End If

    If Led2m = 0 Then
     Decr Led2                                              'um 1 runterzählen
    End If



 'Wend


    'If Led1pause = 100 Then
    'Led1pause = 0
    'End If

Return

'================================================================================
'Pinbelegung µC
'===============================================================================
'                                      AtmelATtiny2313
'PD0 = Frei                               +---U---+
'PD1 = ResetTaster            (Reset) PA2 +1    20+ Vcc +5V
'PD2 = Kanal 4                 FREI ->PD0 +2    19+ PB7 Zusatzfunktion 3 tastend
'PD3 = Kanal 3                 FREI ->PD1 +3    18+ PB6 Hupe / tastend
'PD4 = Kanal 2           x x Xtal 2 / PA1 +4    17+ PB5 Zusatzfunktion 2 rastend
'PD5 = Kanal 1           x x Xtal 1 / PA0 +5    16+ PB4 Licht Boden  2 / rastend  (OC1B)PWM
'PD6 = Licht vorne           Kanal 4->PD2 +6    15+ PB3 Licht Boden  1 / rastend  (OC1A)PWM
'PB0 = Licht hinten 1        Kanal 3->PD3 +7    14+ PB2 Zusatzfunktion 1 rastend  (OC0A)PWM
'PB1 = Licht hinten 2        Kanal 2->PD4 +8    13+ PB1 Licht hinten 2 / rastend
'PB2 = Licht Boden  1        Kanal 1->PD5 +9    12+ PB0 Licht hinten 1 / rastend
'PB3 = Licht Boden  2                 GND +10   11+ PD6 Licht vorne
'PB4 = Zusatzfunktion 1                   +-------+
'PB5 = Zusatzfunktion 2
'PB6 = Hupe
'PB7 = Zusatzfunktion 3
Da ich noch nichts von den Fuse Bits wuste habe ich die auch nicht verstellt

Fusebits habe ich so(also unverändert):

http://www.putfile.com/pic.php?img=3894932

Tobias