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.
Ich tippe auch darauf, dass deine Pulslängen unterschiedlich lang sind. Debugger verfügbar?
...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?
@Peter! Das mit dem Jitter und grösseren Quarz werde ich mal nachgehen. Zur Zeit ist ein 12Mhz Quarz eingebaut.
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
Mikro Oschi schrieb: > Jetzt > wird am unteren Rand des Signales getriggert. die 1 markiert die Nullinie von Kanal 1, der Triggerwert ist nicht zu sehen
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.
So ich hab mal versucht 36 kHz mit PCA zumachen hier der Quellcode: Allerdings lassen sich nur 33,3 Khz oder 38,5 khz einstellen. Im Moment ist ein 12 Mhz Quarz eingebaut. Soll oder muss es sogar ein 11,0592 Mhz sein?? $INCLUDE "Atmel\T89C51AC2.mc" ; ------------------------------------------------------------- ; Programmstart ; ------------------------------------------------------------- ORG 0h JMP Initialize ; ------------------------------------------------------------- ; Interrupt-Routinen ; ------------------------------------------------------------- ORG 0033h LJMP PCA_ISR ; ------------------------------------------------------------- ; Eingefügte Dateien ; ------------------------------------------------------------- $INCLUDE declarations.asm ; ------------------------------------------------------------- ; Initialisierung des Programms ; ------------------------------------------------------------- Initialize: MOV SP, #40H MOV CMOD,#00000011b MOV CCON,#00h MOV CCAP4H,#00h MOV CCAP4L,#10h ; 0Fh = 38,5khz; 10h = 33,3 khz MOV CL,#00h MOV CH,#00h MOV CCAPM4,#01001101b ; PCA High-Speed Modus ; ------------------------------------------------------------- ; Hauptprogramm ; ------------------------------------------------------------- Main: SETB EC SETB EA SETB CR ; ; ------------------------------------------------------------- ; Programmende ; ------------------------------------------------------------- Finalize: JMP finalize ; ------------------------------------------------------------- ; Daten ; ------------------------------------------------------------- PCA_ISR: CLR CCF4 MOV CL,#00h MOV CH,#00h RETI
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.
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.