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)
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?
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:
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