Forum: Mikrocontroller und Digitale Elektronik Hilfe ! Uart (Prozessor) läuft im falschen Takt !


von Michi (Gast)


Lesenswert?

Hilfe Leute !

ich bin am verzweifeln. Normalerweise löse ich meine Probs immer 
irgendwie selbst, aber diesmal weiß ich im Moment nicht so ganz weiter.

Darum hoff ich auf ein paar Freakz unter euch. Und ich weiß da gibt's 
noch einige unter euch irgendwo da draußen die's drauf haben...

Folgendes Problem: Hab einen Atmel 89C0251-Flash Controller mit meinem 
80C535-System programmiert.
Programmiergerät gebaut und auch eine Experimentierplatine für den Flash 
Controller. Mit Max232, 5 Volt SPannungsregler, und 24 Mhz Quarz für den 
ATmel.

Programmieren etc. funzt einwandfrei. Und mein Controller führt seine 
Programme auf dem Experimentierboard auch aus. Aber meiner Meinung nach 
im falschen Takt. Ich hatte immer das Gefühl das er zu langsam läuft. 
Das machte bei den ersten Tests (LED an/ausschalten) auch keine 
Probleme. Dann aber wollte ich den Uart programmieren um mit dem PC über 
MAx232 zu kommunizieren.

Obwohl ich meinen 80C535 in und auswendig programmiert habe und kenne, 
und daher ziemlich gut bescheid wußte was ich tue und der at89c51 ja 
ziemlich genau gleich aufgebaut ist, konnte ich einfach nix vernünftiges 
senden.

Ich hab gedacht ich spinn, ich konnte einfach keine reload werte für den 
timer oder prescaler finden in denen ich irgendwas vernünftiges senden 
konnte. Wollte eigentlich nur mal den ascii-wert 'a' übertragen. aber 
heraus kam nur müll.

Irgendwann hab ich es dann aufgegeben. das nächste komische war das eine 
zeitschleife die auf meinem 80c535 mit 12Mhz normalerweise 1 sekunde 
dauert, auf dem 24 Mhz atmel ca. 6 sekunden brauchte... ?

Heute hab ich da ich selbst kein oszi hab, mein ganzen Kram zusammen 
gepackt und hab in einem radio u. fernsehgeschäft das oszi für ne stunde 
in beschlag genommen und mal ein paar frequenzen gecheckt.

der Uart sollte eigentlich nach meiner programmierung (siehe unten) mit 
9600 Bps senden  brauchte aber statt etwa 100 mikrosekunden pro periode 
etwa 300 also das 3-fache. das signal auf dem max232 schien identisch 
zeitlich verzögert zu sein.

also hab ich mir gedacht schaun wir nochmal die taktfrequenz an. auf dem 
quarz steht 24 Mhz 32pf.
hab dann mit dem oszi (altes ding) so gut es ging auf dem eingang XTAL2 
des atmel versucht die taktfrequenz zu erkennen. heraus bekommen hab ich 
eine periodendauer von etwa 0,12 mikrosekunden. das würde aber einer 
frequenz von etwa 8,3 Mhz entsprechen. Ich bin mir nicht sicher ob ich 
die frequenz richtig messen konnte, aber auch mit einem anderen quarz 
ging es nicht.

Meine frage ist nun : Wie zur Hölle ist es nur möglich das der 
Controller einfach nicht im richtigen Takt läuft ? Ich kann dadurch nix 
sinnvolles mit dem Controller anfangen. Ich bin mit meinem Latein 
jedenfalls am Ende....

Und hoffe das mir hier vielleicht jemand Rat geben kann, damit ich 
wieder ruhig schlafen kann.


so long

c ya in the matrix or join me in death


hier noch mein testcode. vielleicht hab ich ja doch was übersehen...

 ;*********************************************************************** 
****
 ; Version    : 1.0
 ; Datei     : scoware.a51/hex
 ; Bemerkung : only the sky is the limit
 ;********************************************** æcAT89C0251 
*****************

org 00h            ; Startadresse im FLASH
mov sp,#30h          ; Stack auf 30h hinter Registerbänke und Bit-Area 
setzen

orl PCON,#80h        ; Baudratenverdoppler setzen
mov TMOD,#20h        ; Timer 1 in 8-Bit Auto-Reload Modus aktivieren
mov TH1,#243        ; Reload Wert setzen für 9600 bps
mov TL1,#243
clr SM0            ; Uart-Mode ,8-Bit, variable Baudrate über Timer 1
setb SM1

setb REN            ; Empfang Uart aktiviert
setb TR1            ; Timer 1 aktivieren


START:
mov a,#'a'
mov sbuf,a          ; A in Senderegister
jnb TI,$            ; warten bis Senden fertig
clr TI                ; Sendeflag löschen
;cpl P3.7    ; die Arbeit durchführen
;          mov r7,#1
;  m3:     mov r6,#8      ;--------------------
;  m2:     mov r5,#250
;  m1:     mov r4,#250
;          djnz r4,$
;          djnz r5,m1     ;verzögerung  ca 1sec auf 12 Mhz 80C535
;          djnz r6,m2     ;--------------------
;          djnz r7,m3
ajmp start
END

von Uwe (Gast)


Lesenswert?

Hi!
Das Probl.habe ich schonmal irgendwo gelesen, es liegt am Quarz und wie 
er betrieben werden muss, Serien oder Paralellresonanz. Der Untersch. 
ist glaube ich 1:3, passt zu deiner Aussage. Also hau den Quarz weg.
Gruss Uwe

von Michi (Gast)


Lesenswert?

Hi Uwe

danke, das hat mir schon mal ein bißchen weiter geholfen.
das wissen anscheinend aber nicht sehr viele das man da auch noch 
aufpassen muß. Hut ab !

aber woher weiß ich nun, wie ich mein quarz betreiben muß. oder welchen 
quarz ich genau brauche.

ich weiß nicht was ich da jetzt anders bestellen soll als 24 Mhz.
kann man das irgendwie an einer bezeichnung erkennen.

also alle anderen (die ich so gesehen hab) schalten den quarz doch 
einfach parallel zu den xtal eingängen und mit 2 kondensatoren auf 
masse.

so hab ich das jetzt überall gesehen. ich wußte nicht das man da
noch was falsch machen kann.

trotzdem danke für deine antwort, das hört sich für mich jetzt irgendwie 
auch logisch an und ist eine bestätigung für das was ich schon irgendwie 
vermutet habe.

ich werd mir irgendwoher ein anderen quarz besorgen. jetzt sollt ich 
halt nur noch wissen was für einen.

best regards

Michi

von Tommy (Gast)


Lesenswert?

Hallo Michi,
das sieht ganz so aus, als ob Du einen Quarz benutzt, der kein 
Grundwellenquarz ist. Er müßte dann auf der dritten Oberwelle betrieben 
werden um mit 24 MHz zu schwingen ( 8MHz * 3 = 24 MHz). Leider gibt es 
Bauteillieferanten, die das in Ihren Katalogen nicht ausdrücklich 
erwähnen. Du hast folgende Möglichkeiten: Entweder Induktivität 
hinzuschalten oder Grunwellenquarz kaufen.

cu
Tommy

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ist das der Reichelt-24MHz-Quarz? Mit dem soll es Probleme geben, such 
mal in Google Groups.

von Michi (Gast)


Lesenswert?

Hi,
Thx Tommy und Andi.
Jetzt kommen wir der Sache immer näher.
Ja es ist tatsächlich der 24 Mhz Reichelt Quarz. Jetzt wird mir so 
einiges klar. Und hab nebenbei noch was über Quarze gelernt.

Trotzdem bin ich noch sauer über die Zeit und Nerven die mich das wieder 
gekostet hat. Sowas dürfte Reichelt eingentlich nicht einfach so 
ungekennzeichnet lassen. Das kostet viele Leute einige Nerven so was 
rauszufinden wenn sie kein Meßlabor zu Hause haben.

Abgesehen davon, wird kaum irgendwo im Internet erwähnt das man bei den 
Quarzen aufpassen muß wie man sie betreibt.

Aber es ist halt immer, man kann sich heut auf nichts mehr wirklich 
verlassen :-)

Werd mal mein 12Mhz quarz aus meinem 80535 auslöten und testen, und hier 
wieder berichten. Wenn der läuft bestell ich 12Mhz Quarze und hoffe das 
das dann Grundtonquarze sind. Oberwellenbetrieb ist mir ein bißchen zu 
aufwendig, hab jetzt keine Lust mehr mich mit den blöden Quarzen zu 
quälen.

Danke an euch alle für eure Hilfe.
Ich denk jetzt bekomm ich es in Griff.

c ya

Michi

von Michi (Gast)


Lesenswert?

So

abschließendes Fazit...

es war der Quarz !
mit meinem 12Mhz Quarz und 22pf Kondensatoren, klappte es auf Anhieb. 
Scheint also ein dfinitiv ein Grundtonquarz zu sein.

Auf meinem 12 Mhz Quarz steht übrigens A12Mhz drauf.
weiß jemand vielleicht was das genau A bedeuten könnte ?

Also Leute in Zukunft immer auf die Quarze aufpassen.
Das hab ich jetzt gelernt.. :-)

Gruß an alle, die mir hier geholfen haben...

Michi

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.