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