Nano LANReach s pic

zbytečně jsem plašil už jsem to vyřešil je tam pár překlepu, ale teď řeším že z toho lezou divný hodnoty… při cca 20C mi to ukazuje 165,5C :-/ ta 1 je pevná a nemění se…
LCD_HD44780_DS18S20.c (6.12 KB)

No poprve doporucujem rozdelit program na hlavny a kniznice LCD.c, DS1820.C … aby sa vtom dalo vyznat.

pouzivanie / * by som sa vyhol ak to nieje nutne.

		temp = (teplota & 0x01) * 5; 
		text[4] =  temp  + 48;

Toto sa da urobit cez IF (teplota & 0x01) text[4] = ‘5’; else text[4] = ‘0’;

Ak sa na to nikto nepozriem tak vecer sa na to este pozriem.

popravde se my nechce hledat kde mas chybu, ale muzem skusit najit kede je , pokud ti vycteni teploty funguje tak si na displej vypisuj cisty data z cidla,prevod si udelej na papir, poznas kde je problem , prevod / cidlo…

Hledat chybu od displeje pozpátku - tj. ověřit zda funguje správně zobrazení znaků (textů), pak ověřit správné zobrazení napevno přednastaveného údaje atd. A teprve až je ověřená zobrazovací a přepočtová část tak teprve řešit měření. … a přidat mazání displeje (mohou zůstat znaky z předešlého výpisu)

Este nieco nainstaluj si PROTEUS a tam si mozes simulovat …ako ti to ochodi

vím že se v tom nikomu nechce babrat a taky je nejlepší když si na to přijdu sám… rozdělil jsem to do souboru… simulátor je třeba?? mám to postavené na nepájivém poli a přes Pickit2 to posílám z mplabu hned do PICe (rovnou to napájím z programátoru)
ještě jsem měl problém se znaménkem stupňů ale podle datasheetu jsem to našel displej je 4x20 s ST7066
DS.rar (3.04 KB)

KEd simulujes v MPlabe a do premenej teplota das rozumnu hodnotu teploty premene v displeji su ok ?

Este ta poprosim taj tu komplet zbaleny projekt…
Pouzivas 18S20 alebo 18B20 lenbo je tam maly rozdiel ako su data v registri usporiadane.

temp = teplota >> 1;pred toto daj teplota=0x0032; potm na displeji by si mal mat zobrazenu teplotu 25st

používám 18B20 a pokud tam zadám ručně teplotu (teplota=0x0032) na displeji je 25,0C takže displej oki, čidla jsem zkoušel přehodit, ale je to to samé
pokus.X.rar (281 KB)

[code] text[0] = ‘-’;
teplota = ~teplota + 1;
}
teplota=teplota>>3; //tot doplnene

		temp = teplota >> 1;

		Lcd_Gotoxy(1,0);

[/code]

skus t otakto

tak za

  1. teplota je teď blízko realu ale asi o 6C více
  2. co se teď vlastně stalo :slight_smile:

jinak samozřejmě děkuji za snahu jinak je mím cílem doplnit více čidel najednou i s tím by si mi uměl poradit??

předem děkuji za kladnou odpověď :laughing:

ZAladny prevod je 12bitovy vid datasheet, po starte prevodu musis cakat 750ms, cakas len 500 ci kolko. TAk ze mrkni datasheet a potm sa spytaj ak by ti nebolo jasne.

Viac cidiel sa da ale nesmu byt daleko od uP, stym ze si najprv nacitas ich adresy a potom uz budes mat napevno v programe… co bude problem ak by si menil cidlo…

vzhledem k tomu že mi stačí přesnost ± 0,5C tak staci když budu cekat 100ms (DS - 93,75ms) je to tak ne?

ked zapises do eeprom cidla prevod 9bit tak hej

ještě jsem prohlížel DS a to hledání kodu mi přijde složitý a hlavně na dlouho… a navíc radši si dám čidla na správný místo a budu vědět kod čidla pokud se s čidlem nedejbože neco stane budu vědět co v programu přepsat pro nové… a abych se vyhnul hledání použiju PC a převodník com/1wire vyčtu si čidla a nahazim do programu jen jejich kody… je to tak ne??

Adresy cidiel by si vedel nacitat aj v programe co mas samozrejme po jednom, a adresy ulozit do eeprom… Ale kludne aj tvoje riesenie je ok. P.S. spim uz

Tak jsem si postavil převodník 1-Wire a vyčetl seriová čísla…

chtěl bych se zeptat jak oslovit jednotlivá čidla??

while(1)
	{
 		Error =	Ow_Reset();
		if (Error == 1)
		{
			Ow_Write(0xCC);					
//Přeskočení čtení ROM
			Ow_Write(0x44);					
//Zahájení převodu
	
			//__delay_ms(750);				//Doba převodu 
                       
                        		}

		Error =	Ow_Reset();
		if (Error == 1)
		{
			Ow_Write(0xCC);					
//Přeskočení čtení ROM
			Ow_Write(0xBE);					
//čtení scratchpadu
		
//Načtení a uložžení obsahu scratchpadu 	
			scratchpad[0]=Ow_Read();
			scratchpad[1]=Ow_Read();

			teplota = (scratchpad[1]<<8)|scratchpad[0];

			text[0] = ' '; 

základem bude změnit hodnotu Ow_Write(0xCC); na 0x55
ale nevím co dál… odeslat číslo čidla, ale jak??

číslo co mi dalo čidlo je: FA000001B452C328

a pak by to mělo byt stejný ne? pokud připojím dvě čidla po vypsání na displej to zopakuju s jiným čidlem je to tak?

tak jsem mrknul po netu a koukam mám to i crc

FA - crc
000001B452C3 - seriové číslo
28 - family kod

teď jak mu to povědět :slight_smile:

[code]void cidlo2 (void)
{
therm_write_byte(0x10); //adresa je 10h ty mas 28h
therm_write_byte(0x72);
therm_write_byte(0x61);
therm_write_byte(0x7b);
therm_write_byte(0x01);
therm_write_byte(0x08);
therm_write_byte(0x00);
therm_write_byte(0x30);
}

void startprevodu (adresa) // len cislo 1 alebo 2 pre vyber adresy cidla
{
therm_reset();
//therm_write_byte(THERM_CMD_SKIPROM);
therm_write_byte(THERM_CMD_MATCHROM); vyber cidla

if (adresa==1) cidlo1();
if (adresa==2) cidlo2();

therm_write_byte(THERM_CMD_CONVERTTEMP);
}

void vysledokprevodu(void){

unsigned char temperature,i;

//Wait until conversion is complete
while(!therm_read_bit());

//Reset, skip ROM and send command to read Scratchpad
i=therm_reset();

//therm_write_byte(THERM_CMD_SKIPROM);

therm_write_byte(THERM_CMD_MATCHROM);
if (adresa==1) cidlo1();
if (adresa==2) cidlo2();

therm_write_byte(THERM_CMD_RSCRATCHPAD);

//Read Scratchpad (only 2 first bytes)

temperature=therm_read_byte();

.
.
.

[/code]

tak teď si připadám jako blb :laughing: nevím proč v tom hledám něco složitýho…
to že se odesílá adresa po 8bitech na to bych přišel… šlo mi o to jestli se nemusí nějak čekat mezi odesílaním a jestli se nemusí potvrzovat přijetí… kodem si mi paradně odpověděl děkuji!! no a mám myšlenku přečíst čidlo uložit do eeprom bez převodu a až budu chtít zobrazit na displeji tak teprve pak převedu jinak při porovnávání teplot budu používat 12-bit hex to je myslí rozumný a možná taky jediný řešení nevím jak bych porovnával desetiný čísla… (pro spínání relé a potom i odeslání přes serii do nanoLAnu a tam převod až html) teploty pro porovnání (rekněme mezní hodnoty) taky v eeprom a v html převod na hex a následný zapsání do přislušné buňky… tím by byla asi rozebraná problematika komplexně… jsou moje úvahy dobré?? a pak (asi zase banální dotaz) jak porovnat dvě dvojice buněk v eeprom?? (např 0x00 a 0X01 porovnat s hodnotou v 0x02 a 0X03)

staci krapet nadzvednout oci nebo popremyslet

if (adresa==1) cidlo1(); if (adresa==2) cidlo2(); to upravis if(bunka0==bunka2)rozdil02=1; else rozdil02=0; . .nebo si z toho udelas 2bytebunky01=make16(bunka0,bunka1); bunky23=make16(bunka2,bunka3); if(bunky01==bunky23)...