ciao, ciro
allora ti allego uno codice completo con le subroutine necessarie per gestire il controller
m5450 che ho scritto ed utilizzato in molti miei progetti.
Il tuo codice non avrebbe potuto funzionare poichè ci sono molti errori sulla gestione del timing.
- Code: Select all
'-----[ gestione M5450 by Giovanni De Luca - INFN-LNS ]--------------------------------------
$regfile = "8515DEF.DAT"
$crystal = 8000000
$hwstack = 64
$swstack = 16
$framesize = 50
Declare Sub Reset_m5450_d
Declare Sub Write_m5450_d
Declare Sub Bit_start_d
Ddrb.0 = 1 'DOUT 5450
Ddrb.1 = 1 'CLOCK 5450
Dout1 Alias Portb.0
Ck1 Alias Portb.1
' enbl a gnd
Dim Y(4) As Byte 'valori da inviare al display
Dim X As Byte
'-------------------------------------------------------------------------------
Do
'qui scrivi il tuo codice main
'assegna a Y[] i tuoi valori
Loop
'-------------------------------------------------------------------------------
End
'-------------------------[ write segmenti su display ]-------------------------
Sub Write_m5450_d
Reset_m5450_d
Bit_start_d
For X = 1 To 4 '4 se devi scrivere 4 cifre
Shiftout Dout1 , Ck1 , Y(x) , 1 , 8 , 1 'oppure togli la matrice Y e assegna 32 bit
Next X
For X = 1 To 3
nop:Ck1 = 1
nop:Ck1 = 0
nop
Next X
End Sub
'-------------------------[ bit start display ]---------------------------------
Sub Bit_start_d
nop:Dout1 = 1
nop:Ck1 = 0
nop:Ck1 = 1
nop:Ck1 = 0
nop:Dout1 = 0
nop
End Sub
'--------------------[ RESET segmenti su M5450 display ]------------------------
Sub Reset_m5450_d
Bit_start_d
For X = 1 To 35
nop:Ck1 = 1
nop:Ck1 = 0
nop
Next X
End Sub
se imposti il clock del micro a 8 mhz devi introdurre dei nop tra il set/reset dei segnali
visto che l'
m5450 ha tempi di scrittura pittosto bassi: Input Clock Frequency = 0.5 Mhz
ciao, fammi sapere