Hallo,
ich habe 4 Signale die immer mit einer Länge zwischen 1 - 2 ms am µC Eingang liegen! Diese 4 Signale gehen auf 4 Eingänge und je nach Länge werden verschiedene µC Ausgänge geschaltet oder nicht!

Urspünglich hatte ich einen 4MHz Quarz für den µC genommen, um die 4 Eingänge abzufragen. Weil das zu langsam war habe ich auf 20 MHz erhöht! Leider dauert ein Zyklus immernoch (schätzungsweise) genauso lange wie mit den 4MHz!!!

Wenn ich ein Signal über die FB sende, dauert es ca. 1 Sekunde, bis der entsprechende Ausgang geschaltet hat! (und der µC macht sonst nix anderes!!!)

Weis jemand Rat?
Tobias

Programm:
Code:
'-------------------------------------------------------------------------------
' Modellbauschalter 4/8Kanal
'-------------------------------------------------------------------------------
'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 20 MHz = 9
 'unten einschalten ca.: 100 ->  bei 20 MHz = 6
 '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



'-------------------------------------------------------------------------------
'Konfiguration µC:
$regfile = "ATtiny2313.dat"                                 'ATtiny2313-Deklarationen
$crystal = 20000000                                         'Quarz: 20.0 MHz

'-------------------------------------------------------------------------------
'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


'-------------------------------------------------------------------------------
' HAUPTPROGRAMM
'-------------------------------------------------------------------------------


Do                                                          'Do Loop Schleife



'FB auswerten:

'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 Portb.3
    Kanal2o = 1
    End If
    If Pulsbreite2 < 9 Then
    Kanal2o = 0
    End If
'Knüppel rastend UNTEN
    If Pulsbreite2 < 6 And Kanal2u = 0 Then
    Toggle Portb.2
    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.4
    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



'================================================================================
'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 Zusatzfunktion 1 rastend
'PD6 = Licht vorne           Kanal 4->PD2 +6    15+ PB3 Licht Boden  2 / rastend  (OC1A)PWM
'PB0 = Licht hinten 1        Kanal 3->PD3 +7    14+ PB2 Licht Boden  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