Läsa pulser från serieporten (led-detektor)

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
hatt
Inlägg: 39
Blev medlem: 6 mars 2004, 16:50:31

Läsa pulser från serieporten (led-detektor)

Inlägg av hatt »

Har byggt ihop en "elmätare" (LED-detektor) enl. http://www.techtrade.se/sv/emc-schematics.asp

Kod: Markera allt

Detektorerna kan användas till EMC-programmet som du kan ladda ner gratis i menyn till vänster, men de kan lika gärna användas till egna program under Windows eller unix/linux om du gillar att programmera själv. I så fall läser du pulserna från elmätaren/detektorn som datatecken på serieporten med inställningen: 110,N,8,1 (binary/raw mode). En 50ms puls läses in som ett tecken med ASCII koden 0xE0 eller 0xF0.
Vad innebär detta praktiskt?
Kan någon ge en nybörjare som mig ett C# exempel?

Tacksam för hjälp.
Användarvisningsbild
AndLi
Inlägg: 18566
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Läsa pulser från serieporten (led-detektor)

Inlägg av AndLi »

Öppna serieporten som vanligt och vänta på att ett tecken ska komma.
Varje tecken kommer då motsvara en puls.

Vilket serieports exempel som helst för C# lär funka, likaså putty i serieportsmode för att testa detektorn. (Deras orginaldesign har ett för stort motstånd, det kommer aldrig några pulser, så testa den innan du försöker få igång nån egen kod, se också till att fixera givaren ordentligt på elmätaren, sensorn är känslig och behöver sitta rakt emot)
hatt
Inlägg: 39
Blev medlem: 6 mars 2004, 16:50:31

Re: Läsa pulser från serieporten (led-detektor)

Inlägg av hatt »

Tack för svar.

Öppna som vanligt? :oops:

exempel/länk till exempel? Vet knappt vad jag letar efter...

Vad använder man itället för putty i linux?

Tack på förhand.
hatt
Inlägg: 39
Blev medlem: 6 mars 2004, 16:50:31

Re: Läsa pulser från serieporten (led-detektor)

Inlägg av hatt »

AndLi: Vilket värde mot motstånd använde du?
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: Läsa pulser från serieporten (led-detektor)

Inlägg av v-g »

Andli:Menar du inte för litet motstånd? ;)

Det är alltså för låg resistans och man kan gå upp ganska mycket typ 10K kan fungera, har man en sats är det enkelt att testa, det har att göra med vilken fototransistor man har också.
Användarvisningsbild
Icecap
Inlägg: 26793
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Läsa pulser från serieporten (led-detektor)

Inlägg av Icecap »

hatt: om det inte finns någon speciell COM-port "komponent" i den kompiler du använder kan du öppna en fil som heter "COMx" där x beror på vilken COM-port du vill öppna. Vill du alltså öppna COM3 öppnar du filen "COM3". Detta gäller då under Windows.
Senast redigerad av Icecap 8 april 2009, 11:52:08, redigerad totalt 1 gång.
bearing
Inlägg: 11687
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Läsa pulser från serieporten (led-detektor)

Inlägg av bearing »

Hm, jag blir konfunderad här. Du vill ha ett C#-exempel men senare skriver du att du önskar något som fungerar i Linux. Programmerar du C# i Linux?

För att prova konceptet tror jag du kan skriva så här i Linux

Kod: Markera allt

stty -F /dev/ttyS0 110
cat  /dev/ttyS0
hatt
Inlägg: 39
Blev medlem: 6 mars 2004, 16:50:31

Re: Läsa pulser från serieporten (led-detektor)

Inlägg av hatt »

Kod: Markera allt

#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 */

 /*
  * 'open_port()' - Open serial port 1.
  *
  * Returns the file descriptor on success or -1 on error.
  */

 int open_port(void)
 {
   int fd;                                   /* File descriptor for the port */

   fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);

   if (fd == -1)
   {                                              /* Could not open the port */
     fprintf(stderr, "open_port: Unable to open /dev/ttyS1 - %s\n",
             strerror(errno));
   }

   return (fd);
 }

void main()
{
 int mainfd=0;                                            /* File descriptor */
 char chout;
 struct termios options;
   
 mainfd = open_port();

 fcntl(mainfd, F_SETFL, FNDELAY);                  /* Configure port reading */
                                     /* Get the current options for the port */
 tcgetattr(mainfd, &options);
 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 the character size to 8 bits, no parity */
 options.c_cflag &= ~CSTOPB;
 options.c_cflag &= ~CSIZE;
 options.c_cflag |=  CS8;                              /* Select 8 data bits */
 options.c_cflag &= ~CRTSCTS;               /* Disable hardware flow control */  
 
                                 /* Enable data to be processed as raw input */
 options.c_lflag &= ~(ICANON | ECHO | ISIG);
       
                                        /* Set the new options for the port */
 tcsetattr(mainfd, TCSANOW, &options);
                         
 while (1)
 {
   read(mainfd, &chout, sizeof(chout));          /* Read character from ABU */
   
   if (chout != 0)
      printf("Got %c.\n", chout);

   chout=0;
   usleep(20000);
//printf("Waiting:\n",chout);
}
                                                    /* Close the serial port */
  close(mainfd);
 }

Kan detta vara något?
Användarvisningsbild
AndLi
Inlägg: 18566
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Läsa pulser från serieporten (led-detektor)

Inlägg av AndLi »

v-g Nope, jag menar att de har för stort värde, enligt min värmesystemstråd har jag sänkt det till 1 kOhm.


hatt: google + open serialport linux C
gav tex http://www.captain.at/howto-simple-seri ... xample.php

Där har du allt du behöver.

Lite riktig C istället för C# :)

edit: jag e visst lite långsam, bra att trycka på skicka knappen med..:)
hatt
Inlägg: 39
Blev medlem: 6 mars 2004, 16:50:31

Re: Läsa pulser från serieporten (led-detektor)

Inlägg av hatt »

Sorry för terminilogiförvirringen... C C# osv...
tack så länge.
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: Läsa pulser från serieporten (led-detektor)

Inlägg av v-g »

AndLi:Ahh nu när du säger det så minns jag, för mig var det tvärtom men jag kör ju på ett annat sätt. Men för att förtydliga kanske man inte bör skriva stort motstånd då det kan tolkas vilket som ;)
Användarvisningsbild
AndLi
Inlägg: 18566
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Läsa pulser från serieporten (led-detektor)

Inlägg av AndLi »

v-g: Men orginaldesignen har 4kOhm jag har 1kOhm. Då är ju deras motstånd större än mitt.
Jag förstår inte hur 1kOhm kan bli större än 4kOhm hur man än vänder på det...
Om man inte börjar prata konduktivitet, och det verkar ju onödigt
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: Läsa pulser från serieporten (led-detektor)

Inlägg av v-g »

AndLi:4000 är ju större än 1000 ;) Så tänkte jag iaf :) MEN jag förstod exakt vad du menade när jag läste andra gången men alla kanske inte gör det. :wink:
hatt
Inlägg: 39
Blev medlem: 6 mars 2004, 16:50:31

Re: Läsa pulser från serieporten (led-detektor)

Inlägg av hatt »

Har använt denna fototransistor:
LTR-4206E

Kan det stämma att det är en IR variant. Den har svart kapsel.
Kan man få den att känna av "vanligt" ljus?
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: Läsa pulser från serieporten (led-detektor)

Inlägg av v-g »

Svart kapsel innebär att dagsljus är lite reducerat men den reagerar fortfarande på det om det är starkt nog. Ska du detektera en LED är skärmning ett måste.

Om du har datablad för fototrissan kan man jämföra med en klar variant så ser man skillnaden.
Skriv svar