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
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/
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.
Wie Leuchtet eine einzelne LED (ohne multiplex) (um den Portexpander Auszuschließen). Falls die LED Hell Leuchtet wirst du ein Timeingproblem haben.
Eine LED leuchtet zwar heller als viele, aber lange nicht so hell als wenn ich die Katode direkt auf Masse gezogen habe.
>Meine Buserweiterung ist ein PCF8574P. Ohne zusätzliche Treiber steuerst du mit dem schlappen Teil eine LED Matrix an? Das wird nie was.
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
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 | }
|
>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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.