Archiv verlassen und diese Seite im Standarddesign anzeigen : Ausgang mit 455khz togglen?
daniel.weber
13.01.2010, 23:41
Hallo zusammen,
ich stehe vor einem kleinen Problem.
Ich möchte an einem Ausgang eines AVRs (mega8) eine LED mit einer Frequenz von 455khz togglen.
Für die Berechnungen habe ich das Tool rnAvr verwendet.
Soweit so gut ich habe natürlich die doppelte Frequenz eingegeben, da ich ja sonst nur die Hälfte hätte beim togglen hätte, also 910000hz.
Nun zeigt mir mein Messgerät aber nur eine Frequenz von 33kHz an. :(
rnAvr hat mir folgende Timer Config ausgespuckt:
Config Timer0 = Timer, Prescale = 1
Timervorgabe 247
Ich benutze die internen 8mhz des avr
Hallo Daniel,
das sieht so aus, als würdest du eine Timer0_isr benutzen, in der dann wirklich getoggelt wird. Das wird nicht funktionieren, da für den Interrupt Aufruf und Rücksprung schätzungsweise 60 Takte benötigt werden. Selbst mit Nosave wirst du da nicht viel besser werden.
Das einzige, was so schnell gehen würde, ist ein Timer im CTC Modus.
Da bist du aber bei den erzeugten Frequenzen ziemlich eingeschränkt.
Du kannst dann z.B. die halbe, viertel, sechstel, achtel, zehntel usw. der Taktfrequenz erzeugen, aber keine Zwischenwerte.
radbruch
14.01.2010, 01:26
Hallo
Das wird nicht funktionieren. Selbst wenn du die Led (wenn die überhaupt so schnell blinken kann) hardwaremäßig am OCx-Pin togglest wirst du nicht auf 455kHz kommen, weil der Timer nur ganze Takte timen kann. 8MHz/910kHz ergibt 8,791... Wenn du alle 8 Takte umschaltest ergibt das 500kHz, bei 9 Takten sind es aber nur noch 444,4kHz. Auch eine Do... Loop-Schleife die nur den Ausgang umschaltet und die restlichen Takte mit nops verbummelt (wenn nach dem Umschalten und dem Schleifenrücksprung überhaupt noch welche übrig sind) oder eine Assembler-Sequenz die das selbe macht, scheitern hier. Problem ist mit 8MHz-Kontrollertakt so nicht lösbar.
Eine mögliche Lösung wäre vielleicht, den internen 8MHz-Takt durch die Trimmung so zu "verbiegen", dass er mit 8,190MHz läuft (910kHz*9). Das wären etwas mehr als 2% "Fehler", laut Datenblatt des Mega8 Seite 30 unter "Calibrated Internal RC Oscillator" sind ca. 1-3% Korrektur möglich (Wenn ich das auf die Schnelle richtig interpretiere. Ich habe damit noch nicht experimentiert). Das wäre aber zusätzlich noch von der Versorgungsspannung, der Temperatur und der Bauteilestreuung des Mega8 abhängig. Keine Ahnung, ob das machbar ist.
btw. ergeben die von deinem Tool errechneten 247 bei einem Overflow-Interrupt genau 8 (255-247) Takte. Der Rundungsfehler läßt sich eben nicht austricksen;)
Wie genau müssen die 455kHz sein und wozu braucht man sowas überhaupt?
Gruß
mic
Die 455kHz passen zu einem TSOP7000. Also wahrscheinlich ne Bake oder Fernsteuerung. Richtig? Dann sind unter 5% Fehler kein Problem, die Methode von Radbruch würde also gehen.
Es wird etwas einfacher, wenn man nicht den CTC Mode verwendet, sondern einen der PWM-Modi, bei dem man Pulslänge und Periodendauer getrennt einstellen kann. Dann muss die Frequenz der Interrupts nur 455kHz sein. Das kann im Mega8 allerdings nur Timer1. Das hätte aber den Vorteil, dass man nicht auf 50% Tastverhältnis festgelegt ist. Man kann beim TSOP7000 bis auf 10% runtergehen, und somit Strom sparen oder die LEDs mit etwas höherem Strom betreiben.
thewulf00
14.01.2010, 12:23
Hallo.
Wir standen letztes Jahr vor dem selben Problem.
Und dazu gibts hier im Forum einen Thread. Lies mal da nach.
Wir haben es z.B. so gemacht, dass wir mit einem NE555 die 455 kHz Trägerfrequenz erzeugt haben und dann über einen Transistor die Frequenz einfach an- und ausgeschaltet haben, um Daten zu modulieren.
daniel.weber
14.01.2010, 13:10
Hallo zusammen,
danke für die zahlreichen Antworten. Richtig die Frequenz benötige ich für den TSOP7000. Ich denke ich werde komplett auf einen Controller verzichten und das mal mit dem NE555 versuchen, davon habe ich nämlich noch ein paar in der Bastelkiste :) hatte eh etwas bedenken, da ich es ein bisschen verschwenderisch fand, einen Controller den Takt erzeugen zu lassen.
@thewulf
Ist es denn ohne Probleme möglich, die Frequenz an der Basis eines Transistors anzulegen? Kann der mit 455khz schalten? Kannst du mir eine Empfehlung ausprechen? Ich schau mir dein Thread mal an :)
Vielen Dank an alle für die Hilfe.
Hallo!
Für so schnelle Schaltzeiten ist eine Antisättigungsdiode sowie eine Räumdiode am Transistor empfehlenswert, damit der Transistor auch dementsprechend schnell öffnen und sperren kann.
Grüße
Thomas
daniel.weber
14.01.2010, 14:47
ok ich werde heute Abend mal nen Testaufbau machen...
@thewulf
Hast du noch die Widerstandsdaten bzw den Wert für den Kondensator für den ne555 im Kopf, damit der mit 455khz taktet?
oberallgeier
14.01.2010, 15:04
Hallo Daniel,
... Ist es denn ohne Probleme möglich, die Frequenz an der Basis eines Transistors anzulegen? Kann der mit 455khz schalten ...Sorry wenn ich mich einmische, ich schalte mehrere IRLEDs mit einem BC337 an einem 20 MHz m168. Zielfrequenz 36 kHz.
................http://oberallgeier.ob.funpic.de/teil_dwg-x95.jpg (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=384868&sid=42d147e2df75f8323dd2eda87d399342#384868)
Bei meinen Versuchen die Flankensteilheit beim Schalten zu verbessern, hatte ich die Ansteuerung mit einem 100 nF Kerko parallel zum R5 abgeändert (hier steht mehr dazu) (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=387767&sid=8b01fc9a4a577c172a945dc6a659f928#387767) - und bekomme eine Grenzfrequenz von besser als 10 MHz. Das ist im Link mit einem Oszilloskopbild vorgestellt.
Fazit: ein BC337 (als Beispiel) kann eine LE D mit der von Dir gewünschten Frequenz locker schalten. Das stimmt auch gut mit den Angaben im Datenblatt überein.
Eine Möglichkeit wäre auch ein 10MHz-Quarz. Damit kommt man auf 0,1% Abweichung. Die Frequenz wäre damit auf jeden Fall genauer und stabiler als bei einem 555, der wahrscheinlich auch erst mal abgeglichen werden müsste...
Außerdem muss dass Signal ja sowieso noch moduliert werden, der Controller könnte das auch noch übernehmen.
EDIT: 12,288 MHz kommt sogar auf 0,024%. Wobei wahrscheinlich die internen 8MHz immer noch reichen würden, wenn man etwas an den Kalibrierung dreht...
daniel.weber
14.01.2010, 21:59
sooo ich habe mal einen kleinen Testaufbau gemacht mit den Teilen, die ich da habe, leider habe ich nicht ganz die richtigen Werte da gehabt, so dass ich die erst bestellen muss :(
bin jetzt so auf anhieb auf ganz genau 300khz gekommen. Wie das Signal aussieht kann ich leider nicht sagen, da ich hier kein Oszi habe. (das ist noch mit der Post unterwegs *g*)
Werde mir jetzt mal die passenden Bauteile besorgen und es nochmal versuchen. Die anderen Möglichkeiten klingen auch interessant aber doch recht aufwendig.
@oberallgeier
kein Problem, einmischen ist immer gut. Das klingt gut, denn ich habe die BC337 in großer Menge da :)
@uwegw
Ich bin jetzt etwas verwirrt, das Signal müsste doch eigentlich nicht moduliert werden? Ich möchte ja keine Daten übertragen oder so, das ganze soll nur eine einfache Lichtschranke werden und da reicht es doch laut Datenblatt, wenn IR Licht mit einer Frequenz von 455khz, was einen Abstand des Signals von ca. 2.2µs bedeutet. Mehr soll das Teil eigentlich nicht machen. Oder hab ich da jetzt was falsch verstanden.
Wenn man einem TSOP ein konstantes Rechteck gibt, macht er nach kurzer Zeit dicht, weil er ein dauerhaftes Signal als Störung ansieht.
Empfohlen sind Impulse von 22µs bis 500µs, mit einer Pause von mindestens 26µs.
oberallgeier
15.01.2010, 15:17
... Empfohlen sind ... mit einer Pause von mindestens 26µs.Das Ganze sieht dann etwa so aus. Die dargestellten Bursts wären bei Dir durchgängige Pulse - es kommt beim TSOP aber dringend auf die Pause (Mittelstück) an.
................https://www.roboternetz.de/phpBB2/files/ir-puls-signal.jpg
Oben ist das Signal des Transmitters - also der IR-LE D - dargestellt, unten das Schaltverhalten des Empfängers, in diesem Fall des TSOP.
Besserwessi
15.01.2010, 19:15
Das 455 kHz Signal muß auch nicht 50% Tastverhältnis haben. Es ist oft sogar besser mit etwa 25% Tastverhältnis zu arbeiten Da hat man mit der haben Leistung immer noch 70% an Signalstärke, oder könnte mit 70% an Leistung auskommen, wenn man den Strom etwa höher wählt.
Bei den IR Dioden kann man auch 2 in Reihe schalten, für mehrere Parallel sind die BC337 schon etwas schwach, den gepulst kann auch eine IR-diode schon über 300 mA vertragen.
thewulf00
15.01.2010, 19:21
Also.
Oberallgeiers Tipp mit dem Kondensator am Transistor ist der beste, den haben wir genutzt. Darüber hinaus war es uns nicht möglich, mit einem NE555 die Frequenz zu erzeugen. Deshalb haben wir die CMOS-Variante genommen (zu bekommen bei Conrad.de), die lt. Datenblatt bis zu 3 MHz hinbekommen soll. Da gibts eine tolle Schaltung auf elektronik-kompendium.de (leider nicht leicht zu finden).
Aber korrekt ist, dass man die Frequenz mit einem Poti anpassen muss, und auch, dass sie bei jeder Änderung der Belastung wieder abweicht. Ich glaube, ich würde inzwischen lieber die Frequenz von einem Quarz+AtTiny erzeugen lassen. Uwegw's Rechnung überzeugt mich.
Und bitte beachte auch die letzten Meldungen: Man muss eine Mindestanzahl an Rechtecken senden, damit der TSOP überhaupt auf high geht.
Alles nicht so einfach, aber bei uns gehts inzwischen.
Also meiner Meinung nach ist es nicht möglich, die 455 kHz mit einem einzelnen Atmega zu erzeugen UND zu modulieren. Aber der eigentliche Erfinder dieser Kombination, das Team IWAN, hat es hingekriegt, ich jedoch nicht.
@uwe: Kannst Du mir bitte folgendes vorrechnen? Ich hab damals händeringend einen solchen Quarz gesucht. "12,288 MHz kommt sogar auf 0,024%"
Eine dauerhaftes Signal zu senden, reicht leider nicht, wie schon gesagt wurde. Sende 0 und 1 im Wechsel, zu den richtigen Zeiten (10-20 Takte), dann geht es.
Edit: Besserwessis Kommentar ist auch wichtig: Für mehr Sendeleistung haben wir viele Dioden parallel geschaltet, da reicht ein BCxxx natürlich nimmer. Aber man kann sie "überlasten", gepulst vertragen sie viel, obwohl sie ja schon ungepulst viel mehr verkraften, als andere LEDs.
Christian H
15.01.2010, 21:07
Hi,
vor einiger Zeit habe ich mit dem TSOP7000 experimentiert um ein Ortungssystem zu basteln.
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=48791&highlight=
Es funktioniert mit einem Atmega 32, auch ohne Quarz mit dem internen 8Mhz Takt und einer Do Loop Schleife mit einigen nop. In dem Beitrag ist der Basic-Code für Sender und Empfänger und noch einige Tips, z.B. zu den IR-LEDs.
Nach mehreren Versuchen mit IR und US war der letzte Stand übrigens ein System mit 2 US-Baken:
https://www.roboternetz.de/phpBB2/viewtopic.php?p=480861#480861
Letzer Beitrag
Viele Grüße
Christian
daniel.weber
17.01.2010, 21:55
Hallo Christian,
ich habe den Code mal auf den Controller geladen und mir das ganze im Oszi angeschaut, sieht glaube ganz gut aus. Hast du die IR LED direkt über den Controller angesteuert?
Christian H
18.01.2010, 09:19
Hi Daniel,
Die Ansteuerung habe ich mit einem Darlington-Array ULN2804L gemacht. Also einfach den Ausgang vom Controller an einen Eingang des ULN2804L gelegt. IR-Diode zwischen 5V und den entsprechenden Ausgang des ULN2804L. Aufgrund der sehr kurzen Pulse habe ich, für hohe Reichweiten, auf einen Vorwiderstand für die LED verzichtet.
Gruß
Christian
daniel.weber
18.01.2010, 15:48
ich habe das jetzt mal mit einem bc337 versucht, nur die Frequenz war etwas verschoben, ging auf der Y-Achse nicht mehr ganz auf 0V, so wie vorher. Hoffe ich habe das jetzt halbwegs verständlich erklärt :) woran könnte das liegen?
Ich werde es auch mal ohne Vorwiderstand versuchen, da ich auch eine große Reichweite benötige.
Danke für die Tipps :)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.