Hey Leute, ich hab folgendes Problem und hoffe ihr könnt mir helfen. Ich
wollte mir ne Lichtschranke bauen... Hab noch 950nm Infrarot-Dioden hier
rumfliegen und ein par TSOP1738 IR-Empfänger. Die IR-Empfänger laufen
auf 38kHz. Das heißt um ne Vernünftige Lichtschranke zu bauen,muss die
LED mit 38Khz "flimmern". Hab son Beispiel Programm für nen Arduino
gefunden,mit dem das auch super läuft. Ich würde das aber gern mit nem
Attiny13 realisieren. Jetzt hab ich folgenden Code geschrieben, der aber
nicht funzt... Vielleicht wisst Ihr ja wieso?!
1
#include<avr/io.h>
2
3
#ifndef F_CPU
4
#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 1200000"
bei 38kHz sollte ein Impuls doch ungefähr 26 Mikrosekunden sein. Also
ungefähr 13uS High und 13uS Low, oder verstehe ich das Falsch? Naja, ich
hoffe ihr habt nen Rat. Mfg Rüdiger
Was will der Empfänger für einen duty-cycle? Evtl. kannst Du da noch
Energie sparen.
> PORTB = 0b00000000; /*Bit 2 wieder löschen*/
Du setzt da alles auf 0, irgendwo gibt's einen "Artikel" Bitmanipulation
oder Bitmanipulationen ..
Erstmal Danke für die schnellen Antworten. Dass ich beim Bit löschen
alles auf null setzte, ist doch egal oder? Ich brauch den uC einzig und
allein um die LED zu "pulsen". Der Empfänger hängt an nem anderen uC...
Ich sollte vlt. noch dazu sagen, dass ich sowas vorher noch nie gemacht
habe, daher kann ich mit der Aussage, dass ich das Signal modulieren
muss,leider nicht viel anfangen. Vieleicht habt ihr ja noch ein paar
Tips, in dieser Richtung. Vielen Dank, Rüdiger
Kann als Gast, leider nicht editieren,daher muss ich Spess53 leider so
antworten...
Ich weiß das es Timer gibt, aber ich wollte es halt möglichst einfach
machen.... Mfg Rüdiger
Hi
>Ich weiß das es Timer gibt, aber ich wollte es halt möglichst einfach>machen.... Mfg Rüdiger
Was ist einfacher, als ein paar Register zu setzen?
Ausserdem solltest Holgers Rat befolgen: Der TSOP verträgt kein
Dauersignal. Da macht nach kurzer Zeit die AGC dicht. Also ist es mit
deinem einfachen Programm nicht getan.
MfG Spess
Nochmals Danke für die Zahlreichen Antworten. Das #endif hab ich drin,
ist nur irgendwie hier beim kopieren "verloren" gegangen...
@Holger,vielen Dank für den Code, werd ich morgen sofort testen. Aber
Ehrlich gesagt hab ich noch nicht genau verstanden warum man sowas
"moduliert".
@Spess,hab noch nie mit Timern gearbeitet und da da wahrscheinlich zig
neue Fragen auftauchen, wollte ich das erstmal umgehen. Was meinst du
mit "Da macht nach kurzer Zeit die AGC dicht"? Was ist ne AGC? Vielen
Dank, Rüdiger
Hi
>@Spess,hab noch nie mit Timern gearbeitet
Dann wird es langsam Zeit. Oder willst du ewig im Sandkasten spielen.
>Was meinst du mit "Da macht nach kurzer Zeit die AGC dicht"? Was ist ne>AGC?
AGC = Automatic Gain Control (Automatische Verstärkungsreglung).
Datenblatt: 'After each burst which is between 10 cycles and 70
cycles a gap time of at least 14 cycles is neccessary'
Oder einfach gesagt: Wenn du das Teil mit einem Dauersignal beleuchtest,
hast du nach kurzer Zeit kein Ausgangssignal mehr.
MfG Spess
Guten Morgen, der Code von Holger funktioniert bei mir einwandfrei! Und
dadurch dass er nach den 38 cyclen 1ms wartet, sollte der AGC doch dann
keine Probleme machen,oder?!
@Spess53, nee ewig im Sandkasten spielen,wollte ich nicht, aber ich muss
Rom ja auch nich an einem Tag aufbauen... Über kurz oder lang wird
natürlich trotzdem kein weg an Timern vorbei gehen... und dann werden
wir uns hier bestimmt wieder hören :-).
Nochmals vielen Dank euch allen, Mfg Rüdiger
Hallo,
üblicherweise wird bei der Modulation mit 25% Pulsbreite gearbeitet um
Strom zu sparen bzw. bei gleichem mittleren Strom die Reichweite zu
erhöhen. (zumindest beim RC5-Code).
Hey Anja, bist du zufällig dieselbe Anja,die hier auch schonmal nen
Thread aufgemacht hat über 38kHz? Falls ja.. du hättest nicht noch
irgendwo deinen Atmega8 Code rumfliegen? Dann könnte ich mich direkt mit
dem Timer vertraut machen... Das mit der 25% Pulsbreite ist dann,das ich
nur ein viertel der Zeit auf High bin und die restlichen 3/4 auf
Low,oder?
Ich nutzte ja im Moment noch Holgers Code und wenn ich den IR-Empfänger
an ein Mulitmeter anschließe sieht das auch wunderbar aus. Wenn ich den
IR-Empfänger aber an nen Analogen Eingang von nem anderen uC
hänge,bekomm ich folgendes raus:
1
1010
2
1013
3
0
4
1011
5
1010
6
0
7
0
8
0
9
1013
10
1011
11
0
12
1010
13
1010
14
1010
15
0
16
0
17
1010
18
1014
19
0
20
0
21
0
22
0
23
1011
24
0
25
0
26
0
27
1011
28
1011
29
1013
30
1012
31
1010
32
0
33
0
34
usw.
Der IR-Empfänger bleibt also nicht konstant bei 0. Für ne Lichtschranke
ist das natürlich doof. Vielleicht hat da ja noch jemand nen Tip. Vielen
Dank, Rüdiger
>bist du zufällig dieselbe Anja,
nee bin ich nicht, wenn dann mache ich RC5-Code (36kHz)
ganz hardcore-mässig mit einem PIC12C508 in Assembler.
@Stephan: ganz freihändig ohne Timer, Quarz oder PWM-Modul
@Rüdiger: Eigentlich müßtest Du die 500 Hz detektieren die aus holgers
Code resultieren. -> Du hast sogar bei entsprechender Auswertung noch
einen Vorteil falls jemand versucht mit einer gewöhnlichen Fernbedienung
die Lichtschranke auszutricksen.
Bei Empfängermodulen wie den TSOP1738 geht kein Dauer-Low. Die Teile
sind für Bi-Phasen-Modulation optimiert.
Hey Leute, hab jetzt ein paar Tage rum-probiert und bekomme es einfach
nicht hin...
@Anja, wie meinst du das mit dem detektieren? Ich geh ja von dem
IR-Empfänger in nen anderen uC. Um genau zu sein in nen Arduino. Wie
kann ich denn da 500hz detektieren? Ich steh echt aufm Schlauch... Wie
gesagt im Moment lese ich den Wert des Analogen Eingangs am Arduino ein
und der ist halt nicht sauber. Wie du schreibst liegt das ja daran das
kein Dauer-Low funzt. Naja, wie gesagt,steh aufm Schlauch und hoffe ihr
könnte mir nochmal nen Schups in die richtige Richtung geben. Vielen
Dank, Rüdiger
Ps: Bin nicht zwingend an Attiny13 gebunden. Könnte auch mit nem Atmega8
etc. arbeiten, Hauptsache es würd laufen.
>Wie kann ich denn da 500hz detektieren?
Mittels Capture-Modul beide Flanken abspeichern und jeweils die
Differenz zwischen 2 Steigenden oder 2 fallenden Flanken rechnen (sollte
2000us ergeben). Falls Toleranz zu 2000us über/unterschritten wird
-> Fremdlicht-Alarm
Die Abstände steigender zu fallender Flanke sind abhängig von der
Entfernung zum Sender (Signalstärke) mehr oder weniger unsymmetrisch.
Können aber mit entsprechend größeren Toleranzen auch ausgewertet
werden.
Zusätzlich z.B. mit einem 1ms-Interrupt ein Timeout nach ca 4-5ms
generieren falls keine Flanke kommt (Lichtschranke unterbrochen). ->
Lichtschranken-Alarm.