Moin, moin, ich habe ein kleines Problem: Ich schreibe gerade meine Bachelorarbeit und bin auch fast fertig ...dachte ich. Ich schaffe es nicht mit einem FTDI VDIP1-Modul zu sprechen. Ich habe das Modul über einen TTL-RS232 Wandler an meinen PC angeschlossen, so wie es in einem Artikel aus der Elektor 11/2000 Stand, d.h. PIN 1: 5V PIN 6: AD2 (TxD) PIN 7: GND PIN 8: AD1 (RxD) PIN 10: AD3 Handshake CTS auf GND Der TTl Wandler funktioniert, ich kann zb mit einem Modem kommunizieren, auch ein Echo kommt wenn ich TX und TX verbinde. So nun zum Problem, wenn ich Spannung an den VDIP lege, kommt über die Schnittstelle folgender Text (Stick eingesteckt): Ver 03.68VDAPF On-Line:\r Device Detected P2\r No Upgrade\r D:\>\r Soweit so gut, nur wenn ich einen befehl senden möchte, passiert garnichts, egal ob ich mit \r oder \n oder \r\n abschließe... Ich verwende als Terminalprogramm "hterm". Ich habe auch schon probiert, mit dem HEX datensatz zu kommunizieren, aber auch das bringt nichts, ist ja anscheinend auch im Textmodus, sonst würde er ja auch nicht im klartext schreiben. Als Controller verwende ich einen Atmega162, ich habe schon versucht, über einen UART den VDIP anzusprechen und habe dann auf dem anderen UART die ausgabe umgeleitet, kommt aber das selbe Ergabnis bei raus, das Modul lässt sich einfach nicht von mir ansprechen. Das Modul kann auch nicht defekt sein, da ich 3 "frische", neue Module hier liegen habe, die alle die selben ergebnisse zeigen. Ich hoffe von euch hat irgendjemand ein rat für mich und ihr könnt mir helfen. Ich möchte gerne auf eine Flusssteuerung verzichten, was, so wie ich in der elektor gelesen habe, bei 9600 baud auch nicht nötig ist. Danke lars PS: Jumper sind bei auf 1-2 gesteckt und im Terminal sind 9600-8-1 eingestellt(sollte ja auch richtig sein, sonst würde ich, so danke ich, keine nachricht bekommen)
Das Teil ist sehr sensibel, was das richtige Format angeht. Im Datenblatt für den VDAP penibel genau rpt. genau nachlesen, was die Defaulteinstellung ist (HEX??) und dann Schritt für Schritt vorgehen. Nur so geht's. http://www.ftdichip.com/Firmware/Precompiled/UM_VinculumFirmware_V205.pdf
Hallo Andy, danke schon mal für deine Antwort. Meine EInstellungen habe ich ja dem Datenblatt entnommen, bin es auch schon öfter durchgegangen, das Datenblatt geht nur da von aus, das man schon mit dem VDIP reden kann. Ich habe mittlerweile das gefühl, das ich garnicht unbedingt schuld bin, sondern, dass es an der Firmware liegen könnte. Ich habe folgenden Betrag gefunden, aus dem ich leider nicht ganz schlau werde: http://www.edaboard.com/thread167240.html In dem Artikel beschreibt jemand das selbe Problem, welches erst nach dem Firmware update auftrat. Ich habe die Teile aber schon in der Aktuellen Firmwareversion bekommen, weiß jemand zufällig, ob man abwärts updaten klann, zb mit einer Version, die in dem Elektor artikel beschrieben ist? Ich habe mich übrigens versehen, der artikel kommt von 11/2008. Nun noch mal kurz zum "HEX": Man kann im Extended Command Set ECS oder im Short Command Set SCS kommunizieren, wobei der ECS textbasierend ist und der SCS Hex-basiert. Ich hoffe ihr könnt mir helfen, vor ein paar wochen mit einer älteren Version aut alles funktioniert und jetzt wo ich bald abgeben muss, funktioniert es nicht mehr, platine und software sind fertig zur abgabe, ich habe jetzt nur noch eine Platine mehr fertig gemacht und dafür neue VDIPs bestellt und nun dieser mist, ich wollte nur noch ins Programm die richtigen Kommandos einfügen und dann sollte es laufen...
Ob es zuverlässig wirklich ohne RTS/CTS geht, bezweifle ich. Vorallem wenn Du dann Daten zum schreiben sendest, kann es zu längeren Pausen kommen, wo der VNC1L nichts abnimmt. Dann bricht unweigerlich die Kommunikation zusammen. Erstmal zum Test elementarer Kommandos der VDAP-Firmware sollte es aber auch so gehen. Versuch doch trotzdem mal die VDAP-Firmware neu zu programmieren. Das kennst Du? Beitrag "USB-Stick am Mikrocontroller VNC1L" Verbinde mal versuchsweise RTS/CTS direkt am VDIP1.
Hallo, habe ich gemacht und just in diesem augenblick geht es, ich habe es jetzt auch noch einmal ohne eine verbindung von rts/cts gemacht und es funktioniert auch. So, was habe ich gemacht: Eigentlich habe ich einmal die ältere Firmware 3.66 aufgespielt und dann hat es funktioniert, danach habe ich wieder die neuere 3.68 aufgespielt und dann hat es auch funktioniert, ich denke irgendetwas war mit der firmware nicht in ordnung. Ich danke recht herzlich für die mit hilfe, aber ein problem habe ich noch, welches ich bestimmt durch lesen auch gelöst bekomme, aber viell hat ja einer einen tip: Wie muss beim schreiben einer datei "dword" aussehen? mein string, den ich schreiben möchte, ist max 255 zeichen groß. Kann mir das bitte jemand erklären, wie ich eine umwandlung von meinem strlen ergebnis in ein "dword" typ machen kann?
zB. mit:
1 | sprintf (&vnc.send_buffer[0],"WRF %d",filelen); |
Je nach Plattform auch %ld ....
Danke, wirklich, aber ich zweifel echt gerade an mir, aber irgendwie verstehe ich es nicht ganz, ich benutze die Lib von Feter Fleury, d.h. ich sende momentan folgendermaßen an das Modul (ich weiß das es nicht schön ist, aber funktioniert, bis zu 9 zeichen):
1 | .
|
2 | .
|
3 | .
|
4 | uart1_puts("OPW test.txt\r"); |
5 | uart1_puts("WRF "); |
6 | c=strlen(inhalt); |
7 | uart1_putc(c); |
8 | uart1_putc('\r'); |
9 | uart1_puts(inhalt); |
10 | .
|
11 | .
|
12 | .
|
So, in meiner int Variablen befindet sich nun die Länge des Strings "inhalt" als Hex zahl. Dies erlaubt mit bis zu 9 zeichen zu senden, aber dann wenn es mit der 10, also dem a weiter geht, funktioniert es verständlicher weise nicht mehr. Ich habe schon eine menge gesucht, aber bin noch nicht so richtig durch die anwendung durchgestiegen. Ich denke man könnte evtl. folgende funktionen verwenden, wenn nicht korrigiert mich bitte: atoi //soweit ich verstanden habe, der umgekehrte weg strtol //string in Zahl, grundlegende Frage, aber wie bekomme ich strlen in einen String? Ich habe auch schon folgenden Link probiert, aber es funktioniert nicht, ich bekomme ständig Warnungen, von wegen "makes integer from pointer without a cast" Beitrag "Hex in String umwandeln" Ich danke allen für Ihre hilfe und ich weiß auch das man denken könnte, das man das wenn man eine bachelor arbeit schreibt wissen sollte, aber ich beschäftige mich leider zum ersten mal intensiv mit c.
C-Grundlagen! Ohne Deine uart1_putc /s genauer zu kennen, wird das so nichts. Nimm erstmal die sprintf-Funktion zu Hilfe, später kannst Du diese eventuell wieder eliminieren, falls Dein Speicher zu knapp ist. Welcher Mode/µC überhaupt, ECS? so etwa:
1 | char send_buff[50]; |
2 | |
3 | c=strlen(inhalt); |
4 | sprintf(send_buff,"WRF %d \r",c); |
5 | uart1_puts(send_buff); |
6 | uart1_puts(inhalt); |
7 | ...
|
Danke, du bist ein Gott, es funktioniert, ich weiß das es Grundlagen sind, aber ich habe für das ganze Programm (und der Speicher vom atmega162 ist 85% voll) nicht einmal die printf funktion benötigt. Ich weiß das es Grundlagen sind und werde mich nach der Arbeit damit beschäftigen.. Eine Frage habe ich aber noch, gibt es den keine Gegenfunktion zu atoi? ich habe mal irgendwo etwas von atio gelesen, aber wenn man danach googled, fällt das Ergebnis sehr mager aus. Oder war das eine selbstgeschriebene funktion von irgendjemand, die in wirklichkeit das gleiche verwendet wie dein vorschlag? stdio.h macht nämlich knapp 8% vom speicher bedarf aus und ich brauche die funktion sonst nicht, Ich bin erstmal sehr froh das es funktioniert und meine Aufgabe ist damit auch erfüllt (endlich), aber viell gibt es ja noch irgendeine nicht so speicherintensive Lösung. Erstmal tausend dank Matthias
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.