Page 1 of 1

Un dialogo difficile con m5450

PostPosted: 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

PostPosted: 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

PostPosted: 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

PostPosted: 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

PostPosted: 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

PostPosted: 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

PostPosted: 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