4 ds18s20 na LCD displeji pomocou pic16f84a v Picbasic pre

J

jojokatada

Guest
nazdar

je možné využiť 4 ds1820 jeden pic16f84a, ktoré sa zobrazia štyri rôzne teploty o 4 riadky LCD?

Až doteraz sa tak pracovať s 1 ds1820, pretože já jsem s použitím 4x20 lcd.

ukážkový kód

DEFINÍCIA LCD_DREG PORTA 'LCD data portu
DEFINÍCIA LCD_DBIT 0 'LCD data počnúc bit 0 alebo 4
DEFINÍCIA LCD_RSREG PORTA 'LCD registra vyberte portu
DEFINÍCIA LCD_RSBIT 4 'LCD registra vyberte bit
DEFINÍCIA LCD_EREG PORTB 'LCD povoliť portu
DEFINÍCIA LCD_EBIT 3 'LCD umožní bit
DEFINÍCIA LCD_BITS 4 'LCD autobusovej veľkosti 4 alebo 8
DEFINÍCIA LCD_LINES 4 'Počet riadkov na LCD
DEFINÍCIA LCD_COMMANDUS 2000 'Command meškanie v nás
DEFINÍCIA LCD_DATAUS 50 'Data meškanie v nás

symbol DQ1 = PORTB.4 'DQ pripojte na RB4
DQ2 symbol = PORTB.0
SYMBOL DQ3 = PORTB.1
SYMBOL DQ4 = PORTB.2

Teplota var slovo
count_remain var byte
count_per_c var byte

temperature1 var slovo
count_remain1 var byte
count_per_c1 var byte

temperature2 var slovo
count_remain2 var byte
count_per_c2 var byte

temperature3 var slovo
count_remain3 var byte
count_per_c3 var bytepause 100Hlavné: 'TEMP 1
owout DQ1, 1, [$ CC $ 44]
OWin DQ1, 4, [count_remain]
ak count_remain = 0 then
owout DQ1, 1, [$ CC $ BE]
owin DQ1, 0, [temperature.LOwBYTE, temperature.Highbyte, Přeskočit 4, count_remain, count_per_c]
endif

teplota = (((teplota>> 1) * 100) - 25) (((count_per_c - count_remain) * 100) / count_per_c)
lcdout $ FE, 1
LCDOUT "Životné prostredie Temp1", december (teplota / 100), "." Dec2 teplota, "C"
pause 1000

'TEMP 2
owout DQ2, 1, [$ CC $ 44]
OWin DQ2, 4, [count_remain1]
ak count_remain1 = 0 then
owout DQ2, 1, [$ CC $ BE]
owin DQ2, 0, [temperature1.LOwBYTE, temperature1.Highbyte, Přeskočit 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 "Životné prostredie Temp2", december (temperature1 / 100), "." Dec2 temperature1, "C"
pause 1000

'TEMP 3
owout DQ3, 1, [$ CC $ 44]
OWin DQ3, 4, [count_remain2]
ak count_remain2 = 0 then
owout DQ3, 1, [$ CC $ BE]
owin DQ3, 0, [temperature2.LOwBYTE, temperature2.Highbyte, Přeskočit 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 "Životné prostredie Temp2", december (temperature2 / 100), "." Dec2 temperature2, "C"
pause 1000

'TEMP 4
owout DQ4, 1, [$ CC $ 44]
OWin DQ4, 4, [count_remain2]
ak count_remain2 = 0 then
owout DQ4, 1, [$ CC $ BE]
owin DQ4, 0, [temperature2.LOwBYTE, temperature2.Highbyte, Přeskočit 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 "Životné prostredie Temp4", december (temperature2 / 100), "." Dec2 temperature2, "C"
pause 1000

goto Hlavná
koniec

zatiaľ nedarí zostaviť
chybové správy

[218] adresa 3ffth limit prekročený

Ak niekto má nejaké názory na to, čo môže byť zle alebo akékoľvek tipy,
bolo by veľmi ocenili [/ list]

 
hi to sa mi zdá, že existuje veľa divákov na môj post sa niekto pokúsi zostaviť môj zdroj?Aký je výsledok prosím poštou, tak by sme mohli zdieľať

Oceňujeme

 
Váš program je príliš veľký pre PIC 16F84A (len 1024 slov program pamäte).Kompilátoru, že to povedal.Možno budete musieť zmeniť PIC na iný model s väčšou pamäťou (16F628A alebo väčší, dobré možnosti sú 16F819, 16F88 a 18F1320).
Druhou možnosťou je pokúsiť sa optimalizovať váš kód, alebo zjednodušenie, zníženie pamäti, ktoré majú byť použité.

 
Áno, aj to aj skúsiť pic16f876a je zostaviť správny, ale aj nemôže displ yi 4 teploty v 4 rôznych tratiach LCD mám nejaký podivný znak, akési výpisom pamäte aj hádať.alebo snad 18s20 nemôže pripojiť na všetky rovnaký ako majster aj potreba kontrolovať maxim list znova.

ocenia radu.

 
---------------
Hlavné: 'TEMP 1
owout DQ1, 1, [$ CC $ 44]
pause 1000, - potrebovať --
OWin DQ1, 4, [count_remain]
etc
---------------
Musíte pohybovať "pause 1000" po "konverziu T" velenie ($ 44); ds18s20 potrebuje asi 800 ms urobiť konverziu, po ktorej môžete čítať.
... A vy musíte zistiť, či existuje 4,7 k rezistory od DQ na VDD.
... A ak máte 20 čidiel, píšete 20 rutiny na to?To môžete urobiť len raz a volať ho "DQx" parameter

 
Vidím, že ste pre 100ms pauzy na začiatku
tohto programu.Já jsem za predpokladu, je to nechať na LCD
usadiť sa po zapnutí.To _should_ byť dostatočne dlhá
u väčšiny LCD je, ale já
jsem musel niektoré inak standard
44780-založené zobrazuje potreba 500ms alebo viac vyrovnať --
inak by som mať problémy s nimi komunikovať.

To môže alebo nemusí byť váš problém (nemám
žiadne skúsenosti s používaním rôznych 1-wire zariadenia),
ale malo by to byť dostatočne rýchly, aby překompilujte váš kód
a vyskúšajte si to.Nemôže ublížiť.

Nick

 
Tento kód by mal pracovať a je to 1 / 2 veľkosti (569 slov na 16f84)
---------------
symbol DQ1 = PORTB.4 'DQ pripojte na RB4
DQ2 symbol = PORTB.0
symbol DQ3 = PORTB.1
symbol DQ4 = PORTB.2
DQ var byte
adr var byte
index var byte
Teplota var slovo
count_remain var byte
count_per_c var byte

pause 1000

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

goto Hlavná

teplota:
owout DQ, 1, [$ CC $ 44]
pause 1000
owin DQ, 4, [count_remain]
ak count_remain = 0 then
owout DQ, 1, [$ CC $ BE]
owin DQ, 0, [temperature.LOwBYTE, temperature.Highbyte, Přeskočit 4, count_remain, count_per_c]
endif

teplota = (((teplota>> 1) * 100) -25 ) ((( count_per_c-count_remain) * 100) / count_per_c)
lcdout $ FE, adr
lcdout "Životné prostredie Temp", december register, december (teplota / 100), "." dec2 teplota, "C"
návrat

koniec
------------------------

 

Welcome to EDABoard.com

Sponsor

Back
Top