Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

Kommentar:
Einfügen von HTML im Kommentar:

Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a>
Bild einfügen: <img src="BILDURL">
Text formatieren: <b>fetter Text</b>  <i>kursiver Text</i> <u>unterstrichener Text</u>
Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b>
C2 Quellcode formatieren: <code>Quellcode</code>
ASM Quellcode formatieren: <asm>Quellcode</asm>
(Innerhalb eines Quellcodeabschnitts ist kein html möglich.)
Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst !  

> Hallo! > > Ich habe hier das I2c-PC-Interface aus dem cctools-Shop. Das funktioniert ganz prächtig unter Windows > mit dem Comm-Control unter VisualBasic. Da mein Serverchen, der das Ding bekommen soll, aber > unter Linux läuft, dachte ich mir: Schreib ich einfach mal in C nach. Also habe ich folgendes geschrieben: > <pre> > #include <unistd.h> > #include <sys/ioctl.h> > #include <termios.h> > #include <fcntl.h> > > > #define true -1 > #define false 0 > > #define DELAY 0.0001 > > > int fd=0; //Dateihandle > int status=0; //Für ioctl > > > unsigned char dtr(unsigned char state) { > status=0; > ioctl(fd, TIOCMGET, &status); > if (state!=0) > status &= TIOCM_DTR; > else > status &= ~TIOCM_DTR; > > ioctl(fd, TIOCMGET, &status); > //wait(DELAY); > } > > unsigned char rts(unsigned char state) { > status=0; > ioctl(fd, TIOCMGET, &status); > if (state!=0) > status &= TIOCM_RTS; > else > status &= ~TIOCM_RTS; > > ioctl(fd, TIOCMGET, &status); > //wait(DELAY); > } > > unsigned char cts() { > ioctl(fd, TIOCMGET, &status); > //wait(DELAY); > if ((status & TIOCM_CTS) > 0) > return -1; > else > return 0; > } > > unsigned char send(unsigned char data) { > unsigned char result; > > rts(data & 0x80); > dtr(true); > dtr(false); > > rts(data & 0x40); > dtr(true); > dtr(false); > > rts(data & 0x20); > dtr(true); > dtr(false); > > rts(data & 0x10); > dtr(true); > dtr(false); > > rts(data & 0x8); > dtr(true); > dtr(false); > > rts(data & 0x4); > dtr(true); > dtr(false); > > rts(data & 0x2); > dtr(true); > dtr(false); > > rts(data & 0x1); > dtr(true); > dtr(false); > > rts(true); > dtr(true); > result=~cts(); > dtr(false); > > return result; > } > > <div color=grey>/* > int receive(int ackn) { > int result=0; > > rts(true); > dtr(true); > if (cts()) result=128; > dtr(false); > > dtr(true); > if (cts()) result+=64; > dtr(false); > > dtr(true); > if (cts()) result+=32; > dtr(false); > > dtr(true); > if (cts()) result+=16; > dtr(false); > > dtr(true); > if (cts()) result+=8; > dtr(false); > > dtr(true); > if (cts()) result+=4; > dtr(false); > > dtr(true); > if (cts()) result+=2; > dtr(false); > > dtr(true); > if (cts()) result+=1; > dtr(false); > > rts(ackn); > dtr(true); > dtr(false); > > return result; > } > */</div> > > unsigned char i2c_start(unsigned char addr) { > dtr(true); > rts(true); > rts(false); > dtr(false); > rts(true); > return send(addr); > } > > unsigned char i2c_stop() { > rts(false); > dtr(true); > rts(true); > } > > unsigned char setpcf(unsigned char addr, unsigned char state) { > i2c_start(addr); > send(state); > i2c_stop(); > } > > > int main(int argc, char** argv) { > unsigned addr; > unsigned state; > > if (argc != 3) { > printf("Falsche Parameterzahl\nSyntax:\n %s addr state\n", argv[0]); > return 1; > } > > if ((fd=open("/dev/ttyS0", O_RDWR)) < 0) { > printf("Fehler beim Oeffnen der Schnittstelle...\n"); > return 1; > } > > sscanf(argv[1],"%d",&addr); > sscanf(argv[2],"%d",&state); > > addr=addr*2+64; > > printf("Verwende Adresse %d...\n", addr); > > setpcf(addr,state); > > > close(fd); > } > </pre> > > Dann rufe ich das ganze so wie's gedacht ist mit ./a.out 6 255 bzw. ./a.out 6 0 auf, um alle Relais auf > der Relaisplatine (Adresse 6=64+2*6=76) stimmt. Die receive-Funktion habe ich mal auskommentiert, > die brauche ich ja hierfür nicht. Was mache ich falsch? Muss ich da evtl. noch warten, weil's zu schnell > läuft oder was? > > Mit freundlichen Grüßen, > > Christoph
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB