Tinus016
www.tinuselectronics.nl Because DIY Electronics Matters!!!!
Goedenavond mede CO'ers
Ik had in China displays besteld met een 8 tal 7-segments displays, die bestuurd kunnen worden via een MAX7219. Het wil alleen niet lukken het werkend te krijgen.
Met de zoek functie van deze site al de helle middag en avond in de weer geweest om verder te komen maar nog niets gevonden.
Vast is het een of ander klein foutje waar ik door alle wanhoop overheen kijk.
Wie helpt me uit de brand?
al vast bedankt!
mijn code:
;****************************************************************
;* Name : *
;* Author : Tinus de Boer *
;* Notice : Copyright (c) 2013 TinusElectronics *
;* : All Rights Reserved *
;* Date : 15:48 11/7/2013 *
;* Version : 1.0 *
;* Notes : *
;* : *
;****************************************************************
DEVICE 16F628A ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal
SYMBOL ClockPin = PORTB.1 ;Poort B.1
SYMBOL latch = PORTB.2 ;Poort B.2
SYMBOL DataPin = PORTB.3 ;Poort B.3
; 76543210
PORTA = %00000000
PORTB = %00000000
TRISA = %11111111
TRISB = %11110001
DIM Address AS BYTE ;variable address for display
DIM Datareg AS BYTE ;variable data register for display
DIM BD1 AS BYTE ;
CLEAR ;Wis alle RAM geheugen
GOTO Main
;****************************************************************
Max7219_Init:
Address = $0C ;Shutdown Register:
Datareg = $01 ;Normal Operation
GOSUB Max_Write
Address = $09 ;Decode Mode Register:
Datareg = $FF ;Code B for digits
GOSUB Max_Write
Address = $0A ;Intensity Register
Datareg = $0F ;Highest Intensity
GOSUB Max_Write
Address = $0B ;Scan-Limit Register:
Datareg = $07 ;Digit 0,1,2,3,4,5,6,7 ($00-$07)
GOSUB Max_Write
Address = $0F ;Display-Test Register:
Datareg = $00 ;Normal Operation
GOSUB Max_Write
GOTO Verder
;****************************************************************
Max_Write:
latch = 1
SHOUT DataPin, ClockPin, MSBFIRST, [Address \ 8, Datareg \ 8]
latch = 0
RETURN
;****************************************************************
Main:
DELAYMS 1000
GOSUB Max7219_Init
Verder:
FOR BD1 = 1 TO 8
DELAYMS 500
Address = BD1
;76543210
Datareg = %00000000
GOSUB Max_Write
NEXT
ENDArco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Fuzzbass
Mijn echte naam: Joris | Mijn elektronica website: Fuzzcraft.com
Je moet de latch pas een puls geven nadat je de data hebt ingeklokt, denk ik.
SHOUT DataPin, ClockPin, MSBFIRST, [Address \ 8, Datareg \ 8]
latch = 1
latch = 0
Tinus016
www.tinuselectronics.nl Because DIY Electronics Matters!!!!
@ Arco, Ja dat is afwachten het blijft China spul....
@ Fuzzbass, Ja nou daar zit de pijn..... Ik had even niet goed in de datasheet gekeken. Je moet deze eerst laag maken dan data er in schuiven en dan weer hoog maken. Niet anders om... Stom!
hier kan ik morgen weer mee verder.
Morgen dus meer. 
Sjoerd Kreyns
Golden Member
SMD weerstandjes zoeken in grijze vloerbedekking is ook een uitdaging ... 8*1=255 ... Het nadeel van ruimte: Als je het hebt, staat het binnen de kortste keren weer vol.
Nog een dingetje:
Je schrijft GOSUB Max7219_Init: maar je hebt geen return onder die subroutine, maar een GOTO verder
Max7219_Init:
...
...
...
GOTO Verder
;****************************************************************
Max_Write:
latch = 1
SHOUT DataPin, ClockPin, MSBFIRST, [Address \ 8, Datareg \ 8]
latch = 0
RETURN
;****************************************************************
Main:
DELAYMS 1000
GOSUB Max7219_Init
Verder:
FOR BD1 = 1 TO 8
DELAYMS 500Roland van Leusden
It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.
Vast is het een of ander klein foutje waar ik door alle wanhoop overheen kijk.
http://www.circuitsonline.net/forum/view/103770/1/
http://www.circuitsonline.net/forum/view/85013/1/max7219?query=max7219…
Kortom ik zou in ieder geval een "echte" MAX7219 aanschaffen via farnell bv om je code te testen.
Tinus016
www.tinuselectronics.nl Because DIY Electronics Matters!!!!
Puntje's zijn aangepast. het werkt wel maar af en toe licht er illegaal een segment op. Ook zijn bij opstarten niet alle segmenten uit. Ik heb de topics naar waar Ronald naar verwijst gelezen en ik blijk ook fakes te hebben. Het was ook dan wel te mooi om waar te zijn voor die prijs, achter af dan. Ik wist niet dat ze zo duur waren.
Probleem opgelost
Om meer problemen te voor komen dit is de verkoper op Ebay: alice1101983
Bedankt voor de hulp allen!!!
Tinus016
www.tinuselectronics.nl Because DIY Electronics Matters!!!!
Ik heb het toch voor elkaar hij werkt! het probleem is er alleen als je te snel het getoonde beeld wilt verversen.
Mijn code is nu:
;****************************************************************
;* Name : *
;* Author : Tinus de Boer *
;* Notice : Copyright (c) 2013 TinusElectronics *
;* : All Rights Reserved *
;* Date : 15:48 11/7/2013 *
;* Version : 1.0 *
;* Notes : *
;* : *
;****************************************************************
Device 16F628A ;Gebruik een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL True ;Alle ingangen digitaal
Symbol ClockPin = PORTB.1 ;Poort B.1
Symbol latch = PORTB.2 ;Poort B.2
Symbol DataPin = PORTB.3 ;Poort B.3
; 76543210
PORTA = %00000000
PORTB = %00000000
TRISA = %11111111
TRISB = %11110001
Dim Address As Byte ;variable address for display
Dim Datareg As Byte ;variable data register for display
Dim BD1 As Byte ;
Dim BD2 As Byte ;
Clear ;Wis alle RAM geheugen
GoTo Main
;****************************************************************
Max7219_Init:
Address = $0C ;Shutdown Register:
Datareg = $01 ;Normal Operation
GoSub Max_Write
Address = $09 ;Decode Mode Register:
Datareg = $FF ;Code B for digits
GoSub Max_Write
Address = $0A ;Intensity Register
Datareg = $04 ;Highest Intensity
GoSub Max_Write
Address = $0B ;Scan-Limit Register:
Datareg = $07 ;Digit 0,1,2,3,4,5,6,7 ($00-$07)
GoSub Max_Write
Address = $0F ;Display-Test Register:
Datareg = $00 ;Normal Operation
GoSub Max_Write
For BD1 = 1 To 8
Address = BD1
Datareg = 10
GoSub Max_Write
Next
Return
;****************************************************************
Max_Write:
latch = 0
SHOut DataPin, ClockPin, msbfirst, [Address \ 8, Datareg \ 8]
latch = 1
Return
;****************************************************************
Main:
GoSub Max7219_Init
DelayMS 100
While 1 = 1
For BD2 = 0 To 9
For BD1 = 1 To 8
Address = BD1
Datareg = BD2
GoSub Max_Write
Next
DelayMS 1000
Next
Wend
End@Mods, ik heb even de gehele code gepost, want het viel me op dat er niet heel veel code in pic basic voor een MAX7219 op het forum staat.
@All, Als je de ververs tijd sneller dan 100mS zet dan gaat het fout. Dus doe er je voordeel mee! 