www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik VDIP1 Keine Reaktion auf Befehle UART


Autor: Lars Schröder (kallipeter)
Datum:

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

Autor: Andy H. (vinculum) Benutzerseite
Datum:

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

Autor: Lars Schröder (kallipeter)
Datum:

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

Autor: Matthias K. (matthiask)
Datum:

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

Autor: Lars Schröder (kallipeter)
Datum:

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

Autor: Matthias K. (matthiask)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zB. mit:
sprintf (&vnc.send_buffer[0],"WRF %d",filelen); 

Je nach Plattform auch %ld ....

Autor: Lars Schröder (kallipeter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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):
.
.
.
uart1_puts("OPW test.txt\r");
uart1_puts("WRF ");
c=strlen(inhalt);
uart1_putc(c);
uart1_putc('\r');
uart1_puts(inhalt);
.
.
.

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.

Autor: Matthias K. (matthiask)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
char send_buff[50];

c=strlen(inhalt);
sprintf(send_buff,"WRF %d \r",c);
uart1_puts(send_buff);
uart1_puts(inhalt);
...

Autor: Lars Schröder (kallipeter)
Datum:

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

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.