Hallo, ich möchte den Timer 1 so einstellen, daß ich mit Compare1A=<Wert> eine Bestimmte Ausgangsfrequenz erhalte. Mein Problem ist nun, wie kann ich die Ausgangsfrequenz am OC1A-Pin direkt ausgeben? Ich möchte den Pin nicht Toggeln lassen, da dies die Ausgangsfrequenz wieder halbiert. Gibt es ein Register, welches ich beschreiben kann, daß die Frequenz an ORC1A ausgegeben wird? Das ganze soll ohne Aufruf einer Interruptroutine funktionieren. Geht das? Ich denke hierbei an die Register COM1A1, COM1A0, FOC1A, WGM10 und WGM11. Hier mal mein Ansatz: ' Test OC1A ' Mit Timer n wird ein Trägersignal erzeugt und auf OC1A ausgegeben $regfile = "m8def.dat".dat " $Crystal = 3686400 $hwstack = 10 $swstack = 20 $framesize = 40 config timer1 = timer , PRESCALE = 1024 , clear timer = 1 compare1a = 1800 start timer1 enable timer1 enable interrupts config portb.1 = output 'portb.1 = 1 tccr2.foc1a = 0 on compare1a test enable compare1a do !NOP loop end Test: portb.1 = 0 waitms 10 portb.1 = 1 Return ich habe hier einen Compare1A-Interrupt verwendet, der wegfallen soll. Es dient hier nur mal zu kontrollzwecken, ob die Frequenz stimmt. Hier F=2Hz Kann mir jemand helfen?
Hallo, das verstehe isg jetzt nicht... Richtig ist, bei Toggle die "halbe Frequenz rauskommt. Besser gesagt, der Comparewert legt die halbe Periodendauer fest. Due muß also Compare mit dem Wert für die halbe Periodendauer der Ausgangsfrequenz laden, wo ist da das Problem? Gruß aus Berlin Michael
ja das ist mir schon klar. aber geht das den nicht ohne Toggeln? Bei einem Quarz von b.B. 1 MHz mit Prescaler 1 könnte so direkt 1MHz aim OC1A liegen. Durch das Toggeln aber nur 500kHz. Ich habe oben ein paar Register angegeben, kann man nicht diese irgendwie verwenden, um das zu erreichen?
>Ich habe oben ein paar Register angegeben, kann man nicht diese >irgendwie verwenden, um das zu erreichen? Vielleicht hilft ein Blick ins Datenblatt des Mega8: Nein, man kann nur maximal die halbe Oszillatorfrequenz ausgeben (Seite 86ff im vollständigen Datenblatt sollte die Erklärung geben).
Ja das Datenblatt liefert die Erklärung. Danke! Leider ist das in Englisch. Ich wollte nur den Tip, ob das denn überhaupt geht oder nicht, und wissen, welches Register zuständig ist, die Timer1-Frequent auf den Pin OC1A durchzuschalten. nicht mehr, und auch nicht weniger.
http://bascom-forum.de/index.php/topic,10.msg11.html#msg11 in diesem beispiel kommt auch nur die halbe frequenz raus kannste aber einfach umstellen.und jeden port verwenden. Config Timer1 = Timer, Prescale = 64 Const Timervorgabe = 7936
Ich bin kein Schritt weiter! Geht es nun oder geht es nicht?
>Ich bin kein Schritt weiter! >Geht es nun oder geht es nicht? >>Nein, man kann nur maximal die halbe Oszillatorfrequenz ausgeben wer lesen kann, ist klar im vorteil.
Vielen Dank, das war jetzt mal eine klare Aussage! Mehr wollte ich doch gar nicht wissen. Oder doch? Jetzt muß ich mal etwas ausholen. Grundidee per Serieller Schnittstelle und IR eine Verbindung aufbauen. Der SendRC5 sendet ja nur 11 Bit. Ich hatte nun die Idee, mit dem Timer 1 eine Trägerfrequenz von 36kHz auf OC1A auszugeben und diese mit dem TxD-Signal zu modulieren. Also wenn TxD auf Low geht, wird das Signal am OC1A auf die Sende-Diode gegeben. Der Ruhezustand von TxD ist ja High. Wenn ich nun empfangen will, wollte ich das Trägersignal vom OC1A-Pin abschalten. Deswegen die Frage, ob die Frequenz am OC1A per Software Ein und ausgeschaltet werden kann. Also nochmal die letzte Frage: Welches Register muß ich wie ändern, um dies zu erreichen?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.