Forum: Compiler & IDEs USB UART Problem


von Daniel (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein Problem mit der Kommunikation über den FTDI FT232RQ und 
HyperTerminal.
Mit RS232 und Pegelwandler (MAX232) klappt die Kommunikation 
einwandfrei. Schließe ich allerdings FT232RQ statt den MAX232 an klappt 
es nur bedingt. Denn im Normalfall wartet das Programm auf eine Eingabe 
meinerseits und läuft dann weiter aber im Fall wenn der FT dazwischen 
geschaltet ist läuft es direkt weiter. Es sieht so aus (auch 
messteschnisch nachgewiesen) das der FT selbstständig Zeichen sendet 
welches dann mein Programm weiter laufen lassen.
Ich habe auch schon wie im Forum gepostet eine Verbindung zwischen
RTS--CTS
gemachts was allerdings nichts bewirkte.
Im HyperTerminal habe ich auch schon "mit" Flusssteuerung als auch 
"ohne" eingestellt. Sonst habe ich dort 8N1 mit 9k6.

Danke.

Daniel

von P. S. (Gast)


Lesenswert?

Hm, sehr interessant. Ich sehe etwas... sehr nebuloes... nein, doch 
nicht.

von Michael U. (amiga)


Lesenswert?

Hallo,

also wenn ich einen FT232 hätte, der ohne mich zu fragen einfach Zeichen 
sendet, also dann... dann...
Na der könnte was erleben!

Zum Glück habe ich solche einen noch nicht gehabt, obwohl ich die Teile 
gern und oft benutze.

Gruß aus Berlin
Michael

von Karl H. (kbuchegg)


Lesenswert?

Peter Stegemann schrieb:
> Hm, sehr interessant. Ich sehe etwas... sehr nebuloes... nein, doch
> nicht.

Gib deine Glaskugel zum Service. Mit einem guten Fensterreiniger kann 
man da noch was machen.

von Daniel (Gast)


Lesenswert?

also ihr vermutet Chip kaputt?? oder kann es sein dass er irgend ein 
steuersignal o.ä. sendet, welches der Mikrocontroller falsch 
interpretiert?

Weliche Info könnte ich Euch noch geben, dass mir geholfen werden kann 
und die Glaskugl nicht unbedingt angeworfen werden muss?

von Karl H. (kbuchegg)


Lesenswert?

Daniel schrieb:
> also ihr vermutet Chip kaputt?? oder kann es sein dass er irgend ein
> steuersignal o.ä. sendet, welches der Mikrocontroller falsch
> interpretiert?
>
> Weliche Info könnte ich Euch noch geben, dass mir geholfen werden kann
> und die Glaskugl nicht unbedingt angeworfen werden muss?

zb. Schaltplan
zb. Program

Sollte eigentlich selbstverständlich sein.
Du gehst ja auch selbst zum Doktor, wenn du ein Problem hast, damit er 
sich die Sache in Natura ansehen kann.

von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

also mein Doktor... nein lassen wir das :)

Im Anhang hab ich den Schaltplan angehängt. Ist allerdings die billige 
Version aus dem Datenblatt des FTDI's. Die Leitungen RTS, und CTS habe 
ich auch schon wahlweise offen gelassen und die Bauteile mit n.b. sind 
mittlerweile wie im Datenblatt angegeben bestückt. RX und TX gehen an TX 
u. RX des MSPs

Meine Interrupt Routine sieht wie folgt aus(aber wie gesagt sie 
funktioniert mit Pegelwandler anstelle des FTDIs problkemlos):
1
 nterrupt(USCIAB0RX_VECTOR) usart0_rx()
2
{
3
  if (uart_i == 0 && UCA0RXBUF == '\r')  
4
  {
5
    uart_in[uart_i] = '\0';        
6
  }
7
  else if (UCA0RXBUF == '\r' || UCA0RXBUF == '\b' || uart_i == MAXLINE-1 )
8
    {               
9
      uart_in[uart_i] = '\0';    
10
      uart_i = 0;          
11
      uart_r_tx = 1;        
12
                    
13
    }
14
    else if ((UCA0RXBUF >= 0x30) & (UCA0RXBUF <= 0x39))
15
      {             
16
        uart_in[uart_i++] = UCA0RXBUF;  
17
      }
18
      else
19
      {
20
        uart_in[0] = '\0';    
21
        uart_i = 0;        
22
        sprint("\r\nFehlerhafte Eingabe.\r\n\n");
23
      }
24
  //uart_in[uart_i++] = UCA0RXBUF;
25
  IFG2 &= ~UCA0RXIFG;                      
26
}

von Karl H. (kbuchegg)


Lesenswert?

Und wie wertest du das ganze dann aus?
In der Interrupt Routine ist nicht wirklich irgendein Mechanismus 
erkennbar, der einer Hauptschleife mitteilen könnte: Jetzt ist eine 
Zeile vollständig vorhanden.

Edit:
Oder macht uart_r_tx diese Benachrichtigung?

Hast du dir die empfangenen Zeichen schon mal zur Kontrolle ausgeben 
lassen?

von Daniel (Gast)


Lesenswert?

im Hauptprogamm werte ich uart_r_tx aus.
1
if (uart_r_tx == 1)      
2
{
3
      sprint(uart_in);
4
                        uart_r_tx = 0;      
5
}

ich hab mir das Zeichen aus schon ausgeben lassen, aber es wurde kein 
Zeichen angezeigt sondern war nur ein Return.

von Karl H. (kbuchegg)


Lesenswert?

Daniel schrieb:

> ich hab mir das Zeichen aus schon ausgeben lassen, aber es wurde kein
> Zeichen angezeigt sondern war nur ein Return.

Oder irgendetwas anderes.
Dort ist dein Punkt an dem du ansetzen musst.
Vergiss dein eigentliches Programm fürs erste, die Kommunikation 
zwischen FT und µC muss sicher klappen. Wenn dazu ein paar eigene 
Testprogramme notwendig sind, dann sind sie eben notwendig.

Einfaches Testprogramm:

  Zeichen empfangen
  Zeichen und Hex-Code vom Zeichen zum Terminal zurückschicken.

Solange du dort nicht alle Zeichen siehst und zwar so wie du sie 
eingegeben hast, ist was faul und dem muss man nachgehen. Baudraten 
könnten falsch sein, etc.

von Daniel (Gast)


Lesenswert?

Ok danke dir. Ich werde da nochmal ansetzten.
Wobei mich halt verwundert, dass wenn ich die RX u. TX Leitung an den 
Pegelwandler packe und ich direkt über RS232 an den Rechner gehe eine 
Komunikation über Hyperterminal problemlos mit dem gleichen Code 
funktioniert

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.