Citazione:
|
Originalmente inviato da protomax X aduri
putroppo penso di aver centrato il problema... |
Può essere, ma questo non dovrebbe succedere inviando i caratteri da PC uno per volta; ho visto il codice ASM generato dal compilatore: le librerie del display non verificano che l'operazione sul display sia conclusa, ed alcune operazioni possono richiedere anche 1-1.5 mS; nella gestione del display non viene utilizzato il pin 'W' e quindi non è possibile leggere lo stato dopo ogni operazione.
Puoi fare questa prova:
program Test_Display
dim i as byte
Lcd_Config(PORTB,0,3,0,7,6,5,4) ' pins custom
lcd_cmd(LCD_CLEAR) ' send command to LCD "clear display"
lcd_chr(1,1,0x20)
for i=1 to 20
Lcd_Chr_cp(63+i)
' Delay_us(50)
next i
Delay_ms(1500)
lcd_chr(2,1,0x20)
for i=1 to 20
Lcd_Chr_cp(95+i)
' Delay_us(50)
next i
end.
che dovrebbe riempire la prima riga del display, aspettare 1,5 sec e riempire la seconda riga; se funziona cercheremo il problema nella gestione combinata della UART, se no togli i commenti sui due Delay_us ed eventualmente prova ad alzare i valori.
Per quanto riguarda Atmel e altri micro, in questa fascia non ci sono grosse differenze; i Microchip sono più diffusi soprattutto a livello industriale perchè godono fama migliore dei concorrenti, mentre gli Atmel hanno avuto il loro momento di gloria nel campo della telefonia mobile, ma adesso sembrano essere un po' in declino.
Se la scelta è fatta su 'feeling' personale o disponibilità di tools gratuiti allora i criteri di scelta cambiano...
@DAVIDEA
Non è questione di 'cantonate', ma di differenza tra linguaggio e librerie; il C è un linguaggio e ti mette a disposizione una serie di funzioni, operatori e strutture dati che ti permettono di scrivere del codice in accordo con determinate 'regole'; l'insieme di tutte queste cose è codificato e definito in modo universale indipendente da chi produce il compilatore od il micro e si chiama 'Ansi C'; quando i compilatori hanno dei comportamenti differenti dallo standard vengono specificate quali sono le differenze rispetto allo standard.
Le librerie sono un insieme di funzioni complesse create per risolvere problemi ricorrenti e possono essere quindi adattate e personalizzate perchè non fanno parte di uno standard.
Spesso (vedi questo topic) le librerie fornite sono solo degli esempi e non è sempre possibile integrarle in modo immediato.
Esempio: la libreria del display LCD impiega circa 40 istruzioni a scrivere un dato, perchè, per mantenere la flessibilità di assegnare liberamente i pin di interfaccia, esegue otto operazioni separate di test del dato e set/reset dei bit corrispondenti; per contro vincola ad usare una sola porta per il display obbligando a rinunciare ad altre funzioni che hanno dei pin dedicati.
Morale: in un paio d'ore posso scrivermi la mia libreria in C che gestisce il display in modo più mirato e più efficiente e che posso integrare facilmente con dell'altro codice.
Il resto alla prossima puntata...
Michele