PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Problem mit GPIO beim Raspberry Pi



Kampi
04.07.2012, 17:01
Hallo Forum,

ich versuche schon seit einiger Zeit die GPIOs vom Raspberry Pi zu togglen.
Hierzu habe ich dieses Programm:




// blink.c
//
// Example program for bcm2835 library
// Blinks a pin on an off every 0.5 secs
//
// After installing bcm2835, you can build this
// with something like:
// gcc -o blink blink.c -l bcm2835
// sudo ./blink
//
// Or you can test it before installing with:
// gcc -o blink -I ../../src ../../src/bcm2835.c blink.c
// sudo ./blink
//
// Author: Mike McCauley (mikem@open.com.au)
// Copyright (C) 2011 Mike McCauley
// $Id: RF22.h,v 1.21 2012/05/30 01:51:25 mikem Exp $

#include <bcm2835.h>

// Blinks on RPi pin GPIO 11
#define PIN RPI_GPIO_P1_11

int main(int argc, char **argv)
{
// If you call this, it will not actually access the GPIO
// Use for testing
// bcm2835_set_debug(1);

if (!bcm2835_init())
return 1;

// Set the pin to be an output
bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);

// Blink
while (1)
{
// Turn it on
bcm2835_gpio_write(PIN, HIGH);

// wait a bit
delay(500);

// turn it off
bcm2835_gpio_write(PIN, LOW);

// wait a bit
delay(500);
}

return 0;
}


von dieser Seite

http://elinux.org/RPi_Low-level_peripherals

heruntergeladen. Außerdem habe ich die BCM2835 Libary auf mein Pi gespielt und installiert (http://www.open.com.au/mikem/bcm2835/).
Die Libary habe ich auch auf meinem Rechner wo ich das Programm geschrieben habe.
Das Programm habe ich per SCP auf mein Pi übertragen und mittels "gcc -o blink Blink_LED.c -6 bcm2835" auf dem Pi kompiliert.
Anschließend wollte ich das Programm mit "sudo ./blink" ausführen.
An dem GPIO11 habe ich mein Oszi angeschlossen (ist ja von der zweireihigen Stiftleiste der zweite Pin von unten).
Allerdings sehe ich nicht das der Pin togglet......da passiert eigtl. gar nichts.
Als Kernel habe ich diesen hier:

http://www.frank-buss.de/tmp/kernel.img

Kann mir jemand bei meinem Problem helfen?
Danke schonmals!

TheDarkRose
04.07.2012, 17:14
#define PIN RPI_GPIO_P1_11


steuert nicht den GPIO11 an, sondern den PIN11 an dem IDE Connector. P1-11 wäre GPIO17


PS.: Compileraufruf ist eh mit -l und nicht -6?

gcc -o blink Blink_LED.c -lbcm2835

Kampi
04.07.2012, 17:27
#define PIN RPI_GPIO_P1_11


steuert nicht den GPIO11 an, sondern den PIN11 an dem IDE Connector. P1-11 wäre GPIO17


PS.: Compileraufruf ist eh mit -l und nicht -6?

gcc -o blink Blink_LED.c -lbcm2835



Was meinst du mit -6? :confused:

TheDarkRose
04.07.2012, 17:31
Das hier ;)


Das Programm habe ich per SCP auf mein Pi übertragen und mittels "gcc -o blink Blink_LED.c -6 bcm2835" auf dem Pi kompiliert.

Kampi
04.07.2012, 17:32
Ah nicht gesehen.
Hab mich einfach nur verschrieben :)
Sorry! :D

TheDarkRose
04.07.2012, 17:44
Funktionierts jetzt mit GPIO17?

Kampi
04.07.2012, 17:47
Jap funktioniert nun!
Dank dir vielmals.
Also bezieht sich die Nummerrierung auf die Nummerierung der Stiftleiste und nicht der GPIOs.
Danke für den Hinweis.
SPI sollte ja mit der Lib auch funktionieren oder habe ich das falsch gelesen?

TheDarkRose
04.07.2012, 17:49
Ja, die beziehen sich auf die Pinleistennummerierung, siehe http://www.open.com.au/mikem/bcm2835/group__constants.html#ga63c029bd6500167152db4e5773 6d0939
SPI sollte auch funktioniere.

Kampi
04.07.2012, 18:12
Jetzt habe ich gerade das hier gefunden:

http://hobbyelektronik.org/w/index.php/Raspberry_Pi_IO

Den Webserver habe ich schon ans laufen bekommen. Allerdings verstehe ich nicht ganz wie man das macht, dass man auf einer Homepage ein Button drückt und dann eine LED angeht, sprich wie man die Verbindung zwischen Homepage die sich ja im www Verzeichnis befindet und dem Programm welches man ausführt zu stande bekommt (bin auch noch recht unerfahren was die Thematik Embedded Linux usw. angeht. Das kommt noch erschwerend dazu).

TheDarkRose
04.07.2012, 18:56
Also der Artikel ist Ansich sehr gut. Das schöne an Linux, es ist alles eine Datei. Ergo lassen sich die GPIO nicht nur über DMA /dev/mem bzw. libbmc ansprechen, sondern auch jeder GPIO selbst als Datei (siehe Artikel). Ergo kann man den einzelnen GPIO-Dateien entsprechende Berechtigungen zuweisen und somit per PHP die Dateien lesen und schreiben und somit den GPIO bedienen.

Kampi
05.07.2012, 08:10
Also das mit den GPIOs funktioniert nun super. Mittlerweile habe ich auch herausgefunden wie man diese in der Shell schaltet.
Allerdings habe ich gestern irgendwie meinen Webserver gekillt......kennst du dich mit LightTPD aus?
Jedesmal wenn ich versuche mit "force-reload" die COnfig neu zu laden sagt er "failed". Und über LAN ist der Server auch nicht mehr zu erreichen.
Ich denke das die beiden Sachen miteinander zusammen hängen ;)

TheDarkRose
05.07.2012, 11:03
Wie hast den Server denn gekillt? Schonmal einen restart statt force-reload gemacht?

Kampi
05.07.2012, 11:34
Ich habe mal das komplette Pi neugestartet.
Und wie gesagt....keine Ahnung wie ich den gekillt habe :/

Kampi
05.07.2012, 12:40
Ich glaube ich setze einfach die SD Karte mit dem Linux Image neu auf......mal schauen ob es dann klappt :/

Kampi
21.07.2012, 19:22
Hey,

ich wollte jetzt mal die wiringPi Lib testen und habe dazu ein kleines Programm geschrieben.
Wenn ich das nun mittels:

/home/pi/Desktop/wiringPi/wiringPi# gcc -I/usr/local/include -L/usr/local/lib LED.c

compilieren will, erscheint diese Meldung:


/tmp/cc3CIgVq.o: In function `main':
LED.c:(.text+0x10): undefined reference to `wiringPiSetup'
LED.c:(.text+0x74): undefined reference to `pinMode'
LED.c:(.text+0x78): undefined reference to `digitalWrite'
collect2: ld returned 1 exit status

Kennt jemand das Problem?

porter91
18.08.2012, 16:49
Hey

Wie habt ihr diese Datei installiert.

Kampi
19.08.2012, 10:00
Hey,

welche Datei meinst du?

porter91
21.08.2012, 19:19
Ich meine die Datein die du in deinem ersten Post erwähnt hast. Heruntergeladen habe ich es schon weiß nur nicht wie ich es installieren soll

Kampi
21.08.2012, 19:24
In den Ordner wechseln und dann:



./configure
make
sudo make check
sudo make install

porter91
25.08.2012, 18:49
Danke hat funktioniert