Forum: Mikrocontroller und Digitale Elektronik Max7221 Bascom Mega8, 7-Segmentanz will nicht leuchten


von Steve B. (stevensen)


Lesenswert?

Hallo,

mit einem Mega8 mit 8Mhz und einem Max7221 und Bascom, möchte ich 
erstmal eine 7-Segment-Anzeige zum Laufen bringen. Natürlich leuchtet 
sie nicht. :(
Ich habe die Segmente an den Segmentausgänge des Max7221 angeschlossen.
Die Pins des Mega8 wie folgt:
Pinb 2 (SS low) --> LOAD 12 (CS low) vom Max7221
Pinb 3 (MOSI) --> DIN 1 (Data in ) vom Max7221
Pinb 5 (SCK) --> CLK 13 (CLK) vom Max7221

Die Pins des Mega8 sind die Hardware SPI des Mega 8. nun dachte ich daß, 
das alles über SPI laufen müßte. hier mal der Code:


$regfile = "M8def.dat"                                      '
$crystal = 8000000                                          '8MHz 
crystal

Dim Wert(2) As Byte

Config Portb = Output
'Config Spi = Soft , Din = Pinb.4 , Dout = Portb.3 , Ss = Portb.2 , 
Clock = Portb.5
Config Spi = Hard , Data Order = Lsb , Master = Yes , Polarity = High , 
Phase = 0 , Clockrate = 128 , Noss = 0

Enable Interrupts

Spiinit


'Testmode off
Wert(1) = &H0F
Wert(2) = &H0
Spiout Wert(1) , 2 'ausgabge 16-Bit Wert

'Decode off
Wert(1) = &H09
Wert(2) = &H00
Spiout Wert(1) , 2

'8 Digits
Wert(1) = &H0B
Wert(2) = &H07
Spiout Wert(1) , 2

'Display on
Wert(1) = &H0C
Wert(2) = &H01
Spiout Wert(1) , 2

'Brightness
Wert(1) = &H0A
Wert(2) = &H07
Spiout Wert(1) , 2

Do

Wert(1) = &H01
Wert(2) = &H08
Spiout Wert(1) , 2

Loop

End

Es tut sich gar nichts. Müßte man nicht wenigstens den Displaytest 
sehen, also alle Segemnt an. Irgendwie schein SPI generell bei nicht zu 
klappen.
Wäre sehr froh über jeden Tipp.

von Matthias L. (Gast)


Lesenswert?

Kommt denn was raus aus der spi-schnittstelle? also an den pins?

von TIMER_MAN (Gast)


Lesenswert?

Ich habe was über MAX7921
gefunden in bascom wenn dir das reicht.
sage bescheid.

von TIMER_MAN (Gast)


Lesenswert?

7219 meine ich FG

von Steve B. (stevensen)


Lesenswert?

Danke für eure Antworten

@MAtthias L
Ich habe gerade mit nem Ozzi nach geschaut, also bei CLK bzw. Sck ist 
der Takt 200 KHz. CS Low und die Datenbyte liegen am Max7221 an. ist die 
Frage ob ich die richtigen Daten schreibe.


@Timer Man
Der Max7219 ist nicht SPI-Kompatibel, ich habe aber auch für den Typ 
verschiedene Programme gesucht und gefunden. Aber vielleicht kenn ich 
deinen Code nicht. Wenns dir nicht ausmacht kannst du ihn ja mal posten.


Aber wie ist das? wenn ich &H0F01 sende sollten doch der Displaytest 
eingeschaltet werden, und dann alle Segment leuchten? Oder seh ich 
falsch?

von Daniel S. (longshine)


Lesenswert?

Tut mir leid, dass ich diesen alten Thread den ich über die Suche nach 
MAX7219+SPI gefunden habe nochmal raushole. aber ich habe den Fehler 
gefunden und wollte das hier korregieren. oder hast du ihn noch selber 
gefunden stevensen?

im Datenblatt steht am Ende von Serial-Addressing Modes:
"D0–D7 contain the data, and D12–D15 are “don’t care” bits. The first 
received is D15, the most significant bit (MSB)."

also muss in der Config "Data Order = Msb" stehen...
also "Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = 
High , Phase = 0 , Clockrate = 128 , Noss = 0".
mit genau deinem Code und der geänderten Config läuft bei mir jetzt ein 
MAX7219 an Hardware-SPI - obwohl er ja nicht ganz SPI-kompatibel sein 
soll. nur wie man die Dinger jetzt kaskadieren kann ist mir noch ein 
Rätzel.

von Peter D. (peda)


Lesenswert?

Daniel S. schrieb:
> MAX7219 an Hardware-SPI - obwohl er ja nicht ganz SPI-kompatibel sein
> soll.

Das wird komischer Weise sehr oft kolportiert, ist aber falsch.
Code für den MAX7221 läuft in jedem Fall auch mit dem MAX7219.

Daniel S. schrieb:
> nur wie man die Dinger jetzt kaskadieren kann ist mir noch ein
> Rätzel.

Ganz einfach, Du sendest immer soviel 16Bit-Worte, wie MAX7221 
kaskadiert sind. Z.B. bei 3 Stück: 3 Worte, d.h. 6 Byte.

Beim Init sind die 3 Worte gleich und beim Anzeigen jedes 2. Byte die 
jeweilige Ziffer.
Am besten legt man sich einen Ziffernpuffer an, also bei 3 Stück dann 24 
Byte groß.


Peter

von Daniel S. (longshine)


Lesenswert?

Peter Dannegger schrieb:

> Das wird komischer Weise sehr oft kolportiert, ist aber falsch.

wie kommst du denn darauf? dem Datenblatt entnehme ich:

> MAX7219/MAX7221 Differences
> The MAX7219 and MAX7221 are identical except for
> two parameters: the MAX7221 segment drivers are
> slew-rate limited to reduce electromagnetic interference
> (EMI), and its serial interface is fully SPI compatible.

daraus schließe ich doch, dass der MAX7219 nicht "voll SPI kompatibel" 
ist. oder wie verstehst du das?

> Ganz einfach, Du sendest immer soviel 16Bit-Worte, wie MAX7221
> kaskadiert sind. Z.B. bei 3 Stück: 3 Worte, d.h. 6 Byte.
>
> Beim Init sind die 3 Worte gleich und beim Anzeigen jedes 2. Byte die
> jeweilige Ziffer.
> Am besten legt man sich einen Ziffernpuffer an, also bei 3 Stück dann 24
> Byte groß.
>
>
> Peter

danke dir, jetzt funktioniert des auch...

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
Noch kein Account? Hier anmelden.