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







Zitieren

Lesezeichen