Ich hab gerade meinen alten Pi 1.1 ausgegraben und dazu ein C-Berry28
Display was ich mir vor Ewigkeiten mal gekauft hatte und das wollte ich
endlich mal benutzen.
Jetzt ist bei der mitgelieferten Software nur die Anzeige eines voll
Format *.bmp dabei und das auch nur bei voller Display Helligkeit. Jetzt
wollte ich mir ein paar einfache Zeichenfunktionen und eine Steuerung
der Displayhelligkeit selber schreiben.
Nutzen wollte ich dafür den GPIO_P1_12 (GPIO18 am Chip) also der einzige
mit Hardware PWM. Der ist auch direkt so auf das Display für genau
diesen Zweck raus geführt und mit dem MOS-FET für das Backlight
verbunden, sollte also gehen.
Nutzen wollte ich diese Library (erstes Google Ergebnis und wird eh
bereits auch von der mitgelieferten BSP Anwendung genutzt) benutzen.
http://www.airspayce.com/mikem/bcm2835/
make check und install haben funktioniert. Aber nun funktioniert nicht
mal die Bsp-PWM. geschweigenden meine eigene.
Hier mal der Bsp. Code. Bis auf meine Debug Meldungen unverändert...
1 | int main( int argc, char **argv )
|
2 | {
|
3 | //char my_filename[] = "../bmp/admatec.bmp";
|
4 | printf("Start\n");
|
5 | if (!bcm2835_init())
|
6 | {
|
7 | printf("BCM2835 Chipsatz ist nicht bereit!");
|
8 | return 1;
|
9 | }
|
10 |
|
11 | // Set the output pin to Alt Fun 5, to allow PWM channel 0 to be output there
|
12 | bcm2835_gpio_fsel(RPI_GPIO_P1_12, BCM2835_GPIO_FSEL_ALT5);
|
13 | // Clock divider is set to 16.
|
14 | // 1.2MHz/1024 = 1171.875Hz
|
15 | bcm2835_pwm_set_clock(BCM2835_PWM_CLOCK_DIVIDER_16);
|
16 | bcm2835_pwm_set_mode(PWM_CHANNEL, 1, 1);
|
17 | bcm2835_pwm_set_range(PWM_CHANNEL, RANGE);
|
18 | // Vary the PWM m/s ratio between 1/RANGE and (RANGE-1)/RANGE
|
19 | // over the course of a a few seconds
|
20 | int direction = 1; // 1 is increase, -1 is decrease
|
21 | int data = 1;
|
22 | while (1)
|
23 | {
|
24 | if (data == 1)
|
25 | direction = 1; // Switch to increasing
|
26 | else if (data == RANGE-1)
|
27 | direction = -1; // Switch to decreasing
|
28 | data += direction;
|
29 | bcm2835_pwm_set_data(PWM_CHANNEL, data);
|
30 | printf("Set BL_PWM to %d\n", data);
|
31 | bcm2835_delay(1);
|
32 | }
|
33 |
|
34 | bcm2835_close();
|
35 | printf("Ende\n");
|
36 | return 0;
|
37 |
|
38 | }
|
Hat schon mal jemand damit was gemacht, oder kennt jemand alternative
Libs die die PWM nutzen können?
PS: Ich hatte auch schon ein Oszi am PIN mit und ohne Display und es war
kein PWM Signal sichtbar sondern immer nur HIGH Pegel, also liegt es
wohl nicht am Display