Hallo zusammen.
Ich habe mir einen Raspberry Pi 3 gekauft, der wirklich toll
funktioniert.
Nun habe ich vor, mittels Software-PWM und WiringPi (Library zur
eleganten Ansteuerung der GPIOs via C) eine LED zu dimmen.
Leider kommt am besagten GPIO-Ausgang aber beim Start des Programms kein
Signal raus. Das habe ich durch ein Oszilloskop feststellen können.
Das Schalten der Pins funktioniert einwandfrei, allerdings erhalte ich
kein Rechteck am GPIO-Ausgang wenn das Programm läuft.
Hier der C-Code des Programms, welches funktionieren sollte:
returnEXIT_SUCCESS;// Programm erfolgreich beendet
36
}
Muss ich in Raspbian (OS des Raspberrys) noch irgend etwas einstellen,
damit das überhaupt funktionieren kann?
Ich bin ratlos..
Vielen Dank im Voraus und einen schönen 3. PWM-Advent!
Hallo zusammen,
ja, ich habe beides wie ihr beschrieben habt ausprobiert.
Es führt zu keinem Erfolg. Ich führe das Skript generell mit "sudo
./myprog" aus.
Auch die Compilierung habe ich entsprechend durchgeführt.
:-(
Hallo,
[c]
#include <stdio.h> // Used for printf() statements
#include <wiringPi.h> // Include WiringPi library!
// Pin number declarations. We're using the Broadcom chip pin numbers.
const int pwmPin = 18; // PWM LED - Broadcom pin 18, P1 pin 12
const int ledPin = 23; // Regular LED - Broadcom pin 23, P1 pin 16
const int butPin = 17; // Active-low button - Broadcom pin 17, P1 pin 11
const int pwmValue = 75; // Use this to set an LED brightness
int main(void)
{
// Setup stuff:
wiringPiSetupGpio(); // Initialize wiringPi -- using Broadcom pin
numbers
pinMode(pwmPin, PWM_OUTPUT); // Set PWM LED as PWM output
pinMode(ledPin, OUTPUT); // Set regular LED as output
pinMode(butPin, INPUT); // Set button as INPUT
pullUpDnControl(butPin, PUD_UP); // Enable pull-up resistor on
button
printf("Blinker is running! Press CTRL+C to quit.\n");
// Loop (while(1)):
while(1)
{
if (digitalRead(butPin)) // Button is released if this returns 1
{
pwmWrite(pwmPin, pwmValue); // PWM LED at bright setting
digitalWrite(ledPin, LOW); // Regular LED off
}
else // If digitalRead returns 0, button is pressed
{
pwmWrite(pwmPin, 1024 - pwmValue); // PWM LED at dim setting
// Do some blinking on the ledPin:
digitalWrite(ledPin, HIGH); // Turn LED ON
delay(75); // Wait 75ms
digitalWrite(ledPin, LOW); // Turn LED OFF
delay(75); // Wait 75ms again
}
}
return 0;
}
{/c]
Qulle:https://learn.sparkfun.com/tutorials/raspberry-gpio/c-wiringpi-example
ms
Hallo nochmal,
habe nun folgendes herausgefunden.
Im Anhang habe ich ein Pinout der Stiftleiste des RPi 3 angehängt.
Im folgenden Code funktioniert nämlich die PWM und zwar am Pin 11
(GPIO17):
1
#include<stdio.h>
2
#include<wiringPi.h>
3
#include<softPwm.h>
4
5
6
intmain(void)
7
{
8
9
if(wiringPiSetup()<0)return1;
10
pinMode(11,OUTPUT);
11
digitalWrite(0,LOW);
12
softPwmCreate(0,0,500);
13
softPwmWrite(0,300);
14
15
sleep(30000);
16
return0;
17
}
Schaut man sich die ersten Übergabeparameter von "softPwmCreate()" und
"softPwmWrite()" genau an, sieht man, dass hier auf einen "Pin 0"
verwiesen wird und nicht auf einen Pin 11.
Dies bezieht sich anscheinend auf "GPIO_GEN0" und NICHT auf die
GPIO-Bezeichnung "GPIO17".
Das ist ziemlich verwirrend.
Mich würde interessieren, wie ich nun die neu hinzugekommenen 14 GPIOs
entsprechend ansteuern kann...
Hi,
schau dir mal http://wiringpi.com/pins/ an.
WiringPi verwendet ein eigenes Pinout, der von dir gewählte wiringPi Pin
0, verwendet den BCM_GPIO 17, der als GPIO0 auf dem RASPI markiert ist,
und auf dem Pin11 des Raspi Connectors liegt.
Gruß,
Sebastian
Anmerkung:
BCM_GPIO ist der GPIO Pin auf der BCM CPU. Dieser entspricht nicht den
Raspberry Pi GPIO Pin Nummern.
Auch die PINs auf dem Connector des Raspberry entsprechen nicht der
Raspberry Pi GPIO Nummerierung.
Der Connector ist unter anderen mit diversen Protokoll GPIOs
ausgestattet:
MISO,MOSI usw.
Diese können aber auch für den GPIO Betrieb konfiguriert werden.
Wenn du z.B. die SDA und SCL Pins die zum I2c Bus gehören als GPIO
nutzen willst dann musst du nur sicherstellen das kein I2C per Device
Tree aktiviert wird. Dann sind die Pins GPIO nutzbar.
Für die Nutzung als SOFTPWM muss der GPIO nur frei sein, sprich keiner
anderen Perepherie zugeordnet.
SOFTPWM erzeugt ein PWM Signal per Software.
Hat ja bei dir auch funktioniert, nur war dir nicht klar warum bei
wiring pi Pin0 der BCM GPIO17 der auf dem Connector auf Pin11 liegt, das
PWM Signal ausgibt.
>nur war dir nicht klar warum bei>wiring pi Pin0 der BCM GPIO17 der auf dem Connector auf Pin11 liegt, das>PWM Signal ausgibt.
Und genau das ist das Problem, dass ich nicht weiß wie die anderen GPIOs
im Wiring Pi für den Raspberry 3 "heißen", damit ich dort eine
Software-PWM laufen lassen kann?!
Gruß
Richtig,
da steht nur etwas zur Belegung der GPIOs die auf den Connector
herausgeführt sind.
Die Tabelle ist doch nicht zu schwer zu verstehen :)
Wenn du ein weiteres Soft PWM Signal willst z.B. auf dem BCM_GPIO 18,
der als GPIO1 auf dem Connector liegt, nimmst du einfach den wiringPi
Port 1.
Vielleicht verstehe ich auch nur nicht was genau dein Problem ist
Möchtest du ein PWM Signal auf einem GPIO erzeugen der nicht auf dem
Connector herausgeführt ist?
Gruß,
Sebastian
Hat sich nun erledigt...
Ich verwende zur Initialisierung nun die Methode "wiringPiSetupGpio()".
Damit kann man dann die Gpio-NAMEN (!) ansprechen.
Es gibt laut WiringPi mehrere Methoden zur Initialisierung der GPIO-Pins
um damit etwas zu machen wie in meinem Falle z.B. die Soft-PWM zu
erzeugen.
Gruß