Aalso, ihr haut mich jetzt bestimmt. Ich muss hier einen µC (Freescale h12x-80pin) mit einem PC verbinden(später auch mit 2. freescale). Hab aber irgendwie innerhalb derer Sprache ein Brett vorm Kopp. Die Txd und Rxd Pins für die serielle Verbindung zwischen den beiden hab ich belegt. Flusssteuerung gibt es derzeit keine. Wenn ich die SendChar('T'); Funktion Nutze kommt aber nur ein X~ an.. und das auch nicht ordentlich. (Im Hyperterminal über Seriell Kabel) Muss ich etwa von c auf AssemplerSprache wechseln und jedes register einzeln in den Sende-Puffer laden? Für diesen µC gibt es zwar eine Befehlsliste aber keine Bsps darunter zur Anwendung wie in anderen C-Hilfen. Ein "SendBlock(*Ptr), *Ptr points at the Block thats to send." hilft mir nicht wirklich wenn ich die Syntax nicht kenne. Hatte ja gehofft das diese Vorgefertigten Routinen laufen, werden von der Unterstützungs Software ProzessorExpert nach def. der Pins erzeugt. Aber es scheint nicht so. Gebt mir einfach mal nen Anstoß wie das überhaubt geht, bin ich erst mal drin wird das scho. Danksche.
9600, 8bit, 1Stopbit, keine Parität, Flussteuerung aus, Ascii Kodierung Ansi, ANSIW und Autom. Versucht. Nix. ausser bei öfterne Reset drücken ein X~ da mein Programm in keiner Schleife gefangen ist.
Also das X~ bekommst du immer bei einem Reset von dem µC ? Also werden die Daten garnicht erst übertragen im Programm. Mach einfach mal eine Endlosschleife mit
1 | while(1) |
2 | { sendchar('a'); } |
rein. Und du hast ja nicht TX-µC an TX-PC sowie RX-µC an RX-PC oder ? RS232 "Wandler" beschaltung in Ordnung bzw. ist es ein Testboard oder ein eigenes?
Also, bei dem freescale ist CodeWarrior dabei, dem netten Programm ProzessorExpert, welches ein Teil davon ist sagte ich es möge bitte eine Assyncrone Verbindung Bereitstellen. Es belegte die Pins TxD,Rxd _0 mit ihrer Funktion, im BeanManager rechts kann ich die Eigenschaften, Methoden + Events einstellen. Dort ist alles Eingestellt, Offensichtlich und garantiert nicht falsch. Verbunden ist mein Rechner mit einem 9-Poligen seriellen kabel, das ja hoffentlich wohl Txd und Rxd von allein kreuzt, da das ja immer so sein muss. Das zeichen bekomme ich nach einem drücker auf +reset+ am Board, Packe ich es in eine Schleife, kommt das zeichen nicht autom mehrfach, da ich dafür den Puffer leeren, das Bit für - wurde gesendet- wegnehmen und den -in den puffer rein- vorgang erneut starten müsste. wenn ich die Beschreibung richtig verstanden habe. was aber auch nicht so einfach ist, da ich mit interrupts arbeite und für die puffer handlings die events benutzen müsste. Es muss doch für solch Programierung eine Hilfestellung geben, die mehr ist als 1 Programm welches die LEDs leuchten lassen kann. Der µC selbst sitzt auf einem DEMO board, ich kann ihn über eine direkteRuntimeSpeicherausslese,starte und anhalte software (USB) steuern.
verbinde mal RX/TX kabel die zum µC gehen (vom Pegel wandler), dann sende etwas über hyper terminal, es sollte genauso zurückkommen, wenn das klappt ist es sicherlich der µC der das Problem verursacht.
Dann wird es an der Hardware bestimmt nicht liegen. Die DEMO Boards haben meistens RX/TX gedreht, nicht das Kabel an sich, was aber aufs gleich rausläuft. Wie ist der µC konfiguriert? Hast du die "stdio.h" eingebunden in den Quelltext und einfach mal ein printf("Hallo"); probiert? Wenn der µC richtig eingestellt ist, sendet er damit zu das Hallo an den PC egal ob danach eine ISR gestartet wird oder nicht. Mindestens ein "H" muss kommen sonst ist entweder der PC falsch eingestellt (unwahrscheinlich), die Hardware falsch (sehr unwahrscheinlich wenn DEMO Board) oder der µC falsch eingestellt.
Wieso sendet der µC mein Printf("Txt"); an den RS? Laut Beschreibung muss ich jedes Byte einzeln in die SendeResister laden? Das wär ja toll. ich teste printf und ja, via klemmen rxd und txd verbunden und auf hyperterminal das rausbekommen was rein ging.
Ich hör für heute auf, genug von hier. Habe eben noch ein mal TxD und RxD manuell getauscht. Und SendChar benutzt. Aber nix, nicht mal mein Sonderzeichen.
hi, beim s12x ist die baudrate vom der quartzfrequenz und von der pll abhängig. wie das zusammenhängt steht hier drin: http://www.megamanual.com/router/MC9S12XDP512_V2.pdf
Danke für das Datenblatt, davon hab ich hier richtig viele. Ich habe den Fehler aber heute gefunden. Es ist ganz mysteriös. Habe ausversehen am Rechner die HyperTerminal Verbindung 2400 genommen, ein drücker auf reset und die Daten flossen. Der µC steht auf 9600baud. Stelle ich ihn ebenfalls auf 2400, kommt wieder nichts an... woran kann das liegen?
Ach ich verstehe, die Baudrate war für den Quartz zu hoch, warum klappt es aber dann niocht mehr wenn ich den µC ebenfalls auf 2400 stelle? Das muss ich aj beachten wenn ich ihn später an den 2. µC hängen will.
Du denkst du hast den µC auf 9600 Baud eingestellt. In Wirklichkeit hast
du ihn aber auf 2400 Baud eingestellt. Der Grund kann sein:
> die baudrate ist von der quarzfrequenz und von der pll abhängig.
Bleibt also die Frage: Wie hast du die Baudrate eingestellt, speziell
wie hast du Quarzfrequenz und PLL dabei berücksichtigt?
Ich habe die AS1_Beans gewählt, im Bean Connector unter Transmitter die Eigenschaft "Baudrate" angeklickt. Ein Wizard öffnet sich, sagt mir eine range die ich eingeben kann 330-90000, ich trage dort 9600 ein. Wähle die einheit Baud, kann noch xtal-ticks wählen. Da denke ich doch, wenn ich dem Freescale sage, 9600baud, das es das dann auch ist.
Hast du in deiner Entwicklungsumgebung bzw. dem Wizard die Möglichkeit OSCCLK einzugeben und dir mit den diversen Einstellungen der PLL die BUSCLK berechnen zu lassen? Der Baudratengenerator arbeitet ja mit BUSCLK. Im Moment sieht es so aus, als ob BUSCLK nur 1/4 des erwarteten Werts ist.
Nein, der Wizard nimmt für die Eigenschaften nur feste Werte an und trägt dann die entsprechenden Werte die das realisieren wollen in die register ein.
Gestestet, habe meine Mhz(internal bus clock) auf oszillator frequenz gestellt 16Mhz (von 8), was meine PLL von 16 auf 32 erhöt hat. An den 9600 baud habe ich nichts geändert. Wenn der BusClock einfliest, müsste es dann ja wieder nicht mehr gehen, aber es kam alles an meinem hyper terminal an.
aah, anscheinend hatte es doch etwas damit zu tun, habe ja den bus_clock angehoben und jetzt grad mal auf 9500baud gestellt. jetzt kommt alles am hyperTan. Er war warscheinlich schlau genug den richtigen wert einzutragen, aber der µC-CPU hats nicht hinbekommen. Also das geht jetzt. Ich hab auch schon versucht etwas an den µC zu senden und eine antwort zu erhalten, habe im event OnRxGet eingestellt das er senden einstellen soll und dann etwas def. anderes schickt und dann wieder sein senden aufnimmt. aber nach einem tastendruck im hyperterminal, hält das senden vom µC einfach an.. naja mal schaun.
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.