Hi Leute,
möchte gerne ein Recheck der Frequenz 37.47kHz erzeugen. Welchen Modus
nimmt man da? Teffe ich die genannte Frequenz überhaupt mit irgendeinem
Vorteiler? Wie berechne ich sowas?
Vielen Dank und Gruß
Johannes
Hallo,
Taschenrechner?
7372800/37470 = 196,7654123298638911128903122498
geht also nicht.
7372800/197 = 37425,380710659898477157360406091
7372800/195 = 37616,326530612244897959183673469
Such es Dir aus...
Gruß aus Berlin
Michael
Hallo Johannes,
mach es dir einfach und nehm den Timer 1 als Fast PWM
mit TOP mit 196 in ICR1 und PWM-Wert in OCR1A/B 97.
Dann hast du das Rechteck an den OC1A/B PINS (als Ausgang
schalten!).
Einmal gestartet läuft das Signal in Harware ohne Interrupt.
Mein ICC sagt:
1
//TIMER1 initialize - prescale:1
2
// WGM: 14) PWM fast, TOP=ICRn
3
// desired value: 37.47KHz
4
// actual value: 37,616KHz (0,4%)
5
voidtimer1_init(void)
6
{
7
TCCR1B=0x00;//stop
8
TCNT1H=0xFF;//setup
9
TCNT1L=0x3D;
10
OCR1AH=0x00;//<= PWM-Wert TOP/2
11
OCR1AL=0x62;
12
OCR1BH=0x00;
13
OCR1BL=0x62;
14
ICR1H=0x00;// Topwert
15
ICR1L=0xC3;
16
TCCR1A=0x02;
17
TCCR1B=0x19;//start Timer
18
}
Leider verwendet ICC nicht einzelne Registerbits :-(
gruß avr
Hi
>mach es dir einfach und nehm den Timer 1 als Fast PWM>mit TOP mit 196 in ICR1 und PWM-Wert in OCR1A/B 97.>Dann hast du das Rechteck an den OC1A/B PINS (als Ausgang>schalten!).
Einfacher als CTC? Und dann noch einen 16Bit-Timer verschwendet. Toller
Tip.
MfG Spess
Was heißt denn verschwendet, ist im uP doch vorhanden und kostet nix
extra.
Oder kennst Du alle Anforderungen des TE, um sagen zu können, die
Hardware-Resourcen werden knapp?
Wie hat mal jemand hier geschrieben: Man bekommt kein Geld vom
Hersteller zurück, wenn man nicht alle Resourcen verwendet.
Vielen Dank für die Hilfe.
Hatte in meiner Lösung genau den Fehler, dass ich vergessen habe, dass
ich toggle :-/
eine Frage hätte ich noch.
Das nun erzeugte Signal ist die Trägerfrequenz für ein IR-LED. Wie kann
ich nun das eigentliche Datensignal mit der Trägerfrequenz koppeln bzw
modulieren? Nimmt man da dioden um die Signale zusammenzuführen? Derzeit
habe ich ein Widerstand zwischen den beiden Portpins, aber irgendwie
noch ein Fehlverhalten drin. Vielleicht weiss das jemand?
gruß Johannes
Hi
>Das nun erzeugte Signal ist die Trägerfrequenz für ein IR-LED.
Bist du dir dann mit den 37.47kHz sicher?
>Wie kann ich nun das eigentliche Datensignal mit der Trägerfrequenz koppeln
Und-Verknüpfung.
Falscher Controller. Der ATTiny28 ist für so etwas gemacht.
MfG Spess
Hallo Johannes,
für IR ist deine Frequenz etwas seltsamm. 36 oder 38 kHz
ist üblicher.
Zum Senden die IR-Diode mit Widerstand an OCx-Pin anschliessen.
Entweder nach GND oder VCC, dann Logik beachten.
Für die Impulse den Timer starten, für Pause stoppen und
Pin auf High oder Low setzen (kein Strom durch IR-Diode).
Mehr ist nicht nötig.
gruß avr
Danke für die Info,
wäre das so machbar? oder brauche ich da einen pnp und dann den
Widerstand von der Basis gegen GND weglassen und alle daten in der
software negieren??? oder kann ich nach wie vor ein npn benutzen. Vorher
war das halt möglich, weil ich da nicht den Pullupwiderstand und die
dioden hatte sondern nur eine npn treiberstufe. Stört der Pullup, den
Tansistor irgendwie??
Gruß Jo
@avr:
kannst du das vielleicht noch etwas erläutern? ich würde das gerne mit
einem kleinen transistor machen, da mir 20mA durch die IR-Diode bissl
wenig vorkommen und momentan nur 1m empfang habe bei rund 30mA. ich
weiss nicht woran es liegt. Vermutlich die Trägerfrequenz.
Hi Spess,
ein Samsung LCD der serie 5. Ich habe gute materialien gefunden über das
protokoll, was sich mit meinen "messungen und schätzungen" gedeckt hat.
Allerdings finde ich es seltsam, dass das was ich gestern von der
Fernbedienung (org. Samsung) gemessen habe bei den Samsungunterlagen
unter Toshibacode erklärt wird. ich füge es mal bei.
gruß Jo
Hi
Ich meinte primär das Teil, das dein Infrarotsignal empfängt. Diese
sind, wie avr schon sagte, auf bestimmte Carrierfrequenzen abgestimmt.
In deinem Fall sollten es 38kHz sein. Ein paar 100Hz Abweichung sind
dabei uninteressant.
>ich würde das gerne mit>einem kleinen transistor machen, da mir 20mA durch die IR-Diode bissl>wenig vorkommen und momentan nur 1m empfang habe bei rund 30mA.
Wie hast du das ganze bemessen. IR-Sendedioden vertragen
Impulsbelastungen von einigen 100mA (teilweise bis in den
Ampere-Bereich). Näheres findest du im Datenblatt der Diode. Wenn deine
30mA der Impulsstrom sind, dann ist das massiv zu wenig.
>ich weiss nicht woran es liegt.Vermutlich die Trägerfrequenz.
Mit Sicherheit nicht. Siehe oben.
> gemessen habe bei den Samsungunterlagen unter Toshibacode erklärt wird.
Erfinder eines Codes und Anwender sind zwei Paar Schuhe.
MfG Spess
Vielen Dank Spess,
also an den Empfänger komme ich dummerweise nicht dran bzw es würde die
garantie erlischen... Aus dem Grunde keine Ahnung was da drin steckt.
Ich habe das alles auf Lochraster aufgebaut und die Spannungs versorgung
hat so dünne kabel, dass da vermutlich nicht mehr als 30mA drin sind.
Ich habe den Strom mit einen handelsüblichen Multimeter gemessen. Also
nicht den Pulsstrom. ich betreibe die Diode mit 5V und einem 27R. In der
Orginalfernbedienung ist nicht mal ein Widerstand drin gewesen, da
kleiner Kurzschlussstrom, was mache ich falsch...
Gruß Jo
nachtrag:
Und wenn ich an vcc und gnd noch nen elko von 220µ schalte,
funktionierts nicht mehr wirklich... irgendwas stimmt mit der schaltung
nicht...
ich glaube ich muss das alles über ein portpin machen, aber bin da noch
ganz frisch in dem bereich. Ich weiss auch nichts über die IR-Diode,
weil die gerade in der universalfernbedienung drin war :-)
Ich müsste quasi, das high vom datensignal modulieren. Also wenn das
Datenbit high ist, soll der träger bzw der Timer losklappern und mein
pin zusätzlich mit 38khz toggeln. Ist mein Datenbit low, wird der Timer
gestoppt für die zeit. Klingt erstmal logisch und einfach, aber ich tu
mich da softwaremäßig noch ziemlich schwer...
macht die wellenlänge der IR-Diode was aus?
Aber daran kanns nicht liegen, weil die UniversalFernbedienung mit
dieser Diode ja auch über mehrere Meter funktioniert hat...
gruß Jo
Hallo Johannes,
bei der Schaltung gibt es Probleme mit Träger und Daten.
Das ist unnötig.
Wenn du den Träger mit dem Timer erzeugst und entsprechend
den Daten den Timer startest oder stoppst (dann PIN auf low)
brauchst du keine extra Datenleitung.
Dann nur normal die IR-Diode mit Transistor und Basiswiderstand
an diesen Signalpin.
Beispiele für die Berechnung hier im Forum:
http://www.mikrocontroller.net/articles/Basiswiderstand
gruß avr
Vielen Dank avr,
so hatte ich es vor, werds mal aufbauen und testen ob ich das mit dem
timer hinbekomme...
Was genau machst du in deiner Routine mit dieser Zeile?
>TCNT2 = 0x9E; //setup
ich berechne OCR2 doch in meinem falle nach folgender Formel
fir= F_CPU/(2*N*(OCR2+1)) ?
Gruß jo
Für die Frequenz muß der Timer bis 0x62 zählen.
ICC berechnet (warum auch immer) daher einen Startwert
von 0x100-0x62 = 0x9e.
Hat aber für dich jetzt keine Bedeutung.
avr
genau das hat mich bissl irritiert...
also berechne ich einfach mein OCR2 wer nach meiner genannten Formel und
dann initialisiere ich den timer. wenn mein datensignal high ist, starte
ich mein timer und toggel somit Pin OC2 und wenn ich eine 0 sende,
stoppe ich den timer. ist das richtig?
vielen dank nochmal für eure unterstützung...
gruß Jo