PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fernbedienung nachbauen mit PIC-Chip



Maxigraf
15.08.2007, 03:22
Hallo

also ich versuche derzeit eine Fernbedienung zu baun ;)

Ich verwende dafür nen PIC18LF2685, nen 20 Mhz Quarz und ne Infrarot LED
Für die Tasten hab ich gemäß der Anleitung auf Sprut.de ne 2x6 Tasten Matrix gebastelt (oder 6x2, je nachdem ;))

Das funktioniert soweit gut, die Tasten kann ich auslesen, die LED zum leuchten bringen (habs mit der Handykamera gecheckt :D)

So, jetzt mein Problem:

Ich hab von der Fernbedienung die Timings mit WinLIRC ausgelesen und dementsprechend mein Programm geschrieben, mit Verzögerungsroutine etc.
Wenn ich das Programm im Simulator debugge, dann sind die Verzögerungen auch genau richtig von der Länge her, wenn ich das Programm dann aufm Chip teste, sind die Timings auf einmal viel kürzer.
Beim Debuggen komm ich z. B. auf 600 µs, der Chip macht daraus scheinbar 200 µs oder so ;) (Ich lasse mir die Ausgabe per WinLIRC RawCodes anzeigen)

Abgesehn davon variieren die Timings auch ständig, obwohl sie weitgehend gleich sein müßten.
Der Quarz hat zwar womögliche ne gewisse Ungenauigkeit, aber die sollte nicht so stark sein.

Ich hänge den Sourcecode mal an, vielleicht kann mir ja wer sagen, was ich falsch gemacht hab?
Vielleicht hab ich auch die Werte in dem WinLIRC config file falsch interpretiert, aber die sollten eigentlich alle in µs angegeben sein

Also ich hab mal ne Schleife für ne 1 sekündige Verzogerung eingebaut, die hat ziemlich gut funktioniert.
Gut, lief zwar etwas zu schnell, aber hm, das war erst nach 5 Minuten oder so wirklich wahrnehmbar (ok, das is vermutlich relativ viel auf den µs-Bereich übertragen, oder? ;))

Hm, wie krieg ich denn den Quarz genauer?

Hilfe... Ich weiß nicht mehr weiter ;)

Aber danke schonmal, für eure Hilfe :D

Achja, hier mal der Output von WinLIRC wenn ich ne Taste drücke:

pulse 183
space 428
pulse 152
space 1732
pulse 186
space 424
pulse 154
space 2325
pulse 151
space 4261
pulse 209
space 398
pulse 107
space 4279
pulse 106
space 504
pulse 158
space 1734
pulse 289
space 318
pulse 110
space 1779
pulse 155
space 456
pulse 154
space 1735
pulse 346
space 266
pulse 108
space 1780
pulse 158
space 403
pulse 179
space 1761
pulse 214
space 2286
pulse 105
space 504
pulse 108
space 1780
pulse 106
space 3009
pulse 103

stowoda
15.08.2007, 08:42
Kann man sich auf die Werte verlassen die Winlirc ausspuckt?

Also RC5 scheint es nicht zu sein, welche fernbedienung möchtest Du denn nachbauen?

Maxigraf
15.08.2007, 11:12
Is die Fernbedienung von meinem Thomson Fernseher, es steht mb100 drauf ;)
Aber hab ka was das fürn Fernseher genau is. Hab keine Typenbezeichnung gefunden, die steht wohl hinten, aber da komm ich schlecht ran, der is schwer und steht in nem Fernsehschrank ;)

Maxigraf
15.08.2007, 13:52
Hm, also es scheint so zu sein, daß der PIC irgendwie nicht richtig in der Lage is dem Infrarot LED sauber Strom zu geben ;)

Also ich hab n Testprogramm geschrieben, mit ca. halbe sekunde an und dreiviertel sekunde aus.
Die Aus-Zeit wird eingehalten, aber die An-Zeit nicht wirklich. Es scheint fast so als würde die LED flackern, WinLIRC gibt mir nämlich in der halben Sekunde ca. 10 An-/Aus-Änderungen, die dann insgesamt in etwa ne halbe Sekunde dauern.

Jemand ne Idee, woran das liegt?

Ich schreib auf LatA, das is schon richtig, oder? PortA scheint ja nur zum einlesen zu sein...
Kann es sein, daß die Schaltung nicht genug Saft hat und deswegen Spannungsschwankungen?

Ich betreib das wahlweise mit 2x1,5V Batterien oder direkt über den Brenner8 per ICSP

Robbersoft
15.08.2007, 16:56
Wieviel Strom zieht denn deine IRLED?
Du kannst maximal 20-25mA an einem PortPin ziehen. Vielleicht ist dein RV falsch bemessen und deshalb flackert die IRLED, da die Spannung zusammenbricht.

Gruß RobberS

PS: Vielleicht noch den BOR überprüfen, da du mit 3V arbeitest!

Maxigraf
15.08.2007, 21:09
BOR is auf 2,2V
und naja, das Programm wird ja weiter ausgeführt, der PIC startet ja nicht von vorne...

Ich werd mal testen, was passiert, wenn ich das ganze mit nem Transistor schalte ;)

Robbersoft
16.08.2007, 01:11
BOR is auf 2,2V
und naja, das Programm wird ja weiter ausgeführt, der PIC startet ja nicht von vorne...

Ich werd mal testen, was passiert, wenn ich das ganze mit nem Transistor schalte ;)
Hab mal im Netz geschaut.
Also viele IRLED Typen ziehen sich zwischen 100mA und 150mA rein.
Denke mal dass daher der Fehler kommt.

Maxigraf
16.08.2007, 21:29
hm, ja, laut datenblatt zieht das ding etwa 150mA ;)
ok, gut, das seh ich ein, das kann nich gut gehn :D

Mobius
16.08.2007, 21:59
ok, gut, das seh ich ein, das kann nich gut gehn Und an deiner Stelle würde ich allen Göttern, die du kennst meinen Dank aussprechen, dass die IO-Pins des PICs (oder noch besser, der PIC selber) noch lebt und sein Dienst unter deinen herrschenden Bits erfüllt.

Aja, IMMER voher schauen, wie viel Saft ein Bauteil ziehen wierd und wie viel Saft der andere zur Verfügung stellen kann. Das spart nerven (bei der Fehlersuche) und Geld (beim neukauf von Bauteilen).
lg
Mobius

Maxigraf
16.08.2007, 22:17
ok, aber nichtsdestotrotz bleibt das problem, daß die led kein sauberes signal liefert oder so... ;)

also selbst wenn ich sie direkt an die stromquelle anschließe (mit geeignetem vorwiderstand natürlich ;)) "flackert" die led (gut, is nich sichtbar, also 1. wegen infrarot und 2. weil das in nem recht hohen frequenzbereich is)
aber naja, winlirc bzw. der com-port-ir-receiver sieht sowas ;)

jetz hab ich mir grad die fb anleitung auf sprut.de angeschaut
und der hat nen 100µf elko in seine schaltung eingebaut, vermutlich um gerade sowas zu verhindern, oder?

ich hatte aber nur 2x47µf elkos da, wenn ich die parallel schalt sollt ich doch so um die 94µf haben, oder? ;)

jedenfalls hat das das problem leider auch ned gelöst...

woran könnts denn noch liegen?

Robbersoft
16.08.2007, 22:48
ok, aber nichtsdestotrotz bleibt das problem, daß die led kein sauberes signal liefert oder so... ;)

also selbst wenn ich sie direkt an die stromquelle anschließe (mit geeignetem vorwiderstand natürlich ;)) "flackert" die led (gut, is nich sichtbar, also 1. wegen infrarot und 2. weil das in nem recht hohen frequenzbereich is)
aber naja, winlirc bzw. der com-port-ir-receiver sieht sowas ;)

jetz hab ich mir grad die fb anleitung auf sprut.de angeschaut
und der hat nen 100µf elko in seine schaltung eingebaut, vermutlich um gerade sowas zu verhindern, oder?

ich hatte aber nur 2x47µf elkos da, wenn ich die parallel schalt sollt ich doch so um die 94µf haben, oder? ;)

jedenfalls hat das das problem leider auch ned gelöst...

woran könnts denn noch liegen?

Vielleicht zieht seine IRLED weniger Strom. Wenn die z.B. 100mA ziehen würde reicht es mit 100µF. Wenn deine 150mA zieht würde ich es mit 220µF versuchen. Dann würde ich die IRLED mit einem NPN Transistor treiben. Bei 5V würde ich es mit 5k als Basiswiderstand versuchen, oder einem Poti.
Danach sollte es gehen. Kenne leider dein Listing nicht und kann dazu nichts weiteres sagen.

Maxigraf
16.08.2007, 23:29
Also das Datenblatt zur LED gibts hier:
http://www.reichelt.de/?ACTION=7;LA=6;OPEN=1;INDEX=0;FILENAME=A500%252FCQ Y_99.pdf

Und ich betreibe das ganze mit 2x1,5V Batterien (dürfte typ Mono sein, siehe http://de.wikipedia.org/wiki/Mono_%28Batterie%29)

Vielleicht hilft dir das ja mir zu helfen... ;)
Wenn du mehr Infos brauchst, sag bitte bescheid

Und ich verwende derzeit schon nen NPN Transistor und nen 30 Ohm Widerstand vor der LED auf +5V seite (auf der anderen Seite is der Transistor) und nem 4,7k Ohm Widerstand an der Basis des Transistors

Maxigraf
17.08.2007, 04:28
Hm, so, hab jetz die Fernbedienung ziemlich exakt nachgebaut, was Widerstandswerte, Kondensatoren, Transistoren betrifft...

Jetz hab ich das Problem, daß der PC nimmer zwischen unterschiedlichen Signalen unterscheiden kann und zu lange An-Werte anzeigt ;)
Sieht wohl so aus, als würde die LED, der Transistor oder sonstwas nich schnell genug schalten, ka...

Ach man, ich hab langsam keine Lust mehr ;)

Edit: So, jetz bin ich restlos verwirrt...
Hab mir n kleines Testprogramm geschrieben, sieht so aus:

LOOP BSF LATA,0
MOVLW D'1'
MOVWF TIMER1
CALL WAIT
BCF LATA,0
MOVLW D'10'
MOVWF TIMER1
CALL WAIT
GOTO LOOP

Und die WAIT-Funktion sieht so aus:

WAIT MOVLW D'20'
MOVWF TIMER2
WAIT_LOOP DECFSZ TIMER2
GOTO WAIT_LOOP
DECFSZ TIMER1
GOTO WAIT
RETURN

Es hat sich herausgestellt, daß der An-Zustand 353 µs dauert, der Aus-Zustand dagegen 59980 µs etwa ;)
Daraus habe ich errechnet (anhand der auszuführenden Befehle), daß im Anzustand ein PIC-Takt von 815kHz gegeben ist und im Aus-Zustand ein Takt von etwa 48-49kHz....

Das kann unmöglich sein, oder?

Bittebittebitte sag mir doch einer, was ich falsch mach :(

Bzw. hat der A0-Pin denn irgend ne komische Spezialbelegung, die sich auf den PIC-Takt auswirkt?

Ich weiß langsam echt nicht mehr weiter ;)