Forum: Mikrocontroller und Digitale Elektronik Screenshoot Oszilloskop! Wer kann helfen?


von Klaus (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Purzel H. (hacky)


Lesenswert?

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.

von Ulli B. (fennec)


Lesenswert?

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.

von Gibts N. (schneeblau)


Lesenswert?

Ich tippe auch darauf, dass deine Pulslängen unterschiedlich lang sind.

Debugger verfügbar?

von Peter R. (pnu)


Lesenswert?

...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.

von Klaus (Gast)


Lesenswert?

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?

von Klaus (Gast)


Lesenswert?

@Peter!

Das mit dem Jitter und grösseren Quarz werde ich mal nachgehen. Zur Zeit 
ist ein 12Mhz Quarz eingebaut.

von Peter R. (pnu)


Lesenswert?

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.

von Anja (Gast)


Lesenswert?

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

von Anja (Gast)


Lesenswert?

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

von Rüttiger (Gast)


Lesenswert?

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

von Bernd B. (Firma: BB) (berndb)


Lesenswert?

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

von Klaus D. (kolisson)


Lesenswert?

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

von Klaus (Gast)


Lesenswert?

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 ??)

von Stefan Z. (Gast)


Lesenswert?

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???

von Klaus (Gast)


Lesenswert?

@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.

von Peter D. (peda)


Lesenswert?

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

von Klaus (Gast)


Angehängte Dateien:

Lesenswert?

@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.

von Klaus (Gast)


Lesenswert?

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

von Klaus (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.