Stránka 1 z 1

ČTENÍ DAT Z PORTU

Napsal: 27 led 2015, 11:43
od paycz
ahoj, chtěl jsem si udělat jednoduchou konstrukci která bude zjištovat teplotu a podle toho udělá nějakou funkci ale nevím jak zjistit hodnotu z binárního teplotního čidla na portu třeba A0

Napsal: 27 led 2015, 11:50
od petrfilipi
Jaký je typ čidla?
Jaký je typ procesoru?

Napsal: 27 led 2015, 12:00
od paycz
petrfilipi píše:Jaký je typ čidla?
Jaký je typ procesoru?
procesor: PIC 16F627
čidlo: DS18B20

Napsal: 27 led 2015, 12:58
od Chenzee
Hledej, už se to tu řešilo.

Napsal: 27 led 2015, 14:20
od Jeejda_teda_puvodne

Napsal: 28 led 2015, 08:42
od petrfilipi
V čem to chceš psát? Assembler? Vyšší jazyk (C, Pascal, Basic)?
Pokud by to byl vyšší jazyk, doporučuji prostředí společnosti Mikroelektronika (www.mikroe.com). Mají na výběr mezi C, Pascalem a Basicem a mají hotovou knihovnu pro OneWire technologii, takže pak může vyčtení hodnoty z jednoho teploměru 18B20 vypadat nějak takto (teď nevím, zdali je to pro 1820 nebo 18B20 nebo 18S20 - nutno zkontrolovat v příslušných datasheetech):

ow_reset(PORTA,5); // onewire reset signal
ow_write(PORTA,5,$CC); // issue command to DS1820
ow_write(PORTA,5,$4E); // issue command to DS1820
ow_write(PORTA,5,$FF); // issue command to DS1820
ow_write(PORTA,5,$FF); // issue command to DS1820
ow_write(PORTA,5,$3F); // Set for 12 bit output 7F=12 bit=0,0625°C, 5F=11bit=0,125°C, 3F=10bit=0,25°C, 1F=9bit=0,5°C

ow_reset(PORTA,5); // onewire reset signal
ow_write(PORTA,5,$CC); // issue command to DS1820
ow_write(PORTA,5,$44);
// start temperature conversion
j1 := 0;
Repeat // end of conversion cycle is
j1 := ow_read(PortA,5); // indicated by a non-zero
Until j1 > 0; // output to polling

ow_reset(PORTA,5); // at this point temp is in memory
ow_write(PORTA,5,$CC); // issue command to DS1820
ow_write(PORTA,5,$BE); // read scratchpad memory

j1 := ow_read(PORTA,5); // get Low Byte result
j2 := ow_read(PORTA,5); // get High byte resujlt

RawTemp := j2; // Raw now holds the 16-bit
RawTemp := RawTemp shl 8; // output, with sign bit and
RawTemp := RawTemp + j1; // maximum resolution information
// result in units of 0.0625 deg C


Určitě bude hotová knihovna i pro assembler. Ale jak jsem psal, jde o to, v čem chceš požadovaného výsledku docílit.

Petr Filipi

Napsal: 28 led 2015, 08:54
od paycz
mě v assembleru stačí tu binární hodnotu z portu číst a pak zbytek si udělám jednoduché mat. instrukce a podle kladného nebo záporneho čísla vyhodnotí bud log. 0 nebo 1 :D

Napsal: 28 led 2015, 10:25
od petrfilipi
Tak v tom Ti osobně nepomohu, budeš muset hledat na webu - třeba tady jsou hodiny s 18B20 teploměrem - http://www.bogdi.ro/electronics/digital%20clock/, detailnější popis je pak tady:http://www.bogdi.ro/electronics/digital ... dexfp.html včetně možnosti stažení celého projektu.

Petr Filipi

Napsal: 28 led 2015, 12:06
od Jeejda_teda_puvodne

Napsal: 28 led 2015, 13:39
od Chenzee
Ta hodnota ti vyleze poté, co si o ni řekneš. Takže ne jednosměrná komunikace ale obousměrná. To znamená použít protokol, "kterým" s tím čidlem komunikuješ (1-Wire). A fčíl hledej, studuj, testuj atd. A až ti nebude něco jasné nebo ti to nebude chodit, tak se tu zeptej.