papamaik Inserito: 13 giugno 2014 Segnala Share Inserito: 13 giugno 2014 salve a tutti ho realizzato per la mia imbarcazione un circuito che con un pic 16f876 controlla le funzioni del motore: gasolio, giri, temperatura e li visualizza su un display 16x2. non è la prima volta che utilizzo questi componenti per usi disparati, ma questa volta il display si comporta in modo strano, infatti all'accensione a volte va bene altre attiva tutti i pixel della prima riga e nientaltro. ho reistallato il sw,; ho cambiato il display, ma tutto come prima qualcuno mi può aiutare? Link al commento Condividi su altri siti More sharing options...
accacca Inserita: 13 giugno 2014 Segnala Share Inserita: 13 giugno 2014 Di solito quando vedi solo la prima riga con "i quadrati pieni" è un problema di inizializazzione se a volte va a volte no potrebbe essere causato dalle temporizzazioni nella procedura dei comandi iniziali. (Ho escluso flat di collegamento lunghi posizionamento particolare dove potrebbero esserci disturbi ecc..) Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 13 giugno 2014 Segnala Share Inserita: 13 giugno 2014 (modificato) Confermo qunato scritto da accacca, a suo tempo ci ho perso parecchio tempo per venirne a capo. Mi faceva impazzire perchè se facevo girare il programma tramite ICD era tutto perfetto, non appena lo facevo girare in free running iniziavano i problemi. Mi ha messo sulla strada giusta il fatto che quando il processore lavora con l'ICD è rallentato. Modificato: 13 giugno 2014 da Livio Orsini Link al commento Condividi su altri siti More sharing options...
papamaik Inserita: 13 giugno 2014 Autore Segnala Share Inserita: 13 giugno 2014 vi ringrazio per l'attenzione Il programma in pic basic è, almeno per la parte interessata, il copia incolla di altre applicazioni peraltro funzionanti se può servire allego il listato: '* : Recepisce i dati di serbatoio,temperatura motore, '* : pressione olio, contagiri e li visualizza su display '* : se salpancora attivo visualizza metri catena * '**************************************************************** include "modedefs.bas" define osc 4 'DEFINIZIONE PARAMETRI LCD Define LCD_DREG PORTB Define LCD_DBIT 0 'I dati sui primi 4 bit della porta B Define LCD_BITS 4 Define LCD_RSREG PORTB Define LCD_RSBIT 4 'RB4 = RS Define LCD_EREG PORTB Define LCD_EBIT 5 'RB5 = E Define LCD_LINES 2 'Display 16x2 Define LCD_COMMANDUS 2000 Define LCD_DATAUS 50 'DEFINIZIONE PARAMETRI ANALOGICI Define ADC_BITS 8 ' 8 bit di definizione porta analogica Define ADC_CLOCK 1 ' Set clock source (3=rc)(verificare) Define ADC_SAMPLEUS 1 ' Set sampling time in uS (sostituire 1 con 50) 'DEFINIZIONE PORTE I/O TRISA = %11111111 ' Set portA tutti Inputs TRISB = %00000000 ' Set portB TRISC = %11111000 ' Set portC ADCON1 = %00000010 ' Set portA come Analogica 'ASSEGNAZIONE I/O Pickup var portc.1 ' Input da sensore giri motore ( a massa) Beep var portc.2 ' Output cicalino allarme SalpOn var portc.3 ' Input salpancora acceso GoUp var portc.4 ' Input comando a salpare Reed var portc.5 ' Input sensore conteggio catena 'ASSEGNAZIONE VARIABILI RPM var word 'Sensore Contagiri GAS VAR byte 'Sensore Livello Gasolio GASO VAR Byte 'Livello Gasolio TEM VAR byte 'Sensore Temperatura Motore TEMP VAR BYTE 'Temperatura Motore PRS var byte 'Sensore pressione olio PRESS VAR BYTE 'Pressione olio metri VAR BYTE ' mem metri salpancora alm var bit ' memoria allarme conta var byte ' conteggio reed mem var bit ' mem fronte di salita reed soglGAS var byte ' mem soglia min livello gasolio soglTEM var byte ' mem soglia MAX temperatura motore soglPRS var byte ' mem soglia min pressione olio '********************** P R O G R A M M A ******************* mem=0 metri=0 'read 0,metri alm=0 beep=1 pause 300 ' all'avvio il cicalino si attiva Lcdout $fe, 1 'SCHERMATA INIZIALE lcdout $fe, $80+2," CHECK " 'Scrivi primo rigo pause 500 lcdout $fe, $c0+2," AVVIAMENTO" 'Scrivi secondo rigo pause 3000 beep=0 ' dopo 4 sec. spegne il beep e toglie la videata iniziale conta =0 ciclo: if SalpOn then 'se salpancora NON attivo ADCIN 0, GAS 'mette il valore di AN0 in GAS (gasolio) ADCIN 1, TEM 'mette il valore di AN1 in TEM (temperatura) ADCIN 2, PRS 'mette il valore di AN2 in PRS (pressione) 'decodifica gli impulsi dell'alternatore per RpM count pickup,2000,RPM 'Legge gli impulsi in 1 sec e li mette in rpm RPM=RPM/40+1 'trasforma gli impulsi in giri/min if RPM <5 then RPM=0 ' a motore spento (<500giri) visualizzerà 0 RpM 'decodifica valori per Gasolio if gas >185 AND NOT ALM then gaso=20 gosub allarme else if gas <=185 and gas >177 then gaso =30 if gas <=177 and gas >170 then gaso =35 if gas <=170 and gas >158 then gaso =40 if gas <=158 and gas >145 then gaso =45 if gas <=145 and gas >135 then gaso =50 if gas <=135 and gas >120 then gaso =55 if gas <=120 and gas >116 then gaso =60 if gas <=116 and gas >100 then gaso =65 if gas <=100 and gas >90 then gaso =70 if gas <=90 and gas >70 then gaso =75 if gas <=70 and gas >50 then gaso =80 if gas <=50 and gas >33 then gaso =85 if gas =<33 then gaso=90 Lcdout $fe, 1 ' Pulisci schermo lcdout $fe, $80+1,"GASOLIO ",#GASO," Lt."' Scrivi primo rigo pause 500 lcdout $fe, $c0+1,#RPM,"00 Giri/min." 'Scrivi secondo rigo pause 2500 'decodifica valori di temperatura ' Lcdout $fe, 1 ' Pulisci schermo ' lcdout $fe, $80+1,"TEMP. ",#TEMP," ^C" ' Scrivi primo rigo ' lcdout $fe, $c0+1,#RPM,"00 Giri/min." 'Scrivi secondo rigo ' pause 2500 'decodifica valori di pressione ' Lcdout $fe, 1 ' Pulisci schermo ' lcdout $fe, $80+1,"PRESS. ",#PRESS," BAR" ' Scrivi primo rigo ' lcdout $fe, $c0+1,#RPM,"00 Giri/min." 'Scrivi secondo rigo ' pause 500 endif else 'ALTRIMENTI PASSA AL CICLO DEL SALPANCORA if not reed and not mem then mem=1 conta = conta+1 else if reed and mem then mem=0 endif endif if GoUp then 'se non è attiva la salita if conta >2 then metri = metri +1 conta=0 'write 0,metri endif 'ogni tre impulsi incrementa di 1 mt else 'se non attiva la salita if conta >2 then metri = metri -1 conta=0 'ogni tre impulsi decrementa di 1 mt if metri<3 then metri=0 'write 0,metri endif endif endif Lcdout $fe, 1 'Pulisci schermo lcdout $fe, $80+1,"CATENA ANCORA " 'Scrivi primo rigo pause 500 lcdout $fe, $c0+3, #METRI," metri" 'Scrivi secondo rigo pause 500 endif Goto Ciclo allarme: beep=1 pause 8000 beep=0 alm=1 return Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 13 giugno 2014 Segnala Share Inserita: 13 giugno 2014 Spiacente, ma io il pic basic propio...non lo guardo. Link al commento Condividi su altri siti More sharing options...
accacca Inserita: 21 giugno 2014 Segnala Share Inserita: 21 giugno 2014 ...arrivo tardi.... Io non conosco pic di basic ho qualche ricordo e non posso essere di molto aiuto guardando il tuo codice non trovo la procedura che ti abbiamo segnalato (o almeno io non riesco a vederla) quella che inizializza il display. Se c'è già ti chiedo scusa in anticipo se non c'è puoi aggiungerla e aggiungere il codice dove chiami questa procedura forse utilizzi una libreria pronta per gestire lcd ? Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora