- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 4 von 4

Thema: Zeit für Pulsein "Messung"?

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627

    Zeit für Pulsein "Messung"?

    Anzeige

    Praxistest und DIY Projekte
    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

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    Hab den Fehler gefunden - aber wie beheben??

    Also einen Kanal habe ich als "Reserve" programmiert und da das Kabel nicht angeschlossen ist kommen auch keine Impulse auf den Eingang: Pulsein wartet dann die volle Zeit von 65535/10us = 655,35ms und erst dann läuft mein Programm weiter!! Kann man die 655,35ms irgendwie verkürzen?

    Bascom Hilfe:
    RR variable will be set to 1 in case of a time out. A time out will occur after 65535 unit counts. With 10 uS units this will be after 655.35 mS.


    Tobias

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.07.2006
    Ort
    Berlin
    Beiträge
    439
    Hallo Tobias,

    kannst du nicht den Reservekanal einfach überspringen, vielleicht in Abhängigkeit vom Signal an einem Port-Pin? Oder du legst eins von den anderen Signalen zusätzlich auf den Reserve-Kanal.

    Gruß
    Detlef

    Gruß
    Detlef

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    Hallo Detlef,
    das könnte ich machen: ich lege einfach eins von den andere Signalen über einen Jumper auf den Reserve Eingang.

    Gute Idee - Danke!

    Da hätte ich ja eigendlich auch selber drauf kommen können
    Tobias

Berechtigungen

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

12V Akku bauen