( )
In diesem Projekt werden wir auch die Verwendung von mehreren Zähnen, eine Besonderheit der Parallax Propeller Chip vorstellen.
LCD-Display:
Das Display gibt es bei Radio Shack und benötigt nur drei Leitungen ausgeführt.
IR-Melder:
Nun, um Benutzersteuerelement und Eingang zum ASC-System, einen Infrarot-Detektor also ergänzen wir
dass eine gemeinsame universal TV Fernbedienung verwendet werden kann. Dieser Code verwendet die SONY-Gerät
Protocalls, so machte die Remotecodeausführung TC an der ersten SONY-Code aufgeführt seiner "Broschüre.
Ich verwende den PNA4602 IR-Detektor-Chip. Es sieht aus wie eine normale drei-legged Transistor, aber es ist nicht.
Es enthält 38 KHZ-Demodulator-Chip und Filter macht es sehr einfach zu bedienen mit gemeinsamen TV
Fernbedienungen. Sie Kosten ca. $2.
Die faszinierenden technischen Details finden Sie unter Ada Obst an: http://learn.adafruit.com/ir-sensor
Proto-Schild:
Zur Montage des Melders verwende ich eine Seeed "Proto-Shield" von Radio Shack.
Es ist ein wenig übertrieben für eine kleine Schaltung, aber es wird mehr Material in naher Zukunft wachsen.
Ein 3 x 2-Buchsenleiste wurde als eine Steckdose für den Decoder Chip installiert.
Das ist der IR-Detektor, versteckt in der rechten oberen Ecke unter das Gewirr von Kabeln.
Da die Proto-Shield-Pins in die ASC Socket Header Stecker ist es nicht möglich ist, verwenden
normale Wire-Wrap-Techniken. Das dauern würde zu viel von der Länge des Stifts,
so dass es fraglich, ob das Schild der Gastgeber ASC Board überhaupt gesteckt werden könnte.
Also verwende ich eine modifizierte Technik - ein einzelnes Wrap-around-Pin, dann löten.
Es ist eine heikle Arbeit. Aber für den Moment. Es ist nur drei Drähte, macht (3,3 v), Boden, und
Signal, also kein Problem hier. Siehe Foto Drähte.
Software:
Die Demo-Software nutzt mehrere Objekte von Parallax Objekt Exchange (OBEX).
IR remote Treiber: "IR_Remote.Spin"
LCD-Treiber: "serial_lcd.spin"
Zahlen: "simple_numbers.spin"
Diese können von der OBEX heruntergeladen werden, aber ich habe sie in dieser ZIP-Datei angehängt enthalten
zu dieser Instructible.
Diese Demo-Programm liest die Fernbedienungs-Codes und zeigt die Ergebnisse auf dem LCD-Display.
Dieser Teil ist ziemlich einfach und geradlinig.
"ABER..."
Was passiert, wenn wir das LCD-Display-Hintergrundbeleuchtung nach ein paar Sekunden Inaktivität ausschalten wollten?
Normalerweise würden wir einen Interrupthandler verwenden.
Ein periodischer Interrupt böte die Zeitbasis und der Handler würde bestimmen Countdown
Wenn es Zeit zum Herunterfahren der Hintergrundbeleuchtung war.
Aber die Propeller nicht Interrupts verwenden. Dafür sind mehrere Zahnräder. Es dauert ein bisschen ein
Paradigmenwechsel, wickeln Sie Ihre Meinung um parallele Verarbeitung, aber es ist die Mühe wert.
In dieser Demo-Programm werden wir spin-off ein kleiner Eingriff an einem anderen Zahn.
Es wird geben eine Zeitbasis und Countdown ein Time-out-Variable.
Sie können diesen Code am Ende der Demonstrationsprogramm finden.
Suchen - PUB Timeout.
Und beachten Sie, dass alles, was warten, bis eine Sekunde, dann überprüfen, um festzustellen, ob die LCDtime-Variable
größer als Null ist, und verringern, wenn es ist. Thats it /.
Darüber hinaus sollten Sie dies; Was passiert, wenn Sie zwei (oder mehr) völlig unterschiedlichen Zeitbasen benötigt?
Ein anderes Zahnrad jede Aufgabe zuweisen und sie laufen gleichzeitig und völlig unabhängig voneinander.
Einfacher geht es nicht nur.
Spin kann ein bisschen seltsam auf den ersten Blick, aber es ist einfach zu erlernen und macht den Job ganz gut.
Aber denken Sie daran, dass Einrückung die Struktur des Programms und Carelesly ändern definiert die
Einzug wird der Ablauf des Programms völlig verändern! Seien Sie also vorsichtig davon.
Die Propeller Tool (mit allen Unterlagen) kann kostenlos von Parallax an heruntergeladen werden:
http://www.Parallax.com/tabid/832/default.aspx
Demo-Quellcode:
{{ASC_LCD_IR_TimeOut.spin}}
CON
_CLKMODE = XTAL1 + PLL16X ' 80 Mhz-Takt
_XINFREQ = 5_000_000
IRpin = 23' IR Empfänger - Propeller-Pin
LcdTimeOut = 10
LcdOn1 = $16 ' LCD auf; Cursor aus blinken aus
LcdLine0 = $80 ' in Zeile 1, Spalte 0 verschieben
LcdLine1 = $94 ' verschieben Sie in Zeile 2, Spalte 0
POL = 15' Beweis des Lebens LED
OBJ
IR: "IR_Remote"
LCD: "Serial_lcd"
NUM: "Simple_numbers"
VAR
Byte IRcode "Keycode von IR-Empfänger hier
Byte LCDtime
lange IRcog
lange Stack1 [6] "Raum für LCDtimeout Cog-Stack
PUB Init | Freq, Index, Zahnrad, lcode
"Init LCD
Wenn lcd.start (0, 9600, 2)
LCD.putc(LCD#LcdOn1) "kein Cursor
LCD.CLS
LCD.Backlight(1)
LCD.Str (String (LcdLine0, "IR-Fernbedienung"))
"Proof of Life
Dira [Pol] ~ ~
! Outa [Pol]
"Timeout zu starten
LCDTime: = LCDTimeout ' Timeout zurückgesetzt, wenn eine Taste gedrückt wird
Cognew (TimeOut)
"Init IR-Fernbedienung
IRcog: = Ir. Starten (IRpin, "Pin der IR-Empfänger, die Adresse einer Variablen
Wenn IRcog > 0
Wiederholen Sie die
Wenn LCDtime > 0
LCD.backlight(1) "schalten Sie ihn ein
sonst "Zeitüberschreitung
LCD.backlight(0) "drehen, wenn off
Wenn IRcode <> Ir #NoNewCode "Wir haben einen Schlüssel-Code
Lcode: = IRcode
IR. Starten (IRpin, "für den nächsten Code
Wenn LCDtime: = 0', wenn es ausgeschaltet war
LCD.backlight(1) ' wieder einschalten
LCDTime: = LCDTimeout ' Timeout zurückgesetzt, wenn eine Taste gedrückt wird
LCD.GotoXY(1,1)
Fall lcode
IR #one: lcd.str (String ("< 1 >"))
IR #two: lcd.str (String ("< 2 >"))
IR #three: lcd.str (String ("< 3 >"))
IR #four: lcd.str (String ("< 4 >"))
IR #five: lcd.str (String ("< 5 >"))
IR #six: lcd.str (String ("< 6 >"))
IR #seven: lcd.str (String ("< 7 >"))
IR #eight: lcd.str (String ("< 8 >"))
IR #nine: lcd.str (String ("< 9 >"))
IR #zero: lcd.str (String ("< 0 >"))
IR #chUp: lcd.str (String ("ChUp"))
IR #chDn: lcd.str (String ("ChDn"))
IR #volUp: lcd.str(string("volUp"))
IR #volDn: lcd.str(string("volDn"))
IR #mute: lcd.str (String ("Mute"))
IR #power: lcd.str(string("power"))
IR #last: lcd.str (String ("zuletzt"))
andere: lcd.str (String(""))
Waitcnt ((clkfreq / 1000) * 30 + Cnt)
! Outa [Pol]
PUB Timeout
Wiederholen Sie "Schleife für immer
Waitcnt (Clkfreq + Cnt) ' eine Sekunde warten
Wenn Byte [= > 1' halten zählen
Byte [--"nach unten