-         

Ergebnis 1 bis 9 von 9

Thema: rx tx lötpads uart-prog01

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    16.11.2008
    Ort
    Frankfurt
    Alter
    33
    Beiträge
    21

    rx tx lötpads uart-prog01

    Anzeige

    Hi!
    Ich hab mal die Lötpads rx/tx neben dem start/stop-button bestückt, und die kabel (zusammen mit GND natürlich) an mein usb-prog angeschlossen.
    Das Teil simuliert einfach nur ne serielle Schnittstelle am PC immo, und benutzt auch 5V-Pegel auf der Seriellen. Habe es auch bereits erfolgreich direkt an einem atmega8 getestet, da hat alles funktioniert.

    Nur der RP6 wehrt sich immer noch Also wie gesagt, Verkabelung ist richtig soweit, rx/tx und GND sind angeschlossen, baudrate ist auf 38400 eingestellt, 8-N-1, aber ich krieg überhaupt nichts am PC raus, nichtmal Datenmüll..
    Gibts da noch irgendwo nen Jumper oder muss ich noch irgendwas anschliessen, um das zum laufen zu kriegen?

    Muss ich noch RST anschliessen? Eigentlich doch nicht, oder? Soweit ich das verstanden hab ist der nur dazu da, nen Soft-Reset auszuführen?

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    22.04.2008
    Ort
    Frankfurt
    Alter
    35
    Beiträge
    68
    diese drei pins sind genug für eine verbindung zu dem robo, so wie ich das jetzt sehe. am programmierstecker ist pin 1 = gnd, 4 = tx und 10 = rx, wenn man oben links anfängt zu zählen. verbindet man nur die drei pins mit der usbplatine, bekomme ich eine verbindung hin mit gtkterm.

    mit minicom passiert aber nix. erst nachdem man in gtkterm "toggle rts" ausgewählt hat, fließt etwas über den ether. da liegt wohl das problem, eine passende möglichkeit bei minicom habe ich nicht gefunden.

    okee, jetzt gilt es, die schnittstelle direkt auszulesen und damit rts zu toggeln.

    hat schon jemand so was gemacht? ich glaube, dann könnten wir uns ne menge arbeit sparen

    grüße
    andieh

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    22.04.2008
    Ort
    Frankfurt
    Alter
    35
    Beiträge
    68
    okee, der thread mutiert zur blauderecke zwischen tobi und mir, aber ich glaube, das könnte schon den einen oder anderen interessieren.

    folgender code liest die serielle schnittstelle aus. es setzt am anfang den request to send richtig und sendet auch gleich noch das "s" um den code auf dem rp6 zu starten.

    übersetzt wird mit GCC -o test test.c, aber wem erzähl ich das. wenn ihr das orginalkabel vom rp6 benutzt, sollte das device /dev/ttyUSB0 sein (äh ok, ist nur unter linux getestet!), andernfalls einfach ändern.

    viel spaß damit. verbesserungen nehmen wir natürlich dankend entgegen. besonders die prozessorlast geht schon ordentlich in die höhe! code ist noch lange nicht fertig, wird jetzt auch zeit für die heija!

    Code:
    #include <termios.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <sys/signal.h>
    #include <sys/types.h>
    #include <sys/ioctl.h>
    
    
    int serial_port_fd = -1;
    
    void Set_signals()
    {
      int stat_;
    
      if(serial_port_fd == -1)
        return;
    
      if(ioctl(serial_port_fd, TIOCMGET, &stat_) == -1)
        {
          printf("Control signals read\n");
          return;
        }
    	
    	//Toggle RTS
       if(stat_ & TIOCM_RTS)
    		stat_ &= ~TIOCM_RTS;
       else
    		stat_ |= TIOCM_RTS;
       
       if(ioctl(serial_port_fd, TIOCMSET, &stat_) == -1)
    		printf("RTS write\n");
    
    }
    
    int Config_port(void)
    {
      struct termios termios_p;
      
      //open serial port
      serial_port_fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
      
      if(serial_port_fd == -1)
          return 0;
    
      //read config from port?    
      tcgetattr(serial_port_fd, &termios_p);
    
      //set baudrate to 38400
      termios_p.c_cflag = B38400;
    
      //set 8 data bits
      termios_p.c_cflag |= CS8;
     
      //stopbit 1
      termios_p.c_cflag &= ~CSTOPB;
      
      //enable receiver
      termios_p.c_cflag |= CREAD;
      
      //character size
      termios_p.c_cflag &= ~CSIZE;
      
      //some other stuff (?)
      termios_p.c_cflag &= ~CRTSCTS;
      termios_p.c_cflag &= ~PARENB;
      termios_p.c_iflag = IGNPAR | IGNBRK;
      termios_p.c_cflag |= CLOCAL;
      termios_p.c_oflag = 0;
      termios_p.c_lflag = 0;
      termios_p.c_cc[VTIME] = 0;
      termios_p.c_cc[VMIN] = 1;
      tcsetattr(serial_port_fd, TCSANOW, &termios_p);
      tcflush(serial_port_fd, TCOFLUSH);  
      tcflush(serial_port_fd, TCIFLUSH);
    
      return 1;
    }
    
    main() {
    	char buf[255];  
    	int res,i;
    	
    	if (Config_port()) {
    		printf("Port opened ...\n");
    		
    		//toggle RTS, needed to enable serial output on the RP6
    		Set_signals();
    		
    		//wait a little time
    		sleep(2);
    
    		//start program uploaded to your rp6.
    		//be sure to check, if the correct program was uploaded! 
    		write(serial_port_fd, "s", 1);
    		
    		while(1) {
    			//read 100 bytes from serial
    			res = read(serial_port_fd,buf,100);
    		
    			if (res>1) {
    				//printf("get %d bytes\n", res);
    				for (i=0; i<res; i++) { //for all chars in string
    					printf("%c",buf[i]);
    				}
          	}
          }   
          
          //close serial port
          close(serial_port_fd);   	
          		
    	}		 
    }

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    32
    Beiträge
    1.514
    //toggle RTS, needed to enable serial output on the RP6

    RTS ist beim RP6 eigentlich nur am RESET Pin angeschlossen. Das hat mit Request To Send nix mehr zu tun
    Aber wenn Du den eh nicht angeschlossen hast, dann liegt's bei minicom wohl daran das "Hardware Handshake" (oder wie auch immer das bei minicom heisst) aktiviert ist...


    Also funktioniert es bei Dir jetzt, andieh?
    (weil Du das ja auch in arexx.com Forum gefragt hattest...)

    MfG,
    SlyD

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    22.04.2008
    Ort
    Frankfurt
    Alter
    35
    Beiträge
    68
    Danke SlyD, es läuft!

    Keine ahnung, ob das jetzt am RTS lag oder nicht, jedenfalls ging es bei GtkTerm nur, wenn ich eben genau das angeklickt habe. Dank schöner open source Software habe ich dann diesen part aus dem Quellcode kopiert, der dann auch meinem Programm die arbeit ermöglichte!

    jetzt geht es wie schon gesagt um die Performance des Systems, irgendwo is da noch der Wurm drin. 100% Prozessorlast geht gar nicht.

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    32
    Beiträge
    1.514
    while(1) {

    ...

    da musst Du auch mal an andere Threads abgeben - im einfachsten fall nen paar ms pause...

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    22.04.2008
    Ort
    Frankfurt
    Alter
    35
    Beiträge
    68
    joah das liegt dann aber an dem Non-Blocking-Device, oder? Aber ja, ein paar ms pause könnten nicht schaden, wobei dann die Gefahr der verpassten Pakete schon steigen wird, denke ich mal.

    Was aber auf meinem System so viel Last verursacht, ist X und die Konsole, die so viel Output produzieren. Auch nicht schlecht.

    Danke soweit!

  8. #8
    Hallo andieh,

    ich habe deinen Code hier an meinem RP6 mit dem USB-Interface eingesetzt. Er tut genau das, was ich seit einigen Versuchen ergenislos probiert hatte. Ich habe probehalber das Toggle-RTS herausgenommen, aber dann funktioniert der Code nicht.

    danke für deinen Code

    harm-1

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    22.04.2008
    Ort
    Frankfurt
    Alter
    35
    Beiträge
    68
    Hey!

    Freut mich, das der Code auch bei sonst noch wem funktioniert. Mitlerweile haben wir das Programm aber noch mal ordentlich durchgewürfelt. Sollten wir soweit sein, wird es auf infolexikon.de nen ausführlichen Bericht geben!

    Mein Robo ist ja schon wieder zurück, da werd ich hoffentlich baldigst mal was auf die Beine stellen!

    Grüße
    andieh

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •