Sida 1 av 3
Läsa pulser från serieporten (led-detektor)
Postat: 7 april 2009, 22:25:28
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.
Re: Läsa pulser från serieporten (led-detektor)
Postat: 8 april 2009, 06:52:21
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)
Re: Läsa pulser från serieporten (led-detektor)
Postat: 8 april 2009, 07:42:43
av hatt
Tack för svar.
Öppna som vanligt?
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.
Re: Läsa pulser från serieporten (led-detektor)
Postat: 8 april 2009, 08:11:44
av hatt
AndLi: Vilket värde mot motstånd använde du?
Re: Läsa pulser från serieporten (led-detektor)
Postat: 8 april 2009, 09:46:19
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å.
Re: Läsa pulser från serieporten (led-detektor)
Postat: 8 april 2009, 09:47:13
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.
Re: Läsa pulser från serieporten (led-detektor)
Postat: 8 april 2009, 10:24:49
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
Re: Läsa pulser från serieporten (led-detektor)
Postat: 8 april 2009, 10:32:16
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?
Re: Läsa pulser från serieporten (led-detektor)
Postat: 8 april 2009, 10:59:56
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..

Re: Läsa pulser från serieporten (led-detektor)
Postat: 8 april 2009, 11:44:16
av hatt
Sorry för terminilogiförvirringen... C C# osv...
tack så länge.
Re: Läsa pulser från serieporten (led-detektor)
Postat: 8 april 2009, 12:02:52
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

Re: Läsa pulser från serieporten (led-detektor)
Postat: 8 april 2009, 12:56:02
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
Re: Läsa pulser från serieporten (led-detektor)
Postat: 8 april 2009, 13:01:03
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.

Re: Läsa pulser från serieporten (led-detektor)
Postat: 8 april 2009, 18:07:57
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?
Re: Läsa pulser från serieporten (led-detektor)
Postat: 8 april 2009, 19:31:18
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.