4 ds18s20 su un display LCD utilizzando pic16f84a in pro Picbasic

J

jojokatada

Guest
salve

è possibile utilizzare 4 ds1820 uno pic16f84a che saranno quattro diversi visualizzazione della temperatura su 4 linee di lcd?

finora il lavoro con 1 ds1820 perché sto utilizzando uno 4x20 lcd.

codice di esempio

DEFINE LCD_DREG PORTA 'LCD porta dati
DEFINE LCD_DBIT 0 'LCD a partire bit 0 o 4
DEFINE LCD_RSREG PORTA 'LCD registro selezionare porto
DEFINE LCD_RSBIT 4 'LCD registro selezionare bit
DEFINE LCD_EREG PORTB 'LCD consentire porto
DEFINE LCD_EBIT 3 'LCD consentire bit
DEFINE LCD_BITS 4 'LCD dimensioni autobus 4 o 8
DEFINE LCD_LINES 4 'Numero di linee su display LCD
DEFINE LCD_COMMANDUS 2000 'Comando tempo di ritardo in noi
DEFINE LCD_DATAUS 50 'Dati in ritardo di noi

simbolo DQ1 = PORTB.4 'DQ connettersi a RB4
DQ2 simbolo = PORTB.0
SIMBOLO DQ3 = PORTB.1
SIMBOLO DQ4 = PORTB.2

temperatura var parola
count_remain var byte
count_per_c var byte

var temperature1 parola
count_remain1 var byte
count_per_c1 var byte

var temperature2 parola
count_remain2 var byte
count_per_c2 var byte

var temperature3 parola
count_remain3 var byte
count_per_c3 var bytepausa 100Main: 'TEMP 1
owout DQ1, 1, [$ CC, $ 44]
OWin DQ1, 4, [count_remain]
se count_remain = 0 allora
owout DQ1, 1, [$ CC, $ BE]
owin DQ1, 0, [temperature.LOwBYTE, temperature.Highbyte, Skip 4, count_remain, count_per_c]
endif

temperatura = (((temperatura>> 1) * 100) - 25) (((count_per_c - count_remain) * 100) / count_per_c)
lcdout $ FE, 1
LCDOUT "Ambiente temp1", dicembre (temperatura / 100), "." Dec2 temperatura, "C"
1000 pausa

'TEMP 2
owout DQ2, 1, [$ CC, $ 44]
OWin DQ2, 4, [count_remain1]
se count_remain1 = 0 allora
owout DQ2, 1, [$ CC, $ BE]
owin DQ2, 0, [temperature1.LOwBYTE, temperature1.Highbyte, Skip 4, count_remain1, count_per_c1]
endif

temperature1 = (((temperature1>> 1) * 100) - 25) (((count_per_c1 - count_remain1) * 100) / count_per_c)
lcdout $ FE, $ C0
LCDOUT "Ambiente temp2", dicembre (temperature1 / 100), "." Dec2 temperature1, "C"
1000 pausa

'TEMP 3
owout DQ3, 1, [$ CC, $ 44]
OWin DQ3, 4, [count_remain2]
se count_remain2 = 0 allora
owout DQ3, 1, [$ CC, $ BE]
owin DQ3, 0, [temperature2.LOwBYTE, temperature2.Highbyte, Skip 4, count_remain2, count_per_c2]
endif

temperature2 = (((temperature2>> 1) * 100) - 25) (((count_per_c2 - count_remain2) * 100) / count_per_c2)
lcdout $ FE, $ 94
LCDOUT "Ambiente temp2", dicembre (temperature2 / 100), "." Dec2 temperature2, "C"
1000 pausa

'TEMP 4
owout DQ4, 1, [$ CC, $ 44]
OWin DQ4, 4, [count_remain2]
se count_remain2 = 0 allora
owout DQ4, 1, [$ CC, $ BE]
owin DQ4, 0, [temperature2.LOwBYTE, temperature2.Highbyte, Skip 4, count_remain2, count_per_c2]
endif

temperature2 = (((temperature2>> 1) * 100) - 25) (((count_per_c2 - count_remain2) * 100) / count_per_c2)
lcdout $ FE, $ D4
LCDOUT "Ambiente Temp4", dicembre (temperature2 / 100), "." Dec2 temperature2, "C"
1000 pausa

goto Main
fine

finora non compilare
il messaggio di errore

[218] indirizzo 3ffth limite superato

Se qualcuno ha qualche idea su quello che può essere sbagliato o suggerimenti, sarebbe molto apprezzato [/ list]

 
hi mi pare vi siano molti spettatori il mio post ha chiunque provi a compilare la mia fonte?quali sono il risultato si prega di postare in modo da poter parti

apprezzare

 
Il tuo programma è troppo grande per il PIC 16F84A (solo 1024 parole di memoria di programma).Il compilatore ha detto che questo.Forse dovete cambiare il PIC per un altro modello con più memoria (16F628A o più, le opzioni sono buone 16F819, 16F88 e 18F1320).
Altra opzione è quella di cercare di ottimizzare il codice, o semplificare, di ridurre la memoria da utilizzare.

 
sì l'ho fatto provare i pic16f876a è la corretta compilazione, ma non riesco a displa yi la temperatura in 4 diverse linee di 4 LCD ho qualche strano personaggio, sorta di indovinare i dump di memoria.o forse il 18s20 non riesce a connettersi a tutti la stessa qualità di comandante ho bisogno di controllare massima scheda nuovamente.

apprezzare la consulenza.

 
---------------
Main: 'TEMP 1
owout DQ1, 1, [$ CC, $ 44]
pausa 1000; -
hanno bisogno di questo --
OWin DQ1, 4, [count_remain]
etc
---------------
È necessario spostare "pausa 1000" dopo la "T convertire" comando ($ 44); ds18s20 ha bisogno di circa 800 ms per eseguire la conversione, dopo che si può leggere.
... e si deve verificare se ci sono resistenze da 4,7 k DQ a VDD.
... e se si dispone di 20 sensori, si scrive 20 routine per questo?È possibile fare una sola chiamata e con "DQx" parametro

 
Vedo che siete la pausa per 100ms
all'iniziodel programma.Sto assumendo questo è lasciare che il display LCD
dopo la regolare alimentazione.Che _should_ essere sufficientemente lungo da
per la maggior parte degli LCD, ma ho avuto qualche altro standard
44780-basato visualizza 500ms o più bisogno di risolvere --
oppure mi hanno difficoltà a comunicare con loro.

Questo può o non può essere il problema (non ho
alcuna esperienza con l'utilizzo di più dispositivi 1-wire),
ma dovrebbe essere abbastanza veloce per ricompilare il codice
e fare un tentativo.Non può far male.

Nick

 
Questo codice dovrebbe funzionare ed è 1 / 2 dimensioni (569 parole su 16f84)
---------------
simbolo DQ1 = PORTB.4 'DQ connettersi a RB4
DQ2 simbolo = PORTB.0
simbolo DQ3 = PORTB.1
simbolo DQ4 = PORTB.2
DQ var byte
adr var byte
Indice var byte
temperatura var parola
count_remain var byte
count_per_c var byte

1000 pausa

Main:
DQ = dq1: adr = $ 1: indice = 1
gosub temp
DQ = dq2: adr = $ c0: index = 2
gosub temp
DQ = dq3: adr = $ 94: indice = 3
gosub temp
DQ = dq4: adr = $ d4: indice = 4
gosub temp

goto Main

Temperatura:
owout DQ, 1, [$ CC, $ 44]
1000 pausa
owin DQ, 4, [count_remain]
se count_remain = 0 allora
owout DQ, 1, [$ CC, $ BE]
owin DQ, 0, [temperature.LOwBYTE, temperature.Highbyte, Skip 4, count_remain, count_per_c]
endif

temperatura = (((temperatura>> 1) * 100) -25 ) ((( count_per_c-count_remain) * 100) / count_per_c)
lcdout $ FE, adr
lcdout "Ambiente" Temp ", indice di dicembre, dicembre (temperatura / 100),". "dec2 temperatura," C "
ritorno

fine
------------------------

 

Welcome to EDABoard.com

Sponsor

Back
Top