Forum: Mikrocontroller und Digitale Elektronik µC an PC, µC an µC


von reisender (Gast)


Lesenswert?

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.

von Logasta (Gast)


Lesenswert?

Baudrate bei µC und PC gleich?

von reisender (Gast)


Lesenswert?

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.

von Logasta (Gast)


Lesenswert?

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?

von Logasta (Gast)


Lesenswert?

Ach, und die 9600 Baud .. hast du auch im µC eingestellt?

von reisender (Gast)


Lesenswert?

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.

von gissi (Gast)


Lesenswert?

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.

von Logasta (Gast)


Lesenswert?

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.

von reisender (Gast)


Lesenswert?

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.

von reisender (Gast)


Lesenswert?

Fehler TermIO_Putchar unknown   bei printf

von reisender (Gast)


Lesenswert?

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.

von peter (Gast)


Lesenswert?

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

von reisender (Gast)


Lesenswert?

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?

von reisender (Gast)


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

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?

von reisender (Gast)


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

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.

von reisender (Gast)


Lesenswert?

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.

von reisender (Gast)


Lesenswert?

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.

von reisender (Gast)


Lesenswert?

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