Forum: Mikrocontroller und Digitale Elektronik Raspberry Pi eigenes LED Display


von Dominikus K. (dominikus)


Lesenswert?

Hallo Welt,

ich habe mir 2 Raspberry Pis zugelegt und bin nun fleißig am basteln.
Ich habe keine MicroController spezifische Ausbildung sondern 
beschäftige mich aus reinem Interesse mit der Materie.

Mein Projekt:
Ich möchte eine LED Matrix von 8x8 LEDs betreiben. Jede LED soll einzeln 
Ansteuerbar sein. Ich habe bereits die I²C Buserweiterung am laufen. 
Jetzt
habe ich 16 Output Pins (die ich auch alle Problemlos ansprechen kann), 
WiringPi sei dank.

In jeder Reihe hängen die masse Pins der LEDs zusammen an einem Output 
Pin der Buserweiterung.

In jeder Spalte hängen die + Pins der LEDs zuammen an einem anderem 
Output Pin.

Somit verwende ich 16 "Beinchen" für 64 LEDs.

Jetzt kann ich jede LED unabhängig von den anderen LEDs einschalten. Um 
mehre LEDs gleichzeitig einzuschalten "Pulse" ich die LEDs.

Bis hierher funktioniert alles super.

Nun das Problem:

Die LEDs sind sehr Dunkel wenn diese mit der Anode am Output Pin (auf 1) 
und der Katode an einem anderem Output Pin (auf 0) hängen. Wenn ich 
statt des "0er" Pins die LED direkt auf Masse ziehe, kann ich diese 
wunderbar hell erstrahlen lassen. Allerdings funktioniert meine 
Schaltung dann logischer Weise nicht.

Gibt es einen Innenwiderstand oder eventuell Pull Widerstände die ich 
irgendwie verhindern kann? Oder gibt es eine andere Möglichkeit das der 
Output Pin welcher auf 0 gesetzt wird sich genau wie Masse verhält.
Meine Buserweiterung ist ein PCF8574P.

Danke für eure Hilfe,
Dominikus

von BadBabe (Gast)


Lesenswert?

Hast du die Funktion delay() benutzt (diese Funktion hält das Programm 
an -> Die LEDs werden nicht schnell genug gepulst).

http://wiringpi.com/reference/timing/

von Dominikus K. (dominikus)


Lesenswert?

Ja ich nutze diese Funktion, aber auch ohne das delay() habe ich das 
gleiche Ergebnis (bei einem Testaufbau). Ohne delay() funktioniert meine 
Matrix auch nicht, ansonsten könnte ich nicht mehrer LEDs gleichzeitig 
(für das menschliche Auge erscheint es gleichzeitig ) benutzen.

von BadBabe (Gast)


Lesenswert?

Wie Leuchtet eine einzelne LED (ohne multiplex) (um den Portexpander 
Auszuschließen).

Falls die LED Hell Leuchtet wirst du ein Timeingproblem haben.

von Dominikus K. (dominikus)


Lesenswert?

Eine LED leuchtet zwar heller als viele, aber lange nicht so hell als 
wenn ich die Katode direkt auf Masse gezogen habe.

von holger (Gast)


Lesenswert?

>Meine Buserweiterung ist ein PCF8574P.

Ohne zusätzliche Treiber steuerst du mit dem schlappen
Teil eine LED Matrix an? Das wird nie was.

von BadBabe (Gast)


Lesenswert?

Bekommt die Led Genug Spannug (Spannungsabfall durch IC).

von Dominikus K. (dominikus)


Lesenswert?

Ich glaube wirklich mein Chip ist zu schwach... habe mir nochmal die 
Spezifikation hier auf der Seite durchgelesen. Spannung Messe ich gleich 
mal, ich befürchte aber das das Problem am Strom und nicht an der 
Spannung liegt.

Ok die Spannung ist auch ziemlich niedrig. Mein Multimeter ist für 
anderen Spannungen ausgelegt und daher nicht sehr genau, es springt 
zwischen 1 und 2 Volt...

Gibt es einen Weg die AusgangsSpannung zu erhöhen?

Immerhin darf ich nicht mehr als 6volt in den Chip pumpen.

: Bearbeitet durch User
von BadBabe (Gast)


Lesenswert?

Am besten währe es wenn du die LEDs mit einen Transistor treibst.

von Dominikus K. (dominikus)


Lesenswert?

Ok, das kann ich mal versuchen, wollte ich eigentlich umgehen umgehen... 
dann muss ich wieder Bauteile kaufen...
ich poste noch meinen Code, vielleicht stell ich mich ja auch nur 
dämlich an :)
1
#include <stdio.h>
2
#include <wiringPi.h>
3
#include <wiringPiI2C.h>
4
5
#define on     100
6
#define off     1
7
8
9
int main (void)
10
{
11
  printf ("Raspberry Pi blink\n") ;
12
13
pcf8574Setup (66,0x20) ;
14
pcf8574Setup (77,0x27) ;
15
16
int i=0;
17
  for (;;)
18
  {
19
        while (i < 7){
20
                digitalWrite (66+0, LOW) ;
21
                digitalWrite (77+i, HIGH) ;
22
                delay(on);
23
                digitalWrite (66+0, HIGH) ;
24
                digitalWrite (77+i, LOW) ;
25
                delay(off);
26
                i++;
27
        }
28
        i=0;
29
         while (i < 7){
30
                digitalWrite (66+i, LOW) ;
31
                digitalWrite (77+7, HIGH) ;
32
                delay(on);
33
                digitalWrite (66+i, HIGH) ;
34
                digitalWrite (77+7, LOW) ;
35
                delay(off);
36
                i++;
37
        }
38
        i=7;
39
         while (i > -1){   digitalWrite (66+7, LOW) ;
40
                digitalWrite (77+i, HIGH) ;
41
                delay(on);
42
                digitalWrite (66+7, HIGH) ;
43
                digitalWrite (77+i, LOW) ;
44
                delay(off);
45
                i--;
46
        }
47
        i=7;
48
         while (i > -1){
49
                digitalWrite (66+i, LOW) ;
50
                digitalWrite (77+0, HIGH) ;
51
                delay(on);
52
                digitalWrite (66+i, HIGH) ;
53
                digitalWrite (77+0, LOW) ;
54
                delay(off);
55
                i--;
56
        }
57
        i=0;
58
  }
59
60
}

von holger (Gast)


Lesenswert?

>ich poste noch meinen Code, vielleicht stell ich mich ja auch nur
>dämlich an :)

Ja, tust du. Das Teil kann maximal 300uA bei Highlevel liefern.
Steht so im Datenblatt. Du solltest es vieleicht mal lesen.
Ein Wunder das da überhaupt eine LED leuchtet.

Ohne zusätzliche Treiber für High- UND Lowside
kannst du dir deine LED Matrix sonst wohin stecken.

von Dominikus (Gast)


Lesenswert?

Junge du hast ja n Ton drauf... auch wenn du leider recht hast... ich 
geh jetzt schlafen... Danke für eure Hilfe

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.