www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik TLC5940 - Anweisung geben


Autor: Jonas H. (fujitsu313)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Leute,

ich versuche zur Zeit ein Programm für meine 8x8 LED-Matrix zu 
schreiben. Die Matrix wird über 4 TLC5940 angesteuert, diese sind an 
einem Arduino Serial v2.0 (Atmega328) angeschlossen.

Das ist ein Teil meines Programmes, ich versuche über den Serial Monitor 
im Arduino Programm die drei LEDs zum leuchten zu bringen. gebe ich nun 
0, 1 oder 2 im Serial Monitor ein gehen die LEDs an. Gebe ich nun aber 
64, 65 oder 66 ein passiert nichts..

Später sollen dann die LEDs mit den Zahlen 0-63 eingeschaltet und mit 
den Zahlen 64-127 ausgeschaltet werden. Ein VB.Net Programm sendet dann 
über die serielle Verbindung dem Arduino die einzelnen Werte.

Hat jemand eine Idee, warum das ganze nicht funktioniert?

Gruß Jonas

PS: Hatte noch keine Zeit die einzelnen Zeilen im Code zu 
beschriften..., bzw. zu erklären was genau passiert...

int incomingByte;      

#include "Tlc5940.h"

void setup()
{
  Serial.begin(9600);
  Tlc.init();
  Tlc.clear();
}

void loop()
{
  int direction = 1;
  for (int channel = 0; channel < NUM_TLCS * 16; channel += direction) {

   

 if (Serial.available() > 0) {
 
    incomingByte = Serial.read();
 
  
  if (incomingByte == '0') {
 
     Tlc.set(0, 4095);
      Serial.write(incomingByte);
      delay(75);
    }
 
     if (incomingByte =='64') {
 
        Tlc.set(0, 0);
      Serial.write(incomingByte);
      delay(75);
    }
    
      
      
      if (incomingByte == '1') {
 
     Tlc.set(1, 4095);
      Serial.write(incomingByte);
      delay(75);
    }
 
     if (incomingByte =='65') {
 
        Tlc.set(1, 0);
      Serial.write(incomingByte);
      delay(75);
    }
    
      
      
      if (incomingByte == '2') {
 
     Tlc.set(2, 4095);
      Serial.write(incomingByte);
      delay(75);
    }
 
     if (incomingByte =='66') {
 
        Tlc.set(2, 0);
      Serial.write(incomingByte);
      delay(75);
    }
 
 Tlc.update();
 delay(75);
  }
  
  }

}


Autor: narf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey,

ich habe den TLC 5940 zu Fuß angesteuert. Bei 4 Chips in Serie läuft das 
in etwas so:

4x Daten in den ersten schieben.
Latchen
Dann den TLC chip takten damit er den PWM Zyklus machen kann.

Das takten klappt prima per Timer output des Atmegas, dann ist die CPU 
nur mit Daten reinschieben beschäftigt.

Meine 8x8 Matrix läuft mit einem attiny2313 und einem TLC5940 - das Teil 
ist schnell genug um auch noch ein Multiplexing zu machen wenn du keine 
4096 Helligkeitsabstufungen brauchst. Bei 8x Multiplexing sind das ja 
noch theoretische 512 Stufen.

Den Rest musst Du schon selbst erledigen - wenn Du keine Zeit hast Deine 
Aufgaben zu erledigen habe ich die erst recht nicht!

Autor: kandinsky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... Ich bin kein C-Programmierer, aber das hier

' int incomingByte;
' if (incomingByte =='64') {

kommt mir komisch vor!

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kandinsky schrieb:
> ... Ich bin kein C-Programmierer, aber das hier
>
> ' int incomingByte;
> ' if (incomingByte =='64') {
>
> kommt mir komisch vor!

Da liegst du richtig.

if(incomingByte==61)


64 ist ja kein Zeichen. Wenn überhaupts wäre es eine Zeichenkette 
(String) und stünde in "".

http://sites.google.com/site/artcfox/demystifying-...

nimm das PDF unten und lies dir das ganz durch. Das ist für Vollidioten 
erster Klasse geschrieben. Das kann jeder verstehen =)

Da drin ist auch soweit ich das noch präsent habe ein Link zu einem 
FlowChart von TI. Wenn man noch nicht so viel kann, dann kann man das 
problemlos nach C übersetzen.

Allerdings würde ich empfehlen C nochmal anzufangen und nicht 
Script-Kiddie zu spielen und alles im www. zusammensuchen.

Das Programm hilft Null weil das einzig wichtige (die ganzen Funktionen 
die mit tlc..() anfangen fehlen. Ich bin mir noch nicht sicher, ob du C 
umfassend verstanden hast.

narf schrieb:
> Das takten klappt prima per Timer output des Atmegas, dann ist die CPU
> nur mit Daten reinschieben beschäftigt.

Das sollte er aber eigentlich nicht sein. Der ATMEGA sollte eher vor 
Langeweile sterben...

Nimm dem SPI-Output bei Fosc/4 wie im Dokument oben beschrieben.

narf schrieb:
> Meine 8x8 Matrix läuft mit einem attiny2313 und einem TLC5940 - das Teil
> ist schnell genug um auch noch ein Multiplexing zu machen wenn du keine
> 4096 Helligkeitsabstufungen brauchst. Bei 8x Multiplexing sind das ja
> noch theoretische 512 Stufen.

Das musst du mir jetzt nochmal erklären... Die 2^12 * 16 Bits musst du 
ja so und so reinschreiben. Von daher stehen dir immernoch 2^12=4069 
(zumindes theoretische) Helligkeitsstufen zur Verfügung. Ob du die 
danach noch Multiplext hat ja nur Sekundär mit der Helligkeistabstufung 
zu tun. Ich verstehe nochnicht wie du auf diese Rechnugn 4096 / 8 = 512. 
Meinst du wegen der Anzeigezeiten oder wie ?

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lehrmann Michael schrieb:
> Das ist für Vollidioten
> erster Klasse geschrieben.

Also ich wollte damit nicht sagen, dass du ein Vollidiot bist. Wollte 
nur sagen, dass es damit jeder kann =)

Autor: Jonas H. (fujitsu313)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey,

Wow, danke für die ganzen Infos, wenn ich genug Zeit hab schau ich mir 
die mal in Ruhe an.

@Michael:
Ein Vollidiot bin ich doch irgendwie ;), bin ja neu in der µc-Welt und 
wollte erstmal "klein" mit dem Arduino anfangen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.