mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Kubi Ö. (kubilay)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: H.Joachim S. (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernhard S. (b_spitzer)
Datum:

Bewertung
0 lesenswert
nicht 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.
Init:   setb P2.2
        clr  P2.0   ; Takt auf 0
Sende16Bit:
        mov a, #12  ; Register 12 
        mov R0, #8  ; Schleife 8x durchlaufen
        clr P2.2    ; /CS auf 0, Baustein aktivieren
Schleife1:
        rlc a       ; oberstes Bit aus dem Akku in C
        mov P2.1, c ; und als Daten ausgeben
        setb P2.0   ; Ein Taktimpuls erzeugen
        clr  P2.0
        djnz R0, Schleife1 ; Schleife 8 mal, Akkuinhalt rausschieben

; jetzt kommen 8 Bit Daten, hier 01h zur Aktivierung
        mov a, #00000001b 
        mov R0, #8  ; Schleife 8x durchlaufen
Schleife2:
        rlc a       ; oberstes Bit aus dem Akku in C
        mov P2.1, c ; und als Daten ausgeben
        setb P2.0   ; Ein Taktimpuls erzeugen
        clr  P2.0
        djnz R2, Schleife2 ; Schleife 8 mal, Akkuinhalt rausschieben

        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.

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.