mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LED Matrix Max7219 Ansterung funktioniert nicht


Autor: haleluja (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe eine LED-Matrix Schaltung gebastelt und versuche die mit einem 
Attiny 2313 und dem Max7219 anzusteuern.
Leider funktioniert das ganze irgendwie nicht. Im Anhang ist die c datei 
zu finden. dort soll eine spalte leuchten, leider leuchtet aber gar 
nichts. ich hab auch schon den display test mode probiert. das gleiche 
ergebnis.
das flashen scheint aber zu funktionieren. Ich mach das ganze mit dem 
usbprog

avrdude -c avrispv2 -P usb -p t2313 -u -U lfuse:w:0xff:m -U 
hfuse:w:0xdf:m -U flash:w:max7219.hex

Hat jemand ne Idee woran das liegen könnte?
Danke

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die Suche ist dein Freund

z.B. hier:

Beitrag "LED_Laufschrift mit Mega 32 und MAX 7219"

Autor: haleluja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab das bsp was sie dort hatten ausprobiert. leider weiß ich nicht 
was diese fehlermeldungen besagen, bzw. wo die in dem anderen thread 
hergenommen werden. die haben das ja für einen atmega übersetzt, kann 
das sein, dass das für einen tiny nicht geht?

meldungen beim kompilieren:

max7219.c:19: warning: function declaration isn’t a prototype
max7219.c:23: warning: function declaration isn’t a prototype
max7219.c: In function ‘SPI_MasterInit’:
max7219.c:33: error: ‘SPCR’ undeclared (first use in this function)
max7219.c:33: error: (Each undeclared identifier is reported only once
max7219.c:33: error: for each function it appears in.)
max7219.c:33: error: ‘MSTR’ undeclared (first use in this function)
max7219.c:33: error: ‘SPE’ undeclared (first use in this function)
max7219.c:33: error: ‘SPR1’ undeclared (first use in this function)
max7219.c:33: error: ‘SPR0’ undeclared (first use in this function)
max7219.c: In function ‘transmit’:
max7219.c:40: error: ‘SPDR’ undeclared (first use in this function)
max7219.c:41: error: ‘SPSR’ undeclared (first use in this function)
max7219.c:41: error: ‘SPIF’ undeclared (first use in this function)
max7219.c:144:2: warning: "/*" within comment
max7219.c:151:2: warning: "/*" within comment
make: *** [max7219.o] Fehler 1

Autor: haleluja (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ich könnte heulen, es will nicht funktionieren. ich hab schon zig 
varianten ausprobiert. selbst mit anpassung und laut programmierung laut 
datenblatt. es geht einfach nicht. keine variante funktioniert. ich 
hatte das display auch schonmal am leuchten, aber irgendwie war das wohl 
nur zufall. denn ich bekomms auch nicht mehr hin. die variante, die ich 
schon im ersten post habe, sollte eigentlich funktionieren (is nen besp 
von anderen) und ne selbst ne spi mit dem usi von dem attiny 
nachzubilden funktioniert auch nicht :( mist. das bild zeigt meine 
aktuelle schaltung.

Autor: haleluja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
noch ne sache. ich hab f-cpu und delay.h eingebunden. ich hab versucht 
einfach mal ein pin zu toggeln, also
int main() {
 while(1) {
    PORTD &= ~(1<<PD5);

    _delay_ms(1000);
    PORTD |= (1<<PD5);

 }
}

aber das geht irgendwie nicht, pd5 bleibt auf 0. hat jemand ne idee, was 
das nu soll? vllt hängt das mit den problemen zusammen, die ich habe

Autor: Hubert P. (vaterssohn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne mir das Problem im Detail angeschaut zu haben:
Ich hatte mal ein Problem mit dem MAX7221 (auf einem Steckbrett). Nach 
einigen Forumsbeiträgen und stundenlanger Fehlersuche hab ich zufällig 
entdeckt: mit 120nF Block-Kondensator funktionierts, mit 100n nicht!

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Natürlich kannst du eine Programm von einem ATmega32 nicht direkt für 
deinen Tiny benutzen, da die Initialisierung anders ist. Also die 
Register heißen anders usw.

Aber in deinem Programm fehlt die Initialisierung des Tiny komplett.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der Stromlaufplan ist soweit in Ordnung. Die Kondensatoren für den 7219 
müssen so nah wie möglich an die Pins des 7219 ran.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
haleluja wrote:
> Leider funktioniert das ganze irgendwie nicht. Im Anhang ist die c datei
> zu finden. dort soll eine spalte leuchten, leider leuchtet aber gar
> nichts.

Woher soll der arme MAX7219 denn wissen, welches das erste und welches 
das 2. Byte ist?

Schau Dir mal das Taktdiagramm im Datenblatt an.
Immer erst nach 16 Bits die 0->1 Flanke zum Übernehmen, dann weiß der 
MAX Bescheid.


Peter

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also die vorwiderstände für die led´s müssen raus, das macht der max 
intern...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die 0-Ohm Widerstände dienen wohl als Brückenersatz.....

Autor: haleluja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
genau, dass sind alles brücken, also keine vorwiderstände

zudem hab ich schon das mit der LOAD Flanke schon drinne:
nur dass ich in dem oberen code das load 1 und 0 vertauscht habe - ich 
dachte bei fallender flanke übernimmt er
aber selbst mit dem folgenden bsp gehts nicht.

  PORTD &= ~(1<<2); // LOAD 0
  for (loop=0;loop<8;loop++) {
    mask=mask>>1;
    PORTB &= ~(1<<7); // CLK 0
    if (data_out & mask) PORTB |=  (1<<5); // Data 1
      else PORTB &= ~(1<<5); // DATA 0
    PORTB |= (1<<7); // CLK 1
  }
  PORTB &= ~(1<<7); // CLK 0
  PORTD |= (1<<2); // Load 1

den kondensator ist genau vor dem max platziert, genauso wie der elko, 
da muss ich wohl nochmal einen 120nF kaufen und den ausprobieren.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vergiss es, hat damit nichts zu tun....

Autor: haleluja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was soll ich vergessen?

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mein C ist nicht sonderlich zu gebrauchen, bin ASM-Programmierer...

Aber: Du hast eine Schleife, die bis 8 zählt.
Der MAX will aber 16 Datenbits!
Das wurde oben schon irgendwo erwähnt.
Daten werden mit der steigenden Flanke übernommen und LOAD muß vor 
Beginn des Schiebens auf L und nach der letzen L/H-Taktflanke auf H 
gehen.
Verzögerungszeit müßte ich jetzt im Datenblatt kramen.

Ich habe mich nicht durch Deine Schleife durchgekramt. Bau das 
16Bit-Muster in einem INT zusammen , dann LOAD auf L, schiebe alle 16 
Bit raus (Bit15...Bit0) und nach dem letzten Bit wenn CLK auf H ist auch 
LOAD wieder auf H.

Das Diagramm im Datenblatt ist da doch recht eindeutig?

Gruß aus Berlin
Michael

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
den 120nF Kondensator...

Dein Programm stimmt nicht...
Deine SPI wird nicht initialisiert...
Nimm dir mal das Datenblatt vor....

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
haleluja wrote:
> zudem hab ich schon das mit der LOAD Flanke schon drinne:

Lies Dir mal durch, was ich gesagt habe, es ist eine zuviel!!!

Nicht nach 8 Bits, sondern erst nach 16 Bits!


Peter

Autor: haleluja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
moin,
habe jetzt die meisten probleme gelöst, zumindest zeigt er jetzt was an 
- und zwar alle leds gleichzeitig. das ist etwas eigenartig. ich schiebe 
testweise die data_out folge rein. (load signal ist in diesem minimalbsp 
nicht drinne) nun ist es so, dass wenn das erste bit mit 1 erreicht 
wird, auf PB5 korrekt auf 1 geschalten wird, jetzt aber alle anderen 
nachfolgenden stellen auch mit PB5=1 geschalten werden. ich weiß nicht 
woran das liegt, dass er immer wieder data_out & mask>>loop = true 
rausbekommt. die delays sind drinne, damit ich was am pin messen kann. 
sieht irgendjemand nen fehler?

  data_out=0b0001000000000001;
  int i;
  int mask;
  int loop;

  mask=0x8000;

  for (loop=0;loop<16;loop++) {
    for(i=0;i<100;i++){
       _delay_ms(10);
    }
    PORTB &= ~(1<<PB7); // CLK 0

    mask=0x8000;
    if (data_out & mask>>loop) {
      PORTB |= (1<<PB5); // Data 1
    } else {
      PORTB &= ~(1<<PB5); // DATA 0
    }

    for(i=0;i<100;i++){
      _delay_ms(10);
    }
    PORTB |= (1<<PB7); // CLK 1
  }

Autor: Udo S. (udo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

sag mal, du hast den 7219 doch an die SPI-Schnittstelle angeschlossen.
Wieso nutzt du die denn nicht?

Gruß
Udo

Autor: haleluja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin, also fuktioniert soweit alles, kann alle möglichen 
selbstgeschriebenen zeichen ausgeben. ein paar probleme gibt immernoch, 
denn wenn ich zeichen nacheinander ausgeben will, bleibt das erste 
zeichen stehen ohne dass sich was ändert. ist etwas eigenartig. kann 
aber damit zusammenhängen, dass es zu einem sram speicherüberlauf kommt 
(wegen array operationen für anzuzeigende leds).

ich wollte nur noch der vollständigkeit halber nen status bericht geben. 
ich bin noch dran, auch diese probleme zu beheben.

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.