- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 5 von 5

Thema: Raspberry Pi GPIO

  1. #1
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9

    Raspberry Pi GPIO

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo Forum,

    auf Grund einer Nachfrage von meiner Webseite habe ich mal ein kleines C-Programm entwickelt um die GPIOs per Konsolenaufruf zu schalten.
    Ich wollte dann noch zusätzlich eine PWM mit ins das Programm reinbasteln nur da bin ich nicht sicher ob das mit der Methode die ich aktuell verwende überhaupt machbar ist. Vielleicht kann mir ja jemand eine Antwort darauf geben

    Hier ist schon mal das Programm für alle die die es gerne mal ausprobieren wollen

    Code:
    // Compile with: GCC /var/Programme/UART.c -o /var/Programme/UART
     
    #include <sys/types.h>                        
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <termios.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <time.h>
    
    
    int fd;
    
    
    char GPIO[3][30] = {"/sys/class/gpio/gpio0/value", 															// Array für die GPIOs
    					"/sys/class/gpio/gpio1/value", 
    					"/sys/class/gpio/gpio4/value"}; 
    
    
    int main(int argc, char** argv)               																// Programmstart
    {
    	int res;
    	int i;
    
    
    	printf("Anzahl Argumente: %d \n", argc); 																// Ausgabe der Anzahl der übergebenen Argumente
    	
    	for(i = 0; i < argc; i++)																				// Argumente ausgeben
    		{
    			printf("argv[%d] = %s\n", i, argv[i]);
    		}
    		
    	if (argc >= 1)    																						// Sind Argumente übergeben worden?                                                 
    	{
    		for(i = 1; i < argc; i++)
    		{
    			fd = open(GPIO[i-1], O_WRONLY | O_NOCTTY);														// Datei mit der Indexnummer "i-1" öffnen und Name unter "fd" speichern
    			res = write(fd, argv[i], 1);																	// Argument mit der Nummer "i" in die geöffnete Datei schreiben
    			close (fd);																						// Datei schließen
    		}
    	}
    	return 0;
    }
    Der Aufruf in der Konsole erfolgt dann so:

    ./Programmname Bit1 Bit2 Bit3

    Sprich bei mir sieht es im Moment so aus:

    ./GPIO 1 0 1

    Sinn und Zweck ist die Ansteuerung einer RGB LED.
    Deswegen auch die PWM
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Ich habe keinen Pi, kann also nur spekulieren.

    Es könnte eine PWM im Kernel geben. Der Devicetreiber würde dann über das Filesystem angesprochen werden. Dazu müßte es aber eine Doku geben.

    Ansonsten muß man eine Software-PWM implementieren, die aus dem User-Mode ein (oder auch drei) Portbit mit dem passenden Muster ansteuert.

    Eine weitere Möglichkeit ist, selbst ein PWM Device als Kernel-Mode Treiber zu schreiben. Das kann (wird) aber ziemlich komplex werde. Kernel-Module sind ein Kapitel für sich.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Kurzer Nachtrag....
    Ich wollte gerade die GPIOs auslesen. Aber statt 0 und 1 bekomme ich als Wert 48 und 49 raus (und das bei allen drei GPIOs wo ich es getestet habe). Was sind das für zwei andere Bits die permanent gesetzt sind?
    Kann mir das jemand sagen?
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    39
    Beiträge
    647
    Kann es sein das du den Datentypen falsch hast? Guck mal in die Ascii Tabelle 48 = 0 und 49 = 1.

    Gruß Daniel
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  5. #5
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Stimmt.....der Wert steht da als ASCII in der Datei drin und ich lese auch einen ASCII aus.
    Danke für den Hinweis. Dann ist es ja kein Problem, sondern nur ein anderer Datentyp.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

Ähnliche Themen

  1. [ERLEDIGT] Raspberry Pi Übertakten
    Von Kampi im Forum Raspberry Pi
    Antworten: 2
    Letzter Beitrag: 21.09.2012, 23:03
  2. [ERLEDIGT] Kommunikation AVR <-> Raspberry
    Von Goldenflash im Forum Raspberry Pi
    Antworten: 6
    Letzter Beitrag: 04.09.2012, 09:30
  3. [ERLEDIGT] Problem mit GPIO beim Raspberry Pi
    Von Kampi im Forum Raspberry Pi
    Antworten: 19
    Letzter Beitrag: 25.08.2012, 18:49
  4. GPIO-Register Ansprechen
    Von kmrish im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 7
    Letzter Beitrag: 14.07.2011, 10:45
  5. Servo über GPIO mit PWM an RN-Control ansteuern (Frequenz ?)
    Von Chattychan im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 23.07.2007, 11:53

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress