Page 1 of 1
Un dialogo difficile con m5450
Posted:
27 Aug 2012, 10:27
by Reset
Salve a tutti , bentornati dalle vacanze .
Mi ritrovo a far dialogare un m5450 con un atmel at90s8515
per visualizzare su 4 display dei dati .
Ho provato con il shiftout , spiout , un ciclo di for simulando
i 34 bit piu' lo start e l'ultimo bit di clock per il load
ma non riesco a farli dialogare .
Qualcuno puo' essermi di aiuto ? suggerimenti e esempi
sono ben accetti .
Saluti , grazie
Re: Un dialogo difficile
Posted:
27 Aug 2012, 13:31
by deluca
@reset,
salve e benvenuto nel forum ufficiale italiano di bascom.
il tuo problema è solamente legato alla comunicazione con l'm5450 o hai problemi con la conversione in cifre?
prova a postare il codice o parte di esso per una veloce risoluzione del problema indicando la tua versione di bascom.
ciao
Re: Un dialogo difficile
Posted:
27 Aug 2012, 15:54
by Reset
Grazie , invio parte del listato ,
il compilatore e' versione 1.11.9.5 e utilizzo come programmatore
la demo board stk 500
----------------------------------
Clock Alias Portb.1
Dato Alias Portb.0
Enbl Alias Portb.3
Clock = 0
Dato = 0
Enbl = 0
' bit start
Waitms 50
Clock = 1
Dato = 1
Waitms 50
Clock = 0
Dato = 0
Waitms 50
'--------invio 32 bit 4 x 7 segmenti + 4 dp
Shiftout Dato , Clock , A , 1 [ , 32 , 50000 ]
' 2 bit 33 34
Waitms 50
Clock = 1
Dato = 1
Waitms 50
Clock = 0
Dato = 0
Waitms 50
Clock = 1
Dato = 1
Waitms 50
Clock = 0
Dato = 0
'---bit load -------------------
Waitms 50
Clock = 1
Waitms 50
Clock = 0
End
----------
saluti Ciro
Re: Un dialogo difficile
Posted:
27 Aug 2012, 20:23
by deluca
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
Re: Un dialogo difficile con m5450
Posted:
28 Aug 2012, 09:57
by Reset
Ciao , non ho parole per ringraziarti
effettuo le prove e ti faccio sapere
saluti
Re: Un dialogo difficile con m5450
Posted:
31 Aug 2012, 13:03
by Reset
Tutto ok, grazie al tuo valido suggerimento
Ho dovuto solo sostituire il NOP con una pausa
utilizzando l'istruzione WAITUS impostando
il tempo a circa 100 us , cosa strana che il
compilatore che utilizzo non riconosce l'istruzione
NOP . avevo anche , totalmente ignorato il fatto che
rispetto al tipo di cpu in uso l 'M5450 è alquanto lento
a immagazzinare i dati .
Ancora grazie ..... al prossimo post
Re: Un dialogo difficile con m5450
Posted:
31 Aug 2012, 13:12
by deluca
ti consiglio di aggiornare alla versione ultima 2.0.7.5 .....
visto che il compilatore è in continuo aggiornamento e vengono effettuati molti fix con relativo add-on di nuovi micro (vedi xmega).
per il NOP non riconosciuto puoi provare !NOP con il punto esclamativo davanti.
i 100uSec mi sembrano tanti prova ad abbassarli per ottimizzare la trasmissione.
ciao