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

Thema: R/C Kanal auswerten - Pulse überprüfen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    19.03.2005
    Beiträge
    25

    R/C Kanal auswerten - Pulse überprüfen

    Anzeige

    Praxistest und DIY Projekte
    Hallo zusammen,

    ich programmiere gerade einen R/C Fahrtregler. Die Pulsdauer messen und als PWM ausgeben funktioniert über den Timer1 des Mega8 soweit ganz gut. Jetzt möchte ich zusätzlich ca. 20 Pulse in Neutralstellung auswerten. Wenn diese nicht ankommen (Sender aus) soll die PWM aus sein. Und genau daran scheitere ich gerade. Wie kann ich in Bascom ca. 20 Werte (Pulse) überprüfen und erst wenn 20 Pulse hintereinander ordentlich eintreffen die PWM einschalten??
    Hintergrund ist auch das wenn der Sender auf Vollgas steht der Regler nicht angeht, der Knüppel soll erst in Neutralstellung geschoben werden. Dann PWM ein.

    Wer kann mir sagen wie ich das in Bascom realisiere?
    Danke schon mal...

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von Tido
    Registriert seit
    14.11.2006
    Ort
    OWL
    Alter
    48
    Beiträge
    622
    Hi,

    das Programm würde evtl helfen.
    MfG
    Tido

    ---------------------------------------------------
    Have you tried turning it off and on again???
    ---------------------------------------------------

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    19.03.2005
    Beiträge
    25
    Hier der Code...
    Code:
     
    
    '******************************************************
    'Prozessor: ATMega8L
    'R/C_Kanal einlesen
    '
    'Hardware:
    'R/C-Kanal an D.2 (INT0)
    'LED an C.0
    'LED an C.1
    'LED an C.2
    '******************************************************
    
    $regfile "m8def.dat"
    $crystal = 1000000
    
    Config Lcdpin = Pin , Db4 = Portd.7 , Db5 = Portb.0 , Db6 = Portb.1 , Db7 = Portb.2 , E = Portd.6 , Rs = Portd.5
    Config Lcd = 16 * 2
    
    
    
    'Konfiguration der I/O-Ports´s
    Config Pind.2 = Input                                       'R/C Pulseingang
    Config Pinb.3 = Output                                      'PWM Ausgang
    Config Pind.7 = Output
    Config Pinb.0 = Output
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    Config Pind.6 = Output
    Config Pind.5 = Output
    Portd.2 = 1
    
    
    'Konfiguration des Timer1
    Config Timer1 = Timer , Prescale = 1
    
    'Konfiguration des INT0
    'Interrupt bei jedem Flankenwechsel (0->1 und 1->0)
    Config Int0 = Change
    
    '======================================================
    'Deklarationen
    '======================================================
    
    Dim Reading As Bit
    Dim Rc_value As Word
    Dim Error As Bit
    
    '======================================================
    'Initialisierungen
    '======================================================
    
    'Zuweisung der Interrupt-Service-Routinen
    On Int0 Rc_read
    On Timer1 Rc_error
    
    'Timer-Freigabe
    Enable Timer1
    Stop Timer1
    
    'PWM-Timer
    Enable Timer2
    Timer2 = 0
    Start Timer2
    
    'Freigabe der Interrupt-Routinen
    Enable Int0
    Enable Interrupts
    
    Cls
    Lcd "Timerwert:"
    
    'Den Cursor ausschalten
    Cursor Off
    
    
    '======================================================
    'Hauptprogramm-Schleife
    '======================================================
    
    Do
    
    'LED an bei Fehler (Timer-Überlauf)
    Portc.2 = Not Error
    
    'Den Timerwert ausgeben
       Locate 1 , 12
       Lcd Rc_value ; "     "
    
    'Erzeugung des PWM-Signals
    Ocr2 = Rc_value
    
    Loop
    
    
    
    End
    
    '======================================================
    'ISR für INT0 - R/C-Kanal lesen
    '======================================================
    Rc_read:
    'Den Timer starten mit steigender Flanke
    If Reading = 0 Then
       Start Timer1
       Reading = 1
       Set Portc.0
    'Den Timer stoppen mit fallender Flanke
    Else
       Stop Timer1
       Rc_value = Timer1
       Timer1 = 0
       Reading = 0
    End If
    'Error-Bit rücksetzen
    Error = 0
    Return
    
    '======================================================
    'ISR für Timer1 - Fehlerhandling
    '======================================================
    Rc_error:
    'Error-Bit setzen
    Error = 1
    Reading = 0
    Stop Timer1
    Rc_value = 0
    
    Return

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    warum nimmst du nicht den Befehl Pulse in???

    zb so:

    Code:
    Pulsein Pulsbreite1 , Pind , 5 , 1                          'Pulsbreite auslesen (1=High Impuls)
    'Knüppel OBEN
        If Pulsbreite1 > 200 Then               'wenn Knüppel oben
        'dann nicht einschalten...
        End If
    Tobias
    ...

Berechtigungen

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

LiFePO4 Speicher Test