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.
Gast
#5418846
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
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.
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
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
Bitte melde dich an, um einen Beitrag zu schreiben.