www.mikrocontroller.net

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


Autor: Ano Nym (oorim)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Justus Skorps (jussa)
Datum:

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

zu 2) Wie mit der "normalen" seriellen Schnittstelle

Autor: Ano Nym (oorim)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht 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-Tu...

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ano Nym (oorim)
Datum:

Bewertung
0 lesenswert
nicht 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 ...)

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Daniel P. (daniel86)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ano Nym (oorim)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ano Nym (oorim)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ano Nym (oorim)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.