Hallo, ich habe an einem Arduino Due einen ICM7218 (über Level-Konverter) angeschlossen und im Prinzip läuft alles wie gewünscht. Jetzt möchte ich die Helligkeit der LEDs noch über den Mikrokontroller regeln. Leider bietet der ICM dafür keine direkte Möglichkeit. Das Problem ist allerdings, dass ich weder eine gemeinsame Masse noch einen gemeinsamen Pluspol an der LED-Anzeige habe (zwei Module 5461BS). Die Kathoden werden hier für die Segmente a-g der jeweiligen Anzeige verwendet werden, die Anoden dienen zur Auswahl des entsprechenden 7er-Segments. Somit entfällt leider auch die Idee, über PWM direkt einen Transistor mit Vorwiederstand anzusteuern, der dann die Helligkeit über die Anoden steuern würde. Eine Alternative wäre noch, die Spannung des ICM7218 über einen Transistor zu regeln. Hierzu würde ich mal schauen, ob ich mir einen Spannungsteiler berechnen kann, der die minimale Betriebsspannung des ICM bis +5V regelt. Da ich über den MC leider nur noch freie PWM-Anschlüsse habe, muss ich mir hierfür noch einen kleinen DAC erstellen, da ich den Stromanschluss des ICM nicht gerne pulsierend betreiben möchte. Oder gibt es bessere Alternativen? Bin jetzt nicht so der Elektronik-Crack... Liebe Grüße Nils
Hast du schon probiert, wie lange der IC braucht um aus einem Shutdown die Ausgangsstufe wieder zu befeuern?
Karl Heinz schrieb: > Hast du schon probiert, wie lange der IC braucht um aus einem Shutdown > die Ausgangsstufe wieder zu befeuern? Das könnte ein Problem sein, da nach Datenblatt im shutdown auch der interne Multiplex Oszillator abgeschaltet wird. Eine "wake up from shutdown" Zeit kennt das DB leider nicht.
Hallo, naja, das mit dem Shutdown scheidet wahrscheinlich aus. Eine Idee wäre noch die Verwendung von Optokopplern, aber hier habe ich noch nicht rausgefunden, ob man den Ausgangswiderstand regeln kann oder ob die Dinger eher als reine Schalter fungieren. Den MAX7219 hatte ich mir auch angeschaut, ich hatte aber die LED-7-Segment-Anzeigen schon und die haben eben eine gemeinsame Anode. Damit kann der MAX7219 leider nicht umgehen. OK, die LEDs kosten nicht die Welt, da muss ich mal schauen, was ich sonst mache. Allerdings scheint es schon etwas cshwieriger zu sein, 4-stellige 7-Segment-LEDs zu bekommen, die gemeinsame Kathoden haben und preislich noch interessant sind. Liebe Grüße Nils
Nils Winkler schrieb: > ich hatte aber die > LED-7-Segment-Anzeigen schon und die haben eben eine gemeinsame Anode. > Damit kann der MAX7219 leider nicht umgehen. Doch. Dem MAX7219 ist es schnurz, er kann beides. Nur must Du dann in der Software Digits und Segmente vertauschen. Statt der Digits 1,2,3,... werden dann eben die Segmente A,B,C,.. gemultiplext.
Peter Dannegger schrieb: > Dem MAX7219 ist es schnurz, er kann beides. Im Prinzip hast Du natürlich Recht, aber dann müssen die (schwächeren) Digittreiber den Segmentstrom liefern und die maximale Helligkeit leidet darunter ganz ordentlich. Edit: War ein Denkfehler! Die Ströme bleiben ja gleich, nur es leuchten dann halt zur gleichen Zeit nicht x Segmente in einem Digit sondern das Segment n in allen Digits wo es angezeigt werden soll.
:
Bearbeitet durch User
OK. Verstehe. Das wird dann ein wenig aufwendiger, da der ICM ja schon mit Ziffern umgehen kann. Ich müsste mir also eine Mapping-Tabelle erstellen und berechnen, welche Zahl geschrieben werden muss, um alle Zahlen darzustellen...
Nils Winkler schrieb: > Ich müsste mir also eine Mapping-Tabelle > erstellen und berechnen, welche Zahl geschrieben werden muss, um alle > Zahlen darzustellen... Das ist ein Einzeiler (mit Tabelle: 2 Zeilen). Allerdings muß man noch nach Segmenten umsortieren, ist aber auch kein Hexenwerk. Man braucht einen Speicher für die 8 Segmentbytes. Den gibt man nach einer neuen Zahl komplett aus. In "display.h" steht die Anschlußzuordnung der Digits und Segmente.
1 | #include <avr/io.h> |
2 | #include "display.h" |
3 | |
4 | uint8_t display_ram[8]; |
5 | |
6 | uint8_t numbers[] = { _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, }; |
7 | |
8 | void write_digit( uint8_t digmask, uint8_t val ) |
9 | {
|
10 | uint8_t i; |
11 | |
12 | val = numbers[val]; // convert to 7-segment |
13 | |
14 | for( i = 8; i; i-- ){ // sort single digit into segment memory |
15 | display_ram[i-1] = (display_ram[i-1] | digmask) |
16 | ^ ((val & 0x80) ? 0 : digmask); |
17 | val <<= 1; |
18 | }
|
19 | }
|
Hallo, ich wollte nochmal eine kurze Rückmeldung geben. Den MAX7219 habe ich mittlerweile bekommen und konnte auch das Programm anpassen bzw. bin gerade dabei, eine Bibliothek dafür zu erstellen. Beim Anschließen hatte ich ein paar kleinere Probleme, da der MAX die Segmente einer 7-Segment-Anzeige anders definiert hat. Und auch die Reihenfolge der Stellen ist etwas anders, aber das alles habe ich soweit im Griff. Jetzt fehlen wir noch die Punkte, aber die kriege ich sicherlich auch noch hin. Wenn dann alles fertig ist, kann ich das ja auch mal online stellen. Danke und Gruß Nils
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.