Led Matrix en PIC16F628A


De MAX7219 heeft een SPI interface (ook serieel). Leds kun je zonder driver aansluiten. Wat beter plaatje:

http://www.talkingelectronics.com/projects/Running%20Display/images/8x8DisplayPinout-2.gif

Het aansturen van de leds en de stroombronnen verzorgt 't ic allemaal, je hoeft alleen te vertellen wat er wel/niet aan moet...
Voor een paar euro heb je een complete print met 8x8 led matrix en 7219 erop: https://www.banggood.com/MAX7219-Dot-Matrix-Module-8x8-LED-D...rehouse=CN

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Op 23 september 2019 23:23:55 schreef Arco:
Makkelijkst is iets als een MAX7219: (voor direct aansturen heeft de 628a te weinig pinnen)

Met de twee 8-bits poorten (RA/RB) van de 628A (let op, RA4 is open collector output, en RA5/MCLR is enkel input) zou het te doen zijn met een 5x7 dotmatrix display, alhoewel je dan nog steeds column/row drivers nodig hebt (bvb. UDN2981/ULN2008) voor de aansturing van de LEDs vermits de maximum stroom per uitgang van een PIC slechts ca. 20mA bedraagt.

Met een 74238 multiplexer maak je met 3 uitgangen van de PIC 8 uitgangen naar een 8x8 dotmatrix zodat het met het beperkt aantal poorten van een 628A toch nog lukt (3+8+CLK+DIN = 13 I/O's), of zelfs 2x 74238 (3+3+CLK+DIN = 8 I/O's).
Je hebt wel nog steeds column/row drivers nodig (UDN/ULN), het is maar wat je wenst of liggen hebt.

Zoals Arco zegt blijft het het eenvoudigst met een MAX7219 (slechts 3 I/O's en géén row/column drivers benodigd, zelfs voor meerdere 8x8 dotmatrix displays).
Voor meerdere displays één MAX7219 per display, en DOUT van de vorige MAX7219 naar DIN van de volgende (de CLK ingangen allemaal parallel).

I love watching conspiracy theorists use the airtight logic of the argument from incredulity: "Well I don't understand how it works so it can't be real!!!"

Op 24 september 2019 14:08:39 schreef Bavelt:
€ 0,75...

Let op: In dit geval lijkt dat inderdaad de prijs te zijn, maar soms dan verstoppen ze de helft van de artikelprijs in de verzendkosten. De prijs die je moet betalen loopt op met een belangrijk deel van de prijs van je artikel. Maar hier is ie inderdaad gewoon 83ct voor 1-5 stuks, daarboven 2.93 voor "standard shipping" (met tracking).

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
buckfast_beekeeper

Golden Member

Honing kan je importeren, bestuiving niet.

Het zijn vaak bedragen waarbij je denkt dit kan toch niet helemaal waar zijn.
Ik heb wel eens iets gekocht voor € 0,82, inclusief bezorgkosten, waarbij er nog een PostNL autotootje voor de deur het kwam afleveren.

Maar tot nu toe heb ik nooit kapotte dingen of zo ontvangen.
Zo werken alle TTL IC's waarmee ik een tijd heb lopen spelen allemaal.

Daarbij vraag ik me af: dezelfde dingen kun je hier in de reguliere hobbywinkel kopen. Maar ook dat spul komt vaak uit China, Taiwan, HongKong, etc. De lage lonen landen dus.
En al helemaal de webwinkels, waarvan ik wel eens denk die kopen de spullen ook bij Alie en verkopen het hier voor een factor 4 a 5.
Met wel als grote voordeel dat je snelle levertijden hebt, vaak binnen één dag.
Alhoewel 'Alie' ook sneller lijkt te worden.

Op 24 september 2019 03:05:28 schreef Arco:
je hoeft alleen te vertellen wat er wel/niet aan moet...

Dat wordt dan weer puzzelen vanuit PICBasic.

Ik zie zoveel voorbeelden die op de Arduino zijn geënt en C (of C#) als programmeertaal. Soms voel ik me als een Windows-mobile gebruiker onder het Android en IOS geweld...

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Deze had ik inderdaad niet gezien, Arco.
Maar als je op internet speurt is het wel veel Arduino en C vind ik zelf.

Dit topic gaat over 7-segment aansturing door een MAX7219 (heb er inmiddels al eentje besteld hier in Nederland, die krijg ik morgen).

Ik moet nu nog de vertaalslag maken van 7-segment naar een Matrix led 8*8.

buckfast_beekeeper

Golden Member

Welke ledjes er moeten oplichten haal je eenvoudig uit een datasheet van een LCD display. Hoef je niet alles zelf uit te tekenen. Je zal dan een lijstje moeten maken wat je vast in het geheugen zet.

Honing kan je importeren, bestuiving niet.

Op 24 september 2019 19:03:20 schreef buckfast_beekeeper:
Welke ledjes er moeten oplichten haal je eenvoudig uit een datasheet van een LCD display. Hoef je niet alles zelf uit te tekenen. Je zal dan een lijstje moeten maken wat je vast in het geheugen zet.

Ik heb een led matrix 8*8 en wilde een aantal cijfers laten tonen en een paar karakters, bv a, b en c
Gewoon om te leren hoe je de ledjes kunt laten branden in de matrix vanuit het (PICbasic) programma.

Een hele avond lopen speuren, maar nergens een voorbeeldje kunnen vinden hoe je in PICBasic een ledje kunt laten branden op een led matrix 8*8 (via Max7219)

Wie o wie heeft een voorbeeldje?

[Bericht gewijzigd door Bavelt op 25 september 2019 00:36:28 (75%)]

Op 24 september 2019 15:10:27 schreef Bavelt:
[...]
Soms voel ik me als een Windows-mobile gebruiker onder het Android en IOS geweld...

Door het succes van Arduino bestaan er idd veel meer programma's die je kunt knippen en plakken, maar het blijft een evengrote uitdaging als je zelf iets wilt ontwikkelen met een Arduino.

Als je altijd maar van de ene naar de andere toepassing springt die je niet werkend krijgt door de hoge moeilijkheidsgraad dan zal het niet lang duren voor de boel in het onderste schuif belandt.

Maak iets eenvoudiger en programmeer het zelf zonder copy/paste, je zult er veel meer plezier aan beleven en gaandeweg programma's kunnen lezen die veel moeilijker zijn.
Blijf ook bij een paar vaste controllers die je na een tijdje beter zult kennen omdat je dan regelmatig in hun datasheet zult moet lezen.

En al eens de zoekfunctie gebruikt van dit forum? hier is wel wat te vinden maar iets specifiek die aan al uw wensen voldoet zul je nergens vinden.

LDmicro user.

Je hebt wel een punt, MGP.

Bij mij is het zo gegaan: ik pakte mijn oude elektronica hobby na vele jaren weer op.
Dan ondervind je dat dat deze wereld behoorlijk is veranderd. Technische realisaties worden nu veel opgelost met microprocessors.
Ok, dan daar maar eens naar kijken. Ik heb gekozen voor de PICBasic cursus, temeer omdat ik veel heb gewerkt in Visual Basic.NET voor PC-toepassingen. Redelijk herkenbaar voor mij.
Met C of C# heb ik nooit wat gehad.

Ik wilde inderdaad ook bij één processor blijven, de PIC16F628A omdat deze ook in de cursus werd behandeld.
En dan inderdaad een paar simpele toepassingen maken. Ledje knipperen, geluidje maken, etc.
Als ras merk je dat deze uC al mer dan 20 jaar oud is en zijn beperkingen kent (zoals I2C ondersteuning).
Daarom nu naast de 628 ook de 1826 besteld.

Hetgeen ik nu wilde proberen is iets wat in mijn ogen ook vrij simpel klinkt; een cijfer of karakter op een Led Matrix zichtbaar maken.
Het is niet de bedoeling dat ik ga zitten knippen en plakken, maar een voorbeeldprogrammaatje is voor mij genoeg om een 'zetje' te krijgen.
Waarbij de datasheet ook meer begrijpelijk wordt.
En dat het heel veel uitzoekwerk, vallen en opstaan voor me betekent, is all in the game. Ik ben er vrijwel continu mee bezig.

Op 25 september 2019 10:39:40 schreef Bavelt:
Als ras merk je dat deze uC al mer dan 20 jaar oud is en zijn beperkingen kent (zoals I2C ondersteuning).
Daarom nu naast de 628 ook de 1826 besteld.

Laat mij duidelijk zijn, ik ben absoluut geen tegenstander van nieuwe controllers, integendeel maar dat vereist toch wel wat ervaring in programmeren en de datasheets uitpluizen, maw een beetje onafhankelijkheid ;)

En ik zal er verder maar over ophouden om uw enthousiasme niet te fnuiken.

LDmicro user.

Het voorbeeld uit mijn link is wel voor 7 segment, maar werkt ook met een matrix.
Alleen wat je ziet op het display zal wat irrationeel zijn, omdat de data voor 7 segment is, dat moet je aanpassen in wat je zien wilt...

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Ik hoop vandaag mijn MAX7219 Met Led Matrix te ontvangen en ga er meteen mee aan de slag!

Nou, na een avondje of twee is het gelukt om de Matrix Led met de MAX7219 aan te sturen vanuit PICBASIC!
Ik kan nu iedere willekeurige led aan of uitzetten.

Zo zien we het graag...

En ga je uw kennis niet delen met anderen? ik denk dat je nu of in de toekomst wel een paar mensen gelukkig kunt maken.

LDmicro user.

Was ik inderdaad van plan!
Ik speel nog wat met ledjes, karakters tonen, etc en dan plaats ik het hier.

Zo kan ik ook een keer mijn bijdrage leveren na de vele input die ik kreeg.

NB Moet ik daar een apart topic van maken of kan dat gewoon hier?

[Bericht gewijzigd door Bavelt op 27 september 2019 12:20:07 (16%)]

Het is uw topic, dan kan je doen wat je wilt ;) en het is beter van dat hier te houden omdat de titel daar perfect bij past.

LDmicro user.

Ok,
Voor degene die begint met een LED Matrix van 8 * 8, voorzien van MAX7219 driver en aangestuurd vanuit PICBASIC met de PIC16F628A als microcontroller, hierbij een voorbeeldprogramma.

Het programma toont wat testresultaten. Het is op zich redelijk beperkt, maar kan een hulp zijn om te beginnen.

pic basic code:

;************************************
;*  Naam    : Test LED Matrix 8*8   *
;*  Auteur  : Bavelt                *
;*  Datum   : 27-09-2019            *
;************************************

DEVICE 16F628A                      ;PIC 16F628A Microcontroller
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL True                    ;Alle ingangen digitaal
DECLARE XTAL 4

SYMBOL ClockPin = PORTB.1           ;Poort B.1 is de Clock
SYMBOL latch    = PORTB.2           ;Poort B.2 is de latch
SYMBOL DataPin  = PORTB.3           ;Poort B.3 is de Datapin

;        76543210
PORTA = %00000000
PORTB = %00000000             
TRISA = %11111111             
TRISB = %11110001

DIM Kolom   AS BYTE                 ;Hiermee wordt de kolom (digit) van de matrix geselecteerd 
DIM Inhoud  AS BYTE                 ;De inhoud van de kolom, ieder '1' laat een ledje branden op de betreffende positie

CLEAR                               ;Wis alle RAM geheugen 

DIM Kar_Tabel[8] AS BYTE
Kar_Tabel [0] = $00                 ;Dit zijn de kolomwaarden voor het karaker "A"
Kar_Tabel [1] = $7F                 ;Bijvoorbeeld $7F = %01111111, alle LEDS aan behalve de eerste
Kar_Tabel [2] = $88                 ;De complete tabel van de karakterset zou in een EEPROM kunnen worden opgeslagen
Kar_Tabel [3] = $88
Kar_Tabel [4] = $88
Kar_Tabel [5] = $7F
Kar_Tabel [6] = $00
Kar_Tabel [7] = $00
                                                                    
START:

GOSUB Max7219_Init  
GOSUB Display_Testen
GOSUB Uitzetten_Leds
GOSUB Binair_Tellen
GOSUB Binair_Terugtellen
GOSUB Karakter_Tonen

GOTO Einde

;******************************
;Hieronder staan de subroutines
Display_Testen:                     ;Testen van het display; alle LEDS aan
Kolom = $0F                       
Inhoud = $01                       
GOSUB Max_Write
DELAYMS 1000
Kolom = $0F                       
Inhoud = $00                       
GOSUB Max_Write
DELAYMS 200
RETURN

Uitzetten_Leds:                     ;Weer uitzetten van de LEDS
DIM i1 AS BYTE
i1 = 0
FOR i1 = 1 TO 8
  Kolom = i1
  Inhoud = %00000000
  GOSUB Max_Write
NEXT
RETURN

Binair_Tellen:                      ;Binair tellen, wordt getoond in de kolommen
FOR Kolom = 1 TO 8
  FOR Inhoud = 1 TO 255
      GOSUB Max_Write
      DELAYMS 30
  NEXT
NEXT
RETURN

Binair_Terugtellen:                 ;Binair terugtellen
FOR Kolom = 8 TO 1 STEP -1
  FOR Inhoud = 255 TO 0  STEP -1
      GOSUB Max_Write
      DELAYMS 30
  NEXT
NEXT
RETURN
    
                                    
Karakter_Tonen:                     ;Toon het karakter A
DIM Ind AS BYTE                     ;Later uitbreiden
FOR Kolom = 1 TO 8
  latch = 0
  SHOUT DataPin, ClockPin, MSBFIRST, [Kolom \ 8, Kar_Tabel [Kolom - 1]] 
  latch = 1  
NEXT
RETURN

Max_Write:

latch = 0
SHOUT DataPin, ClockPin, MSBFIRST, [Kolom \ 8, Inhoud \ 8] 
latch = 1
RETURN

Max7219_Init:                       ;Hier worden de registers geïnitialiseerd
Kolom = $09                         ;Decode Mode Register:
Inhoud = $00                        ;Code B for digits
GOSUB Max_Write                   

Kolom = $0B                         ;Scan-Limit Register:
Inhoud = $07                        ;Digit 0,1,2,3,4,5,6,7 ($00-$07)
GOSUB Max_Write

Kolom = $0C                         ;Shutdown Register:
Inhoud = $01 
GOSUB Max_Write
  
Kolom = $0A                         ;Intensity Register
Inhoud = $00                       
GOSUB Max_Write
RETURN

Einde:                              ;Einde Programma
END 

Mooi, netjes gemaakt, je bent al redelijk ver gevorderd volgens zien. _/-\o_

edit: als bonus heb ik het programma met de DS3231 wat opgeschoond maar ik kan het niet proberen en er zullen waarschijnlijk nog wel opbouwfouten instaan maar dat zul jij wel uitpluizen.
Alle compilerfouten zijn weg, nu aan u en lees zeer goed de commentaren die erbij staan hoe je de routines moet gebruiken.
Als je vragen of aanvullingen hebt maak aub een nieuw topic zodat het later makkelijker terug te vinden is.

LDmicro user.

Dank je,

Als ik met de LED Matrix ben 'uitgespeeld'(Er zijn nog wat dingen die ik verder wil uitdiepen, zoals geheugenopslag en een betere manier om met Arrays om te gaan), dan ga ik graag verder met de DS3231.
Een uitdaging. Ik zal me zeker melden.