Gast
#4105743
Hallo Leute, ich versuche einen TLC5940 (LED-Treiber) an einem ATmega16 zu betreiben. Die Verdrahtung habe ich auf einem Steckbrett wie im Schaltplan angegeben vorgenommen. Den Quellcode habe ich größtenteils von Demystifying the TLC5940 (https://sites.google.com/site/artcfox/demystifying-the-tlc5940) übernommen. Dort wird ein ATmega328P verwendet, so dass ich folgende Anpassungen gemacht habe: Für den Grundtakt des TLC wurde beim ATmega328P der CLKO-Pin verwendet, an dem der Prozessortakt abgegriffen werden kann. Der ATmega16 hat so einen Pin nicht, so dass ich stattdessen mittels eines als CTC-konfigurierten Timers mit Prescale 1 und dem Schwellwert 0 (ORC0 = 0) am Pin OC0 (PB3) den halben Prozessortakt ausgegeben habe. Alle 4096-TLC-Takte muss der TLC-Blank-Pin kurz auf HIGH gezogen werden, wozu ich den Timer2 ebenfalls im CTC-Modus verwendet habe. Dieser hat einen Prescaler von 1024 und einen Schwellwert von 7 (OCR2 = 7) -> alle 8196 Prozessortakte = alle 4096 PB3-Takte. Leider bleiben alle angeschlossenen LEDs aus. Lediglich wenn ich den Prozessor mit dem MKII über JTAG programmiere, leuchten die LEDs für ca. eine halbe Sekunde bevor sie dann wieder komplett ausgehen. Wenn ich den Teil mit der DotCorrection auskommentire, dann sind einige LEDs ebenfalls an (die gleichen, die zuvor für eine halbe Sekunde an waren), aber egal welche Werte ich dem TLC übergebe, welche und wie stark die LEDs leuchten kann ich nicht beeinflussen. Hier mal die Funktionen, die die DotCorrection und die GrayScale-Werte setzen:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
Hat jmd von euch einen Idee, was ich falsch mache? Ein Oszilloskop habe ich leider nicht um die Signale oder deren Timing zu überwachen. Gruß Michi
