Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Linux + Serijski port i problem

[es] :: C/C++ programiranje :: Linux + Serijski port i problem

[ Pregleda: 1738 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

myrmidon
B.Robert
Tungusia

Član broj: 10428
Poruke: 55
*.opticon.hu.



Profil

icon Linux + Serijski port i problem10.01.2006. u 20:22 - pre 222 meseci
Pozdrav svima, pisem jedan mali program koji mi pravi probleme.

Naime imam jedan uredjaj vezan na serijski port, kada uredjaju posaljem poruku "9G" on mi odgovara sa "9G12,22;".



Ovo savrseno radi u minicom-u.
Parametri:
9600
8N1
NO HARDWARE FLOW CONTROL
NO SOFTWARE FLOW CONTROL

/dev/ttyS0


/dev/ttS0 mi je pristupacan,
jer sam uradio
chmod a+rw /dev/ttyS0

Isto pokusavam da postignem sa sledecim kodom , ali uzalud. (ubedjen sam da nesto u komunikacionim parametrima nisam dobro podesio HEEELP):


Code:



 #include <stdio.h>   /* Standard input/output definitions */
 #include <string.h>  /* String function definitions */
 #include <unistd.h>  /* UNIX standard function definitions */
 #include <fcntl.h>   /* File control definitions */
 #include <errno.h>   /* Error number definitions */
 #include <termios.h> /* POSIX terminal control definitions */


#include <stdio.h>


int open_port(void)
 {

  int fd=open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
   if(fd<0)
    {
      printf("Unable to open port\n");
    }

   return fd;


 }


/* ************************************* Setting parameters for serial port **************************************/



void set_parameters(int fd)
{


  struct termios options;

   fcntl(fd, F_SETFL, FNDELAY);             /* Configure port reading */


   tcgetattr(fd, &options);        /* Get the current options for the port */
   cfsetispeed(&options, B9600);                 /* Set the baud rates to 9600 */
   cfsetospeed(&options, B9600);

                                     /* Enable the receiver and set local mode */
    options.c_cflag |= (CLOCAL | CREAD);



    options.c_cflag &= ~PARENB;  /* Mask character size to 8 bits, no parity */
    options.c_cflag &= ~CSTOPB;
    options.c_cflag &= ~CSIZE;
    options.c_cflag |=  CS8;


    options.c_cflag &= ~CRTSCTS;          /* Disable hardware flow control */


    options.c_lflag &= ~(ICANON | ECHO | ISIG); /* RAW mode */




                    /* Set the new options for the port */
    tcsetattr(fd, TCSANOW, &options);







}


/********************************* main **********************************************************************************/

int main(void)
{


   int fd,n;
   char buf[8];

   fd=open_port();


   set_parameters(fd);

   n=write(fd,"9G",3);

   if(n!=3)
    printf("Write to port failed!\n");


   read(fd,buf,8) ;

   printf("Read from serial:%s",buf);



   close(fd) ;



  return 0;

}




Myrmidon
 
Odgovor na temu

chupcko
Negde
Beograd

Član broj: 5560
Poruke: 1141

Sajt: www.google.com


+63 Profil

icon Re: Linux + Serijski port i problem17.01.2006. u 08:22 - pre 222 meseci
A da li mozes da nam prikazes primer sesije tvojim programom. To jest sta ti kucas.

I da, da li saljes kraj reda posle 9G, mozda treba da saljes \r a ne \n, mozda \r\n i tako dalje :). Koliko vidim po kodu ti saljes 9G\0.

Dakle ajde ispricaj korak po korak kako radi u minicomu i gde tacno puca tvoj program.

E da jos nesto, nadam se da ti ne radi minicom u pozadini dok startujes program (svasta je onda moguce :))) ).

CHUPCKO
 
Odgovor na temu

myrmidon
B.Robert
Tungusia

Član broj: 10428
Poruke: 55
*.opticon.hu.



Profil

icon Re: Linux + Serijski port i problem29.01.2006. u 17:31 - pre 221 meseci
naravno da ne radi minicom

po pritisku tastera na tastaturi odmah se salje karakter na serijski port, po prijemu udredjenih nizova karaktera u ovom slucaju (9G) uredjaj odmah odgovara.


Medjutim resio sam stvar. Stvarno je u konfiguraciji porta bila greskica...

Pozdrav...

Myrmidon
 
Odgovor na temu

[es] :: C/C++ programiranje :: Linux + Serijski port i problem

[ Pregleda: 1738 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.