FT232R von Franzis unter Lunix als "Alarmanlage" nutzen

Gast #1221896
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ß
Gast #1222425
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?
Gast #1222459
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?
#1222687
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
Gast #1222726
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ß
Gast #1222732
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)
#1222796
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
Gast #1222851
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ß
Gast #1223470
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ß
Gast #1246551
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!!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren