Forum: PC Hard- und Software FT232R von Franzis unter Lunix als "Alarmanlage" nutzen


von FTDI_Newbie (Gast)


Lesenswert?

Hallo zusammen,
das ist mein erster Beitrag hier also entschuldigt falls irgendetwas 
nicht 100%ig den REgeln entsprechen sollte, es war keine Absicht!

Also, ich habe mir folgendens Experimentierpaket gekauft:
http://www.franzis.de/online-shop/elektronik/lernpakete-elektronik/lernpaket-experimente-mit-usb
Dabie ist ein FTDI232R Chip. Den habe ich nach Anleitung auch an meinem 
WinXP Rechner zu laufen bekommen, inkl. kleinem PRogram in VB um einen 
Reed-Kontakt abzufragen. Damit wollte ich den Gasverbrauch messen (wird 
ja mehrmals erwähnt wie das geht)

So,unter WinXP läuft das. Jetzt würde ich das gerne an meinen NSLU2 mit 
Debian anschliessen. Also, gesagt getan:

tail -f /var/messages sagt folgendes:
Apr  7 21:02:42 nslu2 kernel: [42954326.900000] usb 3-1: new full speed 
USB device using ohci_hcd and address 3
Apr  7 21:02:42 nslu2 kernel: [42954327.100000] usb 3-1: configuration 
#1 chosen from 1 choice
Apr  7 21:02:42 nslu2 kernel: [42954327.110000] ftdi_sio 3-1:1.0: FTDI 
USB Serial Device converter detected
Apr  7 21:02:42 nslu2 kernel: [42954327.110000] ftdi_sio: Detected 
FT232RL
Apr  7 21:02:42 nslu2 kernel: [42954327.120000] usb 3-1: FTDI USB Serial 
Device converter now attached to ttyUSB0
Apr  7 21:02:42 nslu2 kernel: [42954327.150000] usb 3-1: New USB device 
found, idVendor=0403, idProduct=6001
Apr  7 21:02:42 nslu2 kernel: [42954327.150000] usb 3-1: New USB device 
strings: Mfr=1, Product=2, SerialNumber=3
Apr  7 21:02:42 nslu2 kernel: [42954327.160000] usb 3-1: Product: FT232R 
USB UART
Apr  7 21:02:42 nslu2 kernel: [42954327.160000] usb 3-1: Manufacturer: 
FTDI
Apr  7 21:02:42 nslu2 kernel: [42954327.170000] usb 3-1: SerialNumber: 
A9004h1X

lsusb sagt das:
nslu2:/work/libftdi-0.15# lsusb
Bus 003 Device 003: ID 0403:6001 Future Technology Devices 
International, Ltd FT232 USB-Serial (UART) IC

unter dev sehe ist ttyUSB0



Er scheint also erkannt worden zu sein. Nur, wie gehts jetzt weiter. Wie 
kann ich den Reed-Kontakt, der an CTS und Masse angeschlossen ist 
abfragen?

Danke für die Antworten!

Gruß

von Teplotaxl X. (t3plot4x1)


Lesenswert?


von FTDI_Newbie (Gast)


Lesenswert?

Hi,
danke aber leider steht da nichts :-)

von Teplotaxl X. (t3plot4x1)


Lesenswert?

Link ist putt
hinten muss noch ne ) dran

von FTDI_Newbie (Gast)


Lesenswert?

Hi,
danke für deine Hilfe. Ich habe mir das jetzt mal durchgelesen, leider 
bin ich glaube ich etwas zu blöd dafür. Könntest du mir kurz sagen wie 
ich vorgehen muss?
Die Code-Schnipsel sind in C, oder?

von FTDI_Newbie (Gast)


Lesenswert?

Hi,
nochmals zur Erläuterung. Ich hatte mir das so gedacht:
NSLU2(Debian) läuft sowieso immer, USB-Board mit FT232R anschliessen, 
dort an CTS und Masse den Redd-Kontakt dran, per Cronjob CTS abfragen 
nach 0 oder 1.
Geht das oder ist das etwas zu einfach gedacht?

von Teplotaxl X. (t3plot4x1)


Lesenswert?

FTDI_Newbie wrote:
> Hi,
> danke für deine Hilfe. Ich habe mir das jetzt mal durchgelesen, leider
> bin ich glaube ich etwas zu blöd dafür. Könntest du mir kurz sagen wie
> ich vorgehen muss?
> Die Code-Schnipsel sind in C, oder?

genau.
1
#include <stdio.h>
2
3
int main(void) {
4
  int port;
5
  port = open("/dev/ttyUSB0", O_RDWR);
6
  if ( port == -1 ) {
7
    return -1;
8
  }
9
10
  int i;
11
  ioctl( port, TIOCMGET, &i );
12
13
14
  if ( (i & TIOCM_CTS)==TIOCM_CTS ) {
15
    return 1;
16
  }
17
  else
18
  {
19
    return 0;
20
  }
21
22
}

per copy + paste aus der wiki

von FTDI_Newbie (Gast)


Lesenswert?

Hi,
danke, leider bekomme ich folgendes beim compillieren:
hal.c: In function 'int main()':
hal.c:5: error: 'O_RDWR' was not declared in this scope
hal.c:5: error: 'open' was not declared in this scope
hal.c:11: error: 'TIOCMGET' was not declared in this scope
hal.c:11: error: 'ioctl' was not declared in this scope
hal.c:14: error: 'TIOCM_CTS' was not declared in this scope

Tut mir ledi das ich vielleicht so einfache fragen stelle aber bin 
absoluter Newbie was USB & C betrifft!

Danke nochmals und Gruß

von FTDI_Newbie (Gast)


Lesenswert?

Ich habe übrigens folgende gcc:
gcc ---version:
gcc (Debian 4.3.2-1.1) 4.3.2

von FTDI_Newbie (Gast)


Lesenswert?

bei gcc bekome ich folgenden Fehler:

nslu2:/work# gcc hal.c
hal.c: In function 'main':
hal.c:5: error: 'O_RDWR' undeclared (first use in this function)
hal.c:5: error: (Each undeclared identifier is reported only once
hal.c:5: error: for each function it appears in.)
hal.c:11: error: 'TIOCMGET' undeclared (first use in this function)
hal.c:14: error: 'TIOCM_CTS' undeclared (first use in this function)

von Teplotaxl X. (t3plot4x1)


Lesenswert?

T'schuldigung, der c-code war nicht getestet
1
#include <stdio.h>
2
#include <sys/types.h>
3
#include <sys/stat.h>
4
#include <fcntl.h>
5
#include <sys/ioctl.h>
6
7
int main(void) {
8
  int port;
9
  port = open("/dev/ttyUSB0", O_RDWR);
10
  if ( port == -1 ) {
11
    return -1;
12
  }
13
14
  int i;
15
  ioctl( port, TIOCMGET, &i );
16
17
18
  if ( (i & TIOCM_CTS)==TIOCM_CTS ) {
19
    return 1;
20
  }
21
  else
22
  {
23
    return 0;
24
  }
25
26
}
btw: die nslu2 hat nen arm prozzi, du musst entweder
1. nen Crosscompiler verwenden
2. das ding auf der nslu2 kompilieren

von FTDI_Newbie (Gast)


Lesenswert?

Hi,

vielen  Dank für die Antwort, ich habe es nun kompilliert bekommen!
Leider bin ich gerade auf der Arbeit, kann also den Reed-Kontakt nicht 
testen. Werd ich aber heute abend als erstes machen!
Meld mich dann nochmasl!

also, danke schonmal!

Gruß

von FTDI_Newbie (Gast)


Lesenswert?

Hi,
danke nochmals, nun funktioniert es :-)
Leider ist die Lösung nicht die eleganteste weil ich ja nicht auf das 
"Signal" des Reed-Kontakts reagieren sondern dauerhaft (alle 500ms) 
abfrage ob CTS = 0 oder = 1 ist. aber vielleicht werde ich das auch 
irgendwann nochmals besser hinbekommen.
Also, vielen vielen Dank für die Hilfe!!

Gruß

von Michael X. (Firma: vyuxc) (der-michl)


Lesenswert?

Kannst du nicht einen Interrupt auslösen wenn der CTS kommt? Im 
augenblick pollst du ja nur rum.

von FTDI_Newbie (Gast)


Lesenswert?

Hi,

ja, meinte mein Arbeitskollege auch!
Würde ich auch gerne, könntest du mir sagen wie ich das mache. Bin eher 
ewtas "unerfahren" in diesen Dingen :-)

von FTDI_Newbie (Gast)


Lesenswert?

Hi,

ich schon wieder. Ich habe jetzt mal versucht mich einzulesen was 
Interrupts berifft. Leider bin ich irgendwie kein Stück schlauer 
geworden.
Könnte jemand einem absoluten Anfänger wie mir das mal erklären. Ich 
würde also gerne, wie Michael X. geschrieben hat, einen Interrupt 
auslösen wenn auf der Leitung CTS eine Pegeländerung stattfindet.

Vielen Dank im voraus!!

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.