Einfache Steuerung der parallelen Schnittstelle

Aus Technik-fan.de Wiki
Version vom 26. Februar 2025, 13:30 Uhr von Admin (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Ziel dieser Beschreibung ist es, die parallele Schnittstelle über ein Webinterface steuern zu können. Ich verwende eine Schaltung aus 4 Leds, die auf eine Rochlasterplatine gelötet wurden. Damit kann man sich sehr leicht den Zustand der einzelnen Ports anzeigen lassen. Ich verwende dabei keine Vorwiderstände da ich ultra helle LED's genommen habe. Zur Sicherheit empfiehlt es sich aber 100 Ohm Vorwiderstände zu verwenden. Im wesentlichen gibt es zwei Möglichkeiten den parallelen Port unter Debian zu steuern. Zum einen lässt sich der Port direkt per Speicher Adresse aus einem C Programm heraus schreiben und lesen. Nachteil dabei: Speicher Adressen darf nur Root schreiben. Es ist also nicht möglich das ganze per www-data User aus einer Website heraus zu starten. Die andere Möglichkeit besteht darin den Hardware Zugriff über ein C Programm das ein paar Linux Kernel Module benötigt vorzunehmen. Die Module können wiederum einem bestimmten Linux User oder einer Gruppe angehören. So kann der parallele Port dann auch über ein Webfrontend (PHP, Ajax etc.) gesteuert werden. Auf diese Möglichkeit möchte ich hier genauer eingehen.

Als erstes sollten die benötigten Module geladen werden:

modprobe parport
modprobe ppdev
lsmod|grep parport

sollte dann folgende Ausgaben produzieren:

parport_pc             32132  0
parport                33256  2 ppdev,parport_pc

nun benötigen wir den gcc und alle Programme die zum kompilieren nötig sind:

apt-get install build-essential

nun legen wir uns einen Ordner zum kompilieren an. Für alle die wenig Erfahrung im kompilieren von Linux Software haben biete ich hier meine kompilierte ausführbare Datei zum Download an. (Debian etch 2.6.18-6-686):

mkdir /usr/src/blink
cd /usr/src/blink

Darin speichern wir unsere C Quellcode Datei mit folgendem Inhalt:

vim blink.c

Inhalt, das Programm stammt übrigens aus diesem Forumbeitrag:

 /*Dieser Code laesst LEDs die an Pins 2...9 (Datenregister)
 angeschlossen sind blinken. */
  
 
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/ppdev.h>
#include <linux/parport.h>
#include <sys/ioctl.h>

int main()
{
    int fd,loop=0;
    unsigned char datareg=0xFF;
    unsigned char controlreg=0x00;
    struct ppdev_frob_struct frob;

/*parallele Schnittstelle öen*/
    if((fd = open ("/dev/parport0", O_RDWR))!=-1)
    {
        ioctl (fd, PPCLAIM);
    }
    else
    {
        printf("Konnte Schnittstelle nicht oeffnen\n");
        return 1;
    }  

/*Pins 2..9 als Ausgang konfigurieren*/
    frob.mask = 0x20;
    frob.val =0x00;
    ioctl (fd, PPFCONTROL, &frob); 


/*10 mal LEDs ein- und ausschalten*/
   while ((loop++)<1)
   {
       datareg=0xFF;
       ioctl(fd,PPWDATA ,&datareg);
       sleep(1);
       datareg=0x00;
       ioctl(fd,PPWDATA ,&datareg);
       sleep(1);
   }

/*parallele Schnittstelle sch