Page 1 of 1

Aiuto per registerfile.dat in BASCOM-8051

PostPosted: 21 Oct 2013, 08:55
by Henk
Buongiorno a tutti,
devo fare un cambio componente e passare, con stessi codice e PCB, da un P89CV51 obsoleto ad un AT89C51RC2RLTUM.
Ho realizzato quindi un registerfile ma ho poca esperienza nel settore e non riesco a venirne a capo.
In pratica:
* seguendo le istruzioni dell'help (sezione Internal Registers) ho dato un indirizzo corretto a tutti i registri indicati in tabella (quelli del file Reg51.dat) ma il micro non funziona (si muove solo il quarzo...)
* ho quindi rifatto il file di configurazione con tutti gli SFR bit-addressable e non, presi dal datasheet del componente ed ho ottenuto il file che ho incollato di seguito; purtroppo però il Bascom non termina la compilazione, si blocca sulla linea ENABLE INTERRUPTS ed esce con errori vari (Illegal asm-command, Internal assembler error, ecc..)!
* se però, in quest'ultimo file, sostituisco solo IEN0=A8,00 con IE=A8,00 allora il file diventa compilabile senza errori ...ma una volta caricato sul micro non funziona comunque!

Qualcuno può aiutarmi a risolvere questo problema?
Grazie
Buona giornata

Code: Select all
[BIT]

B = F0 , 00
ACC = E0 , 00
CCON = D8, 00
PSW = D0 , 00
T2CON = C8 , 00
IPL0 = B8 , 00
P0 = 80 , FF
P1 = 90 , FF
P2 = A0 , FF
P3 = B0 , FF
IEN0 = A8 , 00
SCON = 98 , 00
TCON = 88 , 00

[BYTE]
CH = F9 , 00
CL = E9 , 00
CMOD = D9 , 00
FCON = D1 , 00
T2MOD = C9 , 00
SADEN = B9 , 00
IEN1 = B1 , 00
SADDR = A9 , 00
SBUF = 99 , 00
TMOD = 89 , 00
SP = 81 , 07
CCAP0H = FA , 00
CCAP0L = EA , 00
CCAPM0 = DA , 00
RCAP2L = CA , 00
IPL1 = B2 , 00
AUXR1 = A2 , 00
BRL = 9A , 00
TL0 = 8A , 00
DPL = 82 , 00
CCAP1H = FB , 00
CCAP1L = EB , 00
CCAPM1 = DB , 00
RCAP2H = CB , 00
SPCON = C3 , 14
IPH1 = B3 , 00
BDRCON = 9B , 00
TL1 = 8B , 00
DPH = 83 , 00
CCAPL2H = FC , 00
CCAPL2L = EC , 00
CCAPM2 = DC , 00
TL2 = CC , 00
SPSTA = C4 , 00
KBLS = 9C , 00
TH0 = 8C , 00
CCAPL3H = FD , 00
CCAPL3L = ED , 00
CCAPM3 = DD , 00
TH2 = CD , 00
SPDAT = C5 , 00
KBE = 9D , 00
TH1 = 8D , 00
CCAPL4H = FE , 00
CCAPL4L = EE , 00
CCAPM4 = DE , 00
WDTRST = AE , 00
KBF = 9E , 00
AUXR = 8E , 00
IPH0 = B7 , 00
CKCON1 = AF , 00
WDTPRG = A7 , 00
CKRL = 97 , FF
CKCON0 = 8F , 00
PCON = 87 , 10

[MISC]
I_TIMER2 = 2B
I_PCA = 33
up = AT51RC2
IRAM = 256
org = 36
clockdiv=12

Re: Aiuto per registerfile.dat in BASCOM-8051

PostPosted: 21 Oct 2013, 14:48
by Fagos
salve Henk e benvenuto al forum.
Vista la natura del problema ti consiglio di allegare oltre che al file .dat anche il sorgente, se possibile.
Quella è sempre la strada più semplice se cerchi aiuto concreto.

Re: Aiuto per registerfile.dat in BASCOM-8051

PostPosted: 21 Oct 2013, 17:50
by deluca
@HENK, benarrivato, la tua iscrizione risale ad aprile 2013 e posti solo adesso? te la sei presa comoda... :D

quale versione di Bascom-8051?
quale programmatore?, potresti postare lo schematico delle connessioni del chip?

e come già anticipato da fagos, poter dare uno sguardo al sorgente potrebbe essere di grande aiuto.
sera

Re: Aiuto per registerfile.dat in BASCOM-8051

PostPosted: 21 Oct 2013, 22:55
by Henk
Ciao. ...in realtà ero convinto di aver già postato qualcosa al momento dell'iscrizione, ma probabilmente ho solo pensato di farlo! :?

Allora: Bascom-8051 V.2.0.14.0 e come programmatore uso FLIP V.3.4.7.
In allegato c'è:
1) la parte di schema con micro NXP P89CV51RD2 che funziona perfettamente; la versione con l'AT89C51RC2 è identica e la sua programmazione avviene via seriale e non ISP chiudento JM1.
2) l'immagine della schermata Bascom con l'errore di compilazione che si ottiene usando il fileregister.dat già postato stamani: come si vede si blocca sull'ENABLE INTERRUPT. Come scrivevo, sostituendo nel fileregister.dat IEN0 con IE l'errore non si verifica più ...ma poi non funziona lo stesso.
3) un pezzo di codice molto semplice che già non funziona (mi aspetto la stampa di un CIAO).

Cosa si può fare??? :?:
Grazie
Ciao

Re: Aiuto per registerfile.dat in BASCOM-8051

PostPosted: 22 Oct 2013, 11:31
by deluca
Come mai non hai provato ad utilizzare il file dat 89C51RC ?

Ho provato a compilare il tuo sorgente includendo questo dat e il codice funziona perfettamente come vedesi dal capture.
img1.jpg
img1.jpg (82.14 KiB) Viewed 9749 times

Quali altri particolari registri hai necessità di manipolare, visto che hai già a disposizione il file dat?
PS. Funziona anche l' handler int0, che scrive SALVA sul display, anche se non ho postato l'immagine.

Re: Aiuto per registerfile.dat in BASCOM-8051

PostPosted: 22 Oct 2013, 13:17
by deluca
Cmq,
anche usando il tuo dat-file, ma sostituendo IEN0 con IE il tutto funziona correttamente

Re: Aiuto per registerfile.dat in BASCOM-8051

PostPosted: 27 Oct 2013, 12:44
by Henk
Ciao
grazie della risposta e scusa il ritardo ma sono fuori sede per lavoro e per qualche giorno sarò ancora limitato nella possibilità di fare test.
Rispondo:
sì, ho provato fin da subito a compilare con 89C51RC.dat ma non funzionava e per questo motivo ero passato a scrivere quello personalizzato (AT51RC2 che avevo allegato).
Non riesco a dare una spiegazione... vedo che in simulazione funziona, ma all'atto pratico il micro dorme alla grossa nonostante si lasci programmare...
Per assurdo resta ancora da capire se uso correttamente FLIP: carico l'hex, RUN nella colonna Operation Flow e quindi START APLICATION con Level0. Oppure sia proprio dovuto alla tipologia del micro AT89C41RC2RLTUM??? :?
Posso ancora chiedere questo al forum: avevo provato a liberarmi di tutti i fronzoli per fare la cosa più semplice del mondo cioè un'onda quadra a 50Hz sulla linea P1.7 e basta, ma non la fa. Al mio rientro mi dedicherò alla cosa full immersion ...ma se qualcuno avesse voglia di provarlo praticamente su una sua scheda (il file è allegato) sarebbe interessante vedere se funziona! E' stato compilato con il .DAT allegato.
Grazie

Re: Aiuto per registerfile.dat in BASCOM-8051

PostPosted: 27 Oct 2013, 14:39
by deluca
ciao Henk,
purtroppo non ho a portata di mano una scheda con quel particolare micro.
Posso solo dirti che l'hex in emulazione hardware funziona perfettamente generando l'onda quadra.

Hai provato con altri chip?
Sei certo che tutte le connessioni sul pcb siano corrette?

Re: Aiuto per registerfile.dat in BASCOM-8051

PostPosted: 30 Nov 2013, 16:40
by Henk
Ciao,
finalmente, dopo alcune trasferte ho potuto ritornare a lavorare sulla scheda e fare i dovuti test. Avevi ragione ...funzionava tutto, bastava accorgersi che si era subdolamente strappata la pista del RST! Riattivata la pista ho potuto confermare ciò che hai scritto.
Ma purtroppo non è ancora finita, anche se in linea di max il programma funziona quasi per intero. Ha solo un difetto: alla riaccensione perde i dati memorizzati nella extRAM nonostante sia dotata di backup (come da schema all'inizio della discussione).

Il problema è diverso ma più localizzato e accade solo per partenza a freddo.
Il mini programma che permette di dimostrare questo è in allegato (estratto dal programma principale) e lo descrivo:
1) dichiaro come Byte due variabili in extRAM: Tot_utenze e Tipo_lingua. Tali variabili vanno a localizzarsi nelle locazioni 0 e 1 (vedi file .RPT allegato)
2) stampo sulla prima riga del display il valore di Tipo_lingua (alla prima accensione mi aspetto un numero casuale) e, per controllo, estraggo lo stesso dato anche con Inp e lo stampo sulla seconda riga.
3) incremento Tipo_lingua in RAM e poi mi fermo

I risultati sono 3, a seconda del tipo di start effettuato:
*) All'accensione (cold start) mi aspetto di vedere il valore precedente di Tipo_lingua incrementato di uno ed INVECE compare quasi sempre 109 (talvolta 45). Il dato della seconda riga conferma che in RAM c'è proprio quel numero.
**) Se faccio semplicemente un RST del micro (warm start) il valore di Tipo_lingua incrementa regolarmente di un punto e così via per ogni altro RST seguente. Cioè ha senso.
***) Se faccio una serie di RST e porto regolarmente Tipo_lingua ad es. a 200 e poi spengo, alla riaccensione c'è il solito 109.
E' come se la RAM non avesse la batteria, ma c'è e funziona!

Altre info:
A) non cambia nulla anche se uso Out per scrivere direttamente alla locazione 1
B) se uso una variabile che ha diversa locazione in RAM (es. indirizzo 724) tutto funziona! Questo escluderebbe problemi di backup di RAM.
C) il file è stato compilato con 89C51RC.dat
D) Lo stesso mini programma caricato sul vecchio P89CV51RC2 non ha problemi.

Cosa ne pensi? E' assurdo oppure ha un senso logico?
Grazie
Ciao

Code: Select all
$crystal = 22118400
$regfile = "89C51RC.dat"
$baud = 9600
$large
$default Xram

Config Lcd = 20 * 2
Config Lcdpin = Pin , Db4 = P2.4 , Db5 = P2.5 , Db6 = P2.6 , Db7 = P2.7 , E = P3.4 , Rs = P3.3
Cursor Off                                                    'spengo il cursore

Dim B1 As Iram Byte
'************** variabili da mappare in XRAM
Dim Tot_utenze As Byte
Dim Tipo_lingua As Byte

Locate 1 , 1 : Lcd "lingua=" ; Tipo_lingua

B1 = Inp(1)
Locate 2 , 1 : Lcd "ram=" ; B1
Tipo_lingua = Tipo_lingua + 1
End

Re: Aiuto per registerfile.dat in BASCOM-8051

PostPosted: 30 Nov 2013, 20:21
by deluca
Ciao Henk,
prova a non usare il "$default Xram",
dimensiona le variabili usando banalmente la direttiva Xram

Re: Aiuto per registerfile.dat in BASCOM-8051

PostPosted: 01 Dec 2013, 12:28
by Henk
Ciao,
grazie per la risposta.
Ho provato a remmare "$default XRam" e a dimensionare le variabili come "Dim ...as XRam byte" ma non cambia nulla.

Con un analizzatore di stati ho però finalmente scoperto l'inghippo: fino all'indirizzo 255 incluso il micro non parla con la RAM esterna!!!!!
Per determinarlo, molto semplicemente ho scritto:
for k = 1 to 1000
out k, 5
next k
e il primo dato che passa all'esterno è quello all'indirizzo 256.
E' ovvio quindi che la XRAM con backup dimenticava i dati ...in realtà restavano in internal RAM!

Ora il problema è ben più delineato e la domanda pure: come si fa a far lavorare il uP con la XRAM fin dall'indirizzo 0??

Grazie
Buona domenica

Re: Aiuto per registerfile.dat in BASCOM-8051

PostPosted: 01 Dec 2013, 12:42
by deluca
Salve Henk,
mi sembrava tutto scontato....
l'8051 ha mappato in memoria tutte le periferiche tra cui la memoria ram interna.....
alcune vecchie versioni avevano solamente 127byte altre 255...

Ora se tu vuoi scrivere sulla Xram devi configurare l'inizio della prima locazione esterna e la quantita di locazioni dedicate alla Xram.

$RAMSTART = valore
$RAMSIZE = &H1000

prova a modificare il valore nella direttiva $RAMSTART secondo tue necessità e vedrai che risolverai il prb.

ciao

Re: Aiuto per registerfile.dat in BASCOM-8051

PostPosted: 02 Dec 2013, 00:17
by Henk
EVVIVA!!!
Non mi sembra vero: con $RAMSTART=$H0100 finalmente tutto funziona!

In ogni caso ho ancora qualche curiosità da soddisfare ...ne parliamo nei prossimi giorni.
Per ora ancora GRAZIE
Ciao

Re: Aiuto per registerfile.dat in BASCOM-8051

PostPosted: 02 Dec 2013, 08:09
by deluca
Benissimo Henk,
sono contento di averti aiutato a risolvere il prb :)

Re: Aiuto per registerfile.dat in BASCOM-8051

PostPosted: 02 Dec 2013, 13:33
by pier
Non ho esperienza di Xram ma effettivamente avevo avuto subito l'impressione che il problema fosse legato al RAMSTART. Quel che mi aveva un po' lasciato perplesso erano i risultati "ballerini" dei test del 30/11. Specialmente quel 109 e 45...