Gast
#14095
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