Forum: Mikrocontroller und Digitale Elektronik NGW100 RS232


von Frank M. (herbert74)


Lesenswert?

Servus,

ich möchte mein NGW32 zum Auslesen einer GPS-Maus nutzen und brauche 
dafür den seriellen Anschluss.

Meine Frage:

Wie kann ich auf den USART0 zugreifen, es gibt ja kein "minicom", 
standartmässig (Auslieferungszustand) wird der Anschluss wohl noch nicht 
unterstützt, wie kriege ich das hin?

Der Anschluß ist female, sowie an meiner GPS-Maus, gibt es hierfür ein 
fertiges Kabel, müssen dann die Leitungen auch gekreuzt werden?

Gruß,

Herbert74

von Mark .. (mork)


Lesenswert?

Hallo Herbert,

du musst erstmal UART0 im Kernel aktivieren, bevor du es nutzen kannst. 
Siehe 
http://www.cibomahto.com/2007/11/enabling-extra-serial-ports-for-the-ngw100/

>Der Anschluß ist female, sowie an meiner GPS-Maus, gibt es hierfür ein
>fertiges Kabel, müssen dann die Leitungen auch gekreuzt werden?

Der TxD-Pin des einen UARTs muss mit dem RxD-Pin des anderen verbunden 
werden und andersrum.

MfG Mark

von Frank M. (herbert74)


Lesenswert?

Servus Mark,

naja mein Englisch, aber ist das richtig, der UART1 ist bereits aktiv, 
es geht nur um weitere?

Das würde doch heissen, dass ich den bestehenden Anschluss mit ttyS1 
ansprechen kann, ich habe es nämlich mit ttS0 probiert,was nicht ging.

Gruß,

Frank

von Mark .. (mork)


Lesenswert?

Der UART1 ist bereits aktiviert und ist das ttyS0 Device, auf welchem 
die Konsole läuft.

>ich habe es nämlich mit ttS0 probiert,was nicht ging.

Was genau ging da nicht? Bekommst du keine Konsole über den 
RS232-Anschluss des NGW100 wenn du es bootest?

MfG Mark

von Frank M. (herbert74)


Lesenswert?

Wenn ich boote bekomme ich die Konsole,ja.

Ich möchte NMEA-Datensätze auswerten und Informationen wieder als Text 
angezeigt bekommen. Mein Programm läuft auf meinem Desktop-Rechner mit 
GPS-Maus am ttyS0 einwandfrei und ich dachte ich kann es einfach fürs 
NGW kompilieren und fertig :-(

Ich checke es nicht!

Zuerst, darf ich meine GPS-Maus (12Volt-KFZ-Anschluss) an das NGW 
andocken, gibt es da Problemne mit den Pegeln?
Was ich nicht verstehe, wenn ich mich mit ssh einlogge und über den 
Befehl cat eine Textdatei ausgebe auf /dev/ttyS0 dann wird sie auf der 
"ssh-Konsole" angezeigt, führe ich den Befehl über eine 
"minicom"-Verbindung über /dev/ttyS0 wird sie hier angezeigt. Habe ich 
ein Programm welches Text ausgeben soll, wo wir dieser angezeigt. Ich 
müsste das Programm später über ssh starten, da ja am UART meine 
GPS-MAus hängt.

Dere,

Frank

von Mark .. (mork)


Lesenswert?

>Zuerst, darf ich meine GPS-Maus (12Volt-KFZ-Anschluss) an das NGW
>andocken, gibt es da Problemne mit den Pegeln?

Es sollte keine Probleme geben, da auf dem Board ja ein Pegelwandler 
installiert ist und die Schnittstelle von den Pegeln her zu der am PC 
identisch sein sollte.

>Was ich nicht verstehe, wenn ich mich mit ssh einlogge und über den
>Befehl cat eine Textdatei ausgebe auf /dev/ttyS0 dann wird sie auf der
>"ssh-Konsole" angezeigt [...]

Das ist aber sehr seltsam. Was passiert, wenn Du einfach nur
1
 echo "test" > /dev/ttyS0
 schreibst? Wird "test" auch auf der ssh-Konsole ausgegeben oder doch 
auf der seriellen Schnittstelle? Wenn ersteres der Fall ist, ist da 
definitiv etwas faul an der Software des NGW100.

MfG Mark

von Frank M. (herbert74)


Lesenswert?

> Das ist aber sehr seltsam. Was passiert, wenn Du einfach nur
1
 echo
2
> "test" > /dev/ttyS0
 schreibst? Wird "test" auch auf der
> ssh-Konsole ausgegeben oder doch auf der seriellen Schnittstelle? Wenn
> ersteres der Fall ist, ist da definitiv etwas faul an der Software des
> NGW100.


Servus Mark,
echo > "test" > /dev/ttyS0  das hat funktioniert, auch das klassische 
"Hello world!" funktioniert. "Hello world!" wird da ausgegeben, von wo 
aus ich das Programm gestartet habe (ssh-Konsole oder gtkterm ttyS0). 
Problem, sobald ich mein Programm einmal versucht habe zu starten geht 
garnix mehr.

Gibt es irgendwo Beispielcode zum Ausgeben und Einlesen über die RS232 
beim NGW, ich habe selbst schon gesucht, aber nichts Brauchbares 
gefunden.

Danke, Frank

von PLV2 (Gast)


Lesenswert?

Hallo
bei mir funktionierte ankopiertes, hier allerdings stark auf den 
ttySA0-Teil gestutztes Versuchsmuster.
Eine ausgiebigere original Quelle, welche ich zusammen mit zwei anderen 
ATGNW Besitzern in einigen Varianten dann weiterfolgend einsetzte, 
beinhaltet das Modul 'setport.c' in einem größeren Projekt irgendwo bei 
sourceforge.net. Die genaue Bezeichnung liegt mir auf der Zunge, mehr 
momentan aber auch nicht. Die setport.c war allerdings fürs ATGNW 
schwerer zu kompilieren und bedurfte  einiger Compiler Trickserein bis 
damit bei mir was lief.


Unterm Strich bleibt es aber zuerst mal egal was man überhaupt nimmt - 
die der ttyS0 Schnittstelle 'mitlaufende' Console stört bei 
unveränderterr Ausgabekonfiguration des NGW in jedem Fall. Ein wirklich 
funktionierender Datenaustausch in Form von duplexxen transmit - receive 
war über ttyS0 nicht möglich, einfaches Senden bei 115kB an ein Terminal 
in Form ankopierten Beispieles.
Andere Baudraten, andere Timeouts - typischerweise sollte die 
Schnittstelle jeweils nur aus einer Quelle gleichzeitig 'gespeist' 
werden. An ttyS0 im Ausgabezustand ist das etwas Random.

An ttyS1 bzw. ttySx hatte ich im send-receive diese Probleme an der 
Schnittstelle dann nicht mehr; dafür jede Menge andere ....

Gruß
Peter





>>>

#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <netdb.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <termios.h>
#include <sys/stat.h>
#include <sys/ioctl.h>


#define DEV_COM1 "/dev/ttyS0"   //working in NGW100

int main()
{

int iRet, lCount;
   int hComPort;
char sBuf[]= "Well, reached2me by serial  115200\n";

   struct termios oldtio, newtio;
                             }


   hComPort = open (DEV_COM1, O_RDWR | O_NOCTTY | O_NONBLOCK);
   fcntl(hComPort, F_SETFL, 0x2000);

   if (hComPort == -1) {
      printf ("Error. Can t open serial port\r\n");
    return (0);
   }

 // get the current serial settings...

   tcgetattr (hComPort, &oldtio);      /

   newtio.c_cflag = B115200 | CS8 | CLOCAL | CREAD;
   newtio.c_cflag = newtio.c_cflag & ~(PARODD | PARENB);
   newtio.c_iflag = 0; //IGNPAR;
   newtio.c_oflag = ONOCR;
   newtio.c_lflag = 0;
   newtio.c_cc[VMIN] = 1;
   newtio .c_cc[VTIME] = 0;
   tcflush (hComPort, TCIFLUSH);
   tcsetattr (hComPort, TCSANOW, &newtio);  // set attribute

   lCount= write (hComPort, sBuf, strlen (sBuf));
   if (lCount == strlen (sBuf))
       iRet= lCount; // 1;
   else
       iRet= 0;
// Check for errors...

   if (!iRet) {
      printf ("serial TX ERROR\r\n");

      close (hComPort);
      return (0);
   }
      close (hComPort);

    return (1);
}

von Rüdiger S. (rsorg)


Lesenswert?

Hallo zusammen,

ich kämpfe mit der gleichen Thematik. Ich möchte über RS232 meine 
Heizung fernsteuern. Auf dem PC funktioniert alles. Die RS232 (ttyS0) 
des NGW100 macht aber Probleme beim Empfangen. Beim Senden (auch über 
echo ...) erfolgt die Ausgabe auf der Schnittstelle. Hat jemand von Euch 
einen Beispielcode ?

Gruß

Rüdiger

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
Noch kein Account? Hier anmelden.