Forum: Mikrocontroller und Digitale Elektronik Raspberry PI B+ - GPIO40 und 45 benutzen


von Wolfram F. (mega-hz)


Lesenswert?

Hallo,

ich möchte gerne den bei mir nicht benutzten PWM-Audio Ausgang 
deaktivieren
und die GPIOs 40 und 45, die diesen ansteuern, nach entfernen von 2 
Widerständen für eigene Dinge benutzen.
Nein, andere GPIOs kommen leider nicht in Frage, da alle benutzt sind!
Wer weiss, was und wo ich was ändern muss im Linux, damit diese GPIOs
frei werden und nicht mehr mit der Audio-PWM verknüpft sind?
Im meinem Python Programm möchte ich diese dann als Eingang und Ausgang 
nutzen...
Würde mich über Hilfe von Euch sehr freuen, bin (noch)nicht der Linux 
Profi...

Danke,
Wolfram.

von Oliver J. (skriptkiddy)


Lesenswert?

Der Kernelcode [1[(ab Zeile 71) lässt vermuten, dass man die GPIO direkt 
verwenden kann. Ein Setzen der Leserichtung müsste die alternate 
Function des Soundtreibers aushebeln.

Versuch mal als "root" Folgendes für einen Output an GPIO40:
1
echo "40" > /sys/class/gpio/export
2
echo "out" > /sys/class/gpio/gpio40/direction
3
4
echo "0" > /sys/class/gpio/gpio40/value
5
echo "1" > /sys/class/gpio/gpio40/value

Wahrscheinlich nutzt dein Pythonprogramm die WiringPi-Lib und die müsste 
es genauso machen. Wenn das hier also funktioniert, dann solltest Du mit 
Python locker drauf zugreifen können. Testen kannst du die Funktion mit 
einem Multimeter an dem Widerstand von GPIO40, den du später entfernen 
willst.

Die getroffenen Aussagen Beziehen sich auf den verlinkten GPIO-Treiber. 
Ob der Teil deines Kernels ist, kann ich nicht sagen, da die Information 
fehlt. Sollte aber normalerweise der Fall sein, wenn Du die anderen Pins 
bereits verwenden kannst.

Grüße Oliver

[1] 
https://github.com/raspberrypi/linux/blob/942d904dc6a0ee26c45cacdf732e8949bfa47466/arch/arm/mach-bcm2708/bcm2708_gpio.c

von Chris (Gast)


Lesenswert?

Falls beim pi mit einem Devicetree gearbeitet wird könntest du zur 
Sicherheit dort den Audio-Teil raus nehmen, dann hast du ausgeschlossen 
das sich verschiedene Treiber in die quere kommen.

von Wolfram F. (mega-hz)


Lesenswert?

das funktioniert! :-)
paralell hab ich zur Kontrolle die Standby-LED des Gerätes schalten 
lassen.
An den beiden Entkoppel-C`s konnte ich Pegelwechsel von 0 auf 1.2V 
messen,
an den beiden Widerständen ebenso 1.2V/2.5V.
Die 1.2V reichen aus, um nen Transi anzusteuern, an den C`s kann man 
besser was anlöten als an den Widerständen. So werd ich es machen.
Prima.
1
# ----------------------------------- GPIO 40+45 tests ------------------------------
2
3
                  exec_cmd("echo 11 > /sys/class/gpio/export")                    # GPIO11 = Standby-LED  
4
                  exec_cmd("echo out > /sys/class/gpio/gpio11/direction")            # GPIO auf Ausgang setzen)  
5
                  exec_cmd("echo 0 > /sys/class/gpio/gpio11/value")                       # GPIO auf LO setzen  
6
7
                  exec_cmd("echo 40 > /sys/class/gpio/export")                    # GPIO40 = pwm0 audio  
8
                  exec_cmd("echo out > /sys/class/gpio/gpio40/direction")                  # GPIO auf Ausgang setzen  
9
                  exec_cmd("echo 0 > /sys/class/gpio/gpio40/value")                       # GPIO auf LO setzen  
10
11
                  exec_cmd("echo 45 > /sys/class/gpio/export")                    # GPIO45 = pwm1 audio  
12
                  exec_cmd("echo out > /sys/class/gpio/gpio45/direction")                  # GPIO auf Ausgang setzen
13
                  exec_cmd("echo 0 > /sys/class/gpio/gpio45/value")                       # GPIO auf LO setzen  
14
15
16
                  time.sleep(2)
17
                  exec_cmd("echo 1 > /sys/class/gpio/gpio11/value")               # GPIO auf HI setzen  
18
                  exec_cmd("echo 1 > /sys/class/gpio/gpio40/value")               # GPIO auf HI setzen    
19
                  exec_cmd("echo 1 > /sys/class/gpio/gpio45/value")               # GPIO auf HI setzen    
20
21
                  time.sleep(2)
22
23
                  exec_cmd("echo 0 > /sys/class/gpio/gpio11/value")               # GPIO auf LO setzen    
24
                  exec_cmd("echo 0 > /sys/class/gpio/gpio40/value")               # GPIO auf LO setzen  
25
                  exec_cmd("echo 0 > /sys/class/gpio/gpio45/value")               # GPIO auf LO setzen  
26
27
# ----------------------------------- GPIO 40+45 tests ---- end ----------------------

Da der PWM-Audio Ausgang nie angesprochen wird, dürfte es keine Probleme 
geben mit evt. noch vorhandenen Audio Treibern.

Schöner wäre es natürlich, wenn man die trotzdem deaktivieren könnte.
Mit dem Devicetree kenn ich mich absolut nicht aus..

Das ganze ist übrigens ein Internetradio auf Basis von Bob Rathbone mit 
USB-Stick/LAN und HDD Player als "Tuner" für die Stereoanlage.
Ziel mit den GPIO40/45 ist es, ein Schaltsignal zu erzeugen um meinen 
Vorverstärker einzuschalten, denn das Radioprogramm hat auch eine 
Sleep/Weckfunktion, die ich zum einschalten der Anlage nutzen möchte.
Ein GPIO würde zwar reichen, aber für den 2. fällt mir noch was ein...

Gruß,
Wolfram.

von Wolfram F. (mega-hz)


Lesenswert?

ich schliesse hiermit diesen thread, da alles läuft.

Gruß,
Wolfram

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.