USB UART Problem

Gast #1368001
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
Gast #1368150
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?
#1368151
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.
Gast #1368219
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
}
Angehängte Dateien:
#1368255
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?
Gast #1368271
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.
#1368304
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.
Gast #1368562
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren