-         
Ergebnis 1 bis 10 von 10

Thema: RC Empfänger auswerten

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.01.2009
    Ort
    Dortmund
    Alter
    23
    Beiträge
    114

    RC Empfänger auswerten

    Anzeige

    Hi Leute..
    Für eine Beleuchtungssteuerung vür ein RC-Modell muss ich die PWM-Kanäle des Empfängers auswerten.

    Ich habe schon schon was zu dem Thema im Wissensbereich gefunden (Das hier)

    Leider verstehe ich das nicht so ganz... Und das mit dem Summensignal ist auch schlecht, da der Empfänger, den ich verwenden will, kein Summensignal bietet...

    Gibt es auch einen einfacheren Code um EINEN RC-Kanal auszuwerten???


    Wäre euch sehr dankbar, wenn ihr mir bei meinem Problem helfen könntet...


    Mfg Yannik
    Wer Rechtschreibfehler findet, darf sie behalten!

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    55
    Beiträge
    5.789
    Blog-Einträge
    8
    Hallo

    Im Wiki wird die Verwendung eines externen Interrupts beschrieben. Es gibt auch noch andere Möglichkeiten das RC-Signal auszumessen. Welches Verfahren für dich am günstigsten ist, hängt wohl in erster Linie davon ab, was der von dir verwendete Kontroller sonst noch erledigen muss und welche Auflösung die Messung haben soll (und wie "kompliziert" die Lösung sein darf;).

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.01.2009
    Ort
    Dortmund
    Alter
    23
    Beiträge
    114
    So, ich habe mir jetzt folgenden Code zusammengebastelt :

    Code:
    $regfile = "m16def.dat"
    $crystal = 16000000
    $hwstack = 32
    
    Config Portd.2 = Input
    
    Dim Lesen1 As Bit
    Dim Empf_wert1 As Byte
    
    Lesen1 = 0
    
    Config Timer0 = Timer , Prescale = 256
    Enable Timer0
    Stop Timer0
    On Timer0 Error
    
    Config Int0 = Rising
    On Int0 Messen1
    Enable Interrupts
    Enable Int0
    
    Do
    ...
    Loop
    
    End
    
    Messen1:
    
       If Lesen1 = 0 Then
          Start Timer0
          Lesen1 = 1
          Config Int0 = Falling
       Else
          Stop Timer0
          Empf_wert1 = Timer0
          Timer0 = 0
          Lesen1 = 0
          Config Int0 = Rising
       End If
    
    Return
    
    Error:
    ...
    Return

    So, könnt ihr mir sagen ob das richtig ist??? Vorallem das mit dem Configurieren des Interrupts.. Erst wollte ich einen Atmega644 nehmen, der kann bei den Interrupts auch den Change Befehl verwenden, ich habe aber festgestellt, das für meinen Code auch ein Atmega16 reicht, aber der kann mit dem Change befehl nix anfangen.. Deshalb frag ich hier lieber mal nach, ob das so richtig ist

    Danke im Vorraus


    Mfg Yannik
    Wer Rechtschreibfehler findet, darf sie behalten!

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.927
    Ich bin nun kein Bascom Crack, aber gibts da nicht den PULSEIN Befehl?

    Wäre der dafür geeignet ?

    Hier : http://www.rclineforum.de/forum/thre...16e8078012a18e

    wird genau Dein Problem behandelt...

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    aber der kann mit dem Change befehl nix anfangen..
    Wie kommst Du denn darauf?

    Die Idee mit Change ist nämlich ziemlich gut, genau so habe ich schon in diversen Anwendungen gemessen, was aus einem Empfängerausang rauskommt. In der ISR wird kurz abgefragt ob der Eingang H oder L ist, und je nach dem entweder den Timer gestartet, oder seinen Wert übernommen und auf 0 gesetzt. Funktioniert bestens!

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.01.2009
    Ort
    Dortmund
    Alter
    23
    Beiträge
    114
    Zitat Zitat von Sauerbruch
    aber der kann mit dem Change befehl nix anfangen..
    Wie kommst Du denn darauf?
    Das sagt Bascom mir, wenn ich Compilieren will..

    Ich habgrade nochmal geguckt und bei Int0 und Int1 scheint er Change doch zu kennen...

    Ich habe mal nur Int0 Und Int1 wieder auf change geändert und dann konnte ich ohne einen error compilieren..

    Dann habe ich auch Int2 geändert und da steht dann

    "Error : 347 Line : 72 External Interrupt Mode not supported or found in DAT file [change]"

    Macht Bascom da irgendeinen fehler oder kann Int2 das nicht???


    Wäre den mein Code THEORETISCH richtig?? Mit Change gefällt mir das auch besser, aber das geht ja anscheinent nicht..
    Wer Rechtschreibfehler findet, darf sie behalten!

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Im Datenblatt habe ich folgende Passage gefunden:

    Interrupts
    The External Interrupts are triggered by the INT0, INT1, and INT2 pins. Observe that, if enabled, the interrupts will trigger even if the INT0..2 pins are configured as outputs. This feature provides a way of generating a software interrupt. The external interrupts can be triggered by a falling or
    rising edge or a low level (INT2 is only an edge triggered interrupt).

    INT2 kann und muss man daher nicht konfigurieren. Mit den Zeilen

    On Int2 XXX
    Enable INT2
    Enable Interrupts

    müsste es gehen.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.01.2009
    Ort
    Dortmund
    Alter
    23
    Beiträge
    114
    Das habe ich noch nicht so ganz gecheckt, also kann Int2 nicht zwischen steigender und fallender Flanke unterscheiden und wird daher automatisch bei jeder veränderung anspringen???
    Wer Rechtschreibfehler findet, darf sie behalten!

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Riiich - tiiich

    Ich hatte zwar noch nie so was großes wie einen Mega16 auf´m Board, aber bei (fast) allen µCs gibt´s was vergleichbares, nämlich die PinChange-Interrupts. Bei denen erklärt sich das Ganze natürlich schon über den Namen "PinChange"-Interrupt. Die kann man daher natürlich auch nicht auf steigende oder fallende Flanken konfigurieren, sondern sie werden bei jedem Flankenwechsel angesprungen, wenn sie aktiviert sind.

    Das wird beim INT2 beim Mega16 genau so sein!

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.927
    ...man kann natürlich auch innerhalb des Interrupts das Sensing von steigender Flanke auf fallende Flanke umstellen und das zu ändernde Bit auch gleich als Flag für die Auswertung im nächsten Interrupt verwenden.

    Ich persönlich bin von diesen Pin Change Interupts nicht so begeistert, weil die bei viele Controllern in Gruppen zusammengefasst sind und man dann per Software rausfinden muß, welcher Eingang denn nun den Interrupt hervorgerufen hat.
    Aber das ist natürlich ein Frage der persönlichen Vorlieben.

Berechtigungen

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