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

END

Weet je al wel zeker dat de hardware werkt? (anders wordt het lastig)

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

@ 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. :)

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 500

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.

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!!!

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! :)