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
zu 1) hat der FT232 nicht Pins, die sowas ausgeben können? zu 2) Wie mit der "normalen" seriellen Schnittstelle
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...
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
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.
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 ...)
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...
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.
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?
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.