Salu zusammen Ich habe hier eine kleine Seriel/USB Platine von FTDI. (MM232R) Folgendes: 1. Wenn ich den USB Stecker einstecke am PC findet der Programmer das Device nicht mehr (TI USB-FET) 2. Wenn ich Hyperterminal starte erscheint folgende Meldung (siehe Anhang) Eingestellt habe ich 115200 8N1 Flusssteuerung: Keine Hier nun der Code: Ich denke er führt den Code aus, da das Display auf einmal stehen bleibt (nehme an er läuft in den Interrupt) aber ich sehe in Hyperterminal nichts. Wann muss ich eigentlich Hyperterminal öffnen? Vor dem starten des uP oder danach? Liegt es an HT (Fehlermeldung) das es nicht funzt? Wäre über Hilfe froh wie ich was auf den Bildschirm bekomme :o) Greets reflection #include <msp430x14x.h> #include <signal.h> unsigned char answer1[] = "Buchstabe "; unsigned char answer2[] = " gedrueckt\r\n"; int i, j; void uart(void) { WDTCTL = WDTPW + WDTHOLD; // Watchdog aus P3SEL |= 0xC0; // P3.6 und 3.7 als USART1 TXD/RXD ME2 |= UTXE1 + URXE1; // TX- und RX-Modul einschalten UCTL1 |= CHAR; // 8 data bits, 1 stop bit, no parity (8N1) UTCTL1 |= SSEL0; // UCLK als ACLK festlegen //UTCTL1 |= SSEL1; // UCLK als SMCLK festlegen UBR01 = 0x45; // 115200 baud aus 8MHz erzeugen UBR11 = 0x00; // Siehe Application Note / Tab.2 S.10 UMCTL1 = 0x2C; // Modulation der Baudrate durch Korrektorfaktor UCTL1 &= ~SWRST; // USART freigeben IE2 |= URXIE1 + UTXIE1; // TX- und RX-interrupts anschalten IFG1 &= ~UTXIFG1; // initales interrupt-flag loeschen _BIS_SR(LPM3_bits + GIE); // ab in den LPM3 mit interrupts ... //_BIS_SR(GIE); } interrupt (UART1TX_VECTOR) usart1_tx(void) { if (i < sizeof answer1-1) // String zu Ende? TXBUF1 = answer1[i++]; // String ausgeben else if (i == sizeof answer1-1) // wenn erster string zu ende ... { TXBUF1 = RXBUF1; // ... dann den getippten buchstaben ausgeben i++; } else if (j < sizeof answer2-1) // wenn auch der ausgegeben ist ... TXBUF1 = answer2[j++]; // ... dann den zweiten string ausgeben } interrupt (UART1RX_VECTOR) usart1_rx(void) { { i = 0; j = 0; TXBUF1 = answer1[i++]; // ersten buchstaben von answer1 ausgeben } }
Ach ja, an Xin Xout hängt ein 8MHz Quarz welchen ich hier für die Baudrate benutzen möchte. Ist vielleicht da der Fehler? Den Watchdog schalte ich auch in meiner Main Routine schonmal aus. Kann es da zu Probs führen?
Die Fehlermeldung lässt darauf schließen, daß Du nicht direkt "COM1" (oder welche Nummer auch immer) verwendest, sondern Dich mit irgendeinem Modem verbindest. Hyperterminal (oder welches Terminalprogramm auch immer) sollte vor dem Starten des µC, aber nach dem Anschließen des USB-RS232-Wandlers an den PC gestartet werden.
Prob ist, das mein uP nicht anläuft wenn ich das USB Kabel einstecke und danach den Strom des uP's einschalte. Muss nochmal die Hardware kontrollieren. WIe würde ich denn das umgehen das er mit einem Modem verbindet? Bei gewissen Ports steht "In use" bei anderen nichts. Wenn ich nun einen der nicht "In use" ist auswähle, kann er auch keine Verbindung öffnen.
Daß mit der Schnittstelle und nicht mit einem Modem kommuniziert wird, stellt man unter Hyperterminal bei den "Eigenschaften der Verbindung" ein. Das sieht in etwa so aus wie im Anhang. Natürlich muss die Schnittstellennummer mit der des USB-zu-Seriell-Wandlers übereinstimmen ... sonst kommunizierst Du mit irgendwas vollkommen anderem.
Vielleicht hast du auf dem FTDI den gleichen COM-Port wie am TI-USB Debugger, dann klappt das natürlich nicht. Oder deine Hardware-Verdrahrung stimmt nicht, so dass du den auf MSP auf Reset ziehst oder sowas...
Salu zusammen Es hat funktioniert! Ich bekomme irgendwelche Hieroglyphen raus. Denke mal das ich noch ein Baudraten Prob habe. Danke nochmals für die Tipps. Prob mit HT lag am Computer, habe einen anderen genommen und jetzt funzts! Greets reflection
Hmmm, moechte ich zu Hause auch mal machen können. Wenn was am Rechner nicht klappt, einfach einen anderen nehmen :-)
:o) Also es funktioniert, musste noch ein paar Sachen am Clock und an der Baudrate anpassen. Das obenstehende Programm läuft so wie es da steht. Nun habe ich einen String, oder besser gesagt ein Array of char das ich immer wenn ich while(1) durchlaufe an den PC senden will. Was muss ich da an den Interrupts ändern, blick da nicht durch. Vom PC soll gar nichts kommen, er soll einfach immer wieder den String senden. Habe da so was versucht, ohne Interrupt, aber des klappt net :o) Weiss jemand rat? Was mache ich falsch? void send_uart(char string[]) // String an PC senden { int i; for (i = 0; string[i] != '\0'; ++i ) { TXBUF1 = string[i]; } i = 0 return; } Manchmal schaffe ich es das ein paar Zeichen rauskommen, aber nicht alles und wild durcheinander. An der Baudrate kann es nicht liegen, wie gesagt, das oben hat gefunzt Danke schonmal für die Hilfe Gruss
Du beschreibst TXBUF, ohne zu warten, ob die Schnittstelle sendebereit ist. Das Senden eines Zeichens dauert aber deutlich länger als ein Schleifendurchlauf. Die UART-Hardware signalisiert, wenn ihr Sendepuffer leer ist. Das geschieht mit dem Bit UTXIFG1 im Interruptstatusregister IFG2 (für UART1) und mit UTXIFG0 im Interruptstatusregister IFG1 (für UART0). Probiere mal das hier:
1 | void send_uart(char* p) |
2 | // String über UART1 versenden
|
3 | {
|
4 | while (*p) |
5 | {
|
6 | while (!(IFG2 & UTXIFG1)); |
7 | TXBUF1 = *p++; |
8 | }
|
9 | }
|
Davon abgesehen solltest Du Dir mal ein Buch über das Programmieren in C zu Gemüte führen, am Ende einer void-Funktion ist weder ein return erforderlich noch ein "auf-null-setzen" benutzter Variablen.
Danke Rufus, das werde ich probieren. Buch habe ich übrigens gestern bestellt :o) Musste auch feststellen das ich da noch eine rechte Lücke habe. C ist halt doch nicht überall gleich wie Java und das ist halt das einzige was ich mal einigermassen gelernt habe. Gruss
@Rufus Es funktioniert so wie Du es oben geschrieben hast. Ist mir jetzt auch klar warum. Langsam aber sicher wird mir immer mehr klar mit den uP's. Ist halt rel. komplex wenn man noch nie was darüber gehört hat, aber geht nicht gibts nicht, da muss ich jetzt halt durch. Das nächste ist ein Minijoystick (Handy) und eine SD Karten Ansteuerung mit FAT. Die Hardware habe ich bereits implementiert, nur halt die Software noch nicht. Gruss
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.