-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: RC5 Code (Philips) mit Picaxe 08M generieren

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.08.2004
    Alter
    38
    Beiträge
    105

    RC5 Code (Philips) mit Picaxe 08M generieren

    Anzeige

    Vielleicht etwas verwirrend, daher editiert siehe Ende des Textes.Hallo
    Hoffe hier kann mir jemand weiterhelfen. Möchte mit einem Picaxe ein Philips Gerät ansteuern. Hierzu kann ich leider nicht den Unterstützten Sony Code nutzen, sondern muss den RC5 Code anwenden.

    Bei dem RC 5 Code wird ein "1" Bit übertragen als abwechselnd 32 Impulse a 6,9444us und 32 pausen a 20,8332us (entspricht 36KHz).

    Bei einer normalen Fernbedienung für Philips Geräte wird dies Taktung von einem 36KHz Generator übernommen, und dieser wird zum Erzeugen der benötigten Bits ein und ausgeschaltet.

    Ich würde nun gern mit dem PWM Ausgang diese Taktung erzeugen. Für ein "1" Bit müßte ich dann den PWM Ausgang für 889uS aus, dann für 889uS einschalten. Für ein "0" Bit andersrum (erst ein, dann aus).

    In dieser Weise würde ich dann meine gewünschten 14 Bit (für meinen Befehl zusammengestellt) per Ansteuerung einer IR Led über den PWM Port senden.

    Sollte ja normalerweise möglich sein. Der Picaxe soll vorerst auch nur für diese eine Aufgabe genutzt werden.

    Wie programmiere ich nun den PWM Ausgang auf meinen "Wunsch"? Komme damit noch nicht so ganz klar und währe für Hilfe sehr dankbar!
    Den Rest bekomme ich wahrscheinlich Problemlos hin.


    Edit:
    [glow=red:77a3133240]Einfacher gesagt:[/glow:77a3133240]
    Ich brauche Hilfe bei der Erstellung eines "PWM Programms" mit folgenden Parametern: Impuls (6,9444µS) dann Pause (20,8332µS) dann Impuls (6,9444µS) dann Pause (20,8332µS)...
    Um meine gewünschten "Bits" dann zu übertragen würde ich diese PWM Signal dann entsprechend ein bzw abschalten um meine IR LED anzusteuern.
    Vielen Dank für Eure Bemühungen
    Mirco

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    10.12.2005
    Beiträge
    52
    Hi

    Der PWM-Befehl dürfte für Dein Problem nicht geeignet sein.
    Er dauert pro Zyklus 5ms und gibt dabei ein High und ein Low-Pegel raus, der durch die duty-Zahl angegeben wird.
    (0 nur low, 127 halb an und halb aus, 255 nur high *denk*)
    Damit zu Deinen Zeiten zu gelangen dürfte zwar machbar sein, aber wohl eher umständlich.

    Für Dein Problem dürfte der Befehl PULSOUT besser geeignet sein.
    Syntax:
    PULSOUT pin,time
    - Pin ist eine Variable im Bereich von 0 bis 7, welche den i/o Pin spezifiziert
    - time ist eine Variable für die Anzahl an High-Perioden (0-65535), bei 4MHz in 10µs Happen

    Pin beim PICAXE08M 0,1,2,4 (Pins, die Ausgänge sein können).
    Im Beispiel für Pulsout ist folgende Zeile zu sehen:
    pulsout 4,150 '1.50ms puls raus an Pin 4
    Dabei wird der Pin 4 für 1.5ms auf high gehalten. (bei 4MHz)

    Im Anschluß kannst Du eine Pause machen:
    pause 5 'Pause von 5ms (Kommawerte sind hier nicht möglich)
    ODER
    Indem wir auf einem anderem Pin ein Pulsout senden.

    Für Dein Beispiel könnte folgendes klappen:
    pulsout 4,89 '0.89ms -> 890µs | High an Ausgang 4
    pulsout 2,89 '0.89ms -> 890µs | Low an Ausgang 4 (weil wir gerade an 2 arbeiten)

    Da PULSOUT den Programmablauf für die Dauer des Puls unterbricht, müsste das schon für Dich brauchbar sein.

    Wenn Dir die 10µs Stufung nicht ausreicht, kannst Du durch Umstellen auf 8MHz Takt diese Stufung auf 5µs reduzieren, wenn z.B. Fernbedienungsbefehle teilweise verstümmelt ankommen.

    4MHz 10us 'Happen'
    8MHz 5us 'Happen'
    16MHz 2.5us 'Happen' (vom PICAXE08M nicht unterstützt)

    setfreq m4 'auf 4MHz
    setfreq m8 'auf 8MHz

    Zu Achten ist bei der Nutzung von DEGUG, daß im DEBUG-Fenster die Frequenz mit dem im Programm übereinstimmen muß, da sonst das Debug-Fenster die Werte des PIC nicht auslesen kann.

    MfG
    Posti

    EDIT:
    Was ich gerade sehe:
    (6,9444µS) dann Pause (20,8332µS)
    Da wir, bei 8MHz eine Stufung von 5µs haben, könnte es sein, daß diese Funktionen Dich doch nicht zum Erfolg führen.
    Da müsste man vll doch mit PWM arbeiten (PWM unterbricht das Programm ebenfalls während des Sendens).

    PWM pin,duty,cycles
    - Pin is a variable/constant (0-7) which specifies the i/o pin to use.
    - Duty is a variable/constant (0-255) which specifies analog level.
    - Cycles is a variable/constant (0-255) which specifies number of cycles. Each
    cycle takes about 5ms.

    PWM 2,255,1
    sollte den Pin2 für 5ms auf high halten.
    So müsste man auf eine Auflösung von 5ms / 255=19,6µs kommen, was aber für Deine Anforderungen ebenfalls zu langsam ist.
    Sollte der PWM-Befehl auch Frequenz-abhängig sein, könnte hier vll auf 10µs (19,6/2) gekommen werden, was Dir aber auch nicht weiterhelfen dürfte.

    Sorry, bin mit meinem Latein am Ende :-/

    MfG
    Posti

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.08.2004
    Alter
    38
    Beiträge
    105

    Vielen Dank für deine Hilfeversuche

    Hallo.
    Danke für deine Hinweise.

    Leider bin ich auch noch nicht wirklich weiter, da meine Puls / Pausen-verhältnisse (von 6,9444µs Puls + 20,8333µs pause.....) anscheinend einfach zu schnell für den Picaxe sind.
    Hatte Ursprünglich angenommen, es sei sehr einfach. Wollte einfach Port einschalten, nach gewünschter zeit auf 0 und dann eben wieder einschalten... leider sind die kürzesten verfügbaren Pausen ja im ms Bereich, was mir nichts bringt

    Aber irgendwie muß es ja gehen, denn der im Picaxe integrierte "IR Sony Code" wird ja auch mit 38KHz ausgesendet. Beim RC5 Code benötige ich als Grundtakt 36KHZ.
    Mal schauen. Vielleicht findet sich ja noch eine Lösung. Sonst versuche ich einen externen Oszillator mit 36KHz aufzubauen, den ich einfach vom Picaxe aus ansteuer um meine Bits zu übertragen. Wir in normalen Fernbedienungen ja ähnlich gemacht.

    Hatte nur gehofft es ohne große externe Beschaltung hinzubekommen!

    Grüße Mirco

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    05.01.2006
    Beiträge
    18
    Moin Mirco,

    habe zufällig in den letzten Tagen etwas sehr ähnliches realisiert ...

    Zu den Zeiten: Die Periodendauer beim PICAXE08M ist in Schritten von 1us einstellbar, die On-Time in Schritten von 0,25us. Die Parameter für das von Dir gewünschte Verhältnis wären also period=27 (gewünschter Wert - 1!) und duty=28.

    Was nicht exakt hinzubekommen ist, ist die gewünschte Sendedauer von jeweils 889us. Allerdings bezweifle ich, daß diese Genauigkeit bei einer IR-Fernsteuerung wirklich erforderlich ist. Ich würde es einfach mal versuchen - die 889us entsprechen zufällig (grob) der Dauer eines Basic-Befehls. Also den PWM mit PWMOUT 2, 27, 28 und PWMOUT 2,0,0 sequentiell ein- und ausschalten ergibt eine "1", andere Reihenfolge eine "0".

    Sollte eigentlich funktionieren ...

    Nice week,
    Zardoz

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.08.2004
    Alter
    38
    Beiträge
    105

    Hey vielen Dank für die Infos.

    Hallo.
    Wofür brauchtest du denn diese kurzen Signale?

    Habe da noch ein paar kurze Fragenn zum Verständnbiss, um deine Idee nicht ohne es zu verstehen zu übernehmen.

    das von Dir gewünschte Verhältnis wären also period=27 (gewünschter Wert - 1! wiso??) und duty=28.

    Verstehe ich das richtig entspricht
    Periode 27 (=27*0,25uS ON entsprechen 6,75µS??)
    duty 28(=28*1µS = 28µS pause??)

    Wenn duty = Pause zwischen den Pulsen ist müßte ich ja aber duty21 nehmen, da ich ja eine Pause von 20,8333µS zwischen den Pulsen haben muss?!

    Dann noch eine kurze Frage. Was bedeutet die 2 direkt hinter dem PWMOUT? PWMOUT 2,0,0 würde doch ein "PWM" ohne Pulse bedeuten. Nur als Befehl genutzt, um eben die 889µS zu haben und um den vorherigen PWM Befehl zu deaktivieren (oder wird er durch den naechsten Basic Befehl eh schon "überschrieben")?

    Hoffe die Fragen nerfen nicht. Vielen Dank im Vorraus für deine Bemühungen!

    Grüße Mirco

    P.S.: Eine IR Fernbedienung habe ich nun bereits fertig unter www.mircosideen.de.vu

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    05.01.2006
    Beiträge
    18
    Moin,

    brauchte die kurzen Pulse ebenfalls für eine IR-Übertragung ... und zwar zwischen sogenannten "Battle Units" für RC-Panzermodelle. Hier sind zwei Prototypen auf einem Steckbrett aufgebaut:



    Zu Deinen (nicht nervigen) Fragen:

    Der PICAXE-Basic-Befehl lautete PWMOUT <pin>,<period>,<duty> und wird häufiger eingesetzt als der einfache PWM-Befehl, da er wesentlich flexibler ist. <pin> ist der gewünschte Ausgang (beim 08M geht hier nur 2), <period> ist die Zeit zwischen zwei aufeinanderfolgenden positiven Flanken (sprich Periodendauer) und <duty> die Zeit von der positiven bis zur folgenden negativen Flanke (also die Einschaltzeit oder on-time). Daß der Wert für <period> immer um 1 kleiner eingegeben werden muß steht halt in der Beschreibung.

    Die Rechnung sieht dann also so aus:

    <period> = 27 -> (27 + 1) x 1µs = 28µs -> 35,714kHz
    <duty> = 28 -> 28 x 0,25µs = 7µs

    Du bekommst also (bei 4MHz Taktfrequenz) einen Puls von 7µs und eine Pause von 21µs.

    BTW: Dank Deiner Frage habe ich jetzt endlich das "µ"-Zeichen auf meiner neuen Tastatur entdeckt ...

    Nice week,
    Zardoz

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.08.2004
    Alter
    38
    Beiträge
    105

    Danke für die Erklärung

    Erstmal vielen Dank für die Erklärung von dir. Hat mich nun um einiges Schlauer gemacht und hilft sicher auch bei weiteren Projekten.

    Also die 36KHz sind nun schonmal so wie ich sie haben wollte. sieht auch am Oszilloskop gut aus.

    Habe nur noch nicht ganz verstanden, wie du folgendes meinst:
    die 889us entsprechen zufällig (grob) der Dauer eines Basic-Befehls. Also den PWM mit PWMOUT 2, 27, 28 und PWMOUT 2,0,0 sequentiell ein- und ausschalten ergibt eine "1", andere Reihenfolge eine "0".
    Hatte nun gedacht, ich schalte den PWM auf 36kHz und dann auf 0. daraus sollten sich dann jeweils ca889µS (36KHZ) Signal und anschliessend ca889µS Pause ergeben.
    Leider kann ich am Oszilloscop keine Pausé erkennen, sondern habe durchgehend ein 36KHz Signal an meiner IR SendeLED.

    Hier mal ein Ausschnitt aus dem Prog.":
    Komandobits für Standby (Dezimal 12) binär = 001100
    PWMOUT 2,0,0 `1. 0Bit
    PWMOUT 2, 27, 28

    PWMOUT 2,0,0 `2. 0Bit (erst 889µS ohne Pulse, Dann 889µS mit
    PWMOUT 2, 27, 28 `36KHz)


    PWMOUT 2, 27, 28 `1bit
    PWMOUT 2,0,0

    PWMOUT 2, 27, 28 `1bit
    PWMOUT 2,0,0

    PWMOUT 2,0,0 `1. 0Bit
    PWMOUT 2, 27, 28

    PWMOUT 2,0,0 `2. 0Bit
    PWMOUT 2, 27, 28


    Kannst du mir sagen wo mein Gedankenfehler liegt?

    Nette Grüße und Danke für deine Hilfe Mirco

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    05.01.2006
    Beiträge
    18
    Hi Mirco,

    kein Problem ...

    Habe den Code bei mir mal in einer Schleife laufen lassen und gesehen, daß er funktioniert - mit Pausen!

    Allerdings hat mein Billig-Oszilloskop immer Probleme mit dem Triggern, so daß die Pausen schlecht zu sehen sind. Aber sie sind da ... und die Zeiten passen auch fast.

    Nice week,
    Zardoz

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.08.2004
    Alter
    38
    Beiträge
    105

    Verstehe ich nicht.

    Hm. das verstehe ich nicht. Selbst wenn ich nur den Teil den ich hier gepostet habe als loop laufen lasse, habe ich zwar meine saubere PWM Ausgabe (Auch High low Verhältnis von 7 zu 21µS stimmt sauber), aber ich habe keinerlei Pausen.
    Durchgehend liegt dann ab dem Start das PWM Signal am Ausgang an. Keine Pause..... .
    Verstehe nicht wo da der Fehler liegen kann, wenn`s bei dir ja funktioniert. Hast du es auch auf einem Picaxe 08M getestet, oder auf einem der Größeren? Vielleicht da ein Unterschied (obwohl es ja auch für den 08M im Datenblatt steht.)

    Hm bin mit meinem latein am Ende. Habe einfach mal Pausen eingefügt wie

    PWMOUT 2, 27, 28
    pause 1000
    PWMOUT 2,0,0
    Pause 1000


    Dann habe ich 1sec das PWM Signal, dann 1sec o am ausgang... .
    Es kommt mir langsam so vor, als ob der Befehl PWMOUT 2,0,0 bei mir
    keine Auswirkungen zeigt ....

    Na ja mal sehen. Irgendwie bekomme ich das schon noch hin hoffe ich.
    Bei der Fehlersuche lernt man ja immer am meisten.
    Melde mich wenn ich was finde .


    Grüße Mirco

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    05.01.2006
    Beiträge
    18
    Hi Mirco,

    funktioniert doch alles:

    > PWMOUT 2, 27, 28
    > pause 1000

    Ergibt 1 s Signal ...

    > PWMOUT 2,0,0
    > Pause 1000

    ... und anschließend 1 s Null am Ausgang.

    > Dann habe ich 1sec das PWM Signal, dann 1sec o am ausgang... .

    Genau. Und was stimmt daran nicht?



    Nice week,
    Zardoz

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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