Forum: PC Hard- und Software USB kommunikation mit AVR (PC/uC Software Fragen)


von Ano N. (oorim)


Lesenswert?

Hey

Seit längerem stelle ich mir folgende zwei Fragen...
Angenommen ich statte mein uC Board mit USB aus (FT232 von FTDI). Nun 
schliese ich den Spaß an den PC an. Frage 1: Wie kann ich im uC 
feststellen das USB angeschlossen ist und der PC bereit ist Daten zu 
empfangen? Einfach über "5V an USB da, ja/nein"? Die 5V wären ja nicht 
zur Versorgung des Boards und könnten damit gegen die eigene Masse 
gemessen werden (bzw mit dem ADC an der 5V Leitung). Frage 2: Wie kann 
ich dem PC jetzt Daten senden? Ich verrenk mir dabei auf der PC 
Software-Seite wie auch auf der uC Software Seite das Gehirn... Ich 
würde eine Display anzeige auf dem Board machen "PC angeschlossen" und 
auf dem PC einen Button vorsehen auf dem steht "Daten Downloaden", nach 
einem Klick zieh ich die Daten vom Board (SD Karte oder RAM über SPI 
Schnittstelle) rüber.

Aber wie realisier ich das auf dem PC und auf dem uC? Ich steh da ein 
wenig auf der Leitung und suche Hilfe ...

Grüße

von Justus S. (jussa)


Lesenswert?

zu 1) hat der FT232 nicht Pins, die sowas ausgeben können?

zu 2) Wie mit der "normalen" seriellen Schnittstelle

von Ano N. (oorim)


Lesenswert?

1) Ich hab beim FT232BM nur den PWREN# Pin gefunden: "Goes Low after the 
device is conf gured via USB, then high during USB suspend.
Can be used to control power to external logic using a P-Channel Logic 
Level
MOSFET switch. Enable the Interface Pull-Down Option in EEPROM when 
using
the PWREN# pin in this way." weis nich ob ich das ich dafür nutzen 
könnte
2) Bei der seriellen Schnittstelle hab ich ähnliche Probleme, hab auch 
die nie implementiert...

von Justus S. (jussa)


Lesenswert?

Ano Nym schrieb:

> Ich hab beim FT232BM

ahso, bin vom FT232R ausgegangen..

> 2) Bei der seriellen Schnittstelle hab ich ähnliche Probleme, hab auch
> die nie implementiert...

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Der_UART

von Ich (Gast)


Lesenswert?

Im Blockdiagram des Datenblattes des FT232BL ist ein vollständiger UART 
abgebildet, mit allen dazugehörigen Sigbalen:

TXD,RXD,RTS#,CTS#,DTR#,DSR#,DCD#,RI#

Damit kannst du einen Hardwarehandshake nutzen.

von Ano N. (oorim)


Lesenswert?

Gut stimmt, USB Kommuniziert auch über den USART. Damit wäre das schon 
ma geklärt.
Heist für den Ablauf (uC Seite):
Start
-> Feststellen (USB=angeschlossen&&Funktioniert)
-> Warten auf "Senden" Zeichen (kommt vom PC)
-> Senden(wenn Zeichen gekommen)
-> Sende "Ende" wenn fertig

Und PC Seitig? Der Hardwarehandshake hilft mir noch weniger, Handshake 
ist mir leider nur grob ein Begriff (so sachen werden irgendwie bei uns 
in der Hochschule nich behandelt, lieber ärgern wir uns über das 
Ansteuern von RAM ...)

von Justus S. (jussa)


Lesenswert?

Ano Nym schrieb:

> Und PC Seitig? Der Hardwarehandshake hilft mir noch weniger, Handshake

für die meisten (alle?) ernsthaften Programmiersprachen dürfte es 
fertige Bibilotheken/Funktionen geben, mit denen man auf eine serielle 
Schnittstelle zugreifen kann...im Handbetrieb unter Windows geht am 
einfachsten HyperTerminal...

von Daniel P. (daniel86)


Lesenswert?

Ihr macht euch für den Anfang viel zuviele Gedanken dadrüber. Für den 
Anfang wo man nur einbißchen was hin und her schiebt/sendet reicht es 
wenn Rx und Tx an den µC angeschlossen werden. Danach braucht ihr den 
FT232 erstmal nichtmehr beachten. Den könnt ihr mit dem µC einfach über 
die serielle Schnittstelle ansprechen und am PC erzeugt er einen 
virtuellen COM-Port den ihr auch als serielle Schnittstelle behandelt. 
Das einzige was man beachten muss sind die Einstellungen der 
Schnittstelle, sprich Baudrate, Anzahl der Bits usw.

von Ano N. (oorim)


Lesenswert?

Naja es geht um ein Projekt bei dem GPS Daten aus einem internem 
Speicher (DRAM oder SD Karte is noch nich sicher) per USB an den PC 
gesendet werden und in einer .txt Datei abgespeichert werden sollen. 
Einzige wo es bei mir gedanklich noch klemmt ist, wie der Ablauf 
aussieht. Fertige Routinen von der WINAPI ist klar das es die gibt un 
das ich dann sagen kann "Schicke Befehl "Senden"", danach auf Empfangen 
gehen, Datenstream mit einer while schleife öffnen, while solange bis 
der UC "Ende" Sendet, der uC empfängt den Befehl und fängt an zu Senden, 
wenner fertig ist sendet er "Ende" und schliest die Verbindung, der 
Datenstream auf dem PC wird beendet und die Daten sind im .txt File. Ist 
das wirklich nur SO einfach?

von gast (Gast)


Lesenswert?

jep, das ist die ganze hexerei

aber:
als "start" und "ende" kommando bieten sich ascii-zeichen < 0x20 an, da 
gibts eigentlich alles, was das herz begehrt.

von Christian R. (supachris)


Lesenswert?

Also ich mach das so, dass ich erst sende, wenn das DTR vom Host gesetzt 
wurde, also die Schnittstelle auch wirklich geöffnet. Außerdem dann noch 
mit HW-Handshake über RTS/CTS. Das DSR kannst du von deinem µC aus auch 
setzen, wenn du fertig zum empfangen bist, ist aber unnötig, wenn das 
Szenario so wie bei dir ist. Durch das DTR abfragen verhindert man auch, 
dass das serielle Gerät ungefragt losquasselt, das nervt nämlich bei 
allen GPS Empfängern. Windows erkennt dann gerne eine serielle Maus und 
außerdem ist das extrem schlechter Stil, wenn ein externes Gerät einfach 
mal los sendet, obwohl niemand die Schnittstelle geöffnet hat.

von Ano N. (oorim)


Lesenswert?

Handshake war ja das der eine einen Request mit bitte auf Antwort 
sendet, der andere Antwortet und dann ist die Brücke geschlagen richtig? 
Gut, muss ich mich dann schlau machen wie man das zu 100% bewerkstelligt 
aber es scheint ja echt kein Problem zu sein.

Perfekt.

Ja "start" "stopp" wäre je ein einfacher ASCII Character und kein ganzes 
Wort. Das ist klar.

von Christian R. (supachris)


Lesenswert?

Nee, Harware-Handshake ist lediglich, dass die UART Hardware (in deinem 
Fall der USB Controller) das Signal setzt, wenn sein Puffer voll ist, 
damit du keinen Datenverlust hast. Das was du meinst, wäre ein 
sinnvolles Protokoll, ja.

von Ano N. (oorim)


Lesenswert?

Okay. Sollte also alles kein Hexenwerk sein, und ich dachte schon :)
Dankeschön

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.