Forum: Mikrocontroller und Digitale Elektronik max7219 ansteuern mit Atmel 89C5131A( in Assembler)


von Kubi Ö. (kubilay)


Angehängte Dateien:

Lesenswert?

Hallo,

ich wollte um Hilfe bitten. Ich mache ein Schulprojekt indem ich 
LEDs(max7219) mit dem Mikrocontroller(Atmel 89C5131A) verbinde. Ich 
wollte verschieden Muster ausgeben mit den LEDs, jedoch habe ich nicht 
viel wissen darüber wie ich ihn ansteuern kann. Es sollte ein Assembler 
Code sein. Ich bitte nicht um ein ganzes Projekt oder ähnliches sondern 
wollte fragen, ob mit jemand zeigen könnte wie ich z.B. einen Pin 
ansteuern könnte oder eine Zeile damit ich weis wie ich vorgehen muss.
Ich weis nicht ob es relevant ist aber ich habe folgendes verbunden:

- CLK --> P2.0
- DIN --> P2.1
- CS --> P2.2

dann noch VCC an 5V und GND an 0V.
Es leuchten immer alle LEDs rot.
(include datei c51rd2)
Ich würde mich über eine kleine Hilfestellung freuen.

von Tom (Gast)


Lesenswert?

Wenn ich das Datenblatt [1] richtig lese, ist es wie bei anderen 8051: 
Es gibt keine Umschaltung der Datenrichtung am Port.
Man schreibt eine '0' und der Ausgang wird auf 0V geschaltet.
Wenn man eine '1' schreibt, ist der schwache Pullup aktiv.

Unter [2] gibt es eine deutschsprachige Einführung in die 
8051-Programmierung.

Mit den folgenden Befehlen sollten sich die Pins manipulieren lassen:
[asm]
clr P2.1
cpl P2.0
setb P2.2
[/asm]

Um den MAX7219 anzusteuern müssen jetzt die richtigen Steuersequenzen 
ausgegeben werden.

[1] http://ww1.microchip.com/downloads/en/DeviceDoc/doc4337.pdf
[2] 
https://web.archive.org/web/20170817150719fw_/http://www1.hft-leipzig.de/buchmann/microcontroller/index.htm

von H.Joachim S. (crazyhorse)


Lesenswert?

Sinnvollerweise solltest du die vorhandene on-chip-SPI nehmen. Heisst 
aber umverdrahten auf die entsprechenden Pins.
Kann man zwar auch mit Pinwackeln machen, muss man aber nicht.

von Bernhard S. (b_spitzer)


Lesenswert?

Im Datenblatt auf Seite 6 und 7 stehen die relevanten Angaben.
Es werden 16 Bit seriell nacheinander übertragen. Die ersten 4 Bit sind 
uninteressant, dann 4 Bit Adresse, dann 8 Bit Daten. Die Adressen stehen 
in Tabelle 2. Adresse 0 ist unbelegt, also muss hier ein Wert ungleich 0 
stehen.
Register 12 ist das Shutdown-Register. Wenn da nach Reset eine 0 drin 
steht, dann macht der Chip außen gar nichts. Also wäre der erste Test, 
da mal den Wert 00000001b rein zu schieben.
Danach in die Adresse 1 irgend einen beliebigen Wert, dann sollten die 
ersten 8 LEDs was anzeigen.
Fange ruhig mit "Bit-Banging" an. Den SPI-Bus des 5131 kannst du später 
noch untersuchen.
Für die Übertragung von 16 Bit macht man sinnvollerweise 2 kleine 
Schleifen für je 8 Bit. Der Akku hält die zu sendenden Daten, da hier 
MSB zuerst gesendet wird, rotiert der Akku nach links durch das 
Carry-Bit.
1
Init:   setb P2.2
2
        clr  P2.0   ; Takt auf 0
3
Sende16Bit:
4
        mov a, #12  ; Register 12 
5
        mov R0, #8  ; Schleife 8x durchlaufen
6
        clr P2.2    ; /CS auf 0, Baustein aktivieren
7
Schleife1:
8
        rlc a       ; oberstes Bit aus dem Akku in C
9
        mov P2.1, c ; und als Daten ausgeben
10
        setb P2.0   ; Ein Taktimpuls erzeugen
11
        clr  P2.0
12
        djnz R0, Schleife1 ; Schleife 8 mal, Akkuinhalt rausschieben
13
14
; jetzt kommen 8 Bit Daten, hier 01h zur Aktivierung
15
        mov a, #00000001b 
16
        mov R0, #8  ; Schleife 8x durchlaufen
17
Schleife2:
18
        rlc a       ; oberstes Bit aus dem Akku in C
19
        mov P2.1, c ; und als Daten ausgeben
20
        setb P2.0   ; Ein Taktimpuls erzeugen
21
        clr  P2.0
22
        djnz R2, Schleife2 ; Schleife 8 mal, Akkuinhalt rausschieben
23
24
        setb P2.2  ; /CS auf 1, Baustein deaktivieren

Das ganze kannst du jetzt Quick'n'Dirty ein paar mal hintereinander 
kopieren oder an der Stelle, wo der Akku seinen Inhalt bekommt z.B. R7 
für die Adresse und R6 für die Daten nutzen (z.B. mov a, R7). Dann 
kannst du daraus ein Unterprogramm mit 2 Parametern machen, die man vor 
dem Aufruf in R7 (z.B. mov R7, #12) und R6 setzen muss.

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.