Hallo!
Im Ahnang ist ein Bildchen das ein Rechteck-Signal von 37.5 khz zeigt.
Dieses Rechteck-Signal wird mit einem µC AT89C51AC2 an P4.0 über Timer 1
erzeugt.
Was ich wissen möchte wraum diese Rechteck-Signal hin- und herschwingt.
Ich verwende Rigol DS1202CA falls das noch wichtig ist.
Naja. Der Trigger ist stabil, aber die Pulsdauer nicht. Wahrscheinlich
trotzdem ein Triggerproblem. Ich wuerd bei Signal-Halbe triggern. Jetzt
wird am unteren Rand des Signales getriggert.
Poste doch bitte mal den Quelltext, da ich keinen AT89C51AC2 da habe.
Dann kann ich das mal ausprobieren. Ich tippe aber auf schlechte
Schirmung oder falsche Triggereinstellungen.
...wird über Timer 1 erzeugt...
Wenn dabei der Timer-Int beteiligt ist, etwa in der Form dass der Timer
nach jedem Overflow im overflow-int auf die Startzahl gesetzt wird, wird
der Jitter recht stark. Da werden, je nach Reaktionszeit auf den Int die
Zeitabschnitte der Rechteckspannung eine streuende Dauer haben.
Wahrscheinlich ist auch die Taktfrequenz des Kontrollers zu niedrig für
diese Anwendung.
Im reload-Betrieb des Timers dürfte ein wesentlich kleinerer Jitter
entstehen. Auch da sollte man eine möglichst hohe Taktfrequenz wählen,
denn eigentlich kann man auf diese Weise nur Frequenzen erzeugen die
eine ganzzahlige Teilfrequenz des Taktes sind.
Danke erstmal für die Antworten:
@Gibts Ne
Leider kein Debugger verfügbar!
Habe jetzt mal nur den Timer 1 in Betrieb und in der Interrupt-Routine
den P4.0 getogelt und sieht stabil aus.
Davor hatte ich den Timer 2 laufen als Baudgenerator und Zeichen
gesendet.
Hmm? Kann es sein das dieses Wackeln vom Rest des Programmes kommt.
Wenn ja wie bekommt man sowas in Griff?
größerer Quarz ??? Du meinst höhere Taktfrequenz.
Dabei aber auch an die echte Taktfrequenz denken, bei den meisten
8051-ern ist sie eh nur 1/6 oder gar 1/12 der Quarzfrequenz. Das war vor
etwa zehn Jahren für mich der Grund, auf einen AVR umzusteigen, bei dem
ich hängen geblieben bin.
In den Griff bekommen: möglichst hohe Taktfrequenz, Erzeugungsmodus
wählen, bei dem der Teiler die Unterfrequenz jitterfrei erzeugt. (Dazu
sollte man die hardware kennen und die software dazu). Auch muss man
beachten, wie das Arbeitsergebnis auf P4 übertragen wird: Manchmals
stottert die Ausgabe, weil ein anderer Int dazwischen funkt.
Für viele AVR' gibts eine Betriebsart, wo der Teiler direkt eine
Portleitung toggelt, ohne dass das eigentliche Programm mit seinen Int's
hineinstolpert. ("Stichwort" PWM) Dann entsteht ein (fast) jitterfreies
Signal.
Miss mal die Breite der Phasensprünge der Flanken nach, die werden
sicher etwas mit der echten Taktfrequenz zu tun haben.
Wenn das Scope eine sehr niedrigen sample-Takt hat, könnte auch so ein
Bild entstehen.
Klaus schrieb:> Wenn ja wie bekommt man sowas in Griff?
Gar nicht: das was Du siehst ist die Interrupt-Latency. Die Beträgt
zwischen 1 und 4 Taktzyklen je nachdem in welchem Befehl der Interrupt
zuschlägt.
Gruß Anja
Anja schrieb:> zwischen 1 und 4 Taktzyklen
muß natürlich heißen: Befehlszyklen.
Du kannst aber auch den Uart für die Taktausgabe mißbrauchen.
Falls das ganze eine IR-Fernbedienung werden soll:
normalerweise ist das Tastverhältnis nicht 50% sondern nur 25%.
Damit kann man bei gleichem (mittlerem) Stromverbrauch die Reichweite um
Faktor 1,4 erhöhen.
Gruß Anja
Hallo Klaus,
Wenn die Interrupt Priorität für die Serielle Schnittstelle höher als
die für den Timer ist kann es auch zu einem extrem großen Jitter kommen.
Wie die anderen schon geschrieben haben entsteht durch die Interrupt
Verarbeitung immer ein kleine Jitter von einigen Befehlszyklen.
Gruß BerndB
Hallo Klaus,
da ich auch schon Pferde vor der Apotheke gesehen habe würde ich sagen,
der letzte Teilnehmer , also Autor: Bernd B. (Firma: BB) (berndb) hat
die grösste Chance Recht zu haben.
Alternativ biete ich dir einen Rechenfehler an.
z.B. das ein Byte zwar 256 Schritte hat aber von 0 bis 255 zählt.
Die Vorschläge bezüglich anderen Quarz etc. würde ich mal in den Müll
packen. Selbst mit dem internen Oscillator wäre das Signal nicht so
(J)Zitterig.
Musst halt mal die Programmierung des Timers herausrücken.
Klaus
Wahnsinn!
Vielen Dank an alle für die vielen ausführlichen Diagnosen.
Auszugsweise:
Der Timer1 interrupt ist sehr einfach programmiert.
Timer2 wird ohne Interrupt durchlaufen.
org 0000h
JMP Initialisierung
ORG 1BH
JMP Timer_1_Interrupt
Initialisierung:
MOV CKCON,#00001001b ; Timer 1 1/6 und Timer 2 1/12 clocktakt
MOV TL1, #TH1_INIT
MOV TH1, #TH1_INIT
MOV TMOD, #20H ; Timer 1 im 8 Bit Reload Betrieb
SETB ET1 ; Timer 1 Überlauf-Interrupt Enable-Bit setzen
SETB EA ; Alle Interrupts ein
SETB TR1 ; Timer 1 Run Control Bit ein
Timer_1_Interrupt:
CPL P4.0
RETI
@Anja
Du hast fast recht mit deiner Vermutung. Das Ziel ist es eine eine
IR-RS232-Schnittstelle zu schaffen. Der Kabelsalat geht mir so langsam
auf den Wecker.
Empfangen von Daten ist kein Problem aber das senden stellt sich
schwieriger heraus als erhofft.
Ich denke das ich mit dem 12 Mhz Quarz keine 36khz hin bekomme.
Entweder ist es 35,7 oder 37,0 khz. (Am Kopf Kratz ??)
Hi!
Zum Testen, ob es am Oszi (bzw den Einstellungen) liegt oder am AVR
kannst du probweise ein Programm schreiben, dass nur eine while(1)
Schleife hat, in der der Pin getoggelt wird. Wenn es da auch jittert,
kannst du den AVR ausschließen. Der Jitter des Quarzes ist - wie schon
gesagt wurde - DEUTLICH unter dem hier gezeigten Jitter.
Nochmals die Frage: Auf welche Spannung triggerst du?
Und: Warum hast du nur eine Amplitude von 600 mV???
@Stefan Zimmermann
>Nochmals die Frage: Auf welche Spannung triggerst du?>Und: Warum hast du nur eine Amplitude von 600 mV???
Nun ja ich habe den Knopf Auto gedrückt! Die Trigger werden Automatisch
gesetzt. Als ich die Aufnahme gemacht habe ist mir, das gar nicht
aufgefallen. Es wird eher so sein das ich beim einstellen was Verkehrt
gemacht habe.
Mit Schalten in Software wirst Du immer einen Jitter haben.
Dein MC kann jitterfrei direkt Pins vom Timer setzen.
Nimm entweder T2 oder das PCA und den dazugehörenden Ausgang.
Peter
@Stefan Zimmermann
Die Ursache für die 500mv waren, das der Messgeber auf 1x statt 10x
eingestellt war.
Das Aktuelle Bild zeigt CH1 den Takt für Timer 1
und CH2 zeigt TxD über Timer 2 als Baudratengenerator.
@Peter
An den PCA habe ich auch schon gedacht allerdings komme ich nicht auf
die
besagten 36Khz.
Moin!
So hab jetzt mal den Quarz gegen 11,0592 Quarz getauscht.
Allerdings lassen sich trotzdem nicht die 36kHz einstellen.
Im PCA-High-Speed Modus und der µc X2 Modus lassen sich bis 70khz
einstellen.
Einstellen lassen sich 35,5 38.5 darüber oder darunter aber niemals
36 khz.
Bei einem 11,0592 oder 12 mhz Quarz müsste man doch meinen jede
beliebige
khz Zahl einstellen zu können. Ich meine das müsste µC doch können oder
nicht?
Also ich bin jetzt richtig ratlos. Irgendwas blick da nicht hmmm.