<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sk">
	<id>http://www.kiwiki.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Peto</id>
	<title>Kiwiki - Príspevky používateľa [sk]</title>
	<link rel="self" type="application/atom+xml" href="http://www.kiwiki.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Peto"/>
	<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php/%C5%A0peci%C3%A1lne:Pr%C3%ADspevky/Peto"/>
	<updated>2026-04-16T14:10:32Z</updated>
	<subtitle>Príspevky používateľa</subtitle>
	<generator>MediaWiki 1.34.0</generator>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6120</id>
		<title>Meranie teploty pomocou teplomera DS18S20</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6120"/>
		<updated>2010-07-11T20:54:30Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* Samotný program teplomera */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Základný popis úlohy ==&lt;br /&gt;
&lt;br /&gt;
Tento systém bude obsahovať dva teplomery DS18S20 a teplota sa bude vypisovať na display. Prepínať medzi jednotlivými teplomermi budeme pomocou tlačítka. Teplota bude na LCD zobrazená v desiatkovej sústave s presnosťou na desatiny stupňa celsia.&lt;br /&gt;
&lt;br /&gt;
== Zapojenie teplomerov ==&lt;br /&gt;
&lt;br /&gt;
V článku o 1-wire &amp;lt;ref&amp;gt;http://kiwiki.fmtnuni.sk/mediawiki/index.php/Protokol_1-Wire#DS18S20&amp;lt;/ref&amp;gt; rozhraní sú uvedené aj základné vlastnosti tohto teplomera, takže sa k tomu už nebudem vyjadrovať, snáď len uvediem zapojenie jednotlivých teplomerov, ktoré možno vidieť na obr. 1. Pull-up rezistor je nutný, nakoľko bez neho to nefunguje ako má.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zapojenie teplomerov DS18S20.png|center|thumb|400px|Obr. 1. Zapojenie teplomerov]]&lt;br /&gt;
&lt;br /&gt;
Na komunikáciu s viacerými teplomermi na zbernici 1-wire potrebujeme poznať adresu každého teplomera. Jednotlivé adresy sú uvedené v tabuľke 1. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;600&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Názov teplomera&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Adresa teplomera&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vonkajší teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|105FD4CD010800C9&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vnútorný teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|1059F7CD010800CD&lt;br /&gt;
&lt;br /&gt;
|+align=&amp;quot;bottom&amp;quot; |Tab. 1 Názov a adresa teplomerov&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rozhranie 1-wire v PSoC ==&lt;br /&gt;
&lt;br /&gt;
V samotnom dizajneri sa nachádza hardvérový blok pre podporu tejto zbernice. My však budeme používať softvérový blok, ktorý sa dá stiahnuť na nasledovnej adrese:&lt;br /&gt;
&lt;br /&gt;
http://www.psocdeveloper.com/tools/misc-dev-tools.html&lt;br /&gt;
&lt;br /&gt;
Potom ho doinštalujeme podľa návodu, ktorý sa nachádza tu:&lt;br /&gt;
&lt;br /&gt;
http://www.psocdeveloper.com/forums/viewtopic.php?p=29&amp;amp;sid=2d053ae959fd795eaf997f498bfe3de5&amp;amp;view=next&lt;br /&gt;
&lt;br /&gt;
Po umiestnení tohto bloku do projektu musíme vykonať zopár nastavení. Názorne sú ukázané na obr. 2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Nastavenia_1-wireSW.jpg|center|thumb|400px|Obr. 2. Nastavenia 1-wireSW]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''LCD blok'''&lt;br /&gt;
&lt;br /&gt;
Pre komunikáciu s LCD musíme použiť blok LCD. Jeho nastavenie je jednoduché, nastavíme len, ktorý port sa na komunikáciu bude používať a či chceme povoliť alebo zakázať bar grafy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Samotný program teplomera ==&lt;br /&gt;
&lt;br /&gt;
Program je napísaný v jazyku C, chcel by som pridať aj kód v assembleri, ale zatiaľ aspoň takto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;m8c.h&amp;gt;       &lt;br /&gt;
#include &amp;quot;PSoCAPI.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// funkcia PREVOD služi na výpis teploty v desiatkovej sústave na LCD &lt;br /&gt;
// a zároveň počíta vyššiu presnosť nameranej teploty&lt;br /&gt;
&lt;br /&gt;
void PREVOD(BYTE vstup, BYTE znamienko, BYTE count_remain)  &lt;br /&gt;
{&lt;br /&gt;
 long a, b=0, c, i, d;&lt;br /&gt;
 char vystup[]=&amp;quot;00.0&amp;quot;, cisla[]=&amp;quot;0123456789&amp;quot;; &lt;br /&gt;
 float teplota, remain, presnost;&lt;br /&gt;
 remain=count_remain;&lt;br /&gt;
 teplota=vstup;&lt;br /&gt;
 teplota=(teplota/2.0)-0.25;&lt;br /&gt;
 presnost=(16.0-remain)/16.0;&lt;br /&gt;
 teplota=teplota+presnost;&lt;br /&gt;
 if(znamienko==0xFF)&lt;br /&gt;
 {&lt;br /&gt;
 teplota=256-vstup;&lt;br /&gt;
 teplota=(teplota/2.0)-0.25;&lt;br /&gt;
 teplota=teplota+presnost;&lt;br /&gt;
 }&lt;br /&gt;
 teplota=teplota*10.0;&lt;br /&gt;
 for(i=100;i&amp;gt;=1;i=i/10)&lt;br /&gt;
	 {  &lt;br /&gt;
	 	a=teplota/i;&lt;br /&gt;
		c=a-b*10;&lt;br /&gt;
		b=a;&lt;br /&gt;
		if(i==100) d=0;&lt;br /&gt;
		if(i==10) d=1;&lt;br /&gt;
		if(i==1) d=3;&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		if(c==0)vystup[d]=cisla[0];&lt;br /&gt;
		if(c==1)vystup[d]=cisla[1];&lt;br /&gt;
		if(c==2)vystup[d]=cisla[2];&lt;br /&gt;
		if(c==3)vystup[d]=cisla[3];&lt;br /&gt;
		if(c==4)vystup[d]=cisla[4];&lt;br /&gt;
		if(c==5)vystup[d]=cisla[5];&lt;br /&gt;
		if(c==6)vystup[d]=cisla[6];&lt;br /&gt;
		if(c==7)vystup[d]=cisla[7];&lt;br /&gt;
		if(c==8)vystup[d]=cisla[8];&lt;br /&gt;
		if(c==9)vystup[d]=cisla[9];&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
   LCD_Position(1,3);&lt;br /&gt;
   LCD_PrString(vystup);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
// začiatok hlavnej funkcie&lt;br /&gt;
&lt;br /&gt;
void main(void)&lt;br /&gt;
{	&lt;br /&gt;
	BYTE vystup, znamienko,count_remain,byte;&lt;br /&gt;
	int p=1;&lt;br /&gt;
	char eteplota[]=&amp;quot;Teplota vonku:&amp;quot;, plus[]=&amp;quot;+&amp;quot;, minus[]=&amp;quot;-&amp;quot;;&lt;br /&gt;
	char prazdny[]=&amp;quot;                &amp;quot;, iteplota[]=&amp;quot;Teplota vnutri&amp;quot;;&lt;br /&gt;
	M8C_EnableGInt ;&lt;br /&gt;
	OW_Start();&lt;br /&gt;
	LCD_Start();&lt;br /&gt;
	LCD_Init();&lt;br /&gt;
	while(1)&lt;br /&gt;
	{	                      //na pin P1.0 privedieme cez tlačitko 5V&lt;br /&gt;
		PRT1DR=0;             //na port 1 sa zapíše 0&lt;br /&gt;
		if(PRT1DR==1) p++;    //ak sa na porte 1 objaví 1, inkrementuje sa p &lt;br /&gt;
		if (p&amp;gt;2) p=1;         //pre správnu funkčnosť musí byť pin P1.0 nastavený na režim Hi_Z digital&lt;br /&gt;
		OW_Reset();&lt;br /&gt;
		if(p==1)              //ak bude p=1, komunikácia bude prebiehať s vonkajším teplomerom&lt;br /&gt;
		{&lt;br /&gt;
		OW_WriteByte(0x55);   //príkaz Match ROM&lt;br /&gt;
		OW_WriteByte(0x10);   //zadanie adresy teplomera&lt;br /&gt;
		OW_WriteByte(0x5F);&lt;br /&gt;
		OW_WriteByte(0xD4);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x01);&lt;br /&gt;
		OW_WriteByte(0x08);&lt;br /&gt;
		OW_WriteByte(0x00);&lt;br /&gt;
		OW_WriteByte(0xC9);&lt;br /&gt;
		OW_WriteByte(0x44);   //príkaz pre konverziu teploty&lt;br /&gt;
		OW_Delay10mTimes(75); //čakanie 750us&lt;br /&gt;
		OW_Reset();           //reset rozhrania&lt;br /&gt;
		OW_WriteByte(0x55);   //Match ROM&lt;br /&gt;
		OW_WriteByte(0x10);   //zaddanie adresy teplomera&lt;br /&gt;
		OW_WriteByte(0x5F);&lt;br /&gt;
		OW_WriteByte(0xD4);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x01);&lt;br /&gt;
		OW_WriteByte(0x08);&lt;br /&gt;
		OW_WriteByte(0x00);&lt;br /&gt;
		OW_WriteByte(0xC9);&lt;br /&gt;
		OW_WriteByte(0xBE);   //príkaz pre čítanie Scratch Pad&lt;br /&gt;
		vystup = OW_ReadByte(); // čítanie jednotlivých bytov (teplota)&lt;br /&gt;
		znamienko = OW_ReadByte(); //(znamienko)&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		count_remain = OW_ReadByte(); //(byte pre zvýšenie presnosti teplomera)&lt;br /&gt;
		LCD_Position(0,0);     //nastavenie kurzora na LCD na pozíciu 0,0&lt;br /&gt;
		LCD_PrString(prazdny); //vytlacenie prázdneho reťazca na LCD&lt;br /&gt;
		LCD_Position(0,0);     //nastavenie kurzora na LCD na pozíciu 0,0&lt;br /&gt;
		LCD_PrString(eteplota);//vytlacenie retazca eteplota na LCD&lt;br /&gt;
		LCD_Position(1,1);     //nastavenie kurzora na LCD na pozíciu 1,1&lt;br /&gt;
		if(znamienko==0x00)    //ak bude znamienko=0, vytlaci sa na LCD +&lt;br /&gt;
		LCD_PrString(plus);&lt;br /&gt;
		else&lt;br /&gt;
		LCD_PrString(minus);   //inak sa vytlaci na LCD -&lt;br /&gt;
		PREVOD(vystup, znamienko, count_remain); //nacitane 3 byty sa odovzdajú funkcií PREVOD, ktorá vyslednú teplotu vypíše na LCD&lt;br /&gt;
		}&lt;br /&gt;
		if(p==2)               //ak p=2, komunikácia bude prebiehať s vnútorným teplomerom&lt;br /&gt;
		{                      //postup je presne taký ako aj pri predchádzajúcom teplomery&lt;br /&gt;
		OW_WriteByte(0x55);&lt;br /&gt;
		OW_WriteByte(0x10);    //zadanie adresy teplomera&lt;br /&gt;
		OW_WriteByte(0x59);&lt;br /&gt;
		OW_WriteByte(0xF7);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x01);&lt;br /&gt;
		OW_WriteByte(0x08);&lt;br /&gt;
		OW_WriteByte(0x00);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x44);    // Start Conversion&lt;br /&gt;
		OW_Delay10mTimes(75);&lt;br /&gt;
		OW_Reset();&lt;br /&gt;
		OW_WriteByte(0x55);&lt;br /&gt;
		OW_WriteByte(0x10);&lt;br /&gt;
		OW_WriteByte(0x59);&lt;br /&gt;
		OW_WriteByte(0xF7);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x01);&lt;br /&gt;
		OW_WriteByte(0x08);&lt;br /&gt;
		OW_WriteByte(0x00);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0xBE);    // Read Scratch Pad&lt;br /&gt;
		vystup = OW_ReadByte();&lt;br /&gt;
		znamienko = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		count_remain = OW_ReadByte();&lt;br /&gt;
		LCD_Position(0,0);&lt;br /&gt;
		LCD_PrString(iteplota);&lt;br /&gt;
		LCD_Position(1,1);&lt;br /&gt;
		if(znamienko==0x00)&lt;br /&gt;
		LCD_PrString(plus);&lt;br /&gt;
		else &lt;br /&gt;
		LCD_PrString(minus);&lt;br /&gt;
		PREVOD(vystup, znamienko, count_remain);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	} &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teraz uvediem kód v assembleri. Tento program je podstatne dlhší a nefunguje rovnako ako vyššie uvedený program v jazyku C. Z jednotlivých teplomerov sú len vyčítané byty, ktoré sa vypíšu na LCD a aj na rozhranie RS232. Medzi jednotlivými teplomermi prepíname pomocou sériového rozhrania. Ak stlačíme i, zobrazia sa údaje z vnútorného teplomera, ak stlačíme o, zobrazia sa údaje z vonkajšieho teplomera. &lt;br /&gt;
Na sériovom rozhrané sú údaje vypísané v napríklad nasledovnom tvare:&lt;br /&gt;
&lt;br /&gt;
00       (znamienko)&lt;br /&gt;
&lt;br /&gt;
3A       (teplota)&lt;br /&gt;
&lt;br /&gt;
0D       (byte count_remain pre zvýšenie presnosti nameranej teploty)&lt;br /&gt;
&lt;br /&gt;
Na LCD to vyzerá nasledovne:&lt;br /&gt;
&lt;br /&gt;
Teplota vonku:&lt;br /&gt;
&lt;br /&gt;
+  3A  0D&lt;br /&gt;
&lt;br /&gt;
Samozrejme, údaje sú vypisované v hexadecimálnom tvare. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
include &amp;quot;m8c.inc&amp;quot;       	; part specific constants and macros&lt;br /&gt;
include &amp;quot;memory.inc&amp;quot;    	; Constants &amp;amp; macros for SMM/LMM and Compiler&lt;br /&gt;
include &amp;quot;PSoCAPI.inc&amp;quot;   	; PSoC API definitions for all User Modules&lt;br /&gt;
&lt;br /&gt;
export _main&lt;br /&gt;
&lt;br /&gt;
area bss(ram)				;premenne&lt;br /&gt;
	teplota:	blk 1&lt;br /&gt;
	znamienko:	blk 1&lt;br /&gt;
	presnost:	blk 1&lt;br /&gt;
&lt;br /&gt;
area lit					;definovanie retazcov&lt;br /&gt;
	out: 		DS &amp;quot;Teplota vonku&amp;quot;&lt;br /&gt;
				DB 0x00&lt;br /&gt;
	in:  		DS &amp;quot;Teplota vnutri&amp;quot;&lt;br /&gt;
				DB 0x00&lt;br /&gt;
	plus:		DS &amp;quot;+&amp;quot;&lt;br /&gt;
				DB 0x00&lt;br /&gt;
	minus:		DS &amp;quot;-&amp;quot;&lt;br /&gt;
				DB 0x00&lt;br /&gt;
	text:		DS &amp;quot;Komunikacia OK&amp;quot;&lt;br /&gt;
				DB 0x00&lt;br /&gt;
	&lt;br /&gt;
area text&lt;br /&gt;
&lt;br /&gt;
;--------------------------------zaciatok hlavnej funkcie--------------------------------------------&lt;br /&gt;
_main:&lt;br /&gt;
M8C_EnableGInt&lt;br /&gt;
call LCD_Start&lt;br /&gt;
mov   A, UART_PARITY_NONE  &lt;br /&gt;
lcall  UART_Start&lt;br /&gt;
WaitForData: 				        ; cakanie na povel &lt;br /&gt;
    lcall  UART_bReadRxStatus    &lt;br /&gt;
    and   A, UART_RX_COMPLETE    &lt;br /&gt;
    jz    WaitForData&lt;br /&gt;
	&lt;br /&gt;
    lcall  UART_bReadRxData                     ; citanie dat    &lt;br /&gt;
    lcall  UART_SendData  &lt;br /&gt;
		&lt;br /&gt;
	cmp A,'q'				; kontrola komunikacie&lt;br /&gt;
 	jz state_q&lt;br /&gt;
	&lt;br /&gt;
	cmp A,'o'				; vycitanie bytov z DS18S20(vonkajsi teplomer)&lt;br /&gt;
 	jz state_w&lt;br /&gt;
	&lt;br /&gt;
	cmp A,'i'				; vycitanie bytov z DS18S20(vnutorny teplomer)&lt;br /&gt;
 	jz state_s&lt;br /&gt;
&lt;br /&gt;
;--------------------------------------------------------------------------------------------	&lt;br /&gt;
state_w:&lt;br /&gt;
lcall OW_Start &lt;br /&gt;
lcall OW_Reset &lt;br /&gt;
mov   A,55h                             ;skip ROM  &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
&lt;br /&gt;
mov   A,10h        			;zadanie adresy teplomera     &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,5Fh             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,D4h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,CDh             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,01h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,08h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,00h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,C9h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,44h           		       ;start konverzie teploty  &lt;br /&gt;
&lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,4Bh            		       ;oneskorenie 750ms &lt;br /&gt;
&lt;br /&gt;
lcall  OW_Delay10mTimes            &lt;br /&gt;
&lt;br /&gt;
lcall OW_Reset&lt;br /&gt;
&lt;br /&gt;
mov   A,55h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
&lt;br /&gt;
mov   A,10h        			;zadanie adresy teplomera     &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,5Fh             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,D4h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,CDh             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,01h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,08h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,00h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,C9h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
&lt;br /&gt;
mov   A,BEh           		       ;start konverzie teploty  &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
&lt;br /&gt;
lcall  OW_ReadByte&lt;br /&gt;
mov [teplota], A&lt;br /&gt;
lcall  OW_ReadByte&lt;br /&gt;
mov [znamienko], A&lt;br /&gt;
lcall  OW_ReadByte&lt;br /&gt;
lcall  OW_ReadByte&lt;br /&gt;
lcall  OW_ReadByte&lt;br /&gt;
lcall  OW_ReadByte&lt;br /&gt;
lcall  OW_ReadByte&lt;br /&gt;
mov [presnost], A&lt;br /&gt;
lcall UART_PutCRLF&lt;br /&gt;
mov A,[znamienko] &lt;br /&gt;
lcall UART_PutSHexByte&lt;br /&gt;
lcall UART_PutCRLF&lt;br /&gt;
mov A,[teplota] &lt;br /&gt;
lcall UART_PutSHexByte&lt;br /&gt;
lcall UART_PutCRLF&lt;br /&gt;
mov A,[presnost] &lt;br /&gt;
lcall UART_PutSHexByte&lt;br /&gt;
&lt;br /&gt;
mov A,00h 					; riadok&lt;br /&gt;
mov X,00h					; bunka&lt;br /&gt;
lcall LCD_Position&lt;br /&gt;
mov A, &amp;gt;out&lt;br /&gt;
mov X, &amp;lt;out&lt;br /&gt;
call LCD_PrCString&lt;br /&gt;
cmp [znamienko], 00h&lt;br /&gt;
jz tlac_plus&lt;br /&gt;
jnz tlac_minus&lt;br /&gt;
tlac_plus:&lt;br /&gt;
mov A,01h 					; riadok&lt;br /&gt;
mov X,00h					; bunka&lt;br /&gt;
lcall LCD_Position&lt;br /&gt;
mov A, &amp;gt;plus&lt;br /&gt;
mov X, &amp;lt;plus&lt;br /&gt;
call LCD_PrCString&lt;br /&gt;
jmp Pokracuj&lt;br /&gt;
tlac_minus:&lt;br /&gt;
mov A,01h 					; riadok&lt;br /&gt;
mov X,00h					; bunka&lt;br /&gt;
lcall LCD_Position&lt;br /&gt;
mov A, &amp;gt;minus&lt;br /&gt;
mov X, &amp;lt;minus&lt;br /&gt;
call LCD_PrCString&lt;br /&gt;
jmp Pokracuj&lt;br /&gt;
Pokracuj:&lt;br /&gt;
mov A,01h 					; riadok&lt;br /&gt;
mov X,03h					; bunka&lt;br /&gt;
lcall LCD_Position&lt;br /&gt;
mov A, [teplota] 			; nacita byt pre tlac&lt;br /&gt;
lcall LCD_PrHexByte &lt;br /&gt;
mov A,01h 					; riadok&lt;br /&gt;
mov X,07h					; bunka&lt;br /&gt;
lcall LCD_Position&lt;br /&gt;
mov A, [presnost] 			; nacita byt pre tlac&lt;br /&gt;
lcall LCD_PrHexByte &lt;br /&gt;
jmp WaitForData&lt;br /&gt;
;------------------------------------------------------------------------------------&lt;br /&gt;
state_s:&lt;br /&gt;
lcall OW_Start &lt;br /&gt;
lcall OW_Reset &lt;br /&gt;
mov   A,55h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
&lt;br /&gt;
mov   A,10h        			;zadanie adresy teplomera     &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,59h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,F7h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,CDh             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,01h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,08h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,00h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,CDh             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,44h           		;start konverzie teploty  &lt;br /&gt;
&lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,4Bh            		; Load delay time (example 3 would be 30mSec).&lt;br /&gt;
&lt;br /&gt;
lcall  OW_Delay10mTimes      ; Call function&lt;br /&gt;
&lt;br /&gt;
lcall OW_Reset&lt;br /&gt;
&lt;br /&gt;
mov   A,55h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
&lt;br /&gt;
mov   A,10h        			;zadanie adresy teplomera     &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,59h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,F7h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,CDh             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,01h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,08h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,00h             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
mov   A,CDh             &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
&lt;br /&gt;
mov   A,BEh           		;start konverzie teploty  &lt;br /&gt;
lcall  OW_WriteByte&lt;br /&gt;
&lt;br /&gt;
lcall  OW_ReadByte&lt;br /&gt;
mov [teplota], A&lt;br /&gt;
lcall  OW_ReadByte&lt;br /&gt;
mov [znamienko], A&lt;br /&gt;
lcall  OW_ReadByte&lt;br /&gt;
lcall  OW_ReadByte&lt;br /&gt;
lcall  OW_ReadByte&lt;br /&gt;
lcall  OW_ReadByte&lt;br /&gt;
lcall  OW_ReadByte&lt;br /&gt;
mov [presnost], A&lt;br /&gt;
lcall UART_PutCRLF&lt;br /&gt;
mov A,[znamienko] &lt;br /&gt;
lcall UART_PutSHexByte&lt;br /&gt;
lcall UART_PutCRLF&lt;br /&gt;
mov A,[teplota] &lt;br /&gt;
lcall UART_PutSHexByte&lt;br /&gt;
lcall UART_PutCRLF&lt;br /&gt;
mov A,[presnost] &lt;br /&gt;
lcall UART_PutSHexByte&lt;br /&gt;
&lt;br /&gt;
mov A,00h 					; riadok&lt;br /&gt;
mov X,00h					; bunka&lt;br /&gt;
lcall LCD_Position&lt;br /&gt;
mov A, &amp;gt;in&lt;br /&gt;
mov X, &amp;lt;in&lt;br /&gt;
call LCD_PrCString&lt;br /&gt;
cmp [znamienko], 00h&lt;br /&gt;
jz tlac_plus2&lt;br /&gt;
jnz tlac_minus2&lt;br /&gt;
tlac_plus2:&lt;br /&gt;
mov A,01h 					; riadok&lt;br /&gt;
mov X,00h					; bunka&lt;br /&gt;
lcall LCD_Position&lt;br /&gt;
mov A, &amp;gt;plus&lt;br /&gt;
mov X, &amp;lt;plus&lt;br /&gt;
call LCD_PrCString&lt;br /&gt;
jmp Pokracuj2&lt;br /&gt;
tlac_minus2:&lt;br /&gt;
mov A,01h 					; riadok&lt;br /&gt;
mov X,00h					; bunka&lt;br /&gt;
lcall LCD_Position&lt;br /&gt;
mov A, &amp;gt;minus&lt;br /&gt;
mov X, &amp;lt;minus&lt;br /&gt;
call LCD_PrCString&lt;br /&gt;
jmp Pokracuj2&lt;br /&gt;
Pokracuj2:&lt;br /&gt;
mov A,01h 					; riadok&lt;br /&gt;
mov X,03h					; bunka&lt;br /&gt;
lcall LCD_Position&lt;br /&gt;
mov A, [teplota] 			; nacita byt pre tlac&lt;br /&gt;
lcall LCD_PrHexByte &lt;br /&gt;
mov A,01h 					; riadok&lt;br /&gt;
mov X,07h					; bunka&lt;br /&gt;
lcall LCD_Position&lt;br /&gt;
mov A, [presnost] 			; nacita byt pre tlac&lt;br /&gt;
lcall LCD_PrHexByte &lt;br /&gt;
jmp WaitForData&lt;br /&gt;
;------------------------------------------------------------------------------------&lt;br /&gt;
state_q:&lt;br /&gt;
lcall UART_PutCRLF&lt;br /&gt;
mov A, &amp;gt;text&lt;br /&gt;
mov X, &amp;lt;text&lt;br /&gt;
lcall UART_CPutString&lt;br /&gt;
lcall UART_PutCRLF&lt;br /&gt;
jmp   WaitForData&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Odkazy a referencie ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6072</id>
		<title>Meranie teploty pomocou teplomera DS18S20</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6072"/>
		<updated>2010-07-05T09:24:15Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* Samotný program teplomera */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Základný popis úlohy ==&lt;br /&gt;
&lt;br /&gt;
Tento systém bude obsahovať dva teplomery DS18S20 a teplota sa bude vypisovať na display. Prepínať medzi jednotlivými teplomermi budeme pomocou tlačítka. Teplota bude na LCD zobrazená v desiatkovej sústave s presnosťou na desatiny stupňa celsia.&lt;br /&gt;
&lt;br /&gt;
== Zapojenie teplomerov ==&lt;br /&gt;
&lt;br /&gt;
V článku o 1-wire &amp;lt;ref&amp;gt;http://kiwiki.fmtnuni.sk/mediawiki/index.php/Protokol_1-Wire#DS18S20&amp;lt;/ref&amp;gt; rozhraní sú uvedené aj základné vlastnosti tohto teplomera, takže sa k tomu už nebudem vyjadrovať, snáď len uvediem zapojenie jednotlivých teplomerov, ktoré možno vidieť na obr. 1. Pull-up rezistor je nutný, nakoľko bez neho to nefunguje ako má.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zapojenie teplomerov DS18S20.png|center|thumb|400px|Obr. 1. Zapojenie teplomerov]]&lt;br /&gt;
&lt;br /&gt;
Na komunikáciu s viacerými teplomermi na zbernici 1-wire potrebujeme poznať adresu každého teplomera. Jednotlivé adresy sú uvedené v tabuľke 1. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;600&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Názov teplomera&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Adresa teplomera&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vonkajší teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|105FD4CD010800C9&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vnútorný teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|1059F7CD010800CD&lt;br /&gt;
&lt;br /&gt;
|+align=&amp;quot;bottom&amp;quot; |Tab. 1 Názov a adresa teplomerov&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rozhranie 1-wire v PSoC ==&lt;br /&gt;
&lt;br /&gt;
V samotnom dizajneri sa nachádza hardvérový blok pre podporu tejto zbernice. My však budeme používať softvérový blok, ktorý sa dá stiahnuť na nasledovnej adrese:&lt;br /&gt;
&lt;br /&gt;
http://www.psocdeveloper.com/tools/misc-dev-tools.html&lt;br /&gt;
&lt;br /&gt;
Potom ho doinštalujeme podľa návodu, ktorý sa nachádza tu:&lt;br /&gt;
&lt;br /&gt;
http://www.psocdeveloper.com/forums/viewtopic.php?p=29&amp;amp;sid=2d053ae959fd795eaf997f498bfe3de5&amp;amp;view=next&lt;br /&gt;
&lt;br /&gt;
Po umiestnení tohto bloku do projektu musíme vykonať zopár nastavení. Názorne sú ukázané na obr. 2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Nastavenia_1-wireSW.jpg|center|thumb|400px|Obr. 2. Nastavenia 1-wireSW]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''LCD blok'''&lt;br /&gt;
&lt;br /&gt;
Pre komunikáciu s LCD musíme použiť blok LCD. Jeho nastavenie je jednoduché, nastavíme len, ktorý port sa na komunikáciu bude používať a či chceme povoliť alebo zakázať bar grafy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Samotný program teplomera ==&lt;br /&gt;
&lt;br /&gt;
Program je napísaný v jazyku C, chcel by som pridať aj kód v assembleri, ale zatiaľ aspoň takto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;m8c.h&amp;gt;       &lt;br /&gt;
#include &amp;quot;PSoCAPI.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// funkcia PREVOD služi na výpis teploty v desiatkovej sústave na LCD &lt;br /&gt;
// a zároveň počíta vyššiu presnosť nameranej teploty&lt;br /&gt;
&lt;br /&gt;
void PREVOD(BYTE vstup, BYTE znamienko, BYTE count_remain)  &lt;br /&gt;
{&lt;br /&gt;
 long a, b=0, c, i, d;&lt;br /&gt;
 char vystup[]=&amp;quot;00.0&amp;quot;, cisla[]=&amp;quot;0123456789&amp;quot;; &lt;br /&gt;
 float teplota, remain, presnost;&lt;br /&gt;
 remain=count_remain;&lt;br /&gt;
 teplota=vstup;&lt;br /&gt;
 teplota=(teplota/2.0)-0.25;&lt;br /&gt;
 presnost=(16.0-remain)/16.0;&lt;br /&gt;
 teplota=teplota+presnost;&lt;br /&gt;
 if(znamienko==0xFF)&lt;br /&gt;
 {&lt;br /&gt;
 teplota=256-vstup;&lt;br /&gt;
 teplota=(teplota/2.0)-0.25;&lt;br /&gt;
 teplota=teplota+presnost;&lt;br /&gt;
 }&lt;br /&gt;
 teplota=teplota*10.0;&lt;br /&gt;
 for(i=100;i&amp;gt;=1;i=i/10)&lt;br /&gt;
	 {  &lt;br /&gt;
	 	a=teplota/i;&lt;br /&gt;
		c=a-b*10;&lt;br /&gt;
		b=a;&lt;br /&gt;
		if(i==100) d=0;&lt;br /&gt;
		if(i==10) d=1;&lt;br /&gt;
		if(i==1) d=3;&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		if(c==0)vystup[d]=cisla[0];&lt;br /&gt;
		if(c==1)vystup[d]=cisla[1];&lt;br /&gt;
		if(c==2)vystup[d]=cisla[2];&lt;br /&gt;
		if(c==3)vystup[d]=cisla[3];&lt;br /&gt;
		if(c==4)vystup[d]=cisla[4];&lt;br /&gt;
		if(c==5)vystup[d]=cisla[5];&lt;br /&gt;
		if(c==6)vystup[d]=cisla[6];&lt;br /&gt;
		if(c==7)vystup[d]=cisla[7];&lt;br /&gt;
		if(c==8)vystup[d]=cisla[8];&lt;br /&gt;
		if(c==9)vystup[d]=cisla[9];&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
   LCD_Position(1,3);&lt;br /&gt;
   LCD_PrString(vystup);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
// začiatok hlavnej funkcie&lt;br /&gt;
&lt;br /&gt;
void main(void)&lt;br /&gt;
{	&lt;br /&gt;
	BYTE vystup, znamienko,count_remain,byte;&lt;br /&gt;
	int p=1;&lt;br /&gt;
	char eteplota[]=&amp;quot;Teplota vonku:&amp;quot;, plus[]=&amp;quot;+&amp;quot;, minus[]=&amp;quot;-&amp;quot;;&lt;br /&gt;
	char prazdny[]=&amp;quot;                &amp;quot;, iteplota[]=&amp;quot;Teplota vnutri&amp;quot;;&lt;br /&gt;
	M8C_EnableGInt ;&lt;br /&gt;
	OW_Start();&lt;br /&gt;
	LCD_Start();&lt;br /&gt;
	LCD_Init();&lt;br /&gt;
	while(1)&lt;br /&gt;
	{	                      //na pin P1.0 privedieme cez tlačitko 5V&lt;br /&gt;
		PRT1DR=0;             //na port 1 sa zapíše 0&lt;br /&gt;
		if(PRT1DR==1) p++;    //ak sa na porte 1 objaví 1, inkrementuje sa p &lt;br /&gt;
		if (p&amp;gt;2) p=1;         //pre správnu funkčnosť musí byť pin P1.0 nastavený na režim Hi_Z digital&lt;br /&gt;
		OW_Reset();&lt;br /&gt;
		if(p==1)              //ak bude p=1, komunikácia bude prebiehať s vonkajším teplomerom&lt;br /&gt;
		{&lt;br /&gt;
		OW_WriteByte(0x55);   //príkaz Match ROM&lt;br /&gt;
		OW_WriteByte(0x10);   //zadanie adresy teplomera&lt;br /&gt;
		OW_WriteByte(0x5F);&lt;br /&gt;
		OW_WriteByte(0xD4);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x01);&lt;br /&gt;
		OW_WriteByte(0x08);&lt;br /&gt;
		OW_WriteByte(0x00);&lt;br /&gt;
		OW_WriteByte(0xC9);&lt;br /&gt;
		OW_WriteByte(0x44);   //príkaz pre konverziu teploty&lt;br /&gt;
		OW_Delay10mTimes(75); //čakanie 750us&lt;br /&gt;
		OW_Reset();           //reset rozhrania&lt;br /&gt;
		OW_WriteByte(0x55);   //Match ROM&lt;br /&gt;
		OW_WriteByte(0x10);   //zaddanie adresy teplomera&lt;br /&gt;
		OW_WriteByte(0x5F);&lt;br /&gt;
		OW_WriteByte(0xD4);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x01);&lt;br /&gt;
		OW_WriteByte(0x08);&lt;br /&gt;
		OW_WriteByte(0x00);&lt;br /&gt;
		OW_WriteByte(0xC9);&lt;br /&gt;
		OW_WriteByte(0xBE);   //príkaz pre čítanie Scratch Pad&lt;br /&gt;
		vystup = OW_ReadByte(); // čítanie jednotlivých bytov (teplota)&lt;br /&gt;
		znamienko = OW_ReadByte(); //(znamienko)&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		count_remain = OW_ReadByte(); //(byte pre zvýšenie presnosti teplomera)&lt;br /&gt;
		LCD_Position(0,0);     //nastavenie kurzora na LCD na pozíciu 0,0&lt;br /&gt;
		LCD_PrString(prazdny); //vytlacenie prázdneho reťazca na LCD&lt;br /&gt;
		LCD_Position(0,0);     //nastavenie kurzora na LCD na pozíciu 0,0&lt;br /&gt;
		LCD_PrString(eteplota);//vytlacenie retazca eteplota na LCD&lt;br /&gt;
		LCD_Position(1,1);     //nastavenie kurzora na LCD na pozíciu 1,1&lt;br /&gt;
		if(znamienko==0x00)    //ak bude znamienko=0, vytlaci sa na LCD +&lt;br /&gt;
		LCD_PrString(plus);&lt;br /&gt;
		else&lt;br /&gt;
		LCD_PrString(minus);   //inak sa vytlaci na LCD -&lt;br /&gt;
		PREVOD(vystup, znamienko, count_remain); //nacitane 3 byty sa odovzdajú funkcií PREVOD, ktorá vyslednú teplotu vypíše na LCD&lt;br /&gt;
		}&lt;br /&gt;
		if(p==2)               //ak p=2, komunikácia bude prebiehať s vnútorným teplomerom&lt;br /&gt;
		{                      //postup je presne taký ako aj pri predchádzajúcom teplomery&lt;br /&gt;
		OW_WriteByte(0x55);&lt;br /&gt;
		OW_WriteByte(0x10);    //zadanie adresy teplomera&lt;br /&gt;
		OW_WriteByte(0x59);&lt;br /&gt;
		OW_WriteByte(0xF7);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x01);&lt;br /&gt;
		OW_WriteByte(0x08);&lt;br /&gt;
		OW_WriteByte(0x00);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x44);    // Start Conversion&lt;br /&gt;
		OW_Delay10mTimes(75);&lt;br /&gt;
		OW_Reset();&lt;br /&gt;
		OW_WriteByte(0x55);&lt;br /&gt;
		OW_WriteByte(0x10);&lt;br /&gt;
		OW_WriteByte(0x59);&lt;br /&gt;
		OW_WriteByte(0xF7);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x01);&lt;br /&gt;
		OW_WriteByte(0x08);&lt;br /&gt;
		OW_WriteByte(0x00);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0xBE);    // Read Scratch Pad&lt;br /&gt;
		vystup = OW_ReadByte();&lt;br /&gt;
		znamienko = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		count_remain = OW_ReadByte();&lt;br /&gt;
		LCD_Position(0,0);&lt;br /&gt;
		LCD_PrString(iteplota);&lt;br /&gt;
		LCD_Position(1,1);&lt;br /&gt;
		if(znamienko==0x00)&lt;br /&gt;
		LCD_PrString(plus);&lt;br /&gt;
		else &lt;br /&gt;
		LCD_PrString(minus);&lt;br /&gt;
		PREVOD(vystup, znamienko, count_remain);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	} &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Odkazy a referencie ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6071</id>
		<title>Meranie teploty pomocou teplomera DS18S20</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6071"/>
		<updated>2010-07-05T09:10:12Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* Samotný program teplomera */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Základný popis úlohy ==&lt;br /&gt;
&lt;br /&gt;
Tento systém bude obsahovať dva teplomery DS18S20 a teplota sa bude vypisovať na display. Prepínať medzi jednotlivými teplomermi budeme pomocou tlačítka. Teplota bude na LCD zobrazená v desiatkovej sústave s presnosťou na desatiny stupňa celsia.&lt;br /&gt;
&lt;br /&gt;
== Zapojenie teplomerov ==&lt;br /&gt;
&lt;br /&gt;
V článku o 1-wire &amp;lt;ref&amp;gt;http://kiwiki.fmtnuni.sk/mediawiki/index.php/Protokol_1-Wire#DS18S20&amp;lt;/ref&amp;gt; rozhraní sú uvedené aj základné vlastnosti tohto teplomera, takže sa k tomu už nebudem vyjadrovať, snáď len uvediem zapojenie jednotlivých teplomerov, ktoré možno vidieť na obr. 1. Pull-up rezistor je nutný, nakoľko bez neho to nefunguje ako má.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zapojenie teplomerov DS18S20.png|center|thumb|400px|Obr. 1. Zapojenie teplomerov]]&lt;br /&gt;
&lt;br /&gt;
Na komunikáciu s viacerými teplomermi na zbernici 1-wire potrebujeme poznať adresu každého teplomera. Jednotlivé adresy sú uvedené v tabuľke 1. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;600&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Názov teplomera&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Adresa teplomera&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vonkajší teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|105FD4CD010800C9&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vnútorný teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|1059F7CD010800CD&lt;br /&gt;
&lt;br /&gt;
|+align=&amp;quot;bottom&amp;quot; |Tab. 1 Názov a adresa teplomerov&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rozhranie 1-wire v PSoC ==&lt;br /&gt;
&lt;br /&gt;
V samotnom dizajneri sa nachádza hardvérový blok pre podporu tejto zbernice. My však budeme používať softvérový blok, ktorý sa dá stiahnuť na nasledovnej adrese:&lt;br /&gt;
&lt;br /&gt;
http://www.psocdeveloper.com/tools/misc-dev-tools.html&lt;br /&gt;
&lt;br /&gt;
Potom ho doinštalujeme podľa návodu, ktorý sa nachádza tu:&lt;br /&gt;
&lt;br /&gt;
http://www.psocdeveloper.com/forums/viewtopic.php?p=29&amp;amp;sid=2d053ae959fd795eaf997f498bfe3de5&amp;amp;view=next&lt;br /&gt;
&lt;br /&gt;
Po umiestnení tohto bloku do projektu musíme vykonať zopár nastavení. Názorne sú ukázané na obr. 2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Nastavenia_1-wireSW.jpg|center|thumb|400px|Obr. 2. Nastavenia 1-wireSW]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''LCD blok'''&lt;br /&gt;
&lt;br /&gt;
Pre komunikáciu s LCD musíme použiť blok LCD. Jeho nastavenie je jednoduché, nastavíme len, ktorý port sa na komunikáciu bude používať a či chceme povoliť alebo zakázať bar grafy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Samotný program teplomera ==&lt;br /&gt;
&lt;br /&gt;
Program je napísaný v jazyku C, chcel by som pridať aj kód v assembleri, ale zatiaľ aspoň takto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;m8c.h&amp;gt;       &lt;br /&gt;
#include &amp;quot;PSoCAPI.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// funkcia PREVOD služi na výpis teploty v desiatkovej sústave na LCD &lt;br /&gt;
// a zároveň počíta vyššiu presnosť nameranej teploty&lt;br /&gt;
&lt;br /&gt;
void PREVOD(BYTE vstup, BYTE znamienko, BYTE count_remain)  &lt;br /&gt;
{&lt;br /&gt;
 long a, b=0, c, i, d;&lt;br /&gt;
 char vystup[]=&amp;quot;00.0&amp;quot;, cisla[]=&amp;quot;0123456789&amp;quot;; &lt;br /&gt;
 float teplota, remain, presnost;&lt;br /&gt;
 remain=count_remain;&lt;br /&gt;
 teplota=vstup;&lt;br /&gt;
 teplota=(teplota/2.0)-0.25;&lt;br /&gt;
 presnost=(16.0-remain)/16.0;&lt;br /&gt;
 teplota=teplota+presnost;&lt;br /&gt;
 if(znamienko==0xFF)&lt;br /&gt;
 {&lt;br /&gt;
 teplota=256-vstup;&lt;br /&gt;
 teplota=(teplota/2.0)-0.25;&lt;br /&gt;
 teplota=teplota+presnost;&lt;br /&gt;
 }&lt;br /&gt;
 teplota=teplota*10.0;&lt;br /&gt;
 for(i=100;i&amp;gt;=1;i=i/10)&lt;br /&gt;
	 {  &lt;br /&gt;
	 	a=teplota/i;&lt;br /&gt;
		c=a-b*10;&lt;br /&gt;
		b=a;&lt;br /&gt;
		if(i==100) d=0;&lt;br /&gt;
		if(i==10) d=1;&lt;br /&gt;
		if(i==1) d=3;&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		if(c==0)vystup[d]=cisla[0];&lt;br /&gt;
		if(c==1)vystup[d]=cisla[1];&lt;br /&gt;
		if(c==2)vystup[d]=cisla[2];&lt;br /&gt;
		if(c==3)vystup[d]=cisla[3];&lt;br /&gt;
		if(c==4)vystup[d]=cisla[4];&lt;br /&gt;
		if(c==5)vystup[d]=cisla[5];&lt;br /&gt;
		if(c==6)vystup[d]=cisla[6];&lt;br /&gt;
		if(c==7)vystup[d]=cisla[7];&lt;br /&gt;
		if(c==8)vystup[d]=cisla[8];&lt;br /&gt;
		if(c==9)vystup[d]=cisla[9];&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
   LCD_Position(1,3);&lt;br /&gt;
   LCD_PrString(vystup);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main(void)&lt;br /&gt;
{	&lt;br /&gt;
	BYTE vystup, znamienko,count_remain,byte;&lt;br /&gt;
	int p=1;&lt;br /&gt;
	char eteplota[]=&amp;quot;Teplota vonku:&amp;quot;, plus[]=&amp;quot;+&amp;quot;, minus[]=&amp;quot;-&amp;quot;;&lt;br /&gt;
	char prazdny[]=&amp;quot;                &amp;quot;, iteplota[]=&amp;quot;Teplota vnutri&amp;quot;;&lt;br /&gt;
	M8C_EnableGInt ;&lt;br /&gt;
	OW_Start();&lt;br /&gt;
	LCD_Start();&lt;br /&gt;
	LCD_Init();&lt;br /&gt;
	while(1)&lt;br /&gt;
	{	                      //na pin P1.0 privedieme cez tlačitko 5V&lt;br /&gt;
		PRT1DR=0;             //na port 1 sa zapíše 0&lt;br /&gt;
		if(PRT1DR==1) p++;    //ak sa na porte 1 objaví 1, inkrementuje sa p &lt;br /&gt;
		if (p&amp;gt;2) p=1;         //pre správnu funkčnosť musí byť pin P1.0 nastavený na režim Hi_Z digital&lt;br /&gt;
		OW_Reset();&lt;br /&gt;
		if(p==1)              //ak bude p=1, komunikácia bude prebiehať s vonkajším teplomerom&lt;br /&gt;
		{&lt;br /&gt;
		OW_WriteByte(0x55); &lt;br /&gt;
		OW_WriteByte(0x10); //zadanie adresy teplomera&lt;br /&gt;
		OW_WriteByte(0x5F);&lt;br /&gt;
		OW_WriteByte(0xD4);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x01);&lt;br /&gt;
		OW_WriteByte(0x08);&lt;br /&gt;
		OW_WriteByte(0x00);&lt;br /&gt;
		OW_WriteByte(0xC9);&lt;br /&gt;
		OW_WriteByte(0x44); // Start Conversion&lt;br /&gt;
		OW_Delay10mTimes(75);&lt;br /&gt;
		OW_Reset();&lt;br /&gt;
		OW_WriteByte(0x55);&lt;br /&gt;
		OW_WriteByte(0x10);&lt;br /&gt;
		OW_WriteByte(0x5F);&lt;br /&gt;
		OW_WriteByte(0xD4);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x01);&lt;br /&gt;
		OW_WriteByte(0x08);&lt;br /&gt;
		OW_WriteByte(0x00);&lt;br /&gt;
		OW_WriteByte(0xC9);&lt;br /&gt;
		OW_WriteByte(0xBE); // Read Scratch Pad&lt;br /&gt;
		vystup = OW_ReadByte();&lt;br /&gt;
		znamienko = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		count_remain = OW_ReadByte();&lt;br /&gt;
		LCD_Position(0,0);&lt;br /&gt;
		LCD_PrString(prazdny);&lt;br /&gt;
		LCD_Position(0,0);&lt;br /&gt;
		LCD_PrString(eteplota);&lt;br /&gt;
		LCD_Position(1,1);&lt;br /&gt;
		if(znamienko==0x00)&lt;br /&gt;
		LCD_PrString(plus);&lt;br /&gt;
		else&lt;br /&gt;
		LCD_PrString(minus);&lt;br /&gt;
		PREVOD(vystup, znamienko, count_remain);&lt;br /&gt;
		}&lt;br /&gt;
		if(p==2)&lt;br /&gt;
		{&lt;br /&gt;
		OW_WriteByte(0x55);&lt;br /&gt;
		OW_WriteByte(0x10); //zadanie adresy teplomera&lt;br /&gt;
		OW_WriteByte(0x59);&lt;br /&gt;
		OW_WriteByte(0xF7);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x01);&lt;br /&gt;
		OW_WriteByte(0x08);&lt;br /&gt;
		OW_WriteByte(0x00);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x44); // Start Conversion&lt;br /&gt;
		OW_Delay10mTimes(75);&lt;br /&gt;
		OW_Reset();&lt;br /&gt;
		OW_WriteByte(0x55);&lt;br /&gt;
		OW_WriteByte(0x10);&lt;br /&gt;
		OW_WriteByte(0x59);&lt;br /&gt;
		OW_WriteByte(0xF7);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x01);&lt;br /&gt;
		OW_WriteByte(0x08);&lt;br /&gt;
		OW_WriteByte(0x00);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0xBE); // Read Scratch Pad&lt;br /&gt;
		vystup = OW_ReadByte();&lt;br /&gt;
		znamienko = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		count_remain = OW_ReadByte();&lt;br /&gt;
		LCD_Position(0,0);&lt;br /&gt;
		LCD_PrString(iteplota);&lt;br /&gt;
		LCD_Position(1,1);&lt;br /&gt;
		if(znamienko==0x00)&lt;br /&gt;
		LCD_PrString(plus);&lt;br /&gt;
		else &lt;br /&gt;
		LCD_PrString(minus);&lt;br /&gt;
		PREVOD(vystup, znamienko, count_remain);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	} &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Odkazy a referencie ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6070</id>
		<title>Meranie teploty pomocou teplomera DS18S20</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6070"/>
		<updated>2010-07-05T08:58:18Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* Samotný program teplomera */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Základný popis úlohy ==&lt;br /&gt;
&lt;br /&gt;
Tento systém bude obsahovať dva teplomery DS18S20 a teplota sa bude vypisovať na display. Prepínať medzi jednotlivými teplomermi budeme pomocou tlačítka. Teplota bude na LCD zobrazená v desiatkovej sústave s presnosťou na desatiny stupňa celsia.&lt;br /&gt;
&lt;br /&gt;
== Zapojenie teplomerov ==&lt;br /&gt;
&lt;br /&gt;
V článku o 1-wire &amp;lt;ref&amp;gt;http://kiwiki.fmtnuni.sk/mediawiki/index.php/Protokol_1-Wire#DS18S20&amp;lt;/ref&amp;gt; rozhraní sú uvedené aj základné vlastnosti tohto teplomera, takže sa k tomu už nebudem vyjadrovať, snáď len uvediem zapojenie jednotlivých teplomerov, ktoré možno vidieť na obr. 1. Pull-up rezistor je nutný, nakoľko bez neho to nefunguje ako má.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zapojenie teplomerov DS18S20.png|center|thumb|400px|Obr. 1. Zapojenie teplomerov]]&lt;br /&gt;
&lt;br /&gt;
Na komunikáciu s viacerými teplomermi na zbernici 1-wire potrebujeme poznať adresu každého teplomera. Jednotlivé adresy sú uvedené v tabuľke 1. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;600&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Názov teplomera&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Adresa teplomera&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vonkajší teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|105FD4CD010800C9&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vnútorný teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|1059F7CD010800CD&lt;br /&gt;
&lt;br /&gt;
|+align=&amp;quot;bottom&amp;quot; |Tab. 1 Názov a adresa teplomerov&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rozhranie 1-wire v PSoC ==&lt;br /&gt;
&lt;br /&gt;
V samotnom dizajneri sa nachádza hardvérový blok pre podporu tejto zbernice. My však budeme používať softvérový blok, ktorý sa dá stiahnuť na nasledovnej adrese:&lt;br /&gt;
&lt;br /&gt;
http://www.psocdeveloper.com/tools/misc-dev-tools.html&lt;br /&gt;
&lt;br /&gt;
Potom ho doinštalujeme podľa návodu, ktorý sa nachádza tu:&lt;br /&gt;
&lt;br /&gt;
http://www.psocdeveloper.com/forums/viewtopic.php?p=29&amp;amp;sid=2d053ae959fd795eaf997f498bfe3de5&amp;amp;view=next&lt;br /&gt;
&lt;br /&gt;
Po umiestnení tohto bloku do projektu musíme vykonať zopár nastavení. Názorne sú ukázané na obr. 2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Nastavenia_1-wireSW.jpg|center|thumb|400px|Obr. 2. Nastavenia 1-wireSW]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''LCD blok'''&lt;br /&gt;
&lt;br /&gt;
Pre komunikáciu s LCD musíme použiť blok LCD. Jeho nastavenie je jednoduché, nastavíme len, ktorý port sa na komunikáciu bude používať a či chceme povoliť alebo zakázať bar grafy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Samotný program teplomera ==&lt;br /&gt;
&lt;br /&gt;
Program je napísaný v jazyku C, chcel by som pridať aj kód v assembleri, ale zatiaľ aspoň takto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;m8c.h&amp;gt;       &lt;br /&gt;
#include &amp;quot;PSoCAPI.h&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
void PREVOD(BYTE vstup, BYTE znamienko, BYTE count_remain)&lt;br /&gt;
{&lt;br /&gt;
 long a, b=0, c, i, d;&lt;br /&gt;
 char vystup[]=&amp;quot;00.0&amp;quot;, cisla[]=&amp;quot;0123456789&amp;quot;; &lt;br /&gt;
 float teplota, remain, presnost;&lt;br /&gt;
 remain=count_remain;&lt;br /&gt;
 teplota=vstup;&lt;br /&gt;
 teplota=(teplota/2.0)-0.25;&lt;br /&gt;
 presnost=(16.0-remain)/16.0;&lt;br /&gt;
 teplota=teplota+presnost;&lt;br /&gt;
 if(znamienko==0xFF)&lt;br /&gt;
 {&lt;br /&gt;
 teplota=256-vstup;&lt;br /&gt;
 teplota=(teplota/2.0)-0.25;&lt;br /&gt;
 teplota=teplota+presnost;&lt;br /&gt;
 }&lt;br /&gt;
 teplota=teplota*10.0;&lt;br /&gt;
 for(i=100;i&amp;gt;=1;i=i/10)&lt;br /&gt;
	 {  &lt;br /&gt;
	 	a=teplota/i;&lt;br /&gt;
		c=a-b*10;&lt;br /&gt;
		b=a;&lt;br /&gt;
		if(i==100) d=0;&lt;br /&gt;
		if(i==10) d=1;&lt;br /&gt;
		if(i==1) d=3;&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		if(c==0)vystup[d]=cisla[0];&lt;br /&gt;
		if(c==1)vystup[d]=cisla[1];&lt;br /&gt;
		if(c==2)vystup[d]=cisla[2];&lt;br /&gt;
		if(c==3)vystup[d]=cisla[3];&lt;br /&gt;
		if(c==4)vystup[d]=cisla[4];&lt;br /&gt;
		if(c==5)vystup[d]=cisla[5];&lt;br /&gt;
		if(c==6)vystup[d]=cisla[6];&lt;br /&gt;
		if(c==7)vystup[d]=cisla[7];&lt;br /&gt;
		if(c==8)vystup[d]=cisla[8];&lt;br /&gt;
		if(c==9)vystup[d]=cisla[9];&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
   LCD_Position(1,3);&lt;br /&gt;
   LCD_PrString(vystup);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main(void)&lt;br /&gt;
{	&lt;br /&gt;
	BYTE vystup, znamienko,count_remain,byte;&lt;br /&gt;
	int p=1;&lt;br /&gt;
	char eteplota[]=&amp;quot;Teplota vonku:&amp;quot;, plus[]=&amp;quot;+&amp;quot;, minus[]=&amp;quot;-&amp;quot;;&lt;br /&gt;
	char prazdny[]=&amp;quot;                &amp;quot;, iteplota[]=&amp;quot;Teplota vnutri&amp;quot;;&lt;br /&gt;
	M8C_EnableGInt ;&lt;br /&gt;
	OW_Start();&lt;br /&gt;
	LCD_Start();&lt;br /&gt;
	LCD_Init();&lt;br /&gt;
	while(1)&lt;br /&gt;
	{	&lt;br /&gt;
		PRT1DR=0;&lt;br /&gt;
		if(PRT1DR==1) p++;&lt;br /&gt;
		if (p&amp;gt;2) p=1;&lt;br /&gt;
		OW_Reset();&lt;br /&gt;
		if(p==1)&lt;br /&gt;
		{&lt;br /&gt;
		OW_WriteByte(0x55); &lt;br /&gt;
		OW_WriteByte(0x10); //zadanie adresy teplomera&lt;br /&gt;
		OW_WriteByte(0x5F);&lt;br /&gt;
		OW_WriteByte(0xD4);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x01);&lt;br /&gt;
		OW_WriteByte(0x08);&lt;br /&gt;
		OW_WriteByte(0x00);&lt;br /&gt;
		OW_WriteByte(0xC9);&lt;br /&gt;
		OW_WriteByte(0x44); // Start Conversion&lt;br /&gt;
		OW_Delay10mTimes(75);&lt;br /&gt;
		OW_Reset();&lt;br /&gt;
		OW_WriteByte(0x55);&lt;br /&gt;
		OW_WriteByte(0x10);&lt;br /&gt;
		OW_WriteByte(0x5F);&lt;br /&gt;
		OW_WriteByte(0xD4);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x01);&lt;br /&gt;
		OW_WriteByte(0x08);&lt;br /&gt;
		OW_WriteByte(0x00);&lt;br /&gt;
		OW_WriteByte(0xC9);&lt;br /&gt;
		OW_WriteByte(0xBE); // Read Scratch Pad&lt;br /&gt;
		vystup = OW_ReadByte();&lt;br /&gt;
		znamienko = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		count_remain = OW_ReadByte();&lt;br /&gt;
		LCD_Position(0,0);&lt;br /&gt;
		LCD_PrString(prazdny);&lt;br /&gt;
		LCD_Position(0,0);&lt;br /&gt;
		LCD_PrString(eteplota);&lt;br /&gt;
		LCD_Position(1,1);&lt;br /&gt;
		if(znamienko==0x00)&lt;br /&gt;
		LCD_PrString(plus);&lt;br /&gt;
		else&lt;br /&gt;
		LCD_PrString(minus);&lt;br /&gt;
		PREVOD(vystup, znamienko, count_remain);&lt;br /&gt;
		}&lt;br /&gt;
		if(p==2)&lt;br /&gt;
		{&lt;br /&gt;
		OW_WriteByte(0x55);&lt;br /&gt;
		OW_WriteByte(0x10); //zadanie adresy teplomera&lt;br /&gt;
		OW_WriteByte(0x59);&lt;br /&gt;
		OW_WriteByte(0xF7);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x01);&lt;br /&gt;
		OW_WriteByte(0x08);&lt;br /&gt;
		OW_WriteByte(0x00);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x44); // Start Conversion&lt;br /&gt;
		OW_Delay10mTimes(75);&lt;br /&gt;
		OW_Reset();&lt;br /&gt;
		OW_WriteByte(0x55);&lt;br /&gt;
		OW_WriteByte(0x10);&lt;br /&gt;
		OW_WriteByte(0x59);&lt;br /&gt;
		OW_WriteByte(0xF7);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0x01);&lt;br /&gt;
		OW_WriteByte(0x08);&lt;br /&gt;
		OW_WriteByte(0x00);&lt;br /&gt;
		OW_WriteByte(0xCD);&lt;br /&gt;
		OW_WriteByte(0xBE); // Read Scratch Pad&lt;br /&gt;
		vystup = OW_ReadByte();&lt;br /&gt;
		znamienko = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		byte = OW_ReadByte();&lt;br /&gt;
		count_remain = OW_ReadByte();&lt;br /&gt;
		LCD_Position(0,0);&lt;br /&gt;
		LCD_PrString(iteplota);&lt;br /&gt;
		LCD_Position(1,1);&lt;br /&gt;
		if(znamienko==0x00)&lt;br /&gt;
		LCD_PrString(plus);&lt;br /&gt;
		else &lt;br /&gt;
		LCD_PrString(minus);&lt;br /&gt;
		PREVOD(vystup, znamienko, count_remain);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	} &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Odkazy a referencie ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6069</id>
		<title>Meranie teploty pomocou teplomera DS18S20</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6069"/>
		<updated>2010-07-05T08:53:04Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Základný popis úlohy ==&lt;br /&gt;
&lt;br /&gt;
Tento systém bude obsahovať dva teplomery DS18S20 a teplota sa bude vypisovať na display. Prepínať medzi jednotlivými teplomermi budeme pomocou tlačítka. Teplota bude na LCD zobrazená v desiatkovej sústave s presnosťou na desatiny stupňa celsia.&lt;br /&gt;
&lt;br /&gt;
== Zapojenie teplomerov ==&lt;br /&gt;
&lt;br /&gt;
V článku o 1-wire &amp;lt;ref&amp;gt;http://kiwiki.fmtnuni.sk/mediawiki/index.php/Protokol_1-Wire#DS18S20&amp;lt;/ref&amp;gt; rozhraní sú uvedené aj základné vlastnosti tohto teplomera, takže sa k tomu už nebudem vyjadrovať, snáď len uvediem zapojenie jednotlivých teplomerov, ktoré možno vidieť na obr. 1. Pull-up rezistor je nutný, nakoľko bez neho to nefunguje ako má.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zapojenie teplomerov DS18S20.png|center|thumb|400px|Obr. 1. Zapojenie teplomerov]]&lt;br /&gt;
&lt;br /&gt;
Na komunikáciu s viacerými teplomermi na zbernici 1-wire potrebujeme poznať adresu každého teplomera. Jednotlivé adresy sú uvedené v tabuľke 1. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;600&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Názov teplomera&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Adresa teplomera&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vonkajší teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|105FD4CD010800C9&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vnútorný teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|1059F7CD010800CD&lt;br /&gt;
&lt;br /&gt;
|+align=&amp;quot;bottom&amp;quot; |Tab. 1 Názov a adresa teplomerov&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rozhranie 1-wire v PSoC ==&lt;br /&gt;
&lt;br /&gt;
V samotnom dizajneri sa nachádza hardvérový blok pre podporu tejto zbernice. My však budeme používať softvérový blok, ktorý sa dá stiahnuť na nasledovnej adrese:&lt;br /&gt;
&lt;br /&gt;
http://www.psocdeveloper.com/tools/misc-dev-tools.html&lt;br /&gt;
&lt;br /&gt;
Potom ho doinštalujeme podľa návodu, ktorý sa nachádza tu:&lt;br /&gt;
&lt;br /&gt;
http://www.psocdeveloper.com/forums/viewtopic.php?p=29&amp;amp;sid=2d053ae959fd795eaf997f498bfe3de5&amp;amp;view=next&lt;br /&gt;
&lt;br /&gt;
Po umiestnení tohto bloku do projektu musíme vykonať zopár nastavení. Názorne sú ukázané na obr. 2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Nastavenia_1-wireSW.jpg|center|thumb|400px|Obr. 2. Nastavenia 1-wireSW]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''LCD blok'''&lt;br /&gt;
&lt;br /&gt;
Pre komunikáciu s LCD musíme použiť blok LCD. Jeho nastavenie je jednoduché, nastavíme len, ktorý port sa na komunikáciu bude používať a či chceme povoliť alebo zakázať bar grafy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Samotný program teplomera ==&lt;br /&gt;
&lt;br /&gt;
Program je napísaný v jazyku C, chcel by som pridať aj kód v assembleri, ale zatiaľ aspoň takto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Odkazy a referencie ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6068</id>
		<title>Meranie teploty pomocou teplomera DS18S20</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6068"/>
		<updated>2010-07-05T08:42:45Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* Rozhranie 1-wire v PSoC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Základný popis úlohy ==&lt;br /&gt;
&lt;br /&gt;
Tento systém bude obsahovať dva teplomery DS18S20 a teplota sa bude vypisovať na display. Prepínať medzi jednotlivými teplomermi budeme pomocou tlačítka. Teplota bude na LCD zobrazená v desiatkovej sústave s presnosťou na desatiny stupňa celsia.&lt;br /&gt;
&lt;br /&gt;
== Zapojenie teplomerov ==&lt;br /&gt;
&lt;br /&gt;
V článku o 1-wire &amp;lt;ref&amp;gt;http://kiwiki.fmtnuni.sk/mediawiki/index.php/Protokol_1-Wire#DS18S20&amp;lt;/ref&amp;gt; rozhraní sú uvedené aj základné vlastnosti tohto teplomera, takže sa k tomu už nebudem vyjadrovať, snáď len uvediem zapojenie jednotlivých teplomerov, ktoré možno vidieť na obr. 1. Pull-up rezistor je nutný, nakoľko bez neho to nefunguje ako má.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zapojenie teplomerov DS18S20.png|center|thumb|400px|Obr. 1. Zapojenie teplomerov]]&lt;br /&gt;
&lt;br /&gt;
Na komunikáciu s viacerými teplomermi na zbernici 1-wire potrebujeme poznať adresu každého teplomera. Jednotlivé adresy sú uvedené v tabuľke 1. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;600&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Názov teplomera&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Adresa teplomera&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vonkajší teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|105FD4CD010800C9&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vnútorný teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|1059F7CD010800CD&lt;br /&gt;
&lt;br /&gt;
|+align=&amp;quot;bottom&amp;quot; |Tab. 1 Názov a adresa teplomerov&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rozhranie 1-wire v PSoC ==&lt;br /&gt;
&lt;br /&gt;
V samotnom dizajneri sa nachádza hardvérový blok pre podporu tejto zbernice. My však budeme používať softvérový blok, ktorý sa dá stiahnuť na nasledovnej adrese:&lt;br /&gt;
&lt;br /&gt;
http://www.psocdeveloper.com/tools/misc-dev-tools.html&lt;br /&gt;
&lt;br /&gt;
Potom ho doinštalujeme podľa návodu, ktorý sa nachádza tu:&lt;br /&gt;
&lt;br /&gt;
http://www.psocdeveloper.com/forums/viewtopic.php?p=29&amp;amp;sid=2d053ae959fd795eaf997f498bfe3de5&amp;amp;view=next&lt;br /&gt;
&lt;br /&gt;
Po umiestnení tohto bloku do projektu musíme vykonať zopár nastavení. Názorne sú ukázané na obr. 2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Nastavenia_1-wireSW.jpg|center|thumb|400px|Obr. 2. Nastavenia 1-wireSW]]&lt;br /&gt;
&lt;br /&gt;
== Odkazy a referencie ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Nastavenia_1-wireSW.jpg&amp;diff=6067</id>
		<title>Súbor:Nastavenia 1-wireSW.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Nastavenia_1-wireSW.jpg&amp;diff=6067"/>
		<updated>2010-07-05T08:42:31Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6066</id>
		<title>Meranie teploty pomocou teplomera DS18S20</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6066"/>
		<updated>2010-07-05T08:41:08Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* Rozhranie 1-wire v PSoC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Základný popis úlohy ==&lt;br /&gt;
&lt;br /&gt;
Tento systém bude obsahovať dva teplomery DS18S20 a teplota sa bude vypisovať na display. Prepínať medzi jednotlivými teplomermi budeme pomocou tlačítka. Teplota bude na LCD zobrazená v desiatkovej sústave s presnosťou na desatiny stupňa celsia.&lt;br /&gt;
&lt;br /&gt;
== Zapojenie teplomerov ==&lt;br /&gt;
&lt;br /&gt;
V článku o 1-wire &amp;lt;ref&amp;gt;http://kiwiki.fmtnuni.sk/mediawiki/index.php/Protokol_1-Wire#DS18S20&amp;lt;/ref&amp;gt; rozhraní sú uvedené aj základné vlastnosti tohto teplomera, takže sa k tomu už nebudem vyjadrovať, snáď len uvediem zapojenie jednotlivých teplomerov, ktoré možno vidieť na obr. 1. Pull-up rezistor je nutný, nakoľko bez neho to nefunguje ako má.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zapojenie teplomerov DS18S20.png|center|thumb|400px|Obr. 1. Zapojenie teplomerov]]&lt;br /&gt;
&lt;br /&gt;
Na komunikáciu s viacerými teplomermi na zbernici 1-wire potrebujeme poznať adresu každého teplomera. Jednotlivé adresy sú uvedené v tabuľke 1. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;600&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Názov teplomera&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Adresa teplomera&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vonkajší teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|105FD4CD010800C9&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vnútorný teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|1059F7CD010800CD&lt;br /&gt;
&lt;br /&gt;
|+align=&amp;quot;bottom&amp;quot; |Tab. 1 Názov a adresa teplomerov&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rozhranie 1-wire v PSoC ==&lt;br /&gt;
&lt;br /&gt;
V samotnom dizajneri sa nachádza hardvérový blok pre podporu tejto zbernice. My však budeme používať softvérový blok, ktorý sa dá stiahnuť na nasledovnej adrese:&lt;br /&gt;
&lt;br /&gt;
http://www.psocdeveloper.com/tools/misc-dev-tools.html&lt;br /&gt;
&lt;br /&gt;
Potom ho doinštalujeme podľa návodu, ktorý sa nachádza tu:&lt;br /&gt;
&lt;br /&gt;
http://www.psocdeveloper.com/forums/viewtopic.php?p=29&amp;amp;sid=2d053ae959fd795eaf997f498bfe3de5&amp;amp;view=next&lt;br /&gt;
&lt;br /&gt;
Po umiestnení tohto bloku do projektu musíme vykonať zopár nastavení. Názorne sú ukázané na obr. 2.&lt;br /&gt;
&lt;br /&gt;
== Odkazy a referencie ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6065</id>
		<title>Meranie teploty pomocou teplomera DS18S20</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6065"/>
		<updated>2010-07-05T08:12:15Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* Rozhranie 1-wire v PSoC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Základný popis úlohy ==&lt;br /&gt;
&lt;br /&gt;
Tento systém bude obsahovať dva teplomery DS18S20 a teplota sa bude vypisovať na display. Prepínať medzi jednotlivými teplomermi budeme pomocou tlačítka. Teplota bude na LCD zobrazená v desiatkovej sústave s presnosťou na desatiny stupňa celsia.&lt;br /&gt;
&lt;br /&gt;
== Zapojenie teplomerov ==&lt;br /&gt;
&lt;br /&gt;
V článku o 1-wire &amp;lt;ref&amp;gt;http://kiwiki.fmtnuni.sk/mediawiki/index.php/Protokol_1-Wire#DS18S20&amp;lt;/ref&amp;gt; rozhraní sú uvedené aj základné vlastnosti tohto teplomera, takže sa k tomu už nebudem vyjadrovať, snáď len uvediem zapojenie jednotlivých teplomerov, ktoré možno vidieť na obr. 1. Pull-up rezistor je nutný, nakoľko bez neho to nefunguje ako má.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zapojenie teplomerov DS18S20.png|center|thumb|400px|Obr. 1. Zapojenie teplomerov]]&lt;br /&gt;
&lt;br /&gt;
Na komunikáciu s viacerými teplomermi na zbernici 1-wire potrebujeme poznať adresu každého teplomera. Jednotlivé adresy sú uvedené v tabuľke 1. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;600&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Názov teplomera&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Adresa teplomera&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vonkajší teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|105FD4CD010800C9&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vnútorný teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|1059F7CD010800CD&lt;br /&gt;
&lt;br /&gt;
|+align=&amp;quot;bottom&amp;quot; |Tab. 1 Názov a adresa teplomerov&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rozhranie 1-wire v PSoC ==&lt;br /&gt;
&lt;br /&gt;
V samotnom dizajneri sa nachádza hardvérový blok pre podporu tejto zbernice. My však budeme používať softvérový blok, ktorý sa dá stiahnuť na nasledovnej adrese:&lt;br /&gt;
&lt;br /&gt;
http://www.psocdeveloper.com/tools/misc-dev-tools.html&lt;br /&gt;
&lt;br /&gt;
Potom ho doinštalujeme podľa návodu, ktorý sa nachádza tu:&lt;br /&gt;
&lt;br /&gt;
http://www.psocdeveloper.com/forums/viewtopic.php?p=29&amp;amp;sid=2d053ae959fd795eaf997f498bfe3de5&amp;amp;view=next&lt;br /&gt;
&lt;br /&gt;
== Odkazy a referencie ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6064</id>
		<title>Meranie teploty pomocou teplomera DS18S20</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6064"/>
		<updated>2010-07-05T08:11:36Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Základný popis úlohy ==&lt;br /&gt;
&lt;br /&gt;
Tento systém bude obsahovať dva teplomery DS18S20 a teplota sa bude vypisovať na display. Prepínať medzi jednotlivými teplomermi budeme pomocou tlačítka. Teplota bude na LCD zobrazená v desiatkovej sústave s presnosťou na desatiny stupňa celsia.&lt;br /&gt;
&lt;br /&gt;
== Zapojenie teplomerov ==&lt;br /&gt;
&lt;br /&gt;
V článku o 1-wire &amp;lt;ref&amp;gt;http://kiwiki.fmtnuni.sk/mediawiki/index.php/Protokol_1-Wire#DS18S20&amp;lt;/ref&amp;gt; rozhraní sú uvedené aj základné vlastnosti tohto teplomera, takže sa k tomu už nebudem vyjadrovať, snáď len uvediem zapojenie jednotlivých teplomerov, ktoré možno vidieť na obr. 1. Pull-up rezistor je nutný, nakoľko bez neho to nefunguje ako má.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zapojenie teplomerov DS18S20.png|center|thumb|400px|Obr. 1. Zapojenie teplomerov]]&lt;br /&gt;
&lt;br /&gt;
Na komunikáciu s viacerými teplomermi na zbernici 1-wire potrebujeme poznať adresu každého teplomera. Jednotlivé adresy sú uvedené v tabuľke 1. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;600&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Názov teplomera&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Adresa teplomera&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vonkajší teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|105FD4CD010800C9&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vnútorný teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|1059F7CD010800CD&lt;br /&gt;
&lt;br /&gt;
|+align=&amp;quot;bottom&amp;quot; |Tab. 1 Názov a adresa teplomerov&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rozhranie 1-wire v PSoC ==&lt;br /&gt;
&lt;br /&gt;
V samotnom dizajneri sa nachádza hardvérový blok pre podporu tejto zbernice. My však budeme používať softvérový blok, ktorý sa dá stihnuť na nasledovnej adrese:&lt;br /&gt;
&lt;br /&gt;
http://wwwpsocdeveloper.com/tools/misc-dev-tools.html&lt;br /&gt;
&lt;br /&gt;
Potom ho doinštalujeme podľa návodu, ktorý sa nachádza tu:&lt;br /&gt;
&lt;br /&gt;
http://www.psocdeveloper.com/forums/viewtopic.php?p=29&amp;amp;sid=2d053ae959fd795eaf997f498bfe3de5&amp;amp;view=next&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Odkazy a referencie ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6063</id>
		<title>Meranie teploty pomocou teplomera DS18S20</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6063"/>
		<updated>2010-07-05T07:46:32Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* Zapojenie teplomerov */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Základný popis úlohy ==&lt;br /&gt;
&lt;br /&gt;
Tento systém bude obsahovať dva teplomery DS18S20 a teplota sa bude vypisovať na display. Prepínať medzi jednotlivými teplomermi budeme pomocou tlačítka. Teplota bude na LCD zobrazená v desiatkovej sústave s presnosťou na desatiny stupňa celsia.&lt;br /&gt;
&lt;br /&gt;
== Zapojenie teplomerov ==&lt;br /&gt;
&lt;br /&gt;
V článku o 1-wire &amp;lt;ref&amp;gt;http://kiwiki.fmtnuni.sk/mediawiki/index.php/Protokol_1-Wire#DS18S20&amp;lt;/ref&amp;gt; rozhraní sú uvedené aj základné vlastnosti tohto teplomera, takže sa k tomu už nebudem vyjadrovať, snáď len uvediem zapojenie jednotlivých teplomerov, ktoré možno vidieť na obr. 1. Pull-up rezistor je nutný, nakoľko bez neho to nefunguje ako má.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zapojenie teplomerov DS18S20.png|center|thumb|400px|Obr. 1. Zapojenie teplomerov]]&lt;br /&gt;
&lt;br /&gt;
Na komunikáciu s viacerými teplomermi na zbernici 1-wire potrebujeme poznať adresu každého teplomera. Jednotlivé adresy sú uvedené v tabuľke 1. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;600&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Názov teplomera&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Adresa teplomera&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vonkajší teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|105FD4CD010800C9&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vnútorný teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|1059F7CD010800CD&lt;br /&gt;
&lt;br /&gt;
|+align=&amp;quot;bottom&amp;quot; |Tab. 1 Názov a adresa teplomerov&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Odkazy a referencie ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6062</id>
		<title>Meranie teploty pomocou teplomera DS18S20</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6062"/>
		<updated>2010-07-05T07:40:12Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* Zapojenie teplomerov */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Základný popis úlohy ==&lt;br /&gt;
&lt;br /&gt;
Tento systém bude obsahovať dva teplomery DS18S20 a teplota sa bude vypisovať na display. Prepínať medzi jednotlivými teplomermi budeme pomocou tlačítka. Teplota bude na LCD zobrazená v desiatkovej sústave s presnosťou na desatiny stupňa celsia.&lt;br /&gt;
&lt;br /&gt;
== Zapojenie teplomerov ==&lt;br /&gt;
&lt;br /&gt;
V článku o 1-wire &amp;lt;ref&amp;gt;http://kiwiki.fmtnuni.sk/mediawiki/index.php/Protokol_1-Wire#DS18S20&amp;lt;/ref&amp;gt; rozhraní sú uvedené aj základné vlastnosti tohto teplomera, takže sa k tomu už nebudem vyjadrovať, snáď len uvediem zapojenie jednotlivých teplomerov, ktoré možno vidieť na obr. 1.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zapojenie teplomerov DS18S20.png|center|thumb|400px|Obr. 1. Zapojenie teplomerov]]&lt;br /&gt;
&lt;br /&gt;
Na komunikáciu s viacerými teplomermi na zbernici 1-wire potrebujeme poznať adresu každého teplomera. Jednotlivé adresy sú uvedené v tabuľke 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;600&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Názov teplomera&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Adresa teplomera&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vonkajší teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|105FD4CD010800C9&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vnútorný teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|1059F7CD010800CD&lt;br /&gt;
&lt;br /&gt;
|+align=&amp;quot;bottom&amp;quot; |Tab. 1 Názov a adresa teplomerov&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Odkazy a referencie ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Zapojenie_teplomerov_DS18S20.png&amp;diff=6061</id>
		<title>Súbor:Zapojenie teplomerov DS18S20.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Zapojenie_teplomerov_DS18S20.png&amp;diff=6061"/>
		<updated>2010-07-05T07:34:46Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6060</id>
		<title>Meranie teploty pomocou teplomera DS18S20</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6060"/>
		<updated>2010-07-05T07:26:12Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* Zapojenie teplomerov */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Základný popis úlohy ==&lt;br /&gt;
&lt;br /&gt;
Tento systém bude obsahovať dva teplomery DS18S20 a teplota sa bude vypisovať na display. Prepínať medzi jednotlivými teplomermi budeme pomocou tlačítka. Teplota bude na LCD zobrazená v desiatkovej sústave s presnosťou na desatiny stupňa celsia.&lt;br /&gt;
&lt;br /&gt;
== Zapojenie teplomerov ==&lt;br /&gt;
&lt;br /&gt;
V článku o 1-wire &amp;lt;ref&amp;gt;http://kiwiki.fmtnuni.sk/mediawiki/index.php/Protokol_1-Wire#DS18S20&amp;lt;/ref&amp;gt; rozhraní sú uvedené aj základné vlastnosti tohto teplomera, takže sa k tomu už nebudem vyjadrovať, snáď len uvediem zapojenie jednotlivých teplomerov.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;600&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Názov teplomera&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Adresa teplomera&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vonkajší teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|105FD4CD010800C9&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vnútorný teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|1059F7CD010800CD&lt;br /&gt;
&lt;br /&gt;
|+align=&amp;quot;bottom&amp;quot; |''Tab. 1 Názov a adresa teplomerov''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Odkazy a referencie ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6059</id>
		<title>Meranie teploty pomocou teplomera DS18S20</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6059"/>
		<updated>2010-07-05T07:21:18Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Základný popis úlohy ==&lt;br /&gt;
&lt;br /&gt;
Tento systém bude obsahovať dva teplomery DS18S20 a teplota sa bude vypisovať na display. Prepínať medzi jednotlivými teplomermi budeme pomocou tlačítka. Teplota bude na LCD zobrazená v desiatkovej sústave s presnosťou na desatiny stupňa celsia.&lt;br /&gt;
&lt;br /&gt;
== Zapojenie teplomerov ==&lt;br /&gt;
&lt;br /&gt;
V článku o 1-wire &amp;lt;ref&amp;gt;http://kiwiki.fmtnuni.sk/mediawiki/index.php/Protokol_1-Wire#DS18S20&amp;lt;/ref&amp;gt; rozhraní sú uvedené aj základné vlastnosti tohto teplomera, takže sa k tomu už nebudem vyjadrovať, snáď len uvediem zapojenie jednotlivých teplomerov.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;600&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Názov teplomera&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Adresa teplomera&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vonkajší teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|105FD4CD010800C9&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|Vnútorný teplomer&lt;br /&gt;
|align = &amp;quot;center&amp;quot;|1059F7CD010800CD&lt;br /&gt;
&lt;br /&gt;
|+Tab. 1 Názov a adresa teplomerov&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Odkazy a referencie ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6058</id>
		<title>Meranie teploty pomocou teplomera DS18S20</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6058"/>
		<updated>2010-07-05T07:05:20Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* Reálne meranie teploty s DS18S20 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Základný popis úlohy ==&lt;br /&gt;
&lt;br /&gt;
Tento systém bude obsahovať dva teplomery DS18S20 a teplota sa bude vypisovať na display. Prepínať medzi jednotlivými teplomermi budeme pomocou tlačítka. Teplota bude na LCD zobrazená v desiatkovej sústave s presnosťou na desatiny stupňa celsia.&lt;br /&gt;
&lt;br /&gt;
V článku o 1-wire &amp;lt;ref&amp;gt;http://kiwiki.fmtnuni.sk/mediawiki/index.php/Protokol_1-Wire#DS18S20&amp;lt;/ref&amp;gt; rozhraní sú uvedené aj základné vlastnosti tohto teplomera, takže sa k tomu už nebudem vyjadrovať, snáď len uvediem zapojenie jednotlivých teplomerov.&lt;br /&gt;
&lt;br /&gt;
== Odkazy a referencie ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6057</id>
		<title>Meranie teploty pomocou teplomera DS18S20</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6057"/>
		<updated>2010-07-05T07:03:27Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reálne meranie teploty s DS18S20 ==&lt;br /&gt;
&lt;br /&gt;
Tento systém bude obsahovať dva teplomery DS18S20 a teplota sa bude vypisovať na display. Prepínať medzi jednotlivými teplomermi budeme pomocou tlačítka. Teplota bude na LCD zobrazená v desiatkovej sústave s presnosťou na desatiny stupňa celsia.&lt;br /&gt;
&lt;br /&gt;
V článku o 1-wire &amp;lt;ref&amp;gt;http://kiwiki.fmtnuni.sk/mediawiki/index.php/Protokol_1-Wire#DS18S20&amp;lt;/ref&amp;gt; rozhraní sú uvedené aj základné vlastnosti tohto teplomera, takže sa k tomu už nebudem vyjadrovať, snáď len uvediem zapojenie jednotlivých teplomerov.&lt;br /&gt;
&lt;br /&gt;
== Odkazy a referencie ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6056</id>
		<title>Meranie teploty pomocou teplomera DS18S20</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_teplomera_DS18S20&amp;diff=6056"/>
		<updated>2010-07-05T07:01:03Z</updated>

		<summary type="html">&lt;p&gt;Peto: Vytvorená stránka „== Reálne meranie teploty s DS18S20 ==  Tento systém bude obsahovať dva teplomery DS18S20 a teplota sa bude vypisovať na display. Prepínať medzi jednotlivými teplome…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reálne meranie teploty s DS18S20 ==&lt;br /&gt;
&lt;br /&gt;
Tento systém bude obsahovať dva teplomery DS18S20 a teplota sa bude vypisovať na display. Prepínať medzi jednotlivými teplomermi budeme pomocou tlačítka. Teplota bude na LCD zobrazená v desiatkovej sústave s presnosťou na desatiny stupňa celsia.&lt;br /&gt;
&lt;br /&gt;
V článku o 1-wire &amp;lt;ref&amp;gt;http://kiwiki.fmtnuni.sk/mediawiki/index.php/Protokol_1-Wire#DS18S20&amp;lt;/ref&amp;gt; rozhraní sú uvedené aj základné vlastnosti tohto teplomera, takže sa k tomu už nebudem vyjadrovať, snáď len uvediem zapojenie jednotlivých teplomerov.&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Konfigurovate%C4%BEn%C3%A9_mikroprocesorov%C3%A9_syst%C3%A9my&amp;diff=6025</id>
		<title>Konfigurovateľné mikroprocesorové systémy</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Konfigurovate%C4%BEn%C3%A9_mikroprocesorov%C3%A9_syst%C3%A9my&amp;diff=6025"/>
		<updated>2010-07-01T17:58:14Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* Sériové komunikačné zbernice */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Mikroprocesorové systémy]]&lt;br /&gt;
[[Kategória:Študijné materiály]]&lt;br /&gt;
&amp;lt;properties&amp;gt;&lt;br /&gt;
Názov=Konfigurovateľné mikroprocesorové systémy&lt;br /&gt;
Forma=Prednáška a praktické cvičenia&lt;br /&gt;
Abstrakt=Všeobecnej architektúra počítača a mikrokontroléra, rozdiely a porovnanie. Návrh a tvorb hybridných elektronických systémov na báze mikrokontrolérov PSoC. Komunikácia mikrokontroléra s prostredím. Komunikačné protokoly a štandardy. Pripájanie a riadenie periférií.  &lt;br /&gt;
Rozvrh=3/0/2&lt;br /&gt;
Hodnotenie=Spracovanie projektu a skúška&lt;br /&gt;
Poznámky=Predmetom projektu môže byť téma podľa vlastného výberu z oblasti prednášky a/alebo cvičení spracovaná v písomnej elektronickej podobe a verejne publikovaná na serveri KiWiKi. Hodnotenie a poznámky k projektu budú verejné a zverejnené v diskusii k práci. Pri písaní článkov sa riadte [[Pomoc:Obsah | návodom]] s dôrazom na zadávanie vzťahov vo formáte kiwiki a korektné spracovanie obrázkov. &lt;br /&gt;
&amp;lt;/properties&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:150px;border: none; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
== Všeobecný úvod ==&lt;br /&gt;
* [[Od počítača k mikrokontroléru]]&lt;br /&gt;
* [[Architektúra všeobecného počítača]]&lt;br /&gt;
* [[Architektúra mikrokontroléra]]&lt;br /&gt;
* [[Prehľad aktuálneho stavu mikroprocesorových systémov]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:100px;border: none; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Úvod do technológie PSoC ==&lt;br /&gt;
* [[Prehľad architektúry PSoC]] &lt;br /&gt;
* [[Elektrické a mechanické parametre architektúry PSoC]]&lt;br /&gt;
* [[Vývojové prostredie pre systémy PSoC]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:100px;border: none; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Assembler M8C ==&lt;br /&gt;
* Štruktúra assembleru - Assembler M8C&lt;br /&gt;
* Pseudoinštrukcie assembleru - Assembler M8C&lt;br /&gt;
* Makrá - Assembler M8C&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:220px;border: none; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
== Inštrukcie procesora M8C ==&lt;br /&gt;
* [[Prehľad inštrukcií procesora M8C]]&lt;br /&gt;
* [[Inštrukcie presunu dát - M8C]]&lt;br /&gt;
* [[Aritmetické inštrukcie - M8C]]&lt;br /&gt;
* [[Logické inštrukcie - M8C]]&lt;br /&gt;
* [[Inštrukcie pre prácu zo zásobníkom - M8C]]&lt;br /&gt;
* [[Skoky a podprogramy - M8C]]&lt;br /&gt;
* Špeciálne inštrukcie - M8C&lt;br /&gt;
* Prerušenia - M8C&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:100px;border: none; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Programové konštrukcie assembleru M8C ==&lt;br /&gt;
* Konštrukcia IF-ELSE (assembler)&lt;br /&gt;
* Konštrukcia SWITCH-CASE (assembler)&lt;br /&gt;
* Cykly DO-WHILE, FOR-LOOP (assembler)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:180px;border: none; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GPIO - Všeobecne vstupy a výstupy  PSoC==&lt;br /&gt;
* [[Popis GPIO]]&lt;br /&gt;
* [[Konfigurácia GPIO pomocou designera obvodu]]&lt;br /&gt;
* [[Programová konfigurácia GPIO]]&lt;br /&gt;
* [[Módy portov (M8C)]]&lt;br /&gt;
* [[Pripojenie periférnych obvodov]]&lt;br /&gt;
* [[Pripojenie tlačítok a ošetrenie zákmitov]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:200px;border: none; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
== Sériová asynchrónna komunikácia - UART ==&lt;br /&gt;
* [[Historický vývoj UART]]&lt;br /&gt;
* [[Štandard RS232]]&lt;br /&gt;
* [[Štandard RS485]]&lt;br /&gt;
* [[Blok UART]]&lt;br /&gt;
* [[API UART]]&lt;br /&gt;
* Protokol MODBUS/uBUS&lt;br /&gt;
** [[Popis protokolu MODBUS/uBUS]]&lt;br /&gt;
** [[Implementácia protokolu MODBUS/uBUS]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:200px;border: 10px; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sériové komunikačné zbernice==&lt;br /&gt;
* [[Synchrónna komunikácia I2C]]&lt;br /&gt;
** [[Meranie teploty pomocou LM92]]&lt;br /&gt;
** [[Hodiny reálneho času]] &lt;br /&gt;
* [[Synchrónna komunikácia SPI]]&lt;br /&gt;
* Distribuovaný systém zber dát 1-Wire&lt;br /&gt;
** [[Protokol 1-Wire]]&lt;br /&gt;
** [[Meranie teploty pomocou teplomera DS18S20]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:250px;border: 10px; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Čítače, časovače a šírkové modulátory PSoC==&lt;br /&gt;
* Blok čítača a časovača (M8C)&lt;br /&gt;
* API čítača a časovača (M8C)&lt;br /&gt;
* Generovanie časových intervalov (M8C)&lt;br /&gt;
* Meranie času a frekvencie (M8C)&lt;br /&gt;
** [[Presné meranie kapacity]]&lt;br /&gt;
** Meranie polohy pomocou magnetostrikčného senzoru&lt;br /&gt;
* [[Šírkový modulátor PWM]]&lt;br /&gt;
* API PWM&lt;br /&gt;
** Riadenie modelárskeho servomotora pomocou PWM&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:250px;border: 10px; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
== Analógové spracovanie signálov ==&lt;br /&gt;
* [[Prevodníky ADC]]&lt;br /&gt;
** Aproximačné prevodníky&lt;br /&gt;
** [[Delta-Sigma prevodníky]]&lt;br /&gt;
* [[Prevodníky DAC]]&lt;br /&gt;
* [[Analógové spracovanie signálov - zosilňovače]]&lt;br /&gt;
* [[Analógové spracovanie signálov - komparátor]]&lt;br /&gt;
** Spracovanie prerušenia od komparátora&lt;br /&gt;
* [[Analógové spracovanie signálov - filtre]]&lt;br /&gt;
** Návrh a realizácia filtrov&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:150px;border: 10px; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Všeobecné zásady tvorby programov ==&lt;br /&gt;
* [[Všeobecné zásady tvorby programov - analýza]]&lt;br /&gt;
* [[Všeobecné zásady tvorby programov - návrh]] &lt;br /&gt;
* [[Všeobecné zásady tvorby programov - implementácia]]&lt;br /&gt;
* [[Všeobecné zásady tvorby programov - testovanie a ladenie programu]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:150px;border: 10px; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
== RC-5 ==&lt;br /&gt;
* [[Protokol RC-5]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Podklady k cvičeniam ==&lt;br /&gt;
# [[Binárne čísla]]&lt;br /&gt;
## Reprezentácia a formáty zobrazenia čísel&lt;br /&gt;
## Prevody medzi číselnými sústavami&lt;br /&gt;
## Matematické operácie s binárnymi číslami&lt;br /&gt;
# Vývojové prostredie PSoC&lt;br /&gt;
## Tvorba programov v PSoC Designer&lt;br /&gt;
## Vývojový kit CY3210&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5938</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5938"/>
		<updated>2010-06-25T12:35:10Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* Konečne reálna komunikácia s LM92 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Popis pinov LM92.jpg|center|thumb|400px|Obr. 2. Popis pinov]]&lt;br /&gt;
&lt;br /&gt;
SDA – sériová obojsmerná dátová linka&lt;br /&gt;
&lt;br /&gt;
SCL – hodinový vstup&lt;br /&gt;
&lt;br /&gt;
T_CRIT_A – výstup alarmu pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
INT – výstup pre prerušenie&lt;br /&gt;
&lt;br /&gt;
GND – zem&lt;br /&gt;
&lt;br /&gt;
+Vs – napájanie&lt;br /&gt;
&lt;br /&gt;
A0 – A1 – nastavenie adresy&lt;br /&gt;
&lt;br /&gt;
'''Dátový formát teploty'''&lt;br /&gt;
&lt;br /&gt;
Teplotné dáta môžu byť čítané z teplomera alebo z registrov pre SetPointy; a zapisované do Setpoint registrov. Teplotné dáta môžu byť čítané kedykoľvek. Ak bude frekvencia čítania dát vysoká, dáta v teplomery sa nestihnú obnoviť. Teplotné dáta sú reprezentované 13-bitovým binárnym číslom s LSB. Jeden bit je rovný 0, 0625 ºC. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Teplotný register LM92.jpg|center|thumb|600px|Obr. 3. Teplotný register]]&lt;br /&gt;
&lt;br /&gt;
Ako vidíme na obr. 3, bity D0 až D2 sú stavové bity. Teplota je na D3 až D14 a D15 je znamienko. Ak D15 je 1, znamienko je -. Príklady reprezentácie teploty sú na obr. 4. Treba si uvedomiť, že ak prečítame tento register získame 16 bitov, čo nie je hneď konkrétna nameraná teplota. Ak chceme získať teplotu, musíme sa zbaviť stavových bitov D0 až D2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Digitálny vystup LM92.jpg|center|thumb|400px|Obr. 4. Digitálny výstup z teplomera]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spojenie LM92 s mikrokontrolérom Cypress ==&lt;br /&gt;
&lt;br /&gt;
Pre spojenie potrebujeme sériové rozhranie I2C, ktoré slúži na komunikáciu mikrokontroléra s teplomerom a napríklad RS232 rozhranie pre komunikáciu mikrokontroléra s počítačom, kde môžme získané informácie ďalej spracovávať a vyhodnocovať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RS232 ==&lt;br /&gt;
&lt;br /&gt;
Toto rozhranie zavedieme použitím hardvérového bloku UART, ktorý Cypress obsahuje. Rýchlosť komunikácie bude 19200Bd, čo znamená frekvenciu 153kHz. Keď chceme nastaviť túto frekvenciu, musíme deliť základnú frekvenciu Cypress 24Mhz/156. Použijeme delič frekvencie VC3, ktorý bude následne zdroj frekvencie pre UART. Pre príjímané dáta použijeme pin P0_4 a pre odosielané dáta použijeme pin P0_2. Konkrétne nastavenia bloku UART priamo v PSoC dizajneri sú na obr. 5. Na obr.6. je vidieť umiestnenie blokov UART s schéme zapojenia.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:nastavenia UART.jpg|center|thumb|400px|Obr. 5. Konkrétne nastavenia bloku UART]]&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Umiestnenie UART.jpg|center|thumb|400px|Obr. 6. Umiestnenie bloku UART v schéme zapojenia]]&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
Aj keď aj pre toto sériové rozhranie existuje hardéverový blok, rozhodli sme sa, že si naprogramujeme vlastný softvér pre implementáciu tohto rozhrania. Toto naše rozhranie nebude potrebovať vonkajšie PULL-UP rezistory.&lt;br /&gt;
&lt;br /&gt;
Ako prvé vytvoríme súbor napr. ''i2c.inc'', v ktorom sa nachádzajú deklarácie pre rozhranie I2C. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
; Definicia portu a pinov &lt;br /&gt;
; upravit podla aktualneho nastavenia&lt;br /&gt;
&lt;br /&gt;
PORT:		equ		PORT_1	        ; PORT_0, PORT_1, PORT_2&lt;br /&gt;
SDA:		equ		P_5		; P_0, P_1, ... P_7&lt;br /&gt;
SCL:		equ		P_4		; P_0, P_1, ... P_7&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Globalne definicie&lt;br /&gt;
I2C_WRITE:	equ		%00000000&lt;br /&gt;
I2C_READ:	equ		%00000001	&lt;br /&gt;
I2C_ACK:	equ		%00000010&lt;br /&gt;
I2C_NOACK:	equ		%00000100&lt;br /&gt;
&lt;br /&gt;
PORT_2:		equ 	PRT2DR&lt;br /&gt;
PORT_1:		equ 	PRT1DR&lt;br /&gt;
PORT_0:		equ 	PRT0DR&lt;br /&gt;
P_7:		equ		%10000000&lt;br /&gt;
P_6:		equ		%01000000&lt;br /&gt;
P_5:		equ		%00100000&lt;br /&gt;
P_4:		equ		%00010000&lt;br /&gt;
P_3:		equ		%00001000&lt;br /&gt;
P_2:		equ		%00000100&lt;br /&gt;
P_1:		equ		%00000010&lt;br /&gt;
P_0:		equ		%00000001&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; Makra pre set/clear pinov SDA, SCL&lt;br /&gt;
MACRO SET_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO SET_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
; Makra pre nastavenie priznakov premennej [Flag]&lt;br /&gt;
MACRO SET_NO_ACK&lt;br /&gt;
	mov [Flag], 0x80&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_NO_ACK&lt;br /&gt;
	mov [Flag], 0x00&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO BIT_DELAY&lt;br /&gt;
	call  BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Potom vytvoríme súbor napr. ''i2c.asm'', ktorý obsahuje konkrétne funkcie pre I2C rozhranie. Program zaberá cca 770 Byte v ROM. Hlavným účelom bolo minimalizovať počet premenných v RAM, zrušiť [Flag] a [BitCnt] nahradiť registrom X. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
include &amp;quot;m8c.inc&amp;quot;&lt;br /&gt;
include &amp;quot;i2c_sw.inc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export I2C_Init&lt;br /&gt;
export I2C_Start&lt;br /&gt;
export I2C_Stop&lt;br /&gt;
export I2C_Send&lt;br /&gt;
export I2C_Recv&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Premenne pre I2C&lt;br /&gt;
area bss(RAM)&lt;br /&gt;
	BitCnt:		BLK 1		; pocitadlo pre pocet bitov&lt;br /&gt;
	SlvAdr:		BLK 1		; adresa slave&lt;br /&gt;
	RcvDat:		BLK 1		; prijate data&lt;br /&gt;
	Flag:		BLK 1		; priznak&lt;br /&gt;
	Temp:		BLK 1		; pomocna premenna&lt;br /&gt;
;=============================================================================&lt;br /&gt;
&lt;br /&gt;
area text&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; BitDly	zakladny delay &lt;br /&gt;
BitDly:		nop			; delay 4x sysclk, upravit podla hodin procesora&lt;br /&gt;
						; v pripade potreby nizsej prenosovej rychlosti &lt;br /&gt;
						; sem doplnte casovy slucku &lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; I2C_Init	inicializacia pinov rozhrania na uroven H&lt;br /&gt;
;			a reset rozhrania&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Init:&lt;br /&gt;
			SET_SDA&lt;br /&gt;
 			SET_SCL&lt;br /&gt;
 			call I2C_Stop&lt;br /&gt;
 			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStart vysle I2C start a adresu slave&lt;br /&gt;
;			nastavuje priznak premennej [Flag] NO_ACK, ak slave nepotvrdil &lt;br /&gt;
;			prijem znaku&lt;br /&gt;
; Vstup&lt;br /&gt;
; 	A - adresa slave&lt;br /&gt;
;	X - mod (I2C_READ, I2C_WRITE)&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Start:	asl A				; posun adrsy&lt;br /&gt;
			mov [SlvAdr],A		; odlozenie adresy&lt;br /&gt;
			swap A,X			; maska modu&lt;br /&gt;
			or [SlvAdr],A	&lt;br /&gt;
			CLR_SDA			 &lt;br /&gt;
			CLR_SCL				&lt;br /&gt;
			mov A, [SlvAdr]&lt;br /&gt;
			call I2C_Send&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStop	vysle stop na I2C a uvolni linku&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Stop:	CLR_SDA&lt;br /&gt;
			SET_SCL&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendByte	vysle znak&lt;br /&gt;
;			nastavuje priznak NO_ACK v premennej [Flag]&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A	- znak&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Send:	CLR_NO_ACK&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
	sbLoop:	asl A				; nastavenie SDA podla rotovaneho bitu v CY&lt;br /&gt;
			&lt;br /&gt;
			push A&lt;br /&gt;
			jnc	sb_low			; ? CY == 0&lt;br /&gt;
			SET_SDA				; 	CY = 1, SDA -&amp;gt; 1	&lt;br /&gt;
			jmp sb_end&lt;br /&gt;
	sb_low:	CLR_SDA				;	CY = 0, SDA -&amp;gt; 0&lt;br /&gt;
	sb_end:	SET_SCL				;					 &lt;br /&gt;
			CLR_SCL				; &lt;br /&gt;
			pop A&lt;br /&gt;
			&lt;br /&gt;
			dec [BitCnt]	&lt;br /&gt;
			jnz sbLoop			; podmienka cyklu&lt;br /&gt;
			&lt;br /&gt;
			SET_SDA				; uvolnenie datovej linky pre ACK &lt;br /&gt;
			SET_SCL				; vyslanie clocku pre ACK&lt;br /&gt;
	&lt;br /&gt;
			mov A, reg[PORT]	; kontrola na potvrdenia ACK od slave&lt;br /&gt;
			and A, SDA&lt;br /&gt;
			jnz sb_ex			; SDA = 1, slave potvrdil&lt;br /&gt;
			SET_NO_ACK			; nastavenie priznaku NoACK&lt;br /&gt;
			&lt;br /&gt;
	sb_ex:	CLR_SCL&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; RecvByte	- nacitanie byte z I2C&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A  - priznak potvrdenia nacitaneho znaku (I2C_ACK, I2C_NO_ACK)&lt;br /&gt;
; Vystup&lt;br /&gt;
;	A - nacitany znak	 &lt;br /&gt;
I2C_Recv:	push A&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
			mov [RcvDat],0x00&lt;br /&gt;
			&lt;br /&gt;
	rbLoop:	SET_SDA				; ***** doplnene&lt;br /&gt;
			SET_SCL				; clock pre nacitanie bitu &lt;br /&gt;
&lt;br /&gt;
			mov A,reg[PORT]		; nacitanie a ulozenie bitu&lt;br /&gt;
&lt;br /&gt;
			mov [Temp],0x80		; nasada pre rotaciu&lt;br /&gt;
			and A,SDA			; kontrola na stav bitu SDA&lt;br /&gt;
			jnz rb_H			;&lt;br /&gt;
			asl [Temp]			; nastavenie CY bitu &lt;br /&gt;
	rb_H:	asl [Temp]			; 1x rotacia - set CY, 2x rotacia - clear CY&lt;br /&gt;
	rb_set: mov A,[RcvDat] &lt;br /&gt;
			rlc A				; presun CY do dat		&lt;br /&gt;
			mov [RcvDat],A&lt;br /&gt;
&lt;br /&gt;
			CLR_SCL&lt;br /&gt;
			dec [BitCnt]&lt;br /&gt;
			jnz rbLoop			; koniec cyklu&lt;br /&gt;
			&lt;br /&gt;
			pop A				; vytiahnutie priznaku zo stacku&lt;br /&gt;
		&lt;br /&gt;
			cmp A, I2C_ACK&lt;br /&gt;
			jnz	rb_noack&lt;br /&gt;
			CLR_SDA				; ack by master&lt;br /&gt;
			jmp rb_ex&lt;br /&gt;
	&lt;br /&gt;
	rb_noack:&lt;br /&gt;
			SET_SDA				; no ack by master, last byte&lt;br /&gt;
			&lt;br /&gt;
	rb_ex:	SET_SCL&lt;br /&gt;
			CLR_SCL				; ***** doplnene&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			mov A,[RcvDat]&lt;br /&gt;
			ret&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konečne reálna komunikácia s LM92 ==&lt;br /&gt;
&lt;br /&gt;
Po všetkých týchto krokoch sa môžme vrhnúť do vytvorenia programu, ktorý bude pomocou vyššie uvedeného rozhrania získavať informácie z teplomera a posielať ich cez sériové rozhranie RS232 do počítača. Pre príjem a odosielanie informácií môžme použiť program terminál.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
include &amp;quot;m8c.inc&amp;quot;       	; part specific constants and macros&lt;br /&gt;
include &amp;quot;memory.inc&amp;quot;    	; Constants &amp;amp; macros for SMM/LMM and Compiler&lt;br /&gt;
include &amp;quot;PSoCAPI.inc&amp;quot;   	; PSoC API definitions for all User Modules&lt;br /&gt;
include &amp;quot;i2c.inc&amp;quot;		; deklaracie a premenne pre I2C&lt;br /&gt;
include &amp;quot;i2c.asm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export _main&lt;br /&gt;
&lt;br /&gt;
LM92_ADR:		equ	0x4B	; adresa teplomera	&lt;br /&gt;
&lt;br /&gt;
; registre teplomera (konstatnty)&lt;br /&gt;
&lt;br /&gt;
LM92_T_TEMP:	equ	0x00	        ; aktualna teplota&lt;br /&gt;
LM92_CONFIG:	equ     0x01	        ; konfiguracny register	&lt;br /&gt;
LM92_T_HYST:	equ     0x02	        ; hystereza&lt;br /&gt;
LM92_T_CRIT:	equ	0x03	        ; kriticka teplota (80 stupnov)&lt;br /&gt;
LM92_T_LOW:     equ     0x04	        ; dolna hranica termostatu&lt;br /&gt;
LM92_T_HIGH:	equ     0x05	        ; horna hranica termostatu&lt;br /&gt;
LM92_MIR:	equ     0x07	        ; manufacturer identification register (MIR)&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
area lit&lt;br /&gt;
	text:					&lt;br /&gt;
		DS &amp;quot;Komunikacia OK&amp;quot;	; kontrola komunikacie			&lt;br /&gt;
		DB 0x00&lt;br /&gt;
&lt;br /&gt;
area bss(RAM)				; premenne&lt;br /&gt;
	lm92_temp:	BLK 2		; namerana teplota (rezervované 2 bajty v RAM)&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
area text&lt;br /&gt;
_main:	&lt;br /&gt;
	mov   A,UART_PARITY_NONE  &lt;br /&gt;
        call  UART_Start      	        ; UART 19200bd, 8bit,1,N&lt;br /&gt;
	M8C_EnableGInt    &lt;br /&gt;
	call I2C_Init			; inicializacia I2C zbernice&lt;br /&gt;
WaitForData:               	        ; cakanie na povel z RS232     &lt;br /&gt;
        call  UART_bReadRxStatus    &lt;br /&gt;
        and   A, UART_RX_COMPLETE       ;ak nebol prijaty ziadny znak,    &lt;br /&gt;
        jz    WaitForData               ;vrati sa na WaitForData&lt;br /&gt;
        call  UART_bReadRxData          ; cita data    &lt;br /&gt;
        call  UART_SendData             ; prenasa data &lt;br /&gt;
&lt;br /&gt;
 	cmp A,'q'			; kontrola komunikacie (v kazdom z nasledujucich krokov sa prijate data porovnavaju s danym znakom, napr.q)&lt;br /&gt;
 	jz state_q                      ; ak nastane zhoda zero flag ZF sa nastavi na 1 a program prejde do prislusnej casi, napr. state_q &lt;br /&gt;
&lt;br /&gt;
 	cmp A,'w'			; vycitanie prednastaveneho registra (T_TEMP - default)&lt;br /&gt;
 	jz state_w&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'a'			; nastavenie registra T_TEMP&lt;br /&gt;
 	jz state_a&lt;br /&gt;
&lt;br /&gt;
        cmp A,'s'			; nastavenie registra T_CONFIG&lt;br /&gt;
 	jz state_s&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'d'			; nastavenie registra T_HYST&lt;br /&gt;
 	jz state_d&lt;br /&gt;
&lt;br /&gt;
        cmp A,'f'			; nastavenie registra T_CRIT&lt;br /&gt;
 	jz state_f&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'g'			; nastavenie registra T_LOW&lt;br /&gt;
 	jz state_g&lt;br /&gt;
&lt;br /&gt;
        cmp A,'h'			; nastavenie registra T_HIGH&lt;br /&gt;
 	jz state_h&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'j'			; nastavenie registra MIR&lt;br /&gt;
 	jz state_j&lt;br /&gt;
&lt;br /&gt;
    jmp   WaitForData      	        ; navrat do zakladnej slucky&lt;br /&gt;
;-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_q:				; kontrola komunikacie&lt;br /&gt;
        call UART_PutCRLF               ; odriadkovanie&lt;br /&gt;
        mov A, &amp;gt;text                    ; do A sa ulozi prvy znak retazca text                   &lt;br /&gt;
	mov X, &amp;lt;text                    ; do X sa ulozi posledny znak retazca text&lt;br /&gt;
	call UART_CPutString            ; vytlaci sa retazec text&lt;br /&gt;
        call UART_PutCRLF               ; odriadkovanie&lt;br /&gt;
&lt;br /&gt;
    jmp   WaitForData                   ; navrat do zakladnej slucky&lt;br /&gt;
;--------------------------------------------------------------------------------   &lt;br /&gt;
&lt;br /&gt;
state_w:				; vycitanie obsahu nastaveneho registra teplomera&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_ADR                 ; nastavenie adresy slave, resp. LM92 pre I2C&lt;br /&gt;
	mov X, I2C_READ			; nastavenie komunikacie na citanie&lt;br /&gt;
	call I2C_Start			; zaciatok komunikacie&lt;br /&gt;
	mov A, I2C_ACK			; nacitanie prveho byte&lt;br /&gt;
	call I2C_Recv&lt;br /&gt;
	mov [lm92_temp],A&lt;br /&gt;
	mov A, I2C_NOACK		; nacitanie druheho (posledneho) byte&lt;br /&gt;
	call I2C_Recv&lt;br /&gt;
	mov [lm92_temp+1],A&lt;br /&gt;
	call I2C_Stop			; ukoncenie komunikacie&lt;br /&gt;
	call UART_PutCRLF		; odriadkovanie terminalu&lt;br /&gt;
	mov A,[lm92_temp] 		; vypis udaju teploty na terminal (prvy byte)&lt;br /&gt;
	call UART_PutSHexByte           ; v hexadecimalnom tvare&lt;br /&gt;
	mov A,[lm92_temp+1] 		; vypis udaju teploty na terminal (druhy byte)&lt;br /&gt;
	call UART_PutSHexByte           ; v hexadecimalnom tvare&lt;br /&gt;
;----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_a:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_TEMP              ; do A sa presunie adresa registra T_TEMP		&lt;br /&gt;
	call set_register	        ; zavola sa funkcia set_register		&lt;br /&gt;
	jmp   WaitForData               ; navrat do zakladnej slucky&lt;br /&gt;
;----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_s:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_CONFIG	        ; rovnaky postup ako pri state_a	&lt;br /&gt;
	call set_register		; len pre ine registre	&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_d:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_HYST		&lt;br /&gt;
	call set_register			&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_f:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_CRIT		&lt;br /&gt;
	call set_register			&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_g:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_LOW		&lt;br /&gt;
	call set_register			&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_h:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_HIGH		&lt;br /&gt;
	call set_register			&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;----------------------------------------------------------------------------------&lt;br /&gt;
state_j:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_MIR	&lt;br /&gt;
	call set_register			&lt;br /&gt;
        jmp   WaitForData 	&lt;br /&gt;
&lt;br /&gt;
;----------------------------------------------------------------------------------&lt;br /&gt;
; set_register	nastavenie aktualneho registra LM92&lt;br /&gt;
&lt;br /&gt;
; Vstup &lt;br /&gt;
&lt;br /&gt;
;	A - cislo registra&lt;br /&gt;
&lt;br /&gt;
; Vystup&lt;br /&gt;
&lt;br /&gt;
; -&lt;br /&gt;
&lt;br /&gt;
set_register:&lt;br /&gt;
&lt;br /&gt;
	push A                            ; hodnota A sa zapise na vrch zasobnika, resp. SP&lt;br /&gt;
	mov A, LM92_ADR                   ; do A sa presunie adresa LM92&lt;br /&gt;
	mov X, I2C_WRITE		  ; nastavenie komunikacie na zapis&lt;br /&gt;
	call I2C_Start			  ; zaciatok komunikacie&lt;br /&gt;
	pop A                             ; posledny byte zo zasobnika sa vymaze a zapise sa do A&lt;br /&gt;
	call I2C_Send                     ; hodnota A,t.j. cislo registra sa posle &lt;br /&gt;
	call I2C_Stop			  ; ukoncenie komunikacie&lt;br /&gt;
&lt;br /&gt;
	jmp   WaitForData	          ; navrat do zakladnej slucky&lt;br /&gt;
	ret                               ; PC register sa zameni za prve dva byty v SP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Keď toto všetko dáme dokopy, môžme si vyskúšať komunikáciu s teplomerom LM92. Na ilustráciu uvediem aj hardvérové zapojenie, ktoré je možné vidieť na obr. 7.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zapojenie s LM92.jpg|center|thumb|400px|Obr. 7. Hardvérové zapojenie]]&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5930</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5930"/>
		<updated>2010-06-25T11:43:20Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* Konečne reálna komunikácia s LM92 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Popis pinov LM92.jpg|center|thumb|400px|Obr. 2. Popis pinov]]&lt;br /&gt;
&lt;br /&gt;
SDA – sériová obojsmerná dátová linka&lt;br /&gt;
&lt;br /&gt;
SCL – hodinový vstup&lt;br /&gt;
&lt;br /&gt;
T_CRIT_A – výstup alarmu pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
INT – výstup pre prerušenie&lt;br /&gt;
&lt;br /&gt;
GND – zem&lt;br /&gt;
&lt;br /&gt;
+Vs – napájanie&lt;br /&gt;
&lt;br /&gt;
A0 – A1 – nastavenie adresy&lt;br /&gt;
&lt;br /&gt;
'''Dátový formát teploty'''&lt;br /&gt;
&lt;br /&gt;
Teplotné dáta môžu byť čítané z teplomera alebo z registrov pre SetPointy; a zapisované do Setpoint registrov. Teplotné dáta môžu byť čítané kedykoľvek. Ak bude frekvencia čítania dát vysoká, dáta v teplomery sa nestihnú obnoviť. Teplotné dáta sú reprezentované 13-bitovým binárnym číslom s LSB. Jeden bit je rovný 0, 0625 ºC. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Teplotný register LM92.jpg|center|thumb|600px|Obr. 3. Teplotný register]]&lt;br /&gt;
&lt;br /&gt;
Ako vidíme na obr. 3, bity D0 až D2 sú stavové bity. Teplota je na D3 až D14 a D15 je znamienko. Ak D15 je 1, znamienko je -. Príklady reprezentácie teploty sú na obr. 4. Treba si uvedomiť, že ak prečítame tento register získame 16 bitov, čo nie je hneď konkrétna nameraná teplota. Ak chceme získať teplotu, musíme sa zbaviť stavových bitov D0 až D2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Digitálny vystup LM92.jpg|center|thumb|400px|Obr. 4. Digitálny výstup z teplomera]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spojenie LM92 s mikrokontrolérom Cypress ==&lt;br /&gt;
&lt;br /&gt;
Pre spojenie potrebujeme sériové rozhranie I2C, ktoré slúži na komunikáciu mikrokontroléra s teplomerom a napríklad RS232 rozhranie pre komunikáciu mikrokontroléra s počítačom, kde môžme získané informácie ďalej spracovávať a vyhodnocovať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RS232 ==&lt;br /&gt;
&lt;br /&gt;
Toto rozhranie zavedieme použitím hardvérového bloku UART, ktorý Cypress obsahuje. Rýchlosť komunikácie bude 19200Bd, čo znamená frekvenciu 153kHz. Keď chceme nastaviť túto frekvenciu, musíme deliť základnú frekvenciu Cypress 24Mhz/156. Použijeme delič frekvencie VC3, ktorý bude následne zdroj frekvencie pre UART. Pre príjímané dáta použijeme pin P0_4 a pre odosielané dáta použijeme pin P0_2. Konkrétne nastavenia bloku UART priamo v PSoC dizajneri sú na obr. 5. Na obr.6. je vidieť umiestnenie blokov UART s schéme zapojenia.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:nastavenia UART.jpg|center|thumb|400px|Obr. 5. Konkrétne nastavenia bloku UART]]&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Umiestnenie UART.jpg|center|thumb|400px|Obr. 6. Umiestnenie bloku UART v schéme zapojenia]]&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
Aj keď aj pre toto sériové rozhranie existuje hardéverový blok, rozhodli sme sa, že si naprogramujeme vlastný softvér pre implementáciu tohto rozhrania. Toto naše rozhranie nebude potrebovať vonkajšie PULL-UP rezistory.&lt;br /&gt;
&lt;br /&gt;
Ako prvé vytvoríme súbor napr. ''i2c.inc'', v ktorom sa nachádzajú deklarácie pre rozhranie I2C. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
; Definicia portu a pinov &lt;br /&gt;
; upravit podla aktualneho nastavenia&lt;br /&gt;
&lt;br /&gt;
PORT:		equ		PORT_1	        ; PORT_0, PORT_1, PORT_2&lt;br /&gt;
SDA:		equ		P_5		; P_0, P_1, ... P_7&lt;br /&gt;
SCL:		equ		P_4		; P_0, P_1, ... P_7&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Globalne definicie&lt;br /&gt;
I2C_WRITE:	equ		%00000000&lt;br /&gt;
I2C_READ:	equ		%00000001	&lt;br /&gt;
I2C_ACK:	equ		%00000010&lt;br /&gt;
I2C_NOACK:	equ		%00000100&lt;br /&gt;
&lt;br /&gt;
PORT_2:		equ 	PRT2DR&lt;br /&gt;
PORT_1:		equ 	PRT1DR&lt;br /&gt;
PORT_0:		equ 	PRT0DR&lt;br /&gt;
P_7:		equ		%10000000&lt;br /&gt;
P_6:		equ		%01000000&lt;br /&gt;
P_5:		equ		%00100000&lt;br /&gt;
P_4:		equ		%00010000&lt;br /&gt;
P_3:		equ		%00001000&lt;br /&gt;
P_2:		equ		%00000100&lt;br /&gt;
P_1:		equ		%00000010&lt;br /&gt;
P_0:		equ		%00000001&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; Makra pre set/clear pinov SDA, SCL&lt;br /&gt;
MACRO SET_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO SET_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
; Makra pre nastavenie priznakov premennej [Flag]&lt;br /&gt;
MACRO SET_NO_ACK&lt;br /&gt;
	mov [Flag], 0x80&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_NO_ACK&lt;br /&gt;
	mov [Flag], 0x00&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO BIT_DELAY&lt;br /&gt;
	call  BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Potom vytvoríme súbor napr. ''i2c.asm'', ktorý obsahuje konkrétne funkcie pre I2C rozhranie. Program zaberá cca 770 Byte v ROM. Hlavným účelom bolo minimalizovať počet premenných v RAM, zrušiť [Flag] a [BitCnt] nahradiť registrom X. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
include &amp;quot;m8c.inc&amp;quot;&lt;br /&gt;
include &amp;quot;i2c_sw.inc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export I2C_Init&lt;br /&gt;
export I2C_Start&lt;br /&gt;
export I2C_Stop&lt;br /&gt;
export I2C_Send&lt;br /&gt;
export I2C_Recv&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Premenne pre I2C&lt;br /&gt;
area bss(RAM)&lt;br /&gt;
	BitCnt:		BLK 1		; pocitadlo pre pocet bitov&lt;br /&gt;
	SlvAdr:		BLK 1		; adresa slave&lt;br /&gt;
	RcvDat:		BLK 1		; prijate data&lt;br /&gt;
	Flag:		BLK 1		; priznak&lt;br /&gt;
	Temp:		BLK 1		; pomocna premenna&lt;br /&gt;
;=============================================================================&lt;br /&gt;
&lt;br /&gt;
area text&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; BitDly	zakladny delay &lt;br /&gt;
BitDly:		nop			; delay 4x sysclk, upravit podla hodin procesora&lt;br /&gt;
						; v pripade potreby nizsej prenosovej rychlosti &lt;br /&gt;
						; sem doplnte casovy slucku &lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; I2C_Init	inicializacia pinov rozhrania na uroven H&lt;br /&gt;
;			a reset rozhrania&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Init:&lt;br /&gt;
			SET_SDA&lt;br /&gt;
 			SET_SCL&lt;br /&gt;
 			call I2C_Stop&lt;br /&gt;
 			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStart vysle I2C start a adresu slave&lt;br /&gt;
;			nastavuje priznak premennej [Flag] NO_ACK, ak slave nepotvrdil &lt;br /&gt;
;			prijem znaku&lt;br /&gt;
; Vstup&lt;br /&gt;
; 	A - adresa slave&lt;br /&gt;
;	X - mod (I2C_READ, I2C_WRITE)&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Start:	asl A				; posun adrsy&lt;br /&gt;
			mov [SlvAdr],A		; odlozenie adresy&lt;br /&gt;
			swap A,X			; maska modu&lt;br /&gt;
			or [SlvAdr],A	&lt;br /&gt;
			CLR_SDA			 &lt;br /&gt;
			CLR_SCL				&lt;br /&gt;
			mov A, [SlvAdr]&lt;br /&gt;
			call I2C_Send&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStop	vysle stop na I2C a uvolni linku&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Stop:	CLR_SDA&lt;br /&gt;
			SET_SCL&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendByte	vysle znak&lt;br /&gt;
;			nastavuje priznak NO_ACK v premennej [Flag]&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A	- znak&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Send:	CLR_NO_ACK&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
	sbLoop:	asl A				; nastavenie SDA podla rotovaneho bitu v CY&lt;br /&gt;
			&lt;br /&gt;
			push A&lt;br /&gt;
			jnc	sb_low			; ? CY == 0&lt;br /&gt;
			SET_SDA				; 	CY = 1, SDA -&amp;gt; 1	&lt;br /&gt;
			jmp sb_end&lt;br /&gt;
	sb_low:	CLR_SDA				;	CY = 0, SDA -&amp;gt; 0&lt;br /&gt;
	sb_end:	SET_SCL				;					 &lt;br /&gt;
			CLR_SCL				; &lt;br /&gt;
			pop A&lt;br /&gt;
			&lt;br /&gt;
			dec [BitCnt]	&lt;br /&gt;
			jnz sbLoop			; podmienka cyklu&lt;br /&gt;
			&lt;br /&gt;
			SET_SDA				; uvolnenie datovej linky pre ACK &lt;br /&gt;
			SET_SCL				; vyslanie clocku pre ACK&lt;br /&gt;
	&lt;br /&gt;
			mov A, reg[PORT]	; kontrola na potvrdenia ACK od slave&lt;br /&gt;
			and A, SDA&lt;br /&gt;
			jnz sb_ex			; SDA = 1, slave potvrdil&lt;br /&gt;
			SET_NO_ACK			; nastavenie priznaku NoACK&lt;br /&gt;
			&lt;br /&gt;
	sb_ex:	CLR_SCL&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; RecvByte	- nacitanie byte z I2C&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A  - priznak potvrdenia nacitaneho znaku (I2C_ACK, I2C_NO_ACK)&lt;br /&gt;
; Vystup&lt;br /&gt;
;	A - nacitany znak	 &lt;br /&gt;
I2C_Recv:	push A&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
			mov [RcvDat],0x00&lt;br /&gt;
			&lt;br /&gt;
	rbLoop:	SET_SDA				; ***** doplnene&lt;br /&gt;
			SET_SCL				; clock pre nacitanie bitu &lt;br /&gt;
&lt;br /&gt;
			mov A,reg[PORT]		; nacitanie a ulozenie bitu&lt;br /&gt;
&lt;br /&gt;
			mov [Temp],0x80		; nasada pre rotaciu&lt;br /&gt;
			and A,SDA			; kontrola na stav bitu SDA&lt;br /&gt;
			jnz rb_H			;&lt;br /&gt;
			asl [Temp]			; nastavenie CY bitu &lt;br /&gt;
	rb_H:	asl [Temp]			; 1x rotacia - set CY, 2x rotacia - clear CY&lt;br /&gt;
	rb_set: mov A,[RcvDat] &lt;br /&gt;
			rlc A				; presun CY do dat		&lt;br /&gt;
			mov [RcvDat],A&lt;br /&gt;
&lt;br /&gt;
			CLR_SCL&lt;br /&gt;
			dec [BitCnt]&lt;br /&gt;
			jnz rbLoop			; koniec cyklu&lt;br /&gt;
			&lt;br /&gt;
			pop A				; vytiahnutie priznaku zo stacku&lt;br /&gt;
		&lt;br /&gt;
			cmp A, I2C_ACK&lt;br /&gt;
			jnz	rb_noack&lt;br /&gt;
			CLR_SDA				; ack by master&lt;br /&gt;
			jmp rb_ex&lt;br /&gt;
	&lt;br /&gt;
	rb_noack:&lt;br /&gt;
			SET_SDA				; no ack by master, last byte&lt;br /&gt;
			&lt;br /&gt;
	rb_ex:	SET_SCL&lt;br /&gt;
			CLR_SCL				; ***** doplnene&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			mov A,[RcvDat]&lt;br /&gt;
			ret&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konečne reálna komunikácia s LM92 ==&lt;br /&gt;
&lt;br /&gt;
Po všetkých týchto krokoch sa môžme vrhnúť do vytvorenia programu, ktorý bude pomocou vyššie uvedeného rozhrania získavať informácie z teplomera a posielať ich cez sériové rozhranie RS232 do počítača. Pre príjem a odosielanie informácií môžme použiť program terminál.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
include &amp;quot;m8c.inc&amp;quot;       	; part specific constants and macros&lt;br /&gt;
include &amp;quot;memory.inc&amp;quot;    	; Constants &amp;amp; macros for SMM/LMM and Compiler&lt;br /&gt;
include &amp;quot;PSoCAPI.inc&amp;quot;   	; PSoC API definitions for all User Modules&lt;br /&gt;
include &amp;quot;i2c.inc&amp;quot;		; deklaracie a premenne pre I2C&lt;br /&gt;
include &amp;quot;i2c.asm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export _main&lt;br /&gt;
&lt;br /&gt;
LM92_ADR:		equ	0x4B	; adresa teplomera	&lt;br /&gt;
&lt;br /&gt;
; registre teplomera (konstatnty)&lt;br /&gt;
&lt;br /&gt;
LM92_T_TEMP:	equ	0x00	        ; aktualna teplota&lt;br /&gt;
LM92_CONFIG:	equ     0x01	        ; konfiguracny register	&lt;br /&gt;
LM92_T_HYST:	equ     0x02	        ; hystereza&lt;br /&gt;
LM92_T_CRIT:	equ	0x03	        ; kriticka teplota (80 stupnov)&lt;br /&gt;
LM92_T_LOW:     equ     0x04	        ; dolna hranica termostatu&lt;br /&gt;
LM92_T_HIGH:	equ     0x05	        ; horna hranica termostatu&lt;br /&gt;
LM92_MIR:	equ     0x07	        ; manufacturer identification register (MIR)&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
area lit&lt;br /&gt;
	text:					&lt;br /&gt;
		DS &amp;quot;Komunikacia OK&amp;quot;	; kontrola komunikacie			&lt;br /&gt;
		DB 0x00&lt;br /&gt;
&lt;br /&gt;
area bss(RAM)				; premenne&lt;br /&gt;
	lm92_temp:	BLK 2		; namerana teplota (rezervované 2 bajty v RAM)&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
area text&lt;br /&gt;
_main:	&lt;br /&gt;
	mov   A,UART_PARITY_NONE  &lt;br /&gt;
        call  UART_Start      	        ; UART 19200bd, 8bit,1,N&lt;br /&gt;
	M8C_EnableGInt    &lt;br /&gt;
	call I2C_Init			; inicializacia I2C zbernice&lt;br /&gt;
WaitForData:               	        ; cakanie na povel z RS232     &lt;br /&gt;
        call  UART_bReadRxStatus    &lt;br /&gt;
        and   A, UART_RX_COMPLETE       ;ak nebol prijaty ziadny znak,    &lt;br /&gt;
        jz    WaitForData               ;vrati sa na WaitForData&lt;br /&gt;
        call  UART_bReadRxData          ; cita data    &lt;br /&gt;
        call  UART_SendData             ; prenasa data &lt;br /&gt;
&lt;br /&gt;
 	cmp A,'q'			; kontrola komunikacie (v kazdom z nasledujucich krokov sa prijate data porovnavaju s danym znakom, napr.q)&lt;br /&gt;
 	jz state_q                      ; ak nastane zhoda zero flag ZF sa nastavi na 1 a program prejde do prislusnej casi, napr. state_q &lt;br /&gt;
&lt;br /&gt;
 	cmp A,'w'			; vycitanie prednastaveneho registra (T_TEMP - default)&lt;br /&gt;
 	jz state_w&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'a'			; nastavenie registra T_TEMP&lt;br /&gt;
 	jz state_a&lt;br /&gt;
&lt;br /&gt;
        cmp A,'s'			; nastavenie registra T_CONFIG&lt;br /&gt;
 	jz state_s&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'d'			; nastavenie registra T_HYST&lt;br /&gt;
 	jz state_d&lt;br /&gt;
&lt;br /&gt;
        cmp A,'f'			; nastavenie registra T_CRIT&lt;br /&gt;
 	jz state_f&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'g'			; nastavenie registra T_LOW&lt;br /&gt;
 	jz state_g&lt;br /&gt;
&lt;br /&gt;
        cmp A,'h'			; nastavenie registra T_HIGH&lt;br /&gt;
 	jz state_h&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'j'			; nastavenie registra MIR&lt;br /&gt;
 	jz state_j&lt;br /&gt;
&lt;br /&gt;
    jmp   WaitForData      	        ; navrat do zakladnej slucky&lt;br /&gt;
;-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_q:				; kontrola komunikacie&lt;br /&gt;
        call UART_PutCRLF               ; odriadkovanie&lt;br /&gt;
        mov A, &amp;gt;text                    ; do A sa ulozi prvy znak retazca text                   &lt;br /&gt;
	mov X, &amp;lt;text                    ; do X sa ulozi posledny znak retazca text&lt;br /&gt;
	call UART_CPutString            ; vytlaci sa retazec text&lt;br /&gt;
        call UART_PutCRLF               ; odriadkovanie&lt;br /&gt;
&lt;br /&gt;
    jmp   WaitForData                   ; navrat do zakladnej slucky&lt;br /&gt;
;--------------------------------------------------------------------------------   &lt;br /&gt;
&lt;br /&gt;
state_w:				; vycitanie obsahu nastaveneho registra teplomera&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_ADR                 ; nastavenie adresy slave, resp. LM92 pre I2C&lt;br /&gt;
	mov X, I2C_READ			; nastavenie komunikacie na citanie&lt;br /&gt;
	call I2C_Start			; zaciatok komunikacie&lt;br /&gt;
	mov A, I2C_ACK			; nacitanie prveho byte&lt;br /&gt;
	call I2C_Recv&lt;br /&gt;
	mov [lm92_temp],A&lt;br /&gt;
	mov A, I2C_NOACK		; nacitanie druheho (posledneho) byte&lt;br /&gt;
	call I2C_Recv&lt;br /&gt;
	mov [lm92_temp+1],A&lt;br /&gt;
	call I2C_Stop			; ukoncenie komunikacie&lt;br /&gt;
	call UART_PutCRLF		; odriadkovanie terminalu&lt;br /&gt;
	mov A,[lm92_temp] 		; vypis udaju teploty na terminal (prvy byte)&lt;br /&gt;
	call UART_PutSHexByte           ; v hexadecimalnom tvare&lt;br /&gt;
	mov A,[lm92_temp+1] 		; vypis udaju teploty na terminal (prvy byte)&lt;br /&gt;
	call UART_PutSHexByte           ; v hexadecimalnom tvare&lt;br /&gt;
;----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_a:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_TEMP              ; do A sa presunie adresa registra T_TEMP		&lt;br /&gt;
	call set_register	        ; zavola sa funkcia set_register		&lt;br /&gt;
	jmp   WaitForData               ; navrat do zakladnej slucky&lt;br /&gt;
;----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_s:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_CONFIG	        ; rovnaky postup ako pri state_a	&lt;br /&gt;
	call set_register		; len pre ine registre	&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_d:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_HYST		&lt;br /&gt;
	call set_register			&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_f:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_CRIT		&lt;br /&gt;
	call set_register			&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_g:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_LOW		&lt;br /&gt;
	call set_register			&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_h:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_HIGH		&lt;br /&gt;
	call set_register			&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;----------------------------------------------------------------------------------&lt;br /&gt;
state_j:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_MIR	&lt;br /&gt;
	call set_register			&lt;br /&gt;
        jmp   WaitForData 	&lt;br /&gt;
&lt;br /&gt;
;----------------------------------------------------------------------------------&lt;br /&gt;
; set_register	nastavenie aktualneho registra LM92&lt;br /&gt;
&lt;br /&gt;
; Vstup &lt;br /&gt;
&lt;br /&gt;
;	A - cislo registra&lt;br /&gt;
&lt;br /&gt;
; Vystup&lt;br /&gt;
&lt;br /&gt;
; -&lt;br /&gt;
&lt;br /&gt;
set_register:&lt;br /&gt;
&lt;br /&gt;
	push A                            ; hodnota A sa zapise na vrch zasobnika, resp. SP&lt;br /&gt;
	mov A, LM92_ADR                   ; do A sa presunie adresa LM92&lt;br /&gt;
	mov X, I2C_WRITE		  ; nastavenie komunikacie na zapis&lt;br /&gt;
	call I2C_Start			  ; zaciatok komunikacie&lt;br /&gt;
	pop A                             ; posledny byte zo zasobnika sa vymaze a zapise sa do A&lt;br /&gt;
	call I2C_Send                     ; hodnota A,t.j. cislo registra sa posle &lt;br /&gt;
	call I2C_Stop			  ; ukoncenie komunikacie&lt;br /&gt;
&lt;br /&gt;
	jmp   WaitForData	          ; navrat do zakladnej slucky&lt;br /&gt;
	ret                               ; PC register sa zameni za prve dva byty v SP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Keď toto všetko dáme dokopy, môžme si vyskúšať komunikáciu s teplomerom LM92. Na ilustráciu uvediem aj hardvérové zapojenie, ktoré je možné vidieť na obr. 7.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zapojenie s LM92.jpg|center|thumb|400px|Obr. 7. Hardvérové zapojenie]]&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5926</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5926"/>
		<updated>2010-06-25T11:39:32Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* Konečne reálna komunikácia s LM92 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Popis pinov LM92.jpg|center|thumb|400px|Obr. 2. Popis pinov]]&lt;br /&gt;
&lt;br /&gt;
SDA – sériová obojsmerná dátová linka&lt;br /&gt;
&lt;br /&gt;
SCL – hodinový vstup&lt;br /&gt;
&lt;br /&gt;
T_CRIT_A – výstup alarmu pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
INT – výstup pre prerušenie&lt;br /&gt;
&lt;br /&gt;
GND – zem&lt;br /&gt;
&lt;br /&gt;
+Vs – napájanie&lt;br /&gt;
&lt;br /&gt;
A0 – A1 – nastavenie adresy&lt;br /&gt;
&lt;br /&gt;
'''Dátový formát teploty'''&lt;br /&gt;
&lt;br /&gt;
Teplotné dáta môžu byť čítané z teplomera alebo z registrov pre SetPointy; a zapisované do Setpoint registrov. Teplotné dáta môžu byť čítané kedykoľvek. Ak bude frekvencia čítania dát vysoká, dáta v teplomery sa nestihnú obnoviť. Teplotné dáta sú reprezentované 13-bitovým binárnym číslom s LSB. Jeden bit je rovný 0, 0625 ºC. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Teplotný register LM92.jpg|center|thumb|600px|Obr. 3. Teplotný register]]&lt;br /&gt;
&lt;br /&gt;
Ako vidíme na obr. 3, bity D0 až D2 sú stavové bity. Teplota je na D3 až D14 a D15 je znamienko. Ak D15 je 1, znamienko je -. Príklady reprezentácie teploty sú na obr. 4. Treba si uvedomiť, že ak prečítame tento register získame 16 bitov, čo nie je hneď konkrétna nameraná teplota. Ak chceme získať teplotu, musíme sa zbaviť stavových bitov D0 až D2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Digitálny vystup LM92.jpg|center|thumb|400px|Obr. 4. Digitálny výstup z teplomera]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spojenie LM92 s mikrokontrolérom Cypress ==&lt;br /&gt;
&lt;br /&gt;
Pre spojenie potrebujeme sériové rozhranie I2C, ktoré slúži na komunikáciu mikrokontroléra s teplomerom a napríklad RS232 rozhranie pre komunikáciu mikrokontroléra s počítačom, kde môžme získané informácie ďalej spracovávať a vyhodnocovať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RS232 ==&lt;br /&gt;
&lt;br /&gt;
Toto rozhranie zavedieme použitím hardvérového bloku UART, ktorý Cypress obsahuje. Rýchlosť komunikácie bude 19200Bd, čo znamená frekvenciu 153kHz. Keď chceme nastaviť túto frekvenciu, musíme deliť základnú frekvenciu Cypress 24Mhz/156. Použijeme delič frekvencie VC3, ktorý bude následne zdroj frekvencie pre UART. Pre príjímané dáta použijeme pin P0_4 a pre odosielané dáta použijeme pin P0_2. Konkrétne nastavenia bloku UART priamo v PSoC dizajneri sú na obr. 5. Na obr.6. je vidieť umiestnenie blokov UART s schéme zapojenia.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:nastavenia UART.jpg|center|thumb|400px|Obr. 5. Konkrétne nastavenia bloku UART]]&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Umiestnenie UART.jpg|center|thumb|400px|Obr. 6. Umiestnenie bloku UART v schéme zapojenia]]&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
Aj keď aj pre toto sériové rozhranie existuje hardéverový blok, rozhodli sme sa, že si naprogramujeme vlastný softvér pre implementáciu tohto rozhrania. Toto naše rozhranie nebude potrebovať vonkajšie PULL-UP rezistory.&lt;br /&gt;
&lt;br /&gt;
Ako prvé vytvoríme súbor napr. ''i2c.inc'', v ktorom sa nachádzajú deklarácie pre rozhranie I2C. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
; Definicia portu a pinov &lt;br /&gt;
; upravit podla aktualneho nastavenia&lt;br /&gt;
&lt;br /&gt;
PORT:		equ		PORT_1	        ; PORT_0, PORT_1, PORT_2&lt;br /&gt;
SDA:		equ		P_5		; P_0, P_1, ... P_7&lt;br /&gt;
SCL:		equ		P_4		; P_0, P_1, ... P_7&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Globalne definicie&lt;br /&gt;
I2C_WRITE:	equ		%00000000&lt;br /&gt;
I2C_READ:	equ		%00000001	&lt;br /&gt;
I2C_ACK:	equ		%00000010&lt;br /&gt;
I2C_NOACK:	equ		%00000100&lt;br /&gt;
&lt;br /&gt;
PORT_2:		equ 	PRT2DR&lt;br /&gt;
PORT_1:		equ 	PRT1DR&lt;br /&gt;
PORT_0:		equ 	PRT0DR&lt;br /&gt;
P_7:		equ		%10000000&lt;br /&gt;
P_6:		equ		%01000000&lt;br /&gt;
P_5:		equ		%00100000&lt;br /&gt;
P_4:		equ		%00010000&lt;br /&gt;
P_3:		equ		%00001000&lt;br /&gt;
P_2:		equ		%00000100&lt;br /&gt;
P_1:		equ		%00000010&lt;br /&gt;
P_0:		equ		%00000001&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; Makra pre set/clear pinov SDA, SCL&lt;br /&gt;
MACRO SET_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO SET_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
; Makra pre nastavenie priznakov premennej [Flag]&lt;br /&gt;
MACRO SET_NO_ACK&lt;br /&gt;
	mov [Flag], 0x80&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_NO_ACK&lt;br /&gt;
	mov [Flag], 0x00&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO BIT_DELAY&lt;br /&gt;
	call  BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Potom vytvoríme súbor napr. ''i2c.asm'', ktorý obsahuje konkrétne funkcie pre I2C rozhranie. Program zaberá cca 770 Byte v ROM. Hlavným účelom bolo minimalizovať počet premenných v RAM, zrušiť [Flag] a [BitCnt] nahradiť registrom X. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
include &amp;quot;m8c.inc&amp;quot;&lt;br /&gt;
include &amp;quot;i2c_sw.inc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export I2C_Init&lt;br /&gt;
export I2C_Start&lt;br /&gt;
export I2C_Stop&lt;br /&gt;
export I2C_Send&lt;br /&gt;
export I2C_Recv&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Premenne pre I2C&lt;br /&gt;
area bss(RAM)&lt;br /&gt;
	BitCnt:		BLK 1		; pocitadlo pre pocet bitov&lt;br /&gt;
	SlvAdr:		BLK 1		; adresa slave&lt;br /&gt;
	RcvDat:		BLK 1		; prijate data&lt;br /&gt;
	Flag:		BLK 1		; priznak&lt;br /&gt;
	Temp:		BLK 1		; pomocna premenna&lt;br /&gt;
;=============================================================================&lt;br /&gt;
&lt;br /&gt;
area text&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; BitDly	zakladny delay &lt;br /&gt;
BitDly:		nop			; delay 4x sysclk, upravit podla hodin procesora&lt;br /&gt;
						; v pripade potreby nizsej prenosovej rychlosti &lt;br /&gt;
						; sem doplnte casovy slucku &lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; I2C_Init	inicializacia pinov rozhrania na uroven H&lt;br /&gt;
;			a reset rozhrania&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Init:&lt;br /&gt;
			SET_SDA&lt;br /&gt;
 			SET_SCL&lt;br /&gt;
 			call I2C_Stop&lt;br /&gt;
 			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStart vysle I2C start a adresu slave&lt;br /&gt;
;			nastavuje priznak premennej [Flag] NO_ACK, ak slave nepotvrdil &lt;br /&gt;
;			prijem znaku&lt;br /&gt;
; Vstup&lt;br /&gt;
; 	A - adresa slave&lt;br /&gt;
;	X - mod (I2C_READ, I2C_WRITE)&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Start:	asl A				; posun adrsy&lt;br /&gt;
			mov [SlvAdr],A		; odlozenie adresy&lt;br /&gt;
			swap A,X			; maska modu&lt;br /&gt;
			or [SlvAdr],A	&lt;br /&gt;
			CLR_SDA			 &lt;br /&gt;
			CLR_SCL				&lt;br /&gt;
			mov A, [SlvAdr]&lt;br /&gt;
			call I2C_Send&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStop	vysle stop na I2C a uvolni linku&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Stop:	CLR_SDA&lt;br /&gt;
			SET_SCL&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendByte	vysle znak&lt;br /&gt;
;			nastavuje priznak NO_ACK v premennej [Flag]&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A	- znak&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Send:	CLR_NO_ACK&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
	sbLoop:	asl A				; nastavenie SDA podla rotovaneho bitu v CY&lt;br /&gt;
			&lt;br /&gt;
			push A&lt;br /&gt;
			jnc	sb_low			; ? CY == 0&lt;br /&gt;
			SET_SDA				; 	CY = 1, SDA -&amp;gt; 1	&lt;br /&gt;
			jmp sb_end&lt;br /&gt;
	sb_low:	CLR_SDA				;	CY = 0, SDA -&amp;gt; 0&lt;br /&gt;
	sb_end:	SET_SCL				;					 &lt;br /&gt;
			CLR_SCL				; &lt;br /&gt;
			pop A&lt;br /&gt;
			&lt;br /&gt;
			dec [BitCnt]	&lt;br /&gt;
			jnz sbLoop			; podmienka cyklu&lt;br /&gt;
			&lt;br /&gt;
			SET_SDA				; uvolnenie datovej linky pre ACK &lt;br /&gt;
			SET_SCL				; vyslanie clocku pre ACK&lt;br /&gt;
	&lt;br /&gt;
			mov A, reg[PORT]	; kontrola na potvrdenia ACK od slave&lt;br /&gt;
			and A, SDA&lt;br /&gt;
			jnz sb_ex			; SDA = 1, slave potvrdil&lt;br /&gt;
			SET_NO_ACK			; nastavenie priznaku NoACK&lt;br /&gt;
			&lt;br /&gt;
	sb_ex:	CLR_SCL&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; RecvByte	- nacitanie byte z I2C&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A  - priznak potvrdenia nacitaneho znaku (I2C_ACK, I2C_NO_ACK)&lt;br /&gt;
; Vystup&lt;br /&gt;
;	A - nacitany znak	 &lt;br /&gt;
I2C_Recv:	push A&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
			mov [RcvDat],0x00&lt;br /&gt;
			&lt;br /&gt;
	rbLoop:	SET_SDA				; ***** doplnene&lt;br /&gt;
			SET_SCL				; clock pre nacitanie bitu &lt;br /&gt;
&lt;br /&gt;
			mov A,reg[PORT]		; nacitanie a ulozenie bitu&lt;br /&gt;
&lt;br /&gt;
			mov [Temp],0x80		; nasada pre rotaciu&lt;br /&gt;
			and A,SDA			; kontrola na stav bitu SDA&lt;br /&gt;
			jnz rb_H			;&lt;br /&gt;
			asl [Temp]			; nastavenie CY bitu &lt;br /&gt;
	rb_H:	asl [Temp]			; 1x rotacia - set CY, 2x rotacia - clear CY&lt;br /&gt;
	rb_set: mov A,[RcvDat] &lt;br /&gt;
			rlc A				; presun CY do dat		&lt;br /&gt;
			mov [RcvDat],A&lt;br /&gt;
&lt;br /&gt;
			CLR_SCL&lt;br /&gt;
			dec [BitCnt]&lt;br /&gt;
			jnz rbLoop			; koniec cyklu&lt;br /&gt;
			&lt;br /&gt;
			pop A				; vytiahnutie priznaku zo stacku&lt;br /&gt;
		&lt;br /&gt;
			cmp A, I2C_ACK&lt;br /&gt;
			jnz	rb_noack&lt;br /&gt;
			CLR_SDA				; ack by master&lt;br /&gt;
			jmp rb_ex&lt;br /&gt;
	&lt;br /&gt;
	rb_noack:&lt;br /&gt;
			SET_SDA				; no ack by master, last byte&lt;br /&gt;
			&lt;br /&gt;
	rb_ex:	SET_SCL&lt;br /&gt;
			CLR_SCL				; ***** doplnene&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			mov A,[RcvDat]&lt;br /&gt;
			ret&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konečne reálna komunikácia s LM92 ==&lt;br /&gt;
&lt;br /&gt;
Po všetkých týchto krokoch sa môžme vrhnúť do vytvorenia programu, ktorý bude pomocou vyššie uvedeného rozhrania získavať informácie z teplomera a posielať ich cez sériové rozhranie RS232 do počítača. Pre príjem a odosielanie informácií môžme použiť program terminál.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
include &amp;quot;m8c.inc&amp;quot;       	; part specific constants and macros&lt;br /&gt;
include &amp;quot;memory.inc&amp;quot;    	; Constants &amp;amp; macros for SMM/LMM and Compiler&lt;br /&gt;
include &amp;quot;PSoCAPI.inc&amp;quot;   	; PSoC API definitions for all User Modules&lt;br /&gt;
include &amp;quot;i2c.inc&amp;quot;		; deklaracie a premenne pre I2C&lt;br /&gt;
include &amp;quot;i2c.asm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export _main&lt;br /&gt;
&lt;br /&gt;
LM92_ADR:		equ	0x4B	; adresa teplomera	&lt;br /&gt;
&lt;br /&gt;
; registre teplomera (konstatnty)&lt;br /&gt;
&lt;br /&gt;
LM92_T_TEMP:	equ	0x00	        ; aktualna teplota&lt;br /&gt;
LM92_CONFIG:	equ     0x01	        ; konfiguracny register	&lt;br /&gt;
LM92_T_HYST:	equ     0x02	        ; hystereza&lt;br /&gt;
LM92_T_CRIT:	equ	0x03	        ; kriticka teplota (80 stupnov)&lt;br /&gt;
LM92_T_LOW:     equ     0x04	        ; dolna hranica termostatu&lt;br /&gt;
LM92_T_HIGH:	equ     0x05	        ; horna hranica termostatu&lt;br /&gt;
LM92_MIR:	equ     0x07	        ; manufacturer identification register (MIR)&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
area lit&lt;br /&gt;
	text:					&lt;br /&gt;
		DS &amp;quot;Komunikacia OK&amp;quot;	; kontrola komunikacie			&lt;br /&gt;
		DB 0x00&lt;br /&gt;
&lt;br /&gt;
area bss(RAM)				; premenne&lt;br /&gt;
	lm92_temp:	BLK 2		; namerana teplota (rezervované 2 bajty v RAM)&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
area text&lt;br /&gt;
_main:	&lt;br /&gt;
	mov   A,UART_PARITY_NONE  &lt;br /&gt;
        call  UART_Start      	        ; UART 19200bd, 8bit,1,N&lt;br /&gt;
	M8C_EnableGInt    &lt;br /&gt;
	call I2C_Init			; inicializacia I2C zbernice&lt;br /&gt;
WaitForData:               	        ; cakanie na povel z RS232     &lt;br /&gt;
        call  UART_bReadRxStatus    &lt;br /&gt;
        and   A, UART_RX_COMPLETE       ;ak nebol prijaty ziadny znak,    &lt;br /&gt;
        jz    WaitForData               ;vrati sa na WaitForData&lt;br /&gt;
        call  UART_bReadRxData          ; cita data    &lt;br /&gt;
        call  UART_SendData             ; prenasa data &lt;br /&gt;
&lt;br /&gt;
 	cmp A,'q'			; kontrola komunikacie (v kazdom z nasledujucich krokov sa prijate data porovnavaju s danym znakom, napr.q)&lt;br /&gt;
 	jz state_q                      ; ak nastane zhoda zero flag ZF sa nastavi na 1 a program prejde do prislusnej casi, napr. state_q &lt;br /&gt;
&lt;br /&gt;
 	cmp A,'w'			; vycitanie prednastaveneho registra (T_TEMP - default)&lt;br /&gt;
 	jz state_w&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'a'			; nastavenie registra T_TEMP&lt;br /&gt;
 	jz state_a&lt;br /&gt;
&lt;br /&gt;
        cmp A,'s'			; nastavenie registra T_CONFIG&lt;br /&gt;
 	jz state_s&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'d'			; nastavenie registra T_HYST&lt;br /&gt;
 	jz state_d&lt;br /&gt;
&lt;br /&gt;
        cmp A,'f'			; nastavenie registra T_CRIT&lt;br /&gt;
 	jz state_f&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'g'			; nastavenie registra T_LOW&lt;br /&gt;
 	jz state_g&lt;br /&gt;
&lt;br /&gt;
        cmp A,'h'			; nastavenie registra T_HIGH&lt;br /&gt;
 	jz state_h&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'j'			; nastavenie registra MIR&lt;br /&gt;
 	jz state_j&lt;br /&gt;
&lt;br /&gt;
    jmp   WaitForData      	        ; navrat do zakladnej slucky&lt;br /&gt;
;-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_q:				; kontrola komunikacie&lt;br /&gt;
        call UART_PutCRLF               ; odriadkovanie&lt;br /&gt;
        mov A, &amp;gt;text                    ; do A sa ulozi prvy znak retazca text                   &lt;br /&gt;
	mov X, &amp;lt;text                    ; do X sa ulozi posledny znak retazca text&lt;br /&gt;
	call UART_CPutString            ; vytlaci sa retazec text&lt;br /&gt;
        call UART_PutCRLF               ; odriadkovanie&lt;br /&gt;
&lt;br /&gt;
    jmp   WaitForData                   ; navrat do zakladnej slucky&lt;br /&gt;
;--------------------------------------------------------------------------------   &lt;br /&gt;
&lt;br /&gt;
state_w:				; vycitanie obsahu nastaveneho registra teplomera&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_ADR                 ; nastavenie adresy slave, resp. LM92 pre I2C&lt;br /&gt;
	mov X, I2C_READ			; nastavenie komunikacie na citanie&lt;br /&gt;
	call I2C_Start			; zaciatok komunikacie&lt;br /&gt;
	mov A, I2C_ACK			; nacitanie prveho byte&lt;br /&gt;
	call I2C_Recv&lt;br /&gt;
	mov [lm92_temp],A&lt;br /&gt;
	mov A, I2C_NOACK		; nacitanie druheho (posledneho) byte&lt;br /&gt;
	call I2C_Recv&lt;br /&gt;
	mov [lm92_temp+1],A&lt;br /&gt;
	call I2C_Stop			; ukoncenie komunikacie&lt;br /&gt;
	call UART_PutCRLF		; odriadkovanie terminalu&lt;br /&gt;
	mov A,[lm92_temp] 		; vypis udaju teploty na terminal (prvy byte)&lt;br /&gt;
	call UART_PutSHexByte           ; v hexadecimalnom tvare&lt;br /&gt;
	mov A,[lm92_temp+1] 		; vypis udaju teploty na terminal (prvy byte)&lt;br /&gt;
	call UART_PutSHexByte           ; v hexadecimalnom tvare&lt;br /&gt;
;----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_a:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_TEMP              ; do A sa presunie adresa registra T_TEMP		&lt;br /&gt;
&lt;br /&gt;
	call set_register	        ; zavola sa funkcia set_register		&lt;br /&gt;
&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
              ; navrat do zakladnej slucky&lt;br /&gt;
;---------------------------&lt;br /&gt;
-------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_s:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_CONFIG	        ; rovnaky postup ako pri state_a	&lt;br /&gt;
&lt;br /&gt;
	call set_register		; len pre ine registre	&lt;br /&gt;
&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;---------------------------&lt;br /&gt;
-------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_d:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_HYST		&lt;br /&gt;
&lt;br /&gt;
	call set_register			&lt;br /&gt;
&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;---------------------------&lt;br /&gt;
-------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_f:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_CRIT		&lt;br /&gt;
&lt;br /&gt;
	call set_register			&lt;br /&gt;
&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;---------------------------&lt;br /&gt;
-------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_g:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_LOW		&lt;br /&gt;
&lt;br /&gt;
	call set_register			&lt;br /&gt;
&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;---------------------------&lt;br /&gt;
-------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_h:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_HIGH		&lt;br /&gt;
&lt;br /&gt;
	call set_register			&lt;br /&gt;
&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;---------------------------&lt;br /&gt;
-------------------------------------------------------&lt;br /&gt;
state_j:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_MIR	&lt;br /&gt;
&lt;br /&gt;
	call set_register			&lt;br /&gt;
&lt;br /&gt;
	jmp   WaitForData 	&lt;br /&gt;
&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
-----&lt;br /&gt;
; set_register	nastavenie aktualneho registra LM92&lt;br /&gt;
&lt;br /&gt;
; Vstup &lt;br /&gt;
&lt;br /&gt;
;	A - cislo registra&lt;br /&gt;
&lt;br /&gt;
; Vystup&lt;br /&gt;
&lt;br /&gt;
; -&lt;br /&gt;
&lt;br /&gt;
set_register:&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	push A&lt;br /&gt;
                          ; hodnota A sa zapise na vrch zasobnika, resp. SP&lt;br /&gt;
	mov A, LM92_ADR&lt;br /&gt;
                 ; do A sa presunie adresa LM92&lt;br /&gt;
	mov X, I2C_WRITE		; nastavenie komunikacie na zapis&lt;br /&gt;
&lt;br /&gt;
	call I2C_Start			; zaciatok komunikacie&lt;br /&gt;
&lt;br /&gt;
	pop A&lt;br /&gt;
                           ; posledny byte zo zasobnika sa vymaze a zapise sa do A&lt;br /&gt;
&lt;br /&gt;
	call I2C_Send&lt;br /&gt;
                   ; hodnota A,t.j. cislo registra sa posle &lt;br /&gt;
	call I2C_Stop			; ukoncenie komunikacie&lt;br /&gt;
&lt;br /&gt;
	jmp   WaitForData	        ; navrat do zakladnej slucky&lt;br /&gt;
&lt;br /&gt;
	ret                             ; PC register sa zameni za prve dva byty v SP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Keď toto všetko dáme dokopy, môžme si vyskúšať komunikáciu s teplomerom LM92. Na ilustráciu uvediem aj hardvérové zapojenie, ktoré je možné vidieť na obr. 7.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zapojenie s LM92.jpg|center|thumb|400px|Obr. 7. Hardvérové zapojenie]]&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Zapojenie_s_LM92.jpg&amp;diff=5925</id>
		<title>Súbor:Zapojenie s LM92.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Zapojenie_s_LM92.jpg&amp;diff=5925"/>
		<updated>2010-06-25T11:37:42Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5924</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5924"/>
		<updated>2010-06-25T11:16:27Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* Konečne reálna komunikácia s LM92 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Popis pinov LM92.jpg|center|thumb|400px|Obr. 2. Popis pinov]]&lt;br /&gt;
&lt;br /&gt;
SDA – sériová obojsmerná dátová linka&lt;br /&gt;
&lt;br /&gt;
SCL – hodinový vstup&lt;br /&gt;
&lt;br /&gt;
T_CRIT_A – výstup alarmu pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
INT – výstup pre prerušenie&lt;br /&gt;
&lt;br /&gt;
GND – zem&lt;br /&gt;
&lt;br /&gt;
+Vs – napájanie&lt;br /&gt;
&lt;br /&gt;
A0 – A1 – nastavenie adresy&lt;br /&gt;
&lt;br /&gt;
'''Dátový formát teploty'''&lt;br /&gt;
&lt;br /&gt;
Teplotné dáta môžu byť čítané z teplomera alebo z registrov pre SetPointy; a zapisované do Setpoint registrov. Teplotné dáta môžu byť čítané kedykoľvek. Ak bude frekvencia čítania dát vysoká, dáta v teplomery sa nestihnú obnoviť. Teplotné dáta sú reprezentované 13-bitovým binárnym číslom s LSB. Jeden bit je rovný 0, 0625 ºC. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Teplotný register LM92.jpg|center|thumb|600px|Obr. 3. Teplotný register]]&lt;br /&gt;
&lt;br /&gt;
Ako vidíme na obr. 3, bity D0 až D2 sú stavové bity. Teplota je na D3 až D14 a D15 je znamienko. Ak D15 je 1, znamienko je -. Príklady reprezentácie teploty sú na obr. 4. Treba si uvedomiť, že ak prečítame tento register získame 16 bitov, čo nie je hneď konkrétna nameraná teplota. Ak chceme získať teplotu, musíme sa zbaviť stavových bitov D0 až D2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Digitálny vystup LM92.jpg|center|thumb|400px|Obr. 4. Digitálny výstup z teplomera]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spojenie LM92 s mikrokontrolérom Cypress ==&lt;br /&gt;
&lt;br /&gt;
Pre spojenie potrebujeme sériové rozhranie I2C, ktoré slúži na komunikáciu mikrokontroléra s teplomerom a napríklad RS232 rozhranie pre komunikáciu mikrokontroléra s počítačom, kde môžme získané informácie ďalej spracovávať a vyhodnocovať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RS232 ==&lt;br /&gt;
&lt;br /&gt;
Toto rozhranie zavedieme použitím hardvérového bloku UART, ktorý Cypress obsahuje. Rýchlosť komunikácie bude 19200Bd, čo znamená frekvenciu 153kHz. Keď chceme nastaviť túto frekvenciu, musíme deliť základnú frekvenciu Cypress 24Mhz/156. Použijeme delič frekvencie VC3, ktorý bude následne zdroj frekvencie pre UART. Pre príjímané dáta použijeme pin P0_4 a pre odosielané dáta použijeme pin P0_2. Konkrétne nastavenia bloku UART priamo v PSoC dizajneri sú na obr. 5. Na obr.6. je vidieť umiestnenie blokov UART s schéme zapojenia.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:nastavenia UART.jpg|center|thumb|400px|Obr. 5. Konkrétne nastavenia bloku UART]]&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Umiestnenie UART.jpg|center|thumb|400px|Obr. 6. Umiestnenie bloku UART v schéme zapojenia]]&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
Aj keď aj pre toto sériové rozhranie existuje hardéverový blok, rozhodli sme sa, že si naprogramujeme vlastný softvér pre implementáciu tohto rozhrania. Toto naše rozhranie nebude potrebovať vonkajšie PULL-UP rezistory.&lt;br /&gt;
&lt;br /&gt;
Ako prvé vytvoríme súbor napr. ''i2c.inc'', v ktorom sa nachádzajú deklarácie pre rozhranie I2C. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
; Definicia portu a pinov &lt;br /&gt;
; upravit podla aktualneho nastavenia&lt;br /&gt;
&lt;br /&gt;
PORT:		equ		PORT_1	        ; PORT_0, PORT_1, PORT_2&lt;br /&gt;
SDA:		equ		P_5		; P_0, P_1, ... P_7&lt;br /&gt;
SCL:		equ		P_4		; P_0, P_1, ... P_7&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Globalne definicie&lt;br /&gt;
I2C_WRITE:	equ		%00000000&lt;br /&gt;
I2C_READ:	equ		%00000001	&lt;br /&gt;
I2C_ACK:	equ		%00000010&lt;br /&gt;
I2C_NOACK:	equ		%00000100&lt;br /&gt;
&lt;br /&gt;
PORT_2:		equ 	PRT2DR&lt;br /&gt;
PORT_1:		equ 	PRT1DR&lt;br /&gt;
PORT_0:		equ 	PRT0DR&lt;br /&gt;
P_7:		equ		%10000000&lt;br /&gt;
P_6:		equ		%01000000&lt;br /&gt;
P_5:		equ		%00100000&lt;br /&gt;
P_4:		equ		%00010000&lt;br /&gt;
P_3:		equ		%00001000&lt;br /&gt;
P_2:		equ		%00000100&lt;br /&gt;
P_1:		equ		%00000010&lt;br /&gt;
P_0:		equ		%00000001&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; Makra pre set/clear pinov SDA, SCL&lt;br /&gt;
MACRO SET_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO SET_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
; Makra pre nastavenie priznakov premennej [Flag]&lt;br /&gt;
MACRO SET_NO_ACK&lt;br /&gt;
	mov [Flag], 0x80&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_NO_ACK&lt;br /&gt;
	mov [Flag], 0x00&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO BIT_DELAY&lt;br /&gt;
	call  BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Potom vytvoríme súbor napr. ''i2c.asm'', ktorý obsahuje konkrétne funkcie pre I2C rozhranie. Program zaberá cca 770 Byte v ROM. Hlavným účelom bolo minimalizovať počet premenných v RAM, zrušiť [Flag] a [BitCnt] nahradiť registrom X. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
include &amp;quot;m8c.inc&amp;quot;&lt;br /&gt;
include &amp;quot;i2c_sw.inc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export I2C_Init&lt;br /&gt;
export I2C_Start&lt;br /&gt;
export I2C_Stop&lt;br /&gt;
export I2C_Send&lt;br /&gt;
export I2C_Recv&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Premenne pre I2C&lt;br /&gt;
area bss(RAM)&lt;br /&gt;
	BitCnt:		BLK 1		; pocitadlo pre pocet bitov&lt;br /&gt;
	SlvAdr:		BLK 1		; adresa slave&lt;br /&gt;
	RcvDat:		BLK 1		; prijate data&lt;br /&gt;
	Flag:		BLK 1		; priznak&lt;br /&gt;
	Temp:		BLK 1		; pomocna premenna&lt;br /&gt;
;=============================================================================&lt;br /&gt;
&lt;br /&gt;
area text&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; BitDly	zakladny delay &lt;br /&gt;
BitDly:		nop			; delay 4x sysclk, upravit podla hodin procesora&lt;br /&gt;
						; v pripade potreby nizsej prenosovej rychlosti &lt;br /&gt;
						; sem doplnte casovy slucku &lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; I2C_Init	inicializacia pinov rozhrania na uroven H&lt;br /&gt;
;			a reset rozhrania&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Init:&lt;br /&gt;
			SET_SDA&lt;br /&gt;
 			SET_SCL&lt;br /&gt;
 			call I2C_Stop&lt;br /&gt;
 			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStart vysle I2C start a adresu slave&lt;br /&gt;
;			nastavuje priznak premennej [Flag] NO_ACK, ak slave nepotvrdil &lt;br /&gt;
;			prijem znaku&lt;br /&gt;
; Vstup&lt;br /&gt;
; 	A - adresa slave&lt;br /&gt;
;	X - mod (I2C_READ, I2C_WRITE)&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Start:	asl A				; posun adrsy&lt;br /&gt;
			mov [SlvAdr],A		; odlozenie adresy&lt;br /&gt;
			swap A,X			; maska modu&lt;br /&gt;
			or [SlvAdr],A	&lt;br /&gt;
			CLR_SDA			 &lt;br /&gt;
			CLR_SCL				&lt;br /&gt;
			mov A, [SlvAdr]&lt;br /&gt;
			call I2C_Send&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStop	vysle stop na I2C a uvolni linku&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Stop:	CLR_SDA&lt;br /&gt;
			SET_SCL&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendByte	vysle znak&lt;br /&gt;
;			nastavuje priznak NO_ACK v premennej [Flag]&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A	- znak&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Send:	CLR_NO_ACK&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
	sbLoop:	asl A				; nastavenie SDA podla rotovaneho bitu v CY&lt;br /&gt;
			&lt;br /&gt;
			push A&lt;br /&gt;
			jnc	sb_low			; ? CY == 0&lt;br /&gt;
			SET_SDA				; 	CY = 1, SDA -&amp;gt; 1	&lt;br /&gt;
			jmp sb_end&lt;br /&gt;
	sb_low:	CLR_SDA				;	CY = 0, SDA -&amp;gt; 0&lt;br /&gt;
	sb_end:	SET_SCL				;					 &lt;br /&gt;
			CLR_SCL				; &lt;br /&gt;
			pop A&lt;br /&gt;
			&lt;br /&gt;
			dec [BitCnt]	&lt;br /&gt;
			jnz sbLoop			; podmienka cyklu&lt;br /&gt;
			&lt;br /&gt;
			SET_SDA				; uvolnenie datovej linky pre ACK &lt;br /&gt;
			SET_SCL				; vyslanie clocku pre ACK&lt;br /&gt;
	&lt;br /&gt;
			mov A, reg[PORT]	; kontrola na potvrdenia ACK od slave&lt;br /&gt;
			and A, SDA&lt;br /&gt;
			jnz sb_ex			; SDA = 1, slave potvrdil&lt;br /&gt;
			SET_NO_ACK			; nastavenie priznaku NoACK&lt;br /&gt;
			&lt;br /&gt;
	sb_ex:	CLR_SCL&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; RecvByte	- nacitanie byte z I2C&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A  - priznak potvrdenia nacitaneho znaku (I2C_ACK, I2C_NO_ACK)&lt;br /&gt;
; Vystup&lt;br /&gt;
;	A - nacitany znak	 &lt;br /&gt;
I2C_Recv:	push A&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
			mov [RcvDat],0x00&lt;br /&gt;
			&lt;br /&gt;
	rbLoop:	SET_SDA				; ***** doplnene&lt;br /&gt;
			SET_SCL				; clock pre nacitanie bitu &lt;br /&gt;
&lt;br /&gt;
			mov A,reg[PORT]		; nacitanie a ulozenie bitu&lt;br /&gt;
&lt;br /&gt;
			mov [Temp],0x80		; nasada pre rotaciu&lt;br /&gt;
			and A,SDA			; kontrola na stav bitu SDA&lt;br /&gt;
			jnz rb_H			;&lt;br /&gt;
			asl [Temp]			; nastavenie CY bitu &lt;br /&gt;
	rb_H:	asl [Temp]			; 1x rotacia - set CY, 2x rotacia - clear CY&lt;br /&gt;
	rb_set: mov A,[RcvDat] &lt;br /&gt;
			rlc A				; presun CY do dat		&lt;br /&gt;
			mov [RcvDat],A&lt;br /&gt;
&lt;br /&gt;
			CLR_SCL&lt;br /&gt;
			dec [BitCnt]&lt;br /&gt;
			jnz rbLoop			; koniec cyklu&lt;br /&gt;
			&lt;br /&gt;
			pop A				; vytiahnutie priznaku zo stacku&lt;br /&gt;
		&lt;br /&gt;
			cmp A, I2C_ACK&lt;br /&gt;
			jnz	rb_noack&lt;br /&gt;
			CLR_SDA				; ack by master&lt;br /&gt;
			jmp rb_ex&lt;br /&gt;
	&lt;br /&gt;
	rb_noack:&lt;br /&gt;
			SET_SDA				; no ack by master, last byte&lt;br /&gt;
			&lt;br /&gt;
	rb_ex:	SET_SCL&lt;br /&gt;
			CLR_SCL				; ***** doplnene&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			mov A,[RcvDat]&lt;br /&gt;
			ret&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konečne reálna komunikácia s LM92 ==&lt;br /&gt;
&lt;br /&gt;
Po všetkých týchto krokoch sa môžme vrhnúť do vytvorenia programu, ktorý bude pomocou vyššie uvedeného rozhrania získavať informácie z teplomera a posielať ich cez sériové rozhranie RS232 do počítača. Pre príjem a odosielanie informácií môžme použiť program terminál.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
include &amp;quot;m8c.inc&amp;quot;       	; part specific constants and macros&lt;br /&gt;
include &amp;quot;memory.inc&amp;quot;    	; Constants &amp;amp; macros for SMM/LMM and Compiler&lt;br /&gt;
include &amp;quot;PSoCAPI.inc&amp;quot;   	; PSoC API definitions for all User Modules&lt;br /&gt;
include &amp;quot;i2c.inc&amp;quot;		; deklaracie a premenne pre I2C&lt;br /&gt;
include &amp;quot;i2c.asm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export _main&lt;br /&gt;
&lt;br /&gt;
LM92_ADR:		equ	0x4B	; adresa teplomera	&lt;br /&gt;
&lt;br /&gt;
; registre teplomera (konstatnty)&lt;br /&gt;
&lt;br /&gt;
LM92_T_TEMP:	equ	0x00	; aktualna teplota&lt;br /&gt;
LM92_CONFIG:	equ     0x01	; konfiguracny register	&lt;br /&gt;
LM92_T_HYST:	equ     0x02	; hystereza&lt;br /&gt;
LM92_T_CRIT:	equ	0x03	; kriticka teplota (80 stupnov)&lt;br /&gt;
LM92_T_LOW:     equ     0x04	; dolna hranica termostatu&lt;br /&gt;
LM92_T_HIGH:	equ     0x05	; horna hranica termostatu&lt;br /&gt;
LM92_MIR:	equ     0x07	; manufacturer identification register (MIR)&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
area lit&lt;br /&gt;
	text:					&lt;br /&gt;
		DS &amp;quot;Komunikacia OK&amp;quot;		; kontrola komunikacie			&lt;br /&gt;
		DB 0x00&lt;br /&gt;
&lt;br /&gt;
area bss(RAM)					; premenne&lt;br /&gt;
	lm92_temp:	BLK 2			; namerana teplota (rezervované 2 bajty v RAM)&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
area text&lt;br /&gt;
_main:	&lt;br /&gt;
	mov   A,UART_PARITY_NONE  &lt;br /&gt;
        call  UART_Start      	; UART 19200bd, 8bit,1,N&lt;br /&gt;
	M8C_EnableGInt    &lt;br /&gt;
	call I2C_Init			; inicializacia I2C zbernice&lt;br /&gt;
WaitForData:               	        ; cakanie na povel z RS232     &lt;br /&gt;
        call  UART_bReadRxStatus    &lt;br /&gt;
        and   A, UART_RX_COMPLETE       ;ak nebol prijaty ziadny znak,    &lt;br /&gt;
        jz    WaitForData               ;vrati sa na WaitForData&lt;br /&gt;
        call  UART_bReadRxData          ; cita data    &lt;br /&gt;
        call  UART_SendData             ; prenasa data &lt;br /&gt;
&lt;br /&gt;
 	cmp A,'q'			; kontrola komunikacie (v kazdom z nasledujucich krokov sa prijate data porovnavaju s danym znakom, napr.q)&lt;br /&gt;
 	jz state_q                      ; ak nastane zhoda zero flag ZF sa nastavi na 1 a program prejde do prislusnej casi, napr. state_q &lt;br /&gt;
&lt;br /&gt;
 	cmp A,'w'			; vycitanie prednastaveneho registra (T_TEMP - default)&lt;br /&gt;
 	jz state_w&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'a'			; nastavenie registra T_TEMP&lt;br /&gt;
 	jz state_a&lt;br /&gt;
&lt;br /&gt;
        cmp A,'s'			; nastavenie registra T_CONFIG&lt;br /&gt;
 	jz state_s&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'d'			; nastavenie registra T_HYST&lt;br /&gt;
 	jz state_d&lt;br /&gt;
&lt;br /&gt;
        cmp A,'f'			; nastavenie registra T_CRIT&lt;br /&gt;
 	jz state_f&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'g'			; nastavenie registra T_LOW&lt;br /&gt;
 	jz state_g&lt;br /&gt;
&lt;br /&gt;
        cmp A,'h'			; nastavenie registra T_HIGH&lt;br /&gt;
 	jz state_h&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'j'			; nastavenie registra MIR&lt;br /&gt;
 	jz state_j&lt;br /&gt;
&lt;br /&gt;
    jmp   WaitForData      	        ; navrat do zakladnej slucky&lt;br /&gt;
;-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
state_q:				; kontrola komunikacie&lt;br /&gt;
        call UART_PutCRLF               ; odriadkovanie&lt;br /&gt;
        mov A, &amp;gt;text                    ; do A sa ulozi prvy znak retazca text                   &lt;br /&gt;
	mov X, &amp;lt;text                    ; do X sa ulozi posledny znak retazca text&lt;br /&gt;
	call UART_CPutString            ; vytlaci sa retazec text&lt;br /&gt;
        call UART_PutCRLF               ; odriadkovanie&lt;br /&gt;
&lt;br /&gt;
    jmp   WaitForData                   ; navrat do zakladnej slucky&lt;br /&gt;
;--------------------------------------------------------------------------------   &lt;br /&gt;
&lt;br /&gt;
state_w:				; vycitanie obsahu nastaveneho registra teplomera&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_ADR                 ; nastavenie adresy slave, resp. LM92 pre I2C&lt;br /&gt;
	mov X, I2C_READ			; nastavenie komunikacie na citanie&lt;br /&gt;
	call I2C_Start			; zaciatok komunikacie&lt;br /&gt;
	mov A, I2C_ACK			; nacitanie prveho byte&lt;br /&gt;
	call I2C_Recv&lt;br /&gt;
	mov [lm92_temp],A&lt;br /&gt;
	mov A, I2C_NOACK		; nacitanie druheho (posledneho) byte&lt;br /&gt;
	call I2C_Recv&lt;br /&gt;
	mov [lm92_temp+1],A&lt;br /&gt;
	call I2C_Stop			; ukoncenie komunikacie&lt;br /&gt;
	call UART_PutCRLF		; odriadkovanie terminalu&lt;br /&gt;
	mov A,[lm92_temp] 		; vypis udaju teploty na terminal (prvy byte)&lt;br /&gt;
	call UART_PutSHexByte           ; v hexadecimalnom tvare&lt;br /&gt;
	mov A,[lm92_temp+1] 		; vypis udaju teploty na terminal (prvy byte)&lt;br /&gt;
	call UART_PutSHexByte           ; v hexadecimalnom tvare&lt;br /&gt;
;----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5923</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5923"/>
		<updated>2010-06-25T10:43:04Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* Konečne reálna komunikácia s LM92 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Popis pinov LM92.jpg|center|thumb|400px|Obr. 2. Popis pinov]]&lt;br /&gt;
&lt;br /&gt;
SDA – sériová obojsmerná dátová linka&lt;br /&gt;
&lt;br /&gt;
SCL – hodinový vstup&lt;br /&gt;
&lt;br /&gt;
T_CRIT_A – výstup alarmu pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
INT – výstup pre prerušenie&lt;br /&gt;
&lt;br /&gt;
GND – zem&lt;br /&gt;
&lt;br /&gt;
+Vs – napájanie&lt;br /&gt;
&lt;br /&gt;
A0 – A1 – nastavenie adresy&lt;br /&gt;
&lt;br /&gt;
'''Dátový formát teploty'''&lt;br /&gt;
&lt;br /&gt;
Teplotné dáta môžu byť čítané z teplomera alebo z registrov pre SetPointy; a zapisované do Setpoint registrov. Teplotné dáta môžu byť čítané kedykoľvek. Ak bude frekvencia čítania dát vysoká, dáta v teplomery sa nestihnú obnoviť. Teplotné dáta sú reprezentované 13-bitovým binárnym číslom s LSB. Jeden bit je rovný 0, 0625 ºC. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Teplotný register LM92.jpg|center|thumb|600px|Obr. 3. Teplotný register]]&lt;br /&gt;
&lt;br /&gt;
Ako vidíme na obr. 3, bity D0 až D2 sú stavové bity. Teplota je na D3 až D14 a D15 je znamienko. Ak D15 je 1, znamienko je -. Príklady reprezentácie teploty sú na obr. 4. Treba si uvedomiť, že ak prečítame tento register získame 16 bitov, čo nie je hneď konkrétna nameraná teplota. Ak chceme získať teplotu, musíme sa zbaviť stavových bitov D0 až D2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Digitálny vystup LM92.jpg|center|thumb|400px|Obr. 4. Digitálny výstup z teplomera]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spojenie LM92 s mikrokontrolérom Cypress ==&lt;br /&gt;
&lt;br /&gt;
Pre spojenie potrebujeme sériové rozhranie I2C, ktoré slúži na komunikáciu mikrokontroléra s teplomerom a napríklad RS232 rozhranie pre komunikáciu mikrokontroléra s počítačom, kde môžme získané informácie ďalej spracovávať a vyhodnocovať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RS232 ==&lt;br /&gt;
&lt;br /&gt;
Toto rozhranie zavedieme použitím hardvérového bloku UART, ktorý Cypress obsahuje. Rýchlosť komunikácie bude 19200Bd, čo znamená frekvenciu 153kHz. Keď chceme nastaviť túto frekvenciu, musíme deliť základnú frekvenciu Cypress 24Mhz/156. Použijeme delič frekvencie VC3, ktorý bude následne zdroj frekvencie pre UART. Pre príjímané dáta použijeme pin P0_4 a pre odosielané dáta použijeme pin P0_2. Konkrétne nastavenia bloku UART priamo v PSoC dizajneri sú na obr. 5. Na obr.6. je vidieť umiestnenie blokov UART s schéme zapojenia.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:nastavenia UART.jpg|center|thumb|400px|Obr. 5. Konkrétne nastavenia bloku UART]]&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Umiestnenie UART.jpg|center|thumb|400px|Obr. 6. Umiestnenie bloku UART v schéme zapojenia]]&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
Aj keď aj pre toto sériové rozhranie existuje hardéverový blok, rozhodli sme sa, že si naprogramujeme vlastný softvér pre implementáciu tohto rozhrania. Toto naše rozhranie nebude potrebovať vonkajšie PULL-UP rezistory.&lt;br /&gt;
&lt;br /&gt;
Ako prvé vytvoríme súbor napr. ''i2c.inc'', v ktorom sa nachádzajú deklarácie pre rozhranie I2C. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
; Definicia portu a pinov &lt;br /&gt;
; upravit podla aktualneho nastavenia&lt;br /&gt;
&lt;br /&gt;
PORT:		equ		PORT_1	        ; PORT_0, PORT_1, PORT_2&lt;br /&gt;
SDA:		equ		P_5		; P_0, P_1, ... P_7&lt;br /&gt;
SCL:		equ		P_4		; P_0, P_1, ... P_7&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Globalne definicie&lt;br /&gt;
I2C_WRITE:	equ		%00000000&lt;br /&gt;
I2C_READ:	equ		%00000001	&lt;br /&gt;
I2C_ACK:	equ		%00000010&lt;br /&gt;
I2C_NOACK:	equ		%00000100&lt;br /&gt;
&lt;br /&gt;
PORT_2:		equ 	PRT2DR&lt;br /&gt;
PORT_1:		equ 	PRT1DR&lt;br /&gt;
PORT_0:		equ 	PRT0DR&lt;br /&gt;
P_7:		equ		%10000000&lt;br /&gt;
P_6:		equ		%01000000&lt;br /&gt;
P_5:		equ		%00100000&lt;br /&gt;
P_4:		equ		%00010000&lt;br /&gt;
P_3:		equ		%00001000&lt;br /&gt;
P_2:		equ		%00000100&lt;br /&gt;
P_1:		equ		%00000010&lt;br /&gt;
P_0:		equ		%00000001&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; Makra pre set/clear pinov SDA, SCL&lt;br /&gt;
MACRO SET_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO SET_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
; Makra pre nastavenie priznakov premennej [Flag]&lt;br /&gt;
MACRO SET_NO_ACK&lt;br /&gt;
	mov [Flag], 0x80&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_NO_ACK&lt;br /&gt;
	mov [Flag], 0x00&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO BIT_DELAY&lt;br /&gt;
	call  BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Potom vytvoríme súbor napr. ''i2c.asm'', ktorý obsahuje konkrétne funkcie pre I2C rozhranie. Program zaberá cca 770 Byte v ROM. Hlavným účelom bolo minimalizovať počet premenných v RAM, zrušiť [Flag] a [BitCnt] nahradiť registrom X. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
include &amp;quot;m8c.inc&amp;quot;&lt;br /&gt;
include &amp;quot;i2c_sw.inc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export I2C_Init&lt;br /&gt;
export I2C_Start&lt;br /&gt;
export I2C_Stop&lt;br /&gt;
export I2C_Send&lt;br /&gt;
export I2C_Recv&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Premenne pre I2C&lt;br /&gt;
area bss(RAM)&lt;br /&gt;
	BitCnt:		BLK 1		; pocitadlo pre pocet bitov&lt;br /&gt;
	SlvAdr:		BLK 1		; adresa slave&lt;br /&gt;
	RcvDat:		BLK 1		; prijate data&lt;br /&gt;
	Flag:		BLK 1		; priznak&lt;br /&gt;
	Temp:		BLK 1		; pomocna premenna&lt;br /&gt;
;=============================================================================&lt;br /&gt;
&lt;br /&gt;
area text&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; BitDly	zakladny delay &lt;br /&gt;
BitDly:		nop			; delay 4x sysclk, upravit podla hodin procesora&lt;br /&gt;
						; v pripade potreby nizsej prenosovej rychlosti &lt;br /&gt;
						; sem doplnte casovy slucku &lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; I2C_Init	inicializacia pinov rozhrania na uroven H&lt;br /&gt;
;			a reset rozhrania&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Init:&lt;br /&gt;
			SET_SDA&lt;br /&gt;
 			SET_SCL&lt;br /&gt;
 			call I2C_Stop&lt;br /&gt;
 			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStart vysle I2C start a adresu slave&lt;br /&gt;
;			nastavuje priznak premennej [Flag] NO_ACK, ak slave nepotvrdil &lt;br /&gt;
;			prijem znaku&lt;br /&gt;
; Vstup&lt;br /&gt;
; 	A - adresa slave&lt;br /&gt;
;	X - mod (I2C_READ, I2C_WRITE)&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Start:	asl A				; posun adrsy&lt;br /&gt;
			mov [SlvAdr],A		; odlozenie adresy&lt;br /&gt;
			swap A,X			; maska modu&lt;br /&gt;
			or [SlvAdr],A	&lt;br /&gt;
			CLR_SDA			 &lt;br /&gt;
			CLR_SCL				&lt;br /&gt;
			mov A, [SlvAdr]&lt;br /&gt;
			call I2C_Send&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStop	vysle stop na I2C a uvolni linku&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Stop:	CLR_SDA&lt;br /&gt;
			SET_SCL&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendByte	vysle znak&lt;br /&gt;
;			nastavuje priznak NO_ACK v premennej [Flag]&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A	- znak&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Send:	CLR_NO_ACK&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
	sbLoop:	asl A				; nastavenie SDA podla rotovaneho bitu v CY&lt;br /&gt;
			&lt;br /&gt;
			push A&lt;br /&gt;
			jnc	sb_low			; ? CY == 0&lt;br /&gt;
			SET_SDA				; 	CY = 1, SDA -&amp;gt; 1	&lt;br /&gt;
			jmp sb_end&lt;br /&gt;
	sb_low:	CLR_SDA				;	CY = 0, SDA -&amp;gt; 0&lt;br /&gt;
	sb_end:	SET_SCL				;					 &lt;br /&gt;
			CLR_SCL				; &lt;br /&gt;
			pop A&lt;br /&gt;
			&lt;br /&gt;
			dec [BitCnt]	&lt;br /&gt;
			jnz sbLoop			; podmienka cyklu&lt;br /&gt;
			&lt;br /&gt;
			SET_SDA				; uvolnenie datovej linky pre ACK &lt;br /&gt;
			SET_SCL				; vyslanie clocku pre ACK&lt;br /&gt;
	&lt;br /&gt;
			mov A, reg[PORT]	; kontrola na potvrdenia ACK od slave&lt;br /&gt;
			and A, SDA&lt;br /&gt;
			jnz sb_ex			; SDA = 1, slave potvrdil&lt;br /&gt;
			SET_NO_ACK			; nastavenie priznaku NoACK&lt;br /&gt;
			&lt;br /&gt;
	sb_ex:	CLR_SCL&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; RecvByte	- nacitanie byte z I2C&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A  - priznak potvrdenia nacitaneho znaku (I2C_ACK, I2C_NO_ACK)&lt;br /&gt;
; Vystup&lt;br /&gt;
;	A - nacitany znak	 &lt;br /&gt;
I2C_Recv:	push A&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
			mov [RcvDat],0x00&lt;br /&gt;
			&lt;br /&gt;
	rbLoop:	SET_SDA				; ***** doplnene&lt;br /&gt;
			SET_SCL				; clock pre nacitanie bitu &lt;br /&gt;
&lt;br /&gt;
			mov A,reg[PORT]		; nacitanie a ulozenie bitu&lt;br /&gt;
&lt;br /&gt;
			mov [Temp],0x80		; nasada pre rotaciu&lt;br /&gt;
			and A,SDA			; kontrola na stav bitu SDA&lt;br /&gt;
			jnz rb_H			;&lt;br /&gt;
			asl [Temp]			; nastavenie CY bitu &lt;br /&gt;
	rb_H:	asl [Temp]			; 1x rotacia - set CY, 2x rotacia - clear CY&lt;br /&gt;
	rb_set: mov A,[RcvDat] &lt;br /&gt;
			rlc A				; presun CY do dat		&lt;br /&gt;
			mov [RcvDat],A&lt;br /&gt;
&lt;br /&gt;
			CLR_SCL&lt;br /&gt;
			dec [BitCnt]&lt;br /&gt;
			jnz rbLoop			; koniec cyklu&lt;br /&gt;
			&lt;br /&gt;
			pop A				; vytiahnutie priznaku zo stacku&lt;br /&gt;
		&lt;br /&gt;
			cmp A, I2C_ACK&lt;br /&gt;
			jnz	rb_noack&lt;br /&gt;
			CLR_SDA				; ack by master&lt;br /&gt;
			jmp rb_ex&lt;br /&gt;
	&lt;br /&gt;
	rb_noack:&lt;br /&gt;
			SET_SDA				; no ack by master, last byte&lt;br /&gt;
			&lt;br /&gt;
	rb_ex:	SET_SCL&lt;br /&gt;
			CLR_SCL				; ***** doplnene&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			mov A,[RcvDat]&lt;br /&gt;
			ret&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konečne reálna komunikácia s LM92 ==&lt;br /&gt;
&lt;br /&gt;
Po všetkých týchto krokoch sa môžme vrhnúť do vytvorenia programu, ktorý bude pomocou vyššie uvedeného rozhrania získavať informácie z teplomera a posielať ich cez sériové rozhranie RS232 do počítača. Pre príjem a odosielanie informácií môžme použiť program terminál.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
include &amp;quot;m8c.inc&amp;quot;       	; part specific constants and macros&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;memory.inc&amp;quot;    	; Constants &amp;amp; macros for SMM/LMM and Compiler&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;PSoCAPI.inc&amp;quot;   	; PSoC API definitions for all User Modules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;i2c_sw.inc&amp;quot;		; deklaracie a premenne pre I2C_SW&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;i2c_sw.asm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
export _main&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LM92_ADR:		equ	0x4B	; adresa replomera	&lt;br /&gt;
&lt;br /&gt;
							; registre teplomera&lt;br /&gt;
&lt;br /&gt;
LM92_T_TEMP:	equ	0x00	; aktualna teplota&lt;br /&gt;
&lt;br /&gt;
LM92_CONFIG:	equ 0x01	; konfiguracny register	&lt;br /&gt;
&lt;br /&gt;
LM92_T_HYST:	equ 0x02	; hystereza&lt;br /&gt;
&lt;br /&gt;
LM92_T_CRIT:	equ	0x03	; kriticka teplota (80 stupnov)&lt;br /&gt;
&lt;br /&gt;
LM92_T_LOW:		equ 0x04	; dolna hranica termostatu&lt;br /&gt;
&lt;br /&gt;
LM92_T_HIGH:	equ 0x05	; horna hranica termostatu&lt;br /&gt;
&lt;br /&gt;
LM92_MIR:		equ 0x07	; manufacturer identification register (MIR)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
area lit&lt;br /&gt;
&lt;br /&gt;
	text:						; konstanty&lt;br /&gt;
&lt;br /&gt;
		DS &amp;quot;Komunikacia OK&amp;quot;		; kontrola komunikacie			&lt;br /&gt;
&lt;br /&gt;
		DB 0x00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
area bss(RAM)					; premenne&lt;br /&gt;
&lt;br /&gt;
	lm92_temp:	BLK 2			; namerana teplota&lt;br /&gt;
&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
area text&lt;br /&gt;
&lt;br /&gt;
_main:	&lt;br /&gt;
&lt;br /&gt;
	mov   A,UART_PARITY_NONE  &lt;br /&gt;
&lt;br /&gt;
    call  UART_Start      	; UART 19200, 8,1,N&lt;br /&gt;
&lt;br /&gt;
	M8C_EnableGInt    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	call I2C_Init			; inicializacia I2C zbernice&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
WaitForData:               	; cakanie na povel     &lt;br /&gt;
&lt;br /&gt;
    call  UART_bReadRxStatus    &lt;br /&gt;
&lt;br /&gt;
    and   A, UART_RX_COMPLETE    &lt;br /&gt;
&lt;br /&gt;
    jz    WaitForData        &lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
&lt;br /&gt;
    call  UART_bReadRxData  ; read the data from the receiver     &lt;br /&gt;
&lt;br /&gt;
    call  UART_SendData     ; transmit the response data &lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
 							; parser prikazov&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'q'				; kontrola komunikacie&lt;br /&gt;
&lt;br /&gt;
 	jz state_q&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'w'				; vycitanie prednastaveneho registra (T_TEMP - default)&lt;br /&gt;
&lt;br /&gt;
 	jz state_w&lt;br /&gt;
&lt;br /&gt;
 	&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'a'				; nastavenie registra T_TEMP&lt;br /&gt;
&lt;br /&gt;
 	jz state_a&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    cmp A,'s'				; nastavenie registra T_CONFIG&lt;br /&gt;
&lt;br /&gt;
 	jz state_s&lt;br /&gt;
&lt;br /&gt;
 	&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'d'				; nastavenie registra T_HYST&lt;br /&gt;
&lt;br /&gt;
 	jz state_d&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    cmp A,'f'				; nastavenie registra T_CRIT&lt;br /&gt;
&lt;br /&gt;
 	jz state_f&lt;br /&gt;
&lt;br /&gt;
 	&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'g'				; nastavenie registra T_LOW&lt;br /&gt;
&lt;br /&gt;
 	jz state_g&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    cmp A,'h'				; nastavenie registra T_HIGH&lt;br /&gt;
&lt;br /&gt;
 	jz state_h&lt;br /&gt;
&lt;br /&gt;
 	&lt;br /&gt;
&lt;br /&gt;
 	cmp A,'j'				; nastavenie registra MIR&lt;br /&gt;
&lt;br /&gt;
 	jz state_j&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    jmp   WaitForData      	; navrat do zakladnej slucky&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;---------------------------&lt;br /&gt;
&lt;br /&gt;
state_q:					; kontrola komunikacie&lt;br /&gt;
&lt;br /&gt;
	call UART_PutCRLF&lt;br /&gt;
&lt;br /&gt;
    mov A, &amp;gt;text&lt;br /&gt;
&lt;br /&gt;
	mov X, &amp;lt;text&lt;br /&gt;
&lt;br /&gt;
	call UART_CPutString&lt;br /&gt;
&lt;br /&gt;
    call UART_PutCRLF&lt;br /&gt;
&lt;br /&gt;
    jmp   WaitForData&lt;br /&gt;
&lt;br /&gt;
;---------------------------   &lt;br /&gt;
&lt;br /&gt;
state_w:					; vycitanie obsahu nastaveneho registra teplomera&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_ADR&lt;br /&gt;
&lt;br /&gt;
	mov X, I2C_READ			; nastavenie komunikacie na citanie&lt;br /&gt;
&lt;br /&gt;
	call I2C_Start			; zaciatok komunikacie&lt;br /&gt;
&lt;br /&gt;
	mov A, I2C_ACK			; nacitanie prveho byte&lt;br /&gt;
&lt;br /&gt;
	call I2C_Recv&lt;br /&gt;
&lt;br /&gt;
	mov [lm92_temp],A&lt;br /&gt;
&lt;br /&gt;
	mov A, I2C_NOACK		; nacitanie druheho (posledneho) byte&lt;br /&gt;
&lt;br /&gt;
	call I2C_Recv&lt;br /&gt;
&lt;br /&gt;
	mov [lm92_temp+1],A&lt;br /&gt;
&lt;br /&gt;
	call I2C_Stop			; ukoncenie komunikacie&lt;br /&gt;
&lt;br /&gt;
	asr [lm92_temp+1]&lt;br /&gt;
&lt;br /&gt;
	asr [lm92_temp+1]&lt;br /&gt;
&lt;br /&gt;
	asr [lm92_temp+1]&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	asr [lm92_temp]&lt;br /&gt;
&lt;br /&gt;
	jc sem&lt;br /&gt;
&lt;br /&gt;
zaciatok:&lt;br /&gt;
&lt;br /&gt;
	asr [lm92_temp]&lt;br /&gt;
&lt;br /&gt;
	jc sem2&lt;br /&gt;
&lt;br /&gt;
zaciatok2:&lt;br /&gt;
&lt;br /&gt;
	asr [lm92_temp]&lt;br /&gt;
&lt;br /&gt;
	jc sem3&lt;br /&gt;
&lt;br /&gt;
	jnc tlac&lt;br /&gt;
&lt;br /&gt;
sem:&lt;br /&gt;
&lt;br /&gt;
	or [lm92_temp+1],0x80&lt;br /&gt;
&lt;br /&gt;
	jmp zaciatok&lt;br /&gt;
&lt;br /&gt;
sem2:&lt;br /&gt;
&lt;br /&gt;
	or [lm92_temp+1],0x40&lt;br /&gt;
&lt;br /&gt;
	jmp zaciatok2&lt;br /&gt;
&lt;br /&gt;
sem3:&lt;br /&gt;
&lt;br /&gt;
	or [lm92_temp+1],0x80&lt;br /&gt;
&lt;br /&gt;
	jmp tlac&lt;br /&gt;
&lt;br /&gt;
tlac:&lt;br /&gt;
&lt;br /&gt;
	call UART_PutCRLF		; odriadkovanie terminalu po znaku povelu&lt;br /&gt;
&lt;br /&gt;
	mov A,[lm92_temp] 		; vypis udaju teploty na terminal&lt;br /&gt;
&lt;br /&gt;
	call UART_PutSHexByte&lt;br /&gt;
&lt;br /&gt;
	mov A,[lm92_temp+1]&lt;br /&gt;
&lt;br /&gt;
	call UART_PutSHexByte&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	jmp   WaitForData      	; go wait for next byte&lt;br /&gt;
&lt;br /&gt;
;---------------------------&lt;br /&gt;
&lt;br /&gt;
state_a:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_TEMP		&lt;br /&gt;
&lt;br /&gt;
	call set_register			&lt;br /&gt;
&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;---------------------------&lt;br /&gt;
&lt;br /&gt;
state_s:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_CONFIG		&lt;br /&gt;
&lt;br /&gt;
	call set_register			&lt;br /&gt;
&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;---------------------------&lt;br /&gt;
&lt;br /&gt;
state_d:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_HYST		&lt;br /&gt;
&lt;br /&gt;
	call set_register			&lt;br /&gt;
&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;---------------------------&lt;br /&gt;
&lt;br /&gt;
state_f:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_CRIT		&lt;br /&gt;
&lt;br /&gt;
	call set_register			&lt;br /&gt;
&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;---------------------------&lt;br /&gt;
&lt;br /&gt;
state_g:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_LOW		&lt;br /&gt;
&lt;br /&gt;
	call set_register			&lt;br /&gt;
&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;---------------------------&lt;br /&gt;
&lt;br /&gt;
state_h:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_T_HIGH		&lt;br /&gt;
&lt;br /&gt;
	call set_register			&lt;br /&gt;
&lt;br /&gt;
	jmp   WaitForData &lt;br /&gt;
&lt;br /&gt;
;---------------------------&lt;br /&gt;
&lt;br /&gt;
state_j:				&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_MIR	&lt;br /&gt;
&lt;br /&gt;
	call set_register			&lt;br /&gt;
&lt;br /&gt;
	jmp   WaitForData 	&lt;br /&gt;
&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
; set_register	nastavenie aktualneho registra LM92&lt;br /&gt;
&lt;br /&gt;
; Vstup &lt;br /&gt;
&lt;br /&gt;
;	A - cislo registra&lt;br /&gt;
&lt;br /&gt;
; Vystup&lt;br /&gt;
&lt;br /&gt;
; -&lt;br /&gt;
&lt;br /&gt;
set_register:&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	push A&lt;br /&gt;
&lt;br /&gt;
	mov A, LM92_ADR&lt;br /&gt;
&lt;br /&gt;
	mov X, I2C_WRITE		; nastavenie komunikacie na zapis&lt;br /&gt;
&lt;br /&gt;
	call I2C_Start			; zaciatok komunikacie&lt;br /&gt;
&lt;br /&gt;
	pop A&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	call I2C_Send&lt;br /&gt;
&lt;br /&gt;
	call I2C_Stop			; ukoncenie komunikacie&lt;br /&gt;
&lt;br /&gt;
	jmp   WaitForData	&lt;br /&gt;
&lt;br /&gt;
	ret&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5922</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5922"/>
		<updated>2010-06-25T10:37:05Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* I2C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Popis pinov LM92.jpg|center|thumb|400px|Obr. 2. Popis pinov]]&lt;br /&gt;
&lt;br /&gt;
SDA – sériová obojsmerná dátová linka&lt;br /&gt;
&lt;br /&gt;
SCL – hodinový vstup&lt;br /&gt;
&lt;br /&gt;
T_CRIT_A – výstup alarmu pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
INT – výstup pre prerušenie&lt;br /&gt;
&lt;br /&gt;
GND – zem&lt;br /&gt;
&lt;br /&gt;
+Vs – napájanie&lt;br /&gt;
&lt;br /&gt;
A0 – A1 – nastavenie adresy&lt;br /&gt;
&lt;br /&gt;
'''Dátový formát teploty'''&lt;br /&gt;
&lt;br /&gt;
Teplotné dáta môžu byť čítané z teplomera alebo z registrov pre SetPointy; a zapisované do Setpoint registrov. Teplotné dáta môžu byť čítané kedykoľvek. Ak bude frekvencia čítania dát vysoká, dáta v teplomery sa nestihnú obnoviť. Teplotné dáta sú reprezentované 13-bitovým binárnym číslom s LSB. Jeden bit je rovný 0, 0625 ºC. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Teplotný register LM92.jpg|center|thumb|600px|Obr. 3. Teplotný register]]&lt;br /&gt;
&lt;br /&gt;
Ako vidíme na obr. 3, bity D0 až D2 sú stavové bity. Teplota je na D3 až D14 a D15 je znamienko. Ak D15 je 1, znamienko je -. Príklady reprezentácie teploty sú na obr. 4. Treba si uvedomiť, že ak prečítame tento register získame 16 bitov, čo nie je hneď konkrétna nameraná teplota. Ak chceme získať teplotu, musíme sa zbaviť stavových bitov D0 až D2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Digitálny vystup LM92.jpg|center|thumb|400px|Obr. 4. Digitálny výstup z teplomera]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spojenie LM92 s mikrokontrolérom Cypress ==&lt;br /&gt;
&lt;br /&gt;
Pre spojenie potrebujeme sériové rozhranie I2C, ktoré slúži na komunikáciu mikrokontroléra s teplomerom a napríklad RS232 rozhranie pre komunikáciu mikrokontroléra s počítačom, kde môžme získané informácie ďalej spracovávať a vyhodnocovať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RS232 ==&lt;br /&gt;
&lt;br /&gt;
Toto rozhranie zavedieme použitím hardvérového bloku UART, ktorý Cypress obsahuje. Rýchlosť komunikácie bude 19200Bd, čo znamená frekvenciu 153kHz. Keď chceme nastaviť túto frekvenciu, musíme deliť základnú frekvenciu Cypress 24Mhz/156. Použijeme delič frekvencie VC3, ktorý bude následne zdroj frekvencie pre UART. Pre príjímané dáta použijeme pin P0_4 a pre odosielané dáta použijeme pin P0_2. Konkrétne nastavenia bloku UART priamo v PSoC dizajneri sú na obr. 5. Na obr.6. je vidieť umiestnenie blokov UART s schéme zapojenia.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:nastavenia UART.jpg|center|thumb|400px|Obr. 5. Konkrétne nastavenia bloku UART]]&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Umiestnenie UART.jpg|center|thumb|400px|Obr. 6. Umiestnenie bloku UART v schéme zapojenia]]&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
Aj keď aj pre toto sériové rozhranie existuje hardéverový blok, rozhodli sme sa, že si naprogramujeme vlastný softvér pre implementáciu tohto rozhrania. Toto naše rozhranie nebude potrebovať vonkajšie PULL-UP rezistory.&lt;br /&gt;
&lt;br /&gt;
Ako prvé vytvoríme súbor napr. ''i2c.inc'', v ktorom sa nachádzajú deklarácie pre rozhranie I2C. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
; Definicia portu a pinov &lt;br /&gt;
; upravit podla aktualneho nastavenia&lt;br /&gt;
&lt;br /&gt;
PORT:		equ		PORT_1	        ; PORT_0, PORT_1, PORT_2&lt;br /&gt;
SDA:		equ		P_5		; P_0, P_1, ... P_7&lt;br /&gt;
SCL:		equ		P_4		; P_0, P_1, ... P_7&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Globalne definicie&lt;br /&gt;
I2C_WRITE:	equ		%00000000&lt;br /&gt;
I2C_READ:	equ		%00000001	&lt;br /&gt;
I2C_ACK:	equ		%00000010&lt;br /&gt;
I2C_NOACK:	equ		%00000100&lt;br /&gt;
&lt;br /&gt;
PORT_2:		equ 	PRT2DR&lt;br /&gt;
PORT_1:		equ 	PRT1DR&lt;br /&gt;
PORT_0:		equ 	PRT0DR&lt;br /&gt;
P_7:		equ		%10000000&lt;br /&gt;
P_6:		equ		%01000000&lt;br /&gt;
P_5:		equ		%00100000&lt;br /&gt;
P_4:		equ		%00010000&lt;br /&gt;
P_3:		equ		%00001000&lt;br /&gt;
P_2:		equ		%00000100&lt;br /&gt;
P_1:		equ		%00000010&lt;br /&gt;
P_0:		equ		%00000001&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; Makra pre set/clear pinov SDA, SCL&lt;br /&gt;
MACRO SET_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO SET_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
; Makra pre nastavenie priznakov premennej [Flag]&lt;br /&gt;
MACRO SET_NO_ACK&lt;br /&gt;
	mov [Flag], 0x80&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_NO_ACK&lt;br /&gt;
	mov [Flag], 0x00&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO BIT_DELAY&lt;br /&gt;
	call  BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Potom vytvoríme súbor napr. ''i2c.asm'', ktorý obsahuje konkrétne funkcie pre I2C rozhranie. Program zaberá cca 770 Byte v ROM. Hlavným účelom bolo minimalizovať počet premenných v RAM, zrušiť [Flag] a [BitCnt] nahradiť registrom X. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
include &amp;quot;m8c.inc&amp;quot;&lt;br /&gt;
include &amp;quot;i2c_sw.inc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export I2C_Init&lt;br /&gt;
export I2C_Start&lt;br /&gt;
export I2C_Stop&lt;br /&gt;
export I2C_Send&lt;br /&gt;
export I2C_Recv&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Premenne pre I2C&lt;br /&gt;
area bss(RAM)&lt;br /&gt;
	BitCnt:		BLK 1		; pocitadlo pre pocet bitov&lt;br /&gt;
	SlvAdr:		BLK 1		; adresa slave&lt;br /&gt;
	RcvDat:		BLK 1		; prijate data&lt;br /&gt;
	Flag:		BLK 1		; priznak&lt;br /&gt;
	Temp:		BLK 1		; pomocna premenna&lt;br /&gt;
;=============================================================================&lt;br /&gt;
&lt;br /&gt;
area text&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; BitDly	zakladny delay &lt;br /&gt;
BitDly:		nop			; delay 4x sysclk, upravit podla hodin procesora&lt;br /&gt;
						; v pripade potreby nizsej prenosovej rychlosti &lt;br /&gt;
						; sem doplnte casovy slucku &lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; I2C_Init	inicializacia pinov rozhrania na uroven H&lt;br /&gt;
;			a reset rozhrania&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Init:&lt;br /&gt;
			SET_SDA&lt;br /&gt;
 			SET_SCL&lt;br /&gt;
 			call I2C_Stop&lt;br /&gt;
 			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStart vysle I2C start a adresu slave&lt;br /&gt;
;			nastavuje priznak premennej [Flag] NO_ACK, ak slave nepotvrdil &lt;br /&gt;
;			prijem znaku&lt;br /&gt;
; Vstup&lt;br /&gt;
; 	A - adresa slave&lt;br /&gt;
;	X - mod (I2C_READ, I2C_WRITE)&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Start:	asl A				; posun adrsy&lt;br /&gt;
			mov [SlvAdr],A		; odlozenie adresy&lt;br /&gt;
			swap A,X			; maska modu&lt;br /&gt;
			or [SlvAdr],A	&lt;br /&gt;
			CLR_SDA			 &lt;br /&gt;
			CLR_SCL				&lt;br /&gt;
			mov A, [SlvAdr]&lt;br /&gt;
			call I2C_Send&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStop	vysle stop na I2C a uvolni linku&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Stop:	CLR_SDA&lt;br /&gt;
			SET_SCL&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendByte	vysle znak&lt;br /&gt;
;			nastavuje priznak NO_ACK v premennej [Flag]&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A	- znak&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Send:	CLR_NO_ACK&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
	sbLoop:	asl A				; nastavenie SDA podla rotovaneho bitu v CY&lt;br /&gt;
			&lt;br /&gt;
			push A&lt;br /&gt;
			jnc	sb_low			; ? CY == 0&lt;br /&gt;
			SET_SDA				; 	CY = 1, SDA -&amp;gt; 1	&lt;br /&gt;
			jmp sb_end&lt;br /&gt;
	sb_low:	CLR_SDA				;	CY = 0, SDA -&amp;gt; 0&lt;br /&gt;
	sb_end:	SET_SCL				;					 &lt;br /&gt;
			CLR_SCL				; &lt;br /&gt;
			pop A&lt;br /&gt;
			&lt;br /&gt;
			dec [BitCnt]	&lt;br /&gt;
			jnz sbLoop			; podmienka cyklu&lt;br /&gt;
			&lt;br /&gt;
			SET_SDA				; uvolnenie datovej linky pre ACK &lt;br /&gt;
			SET_SCL				; vyslanie clocku pre ACK&lt;br /&gt;
	&lt;br /&gt;
			mov A, reg[PORT]	; kontrola na potvrdenia ACK od slave&lt;br /&gt;
			and A, SDA&lt;br /&gt;
			jnz sb_ex			; SDA = 1, slave potvrdil&lt;br /&gt;
			SET_NO_ACK			; nastavenie priznaku NoACK&lt;br /&gt;
			&lt;br /&gt;
	sb_ex:	CLR_SCL&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; RecvByte	- nacitanie byte z I2C&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A  - priznak potvrdenia nacitaneho znaku (I2C_ACK, I2C_NO_ACK)&lt;br /&gt;
; Vystup&lt;br /&gt;
;	A - nacitany znak	 &lt;br /&gt;
I2C_Recv:	push A&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
			mov [RcvDat],0x00&lt;br /&gt;
			&lt;br /&gt;
	rbLoop:	SET_SDA				; ***** doplnene&lt;br /&gt;
			SET_SCL				; clock pre nacitanie bitu &lt;br /&gt;
&lt;br /&gt;
			mov A,reg[PORT]		; nacitanie a ulozenie bitu&lt;br /&gt;
&lt;br /&gt;
			mov [Temp],0x80		; nasada pre rotaciu&lt;br /&gt;
			and A,SDA			; kontrola na stav bitu SDA&lt;br /&gt;
			jnz rb_H			;&lt;br /&gt;
			asl [Temp]			; nastavenie CY bitu &lt;br /&gt;
	rb_H:	asl [Temp]			; 1x rotacia - set CY, 2x rotacia - clear CY&lt;br /&gt;
	rb_set: mov A,[RcvDat] &lt;br /&gt;
			rlc A				; presun CY do dat		&lt;br /&gt;
			mov [RcvDat],A&lt;br /&gt;
&lt;br /&gt;
			CLR_SCL&lt;br /&gt;
			dec [BitCnt]&lt;br /&gt;
			jnz rbLoop			; koniec cyklu&lt;br /&gt;
			&lt;br /&gt;
			pop A				; vytiahnutie priznaku zo stacku&lt;br /&gt;
		&lt;br /&gt;
			cmp A, I2C_ACK&lt;br /&gt;
			jnz	rb_noack&lt;br /&gt;
			CLR_SDA				; ack by master&lt;br /&gt;
			jmp rb_ex&lt;br /&gt;
	&lt;br /&gt;
	rb_noack:&lt;br /&gt;
			SET_SDA				; no ack by master, last byte&lt;br /&gt;
			&lt;br /&gt;
	rb_ex:	SET_SCL&lt;br /&gt;
			CLR_SCL				; ***** doplnene&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			mov A,[RcvDat]&lt;br /&gt;
			ret&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konečne reálna komunikácia s LM92 ==&lt;br /&gt;
&lt;br /&gt;
Po všetkých týchto krokoch sa môžme vrhnúť do vytvorenia programu, ktorý bude pomocou vyššie uvedeného rozhrania získavať informácie z teplomera a posielať ich cez sériové rozhranie RS232 do počítača. Pre príjem a odosielanie informácií môžme použiť program terminál.&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5921</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5921"/>
		<updated>2010-06-25T10:36:33Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* Konečne reálna komunikácia s LM92 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Popis pinov LM92.jpg|center|thumb|400px|Obr. 2. Popis pinov]]&lt;br /&gt;
&lt;br /&gt;
SDA – sériová obojsmerná dátová linka&lt;br /&gt;
&lt;br /&gt;
SCL – hodinový vstup&lt;br /&gt;
&lt;br /&gt;
T_CRIT_A – výstup alarmu pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
INT – výstup pre prerušenie&lt;br /&gt;
&lt;br /&gt;
GND – zem&lt;br /&gt;
&lt;br /&gt;
+Vs – napájanie&lt;br /&gt;
&lt;br /&gt;
A0 – A1 – nastavenie adresy&lt;br /&gt;
&lt;br /&gt;
'''Dátový formát teploty'''&lt;br /&gt;
&lt;br /&gt;
Teplotné dáta môžu byť čítané z teplomera alebo z registrov pre SetPointy; a zapisované do Setpoint registrov. Teplotné dáta môžu byť čítané kedykoľvek. Ak bude frekvencia čítania dát vysoká, dáta v teplomery sa nestihnú obnoviť. Teplotné dáta sú reprezentované 13-bitovým binárnym číslom s LSB. Jeden bit je rovný 0, 0625 ºC. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Teplotný register LM92.jpg|center|thumb|600px|Obr. 3. Teplotný register]]&lt;br /&gt;
&lt;br /&gt;
Ako vidíme na obr. 3, bity D0 až D2 sú stavové bity. Teplota je na D3 až D14 a D15 je znamienko. Ak D15 je 1, znamienko je -. Príklady reprezentácie teploty sú na obr. 4. Treba si uvedomiť, že ak prečítame tento register získame 16 bitov, čo nie je hneď konkrétna nameraná teplota. Ak chceme získať teplotu, musíme sa zbaviť stavových bitov D0 až D2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Digitálny vystup LM92.jpg|center|thumb|400px|Obr. 4. Digitálny výstup z teplomera]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spojenie LM92 s mikrokontrolérom Cypress ==&lt;br /&gt;
&lt;br /&gt;
Pre spojenie potrebujeme sériové rozhranie I2C, ktoré slúži na komunikáciu mikrokontroléra s teplomerom a napríklad RS232 rozhranie pre komunikáciu mikrokontroléra s počítačom, kde môžme získané informácie ďalej spracovávať a vyhodnocovať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RS232 ==&lt;br /&gt;
&lt;br /&gt;
Toto rozhranie zavedieme použitím hardvérového bloku UART, ktorý Cypress obsahuje. Rýchlosť komunikácie bude 19200Bd, čo znamená frekvenciu 153kHz. Keď chceme nastaviť túto frekvenciu, musíme deliť základnú frekvenciu Cypress 24Mhz/156. Použijeme delič frekvencie VC3, ktorý bude následne zdroj frekvencie pre UART. Pre príjímané dáta použijeme pin P0_4 a pre odosielané dáta použijeme pin P0_2. Konkrétne nastavenia bloku UART priamo v PSoC dizajneri sú na obr. 5. Na obr.6. je vidieť umiestnenie blokov UART s schéme zapojenia.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:nastavenia UART.jpg|center|thumb|400px|Obr. 5. Konkrétne nastavenia bloku UART]]&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Umiestnenie UART.jpg|center|thumb|400px|Obr. 6. Umiestnenie bloku UART v schéme zapojenia]]&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
Aj keď aj pre toto sériové rozhranie existuje hardéverový blok, rozhodli sme sa, že si naprogramujeme vlastný softvér pre implementáciu tohto rozhrania. Toto naše rozhranie nebude potrebovať vonkajšie PULL-UP rezistory.&lt;br /&gt;
&lt;br /&gt;
Ako prvé vytvoríme súbor napr. ''i2c.inc'', v ktorom sa nachádzajú deklarácie pre rozhranie I2C. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
; Definicia portu a pinov &lt;br /&gt;
; upravit podla aktualneho nastavenia&lt;br /&gt;
&lt;br /&gt;
PORT:		equ		PORT_1	        ; PORT_0, PORT_1, PORT_2&lt;br /&gt;
SDA:		equ		P_5		; P_0, P_1, ... P_7&lt;br /&gt;
SCL:		equ		P_4		; P_0, P_1, ... P_7&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Globalne definicie&lt;br /&gt;
I2C_WRITE:	equ		%00000000&lt;br /&gt;
I2C_READ:	equ		%00000001	&lt;br /&gt;
I2C_ACK:	equ		%00000010&lt;br /&gt;
I2C_NOACK:	equ		%00000100&lt;br /&gt;
&lt;br /&gt;
PORT_2:		equ 	PRT2DR&lt;br /&gt;
PORT_1:		equ 	PRT1DR&lt;br /&gt;
PORT_0:		equ 	PRT0DR&lt;br /&gt;
P_7:		equ		%10000000&lt;br /&gt;
P_6:		equ		%01000000&lt;br /&gt;
P_5:		equ		%00100000&lt;br /&gt;
P_4:		equ		%00010000&lt;br /&gt;
P_3:		equ		%00001000&lt;br /&gt;
P_2:		equ		%00000100&lt;br /&gt;
P_1:		equ		%00000010&lt;br /&gt;
P_0:		equ		%00000001&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; Makra pre set/clear pinov SDA, SCL&lt;br /&gt;
MACRO SET_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO SET_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
; Makra pre nastavenie priznakov premennej [Flag]&lt;br /&gt;
MACRO SET_NO_ACK&lt;br /&gt;
	mov [Flag], 0x80&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_NO_ACK&lt;br /&gt;
	mov [Flag], 0x00&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO BIT_DELAY&lt;br /&gt;
	call  BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Potom vytvoríme súbor napr. ''i2c.asm'', ktorý obsahuje konkrétne funkcie pre I2C rozhranie. Program zaberá cca 770 Byte v ROM. Hlavným účelom bolo minimalizovať počet premenných v RAM, zrušiť [Flag] a [BitCnt] nahradiť registrom X. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
include &amp;quot;m8c.inc&amp;quot;&lt;br /&gt;
include &amp;quot;i2c_sw.inc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export I2C_Init&lt;br /&gt;
export I2C_Start&lt;br /&gt;
export I2C_Stop&lt;br /&gt;
export I2C_Send&lt;br /&gt;
export I2C_Recv&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Premenne pre I2C&lt;br /&gt;
area bss(RAM)&lt;br /&gt;
	BitCnt:		BLK 1		; pocitadlo pre pocet bitov&lt;br /&gt;
	SlvAdr:		BLK 1		; adresa slave&lt;br /&gt;
	RcvDat:		BLK 1		; prijate data&lt;br /&gt;
	Flag:		BLK 1		; priznak&lt;br /&gt;
	Temp:		BLK 1		; pomocna premenna&lt;br /&gt;
;=============================================================================&lt;br /&gt;
&lt;br /&gt;
area text&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; BitDly	zakladny delay &lt;br /&gt;
BitDly:		nop			; delay 4x sysclk, upravit podla hodin procesora&lt;br /&gt;
						; v pripade potreby nizsej prenosovej rychlosti &lt;br /&gt;
						; sem doplnte casovy slucku &lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; I2C_Init	inicializacia pinov rozhrania na uroven H&lt;br /&gt;
;			a reset rozhrania&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Init:&lt;br /&gt;
			SET_SDA&lt;br /&gt;
 			SET_SCL&lt;br /&gt;
 			call I2C_Stop&lt;br /&gt;
 			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStart vysle I2C start a adresu slave&lt;br /&gt;
;			nastavuje priznak premennej [Flag] NO_ACK, ak slave nepotvrdil &lt;br /&gt;
;			prijem znaku&lt;br /&gt;
; Vstup&lt;br /&gt;
; 	A - adresa slave&lt;br /&gt;
;	X - mod (I2C_READ, I2C_WRITE)&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Start:	asl A				; posun adrsy&lt;br /&gt;
			mov [SlvAdr],A		; odlozenie adresy&lt;br /&gt;
			swap A,X			; maska modu&lt;br /&gt;
			or [SlvAdr],A	&lt;br /&gt;
			CLR_SDA			 &lt;br /&gt;
			CLR_SCL				&lt;br /&gt;
			mov A, [SlvAdr]&lt;br /&gt;
			call I2C_Send&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStop	vysle stop na I2C a uvolni linku&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Stop:	CLR_SDA&lt;br /&gt;
			SET_SCL&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendByte	vysle znak&lt;br /&gt;
;			nastavuje priznak NO_ACK v premennej [Flag]&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A	- znak&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Send:	CLR_NO_ACK&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
	sbLoop:	asl A				; nastavenie SDA podla rotovaneho bitu v CY&lt;br /&gt;
			&lt;br /&gt;
			push A&lt;br /&gt;
			jnc	sb_low			; ? CY == 0&lt;br /&gt;
			SET_SDA				; 	CY = 1, SDA -&amp;gt; 1	&lt;br /&gt;
			jmp sb_end&lt;br /&gt;
	sb_low:	CLR_SDA				;	CY = 0, SDA -&amp;gt; 0&lt;br /&gt;
	sb_end:	SET_SCL				;					 &lt;br /&gt;
			CLR_SCL				; &lt;br /&gt;
			pop A&lt;br /&gt;
			&lt;br /&gt;
			dec [BitCnt]	&lt;br /&gt;
			jnz sbLoop			; podmienka cyklu&lt;br /&gt;
			&lt;br /&gt;
			SET_SDA				; uvolnenie datovej linky pre ACK &lt;br /&gt;
			SET_SCL				; vyslanie clocku pre ACK&lt;br /&gt;
	&lt;br /&gt;
			mov A, reg[PORT]	; kontrola na potvrdenia ACK od slave&lt;br /&gt;
			and A, SDA&lt;br /&gt;
			jnz sb_ex			; SDA = 1, slave potvrdil&lt;br /&gt;
			SET_NO_ACK			; nastavenie priznaku NoACK&lt;br /&gt;
			&lt;br /&gt;
	sb_ex:	CLR_SCL&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; RecvByte	- nacitanie byte z I2C&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A  - priznak potvrdenia nacitaneho znaku (I2C_ACK, I2C_NO_ACK)&lt;br /&gt;
; Vystup&lt;br /&gt;
;	A - nacitany znak	 &lt;br /&gt;
I2C_Recv:	push A&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
			mov [RcvDat],0x00&lt;br /&gt;
			&lt;br /&gt;
	rbLoop:	SET_SDA				; ***** doplnene&lt;br /&gt;
			SET_SCL				; clock pre nacitanie bitu &lt;br /&gt;
&lt;br /&gt;
			mov A,reg[PORT]		; nacitanie a ulozenie bitu&lt;br /&gt;
&lt;br /&gt;
			mov [Temp],0x80		; nasada pre rotaciu&lt;br /&gt;
			and A,SDA			; kontrola na stav bitu SDA&lt;br /&gt;
			jnz rb_H			;&lt;br /&gt;
			asl [Temp]			; nastavenie CY bitu &lt;br /&gt;
	rb_H:	asl [Temp]			; 1x rotacia - set CY, 2x rotacia - clear CY&lt;br /&gt;
	rb_set: mov A,[RcvDat] &lt;br /&gt;
			rlc A				; presun CY do dat		&lt;br /&gt;
			mov [RcvDat],A&lt;br /&gt;
&lt;br /&gt;
			CLR_SCL&lt;br /&gt;
			dec [BitCnt]&lt;br /&gt;
			jnz rbLoop			; koniec cyklu&lt;br /&gt;
			&lt;br /&gt;
			pop A				; vytiahnutie priznaku zo stacku&lt;br /&gt;
		&lt;br /&gt;
			cmp A, I2C_ACK&lt;br /&gt;
			jnz	rb_noack&lt;br /&gt;
			CLR_SDA				; ack by master&lt;br /&gt;
			jmp rb_ex&lt;br /&gt;
	&lt;br /&gt;
	rb_noack:&lt;br /&gt;
			SET_SDA				; no ack by master, last byte&lt;br /&gt;
			&lt;br /&gt;
	rb_ex:	SET_SCL&lt;br /&gt;
			CLR_SCL				; ***** doplnene&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			mov A,[RcvDat]&lt;br /&gt;
			ret&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konečne reálna komunikácia s LM92 ==&lt;br /&gt;
&lt;br /&gt;
Po všetkých týchto krokoch sa môžme vrhnúť do vytvorenia programu, ktorý bude pomocou vyššie uvedeného rozhrania získavať informácie z teplomera a posielať ich cez sériové rozhranie RS232 do počítača. Pre príjem a odosielanie informácií môžme použiť program terminál.&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5920</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5920"/>
		<updated>2010-06-25T10:05:55Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Popis pinov LM92.jpg|center|thumb|400px|Obr. 2. Popis pinov]]&lt;br /&gt;
&lt;br /&gt;
SDA – sériová obojsmerná dátová linka&lt;br /&gt;
&lt;br /&gt;
SCL – hodinový vstup&lt;br /&gt;
&lt;br /&gt;
T_CRIT_A – výstup alarmu pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
INT – výstup pre prerušenie&lt;br /&gt;
&lt;br /&gt;
GND – zem&lt;br /&gt;
&lt;br /&gt;
+Vs – napájanie&lt;br /&gt;
&lt;br /&gt;
A0 – A1 – nastavenie adresy&lt;br /&gt;
&lt;br /&gt;
'''Dátový formát teploty'''&lt;br /&gt;
&lt;br /&gt;
Teplotné dáta môžu byť čítané z teplomera alebo z registrov pre SetPointy; a zapisované do Setpoint registrov. Teplotné dáta môžu byť čítané kedykoľvek. Ak bude frekvencia čítania dát vysoká, dáta v teplomery sa nestihnú obnoviť. Teplotné dáta sú reprezentované 13-bitovým binárnym číslom s LSB. Jeden bit je rovný 0, 0625 ºC. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Teplotný register LM92.jpg|center|thumb|600px|Obr. 3. Teplotný register]]&lt;br /&gt;
&lt;br /&gt;
Ako vidíme na obr. 3, bity D0 až D2 sú stavové bity. Teplota je na D3 až D14 a D15 je znamienko. Ak D15 je 1, znamienko je -. Príklady reprezentácie teploty sú na obr. 4. Treba si uvedomiť, že ak prečítame tento register získame 16 bitov, čo nie je hneď konkrétna nameraná teplota. Ak chceme získať teplotu, musíme sa zbaviť stavových bitov D0 až D2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Digitálny vystup LM92.jpg|center|thumb|400px|Obr. 4. Digitálny výstup z teplomera]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spojenie LM92 s mikrokontrolérom Cypress ==&lt;br /&gt;
&lt;br /&gt;
Pre spojenie potrebujeme sériové rozhranie I2C, ktoré slúži na komunikáciu mikrokontroléra s teplomerom a napríklad RS232 rozhranie pre komunikáciu mikrokontroléra s počítačom, kde môžme získané informácie ďalej spracovávať a vyhodnocovať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RS232 ==&lt;br /&gt;
&lt;br /&gt;
Toto rozhranie zavedieme použitím hardvérového bloku UART, ktorý Cypress obsahuje. Rýchlosť komunikácie bude 19200Bd, čo znamená frekvenciu 153kHz. Keď chceme nastaviť túto frekvenciu, musíme deliť základnú frekvenciu Cypress 24Mhz/156. Použijeme delič frekvencie VC3, ktorý bude následne zdroj frekvencie pre UART. Pre príjímané dáta použijeme pin P0_4 a pre odosielané dáta použijeme pin P0_2. Konkrétne nastavenia bloku UART priamo v PSoC dizajneri sú na obr. 5. Na obr.6. je vidieť umiestnenie blokov UART s schéme zapojenia.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:nastavenia UART.jpg|center|thumb|400px|Obr. 5. Konkrétne nastavenia bloku UART]]&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Umiestnenie UART.jpg|center|thumb|400px|Obr. 6. Umiestnenie bloku UART v schéme zapojenia]]&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
Aj keď aj pre toto sériové rozhranie existuje hardéverový blok, rozhodli sme sa, že si naprogramujeme vlastný softvér pre implementáciu tohto rozhrania. Toto naše rozhranie nebude potrebovať vonkajšie PULL-UP rezistory.&lt;br /&gt;
&lt;br /&gt;
Ako prvé vytvoríme súbor napr. ''i2c.inc'', v ktorom sa nachádzajú deklarácie pre rozhranie I2C. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
; Definicia portu a pinov &lt;br /&gt;
; upravit podla aktualneho nastavenia&lt;br /&gt;
&lt;br /&gt;
PORT:		equ		PORT_1	        ; PORT_0, PORT_1, PORT_2&lt;br /&gt;
SDA:		equ		P_5		; P_0, P_1, ... P_7&lt;br /&gt;
SCL:		equ		P_4		; P_0, P_1, ... P_7&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Globalne definicie&lt;br /&gt;
I2C_WRITE:	equ		%00000000&lt;br /&gt;
I2C_READ:	equ		%00000001	&lt;br /&gt;
I2C_ACK:	equ		%00000010&lt;br /&gt;
I2C_NOACK:	equ		%00000100&lt;br /&gt;
&lt;br /&gt;
PORT_2:		equ 	PRT2DR&lt;br /&gt;
PORT_1:		equ 	PRT1DR&lt;br /&gt;
PORT_0:		equ 	PRT0DR&lt;br /&gt;
P_7:		equ		%10000000&lt;br /&gt;
P_6:		equ		%01000000&lt;br /&gt;
P_5:		equ		%00100000&lt;br /&gt;
P_4:		equ		%00010000&lt;br /&gt;
P_3:		equ		%00001000&lt;br /&gt;
P_2:		equ		%00000100&lt;br /&gt;
P_1:		equ		%00000010&lt;br /&gt;
P_0:		equ		%00000001&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; Makra pre set/clear pinov SDA, SCL&lt;br /&gt;
MACRO SET_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO SET_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
; Makra pre nastavenie priznakov premennej [Flag]&lt;br /&gt;
MACRO SET_NO_ACK&lt;br /&gt;
	mov [Flag], 0x80&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_NO_ACK&lt;br /&gt;
	mov [Flag], 0x00&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO BIT_DELAY&lt;br /&gt;
	call  BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Potom vytvoríme súbor napr. ''i2c.asm'', ktorý obsahuje konkrétne funkcie pre I2C rozhranie. Program zaberá cca 770 Byte v ROM. Hlavným účelom bolo minimalizovať počet premenných v RAM, zrušiť [Flag] a [BitCnt] nahradiť registrom X. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
include &amp;quot;m8c.inc&amp;quot;&lt;br /&gt;
include &amp;quot;i2c_sw.inc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export I2C_Init&lt;br /&gt;
export I2C_Start&lt;br /&gt;
export I2C_Stop&lt;br /&gt;
export I2C_Send&lt;br /&gt;
export I2C_Recv&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Premenne pre I2C&lt;br /&gt;
area bss(RAM)&lt;br /&gt;
	BitCnt:		BLK 1		; pocitadlo pre pocet bitov&lt;br /&gt;
	SlvAdr:		BLK 1		; adresa slave&lt;br /&gt;
	RcvDat:		BLK 1		; prijate data&lt;br /&gt;
	Flag:		BLK 1		; priznak&lt;br /&gt;
	Temp:		BLK 1		; pomocna premenna&lt;br /&gt;
;=============================================================================&lt;br /&gt;
&lt;br /&gt;
area text&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; BitDly	zakladny delay &lt;br /&gt;
BitDly:		nop			; delay 4x sysclk, upravit podla hodin procesora&lt;br /&gt;
						; v pripade potreby nizsej prenosovej rychlosti &lt;br /&gt;
						; sem doplnte casovy slucku &lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; I2C_Init	inicializacia pinov rozhrania na uroven H&lt;br /&gt;
;			a reset rozhrania&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Init:&lt;br /&gt;
			SET_SDA&lt;br /&gt;
 			SET_SCL&lt;br /&gt;
 			call I2C_Stop&lt;br /&gt;
 			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStart vysle I2C start a adresu slave&lt;br /&gt;
;			nastavuje priznak premennej [Flag] NO_ACK, ak slave nepotvrdil &lt;br /&gt;
;			prijem znaku&lt;br /&gt;
; Vstup&lt;br /&gt;
; 	A - adresa slave&lt;br /&gt;
;	X - mod (I2C_READ, I2C_WRITE)&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Start:	asl A				; posun adrsy&lt;br /&gt;
			mov [SlvAdr],A		; odlozenie adresy&lt;br /&gt;
			swap A,X			; maska modu&lt;br /&gt;
			or [SlvAdr],A	&lt;br /&gt;
			CLR_SDA			 &lt;br /&gt;
			CLR_SCL				&lt;br /&gt;
			mov A, [SlvAdr]&lt;br /&gt;
			call I2C_Send&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStop	vysle stop na I2C a uvolni linku&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Stop:	CLR_SDA&lt;br /&gt;
			SET_SCL&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendByte	vysle znak&lt;br /&gt;
;			nastavuje priznak NO_ACK v premennej [Flag]&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A	- znak&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Send:	CLR_NO_ACK&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
	sbLoop:	asl A				; nastavenie SDA podla rotovaneho bitu v CY&lt;br /&gt;
			&lt;br /&gt;
			push A&lt;br /&gt;
			jnc	sb_low			; ? CY == 0&lt;br /&gt;
			SET_SDA				; 	CY = 1, SDA -&amp;gt; 1	&lt;br /&gt;
			jmp sb_end&lt;br /&gt;
	sb_low:	CLR_SDA				;	CY = 0, SDA -&amp;gt; 0&lt;br /&gt;
	sb_end:	SET_SCL				;					 &lt;br /&gt;
			CLR_SCL				; &lt;br /&gt;
			pop A&lt;br /&gt;
			&lt;br /&gt;
			dec [BitCnt]	&lt;br /&gt;
			jnz sbLoop			; podmienka cyklu&lt;br /&gt;
			&lt;br /&gt;
			SET_SDA				; uvolnenie datovej linky pre ACK &lt;br /&gt;
			SET_SCL				; vyslanie clocku pre ACK&lt;br /&gt;
	&lt;br /&gt;
			mov A, reg[PORT]	; kontrola na potvrdenia ACK od slave&lt;br /&gt;
			and A, SDA&lt;br /&gt;
			jnz sb_ex			; SDA = 1, slave potvrdil&lt;br /&gt;
			SET_NO_ACK			; nastavenie priznaku NoACK&lt;br /&gt;
			&lt;br /&gt;
	sb_ex:	CLR_SCL&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; RecvByte	- nacitanie byte z I2C&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A  - priznak potvrdenia nacitaneho znaku (I2C_ACK, I2C_NO_ACK)&lt;br /&gt;
; Vystup&lt;br /&gt;
;	A - nacitany znak	 &lt;br /&gt;
I2C_Recv:	push A&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
			mov [RcvDat],0x00&lt;br /&gt;
			&lt;br /&gt;
	rbLoop:	SET_SDA				; ***** doplnene&lt;br /&gt;
			SET_SCL				; clock pre nacitanie bitu &lt;br /&gt;
&lt;br /&gt;
			mov A,reg[PORT]		; nacitanie a ulozenie bitu&lt;br /&gt;
&lt;br /&gt;
			mov [Temp],0x80		; nasada pre rotaciu&lt;br /&gt;
			and A,SDA			; kontrola na stav bitu SDA&lt;br /&gt;
			jnz rb_H			;&lt;br /&gt;
			asl [Temp]			; nastavenie CY bitu &lt;br /&gt;
	rb_H:	asl [Temp]			; 1x rotacia - set CY, 2x rotacia - clear CY&lt;br /&gt;
	rb_set: mov A,[RcvDat] &lt;br /&gt;
			rlc A				; presun CY do dat		&lt;br /&gt;
			mov [RcvDat],A&lt;br /&gt;
&lt;br /&gt;
			CLR_SCL&lt;br /&gt;
			dec [BitCnt]&lt;br /&gt;
			jnz rbLoop			; koniec cyklu&lt;br /&gt;
			&lt;br /&gt;
			pop A				; vytiahnutie priznaku zo stacku&lt;br /&gt;
		&lt;br /&gt;
			cmp A, I2C_ACK&lt;br /&gt;
			jnz	rb_noack&lt;br /&gt;
			CLR_SDA				; ack by master&lt;br /&gt;
			jmp rb_ex&lt;br /&gt;
	&lt;br /&gt;
	rb_noack:&lt;br /&gt;
			SET_SDA				; no ack by master, last byte&lt;br /&gt;
			&lt;br /&gt;
	rb_ex:	SET_SCL&lt;br /&gt;
			CLR_SCL				; ***** doplnene&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			mov A,[RcvDat]&lt;br /&gt;
			ret&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konečne reálna komunikácia s LM92 ==&lt;br /&gt;
&lt;br /&gt;
Po všetkých týchto krokoch sa môžme vrhnúť do vytvorenia programu, ktorý bude pomocou vyššie uvedeného rozhrania získavať informácie z teplomera a posielať ich cez sériové rozhranie RS232 do počítača.&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5919</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5919"/>
		<updated>2010-06-25T09:59:15Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* I2C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Popis pinov LM92.jpg|center|thumb|400px|Obr. 2. Popis pinov]]&lt;br /&gt;
&lt;br /&gt;
SDA – sériová obojsmerná dátová linka&lt;br /&gt;
&lt;br /&gt;
SCL – hodinový vstup&lt;br /&gt;
&lt;br /&gt;
T_CRIT_A – výstup alarmu pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
INT – výstup pre prerušenie&lt;br /&gt;
&lt;br /&gt;
GND – zem&lt;br /&gt;
&lt;br /&gt;
+Vs – napájanie&lt;br /&gt;
&lt;br /&gt;
A0 – A1 – nastavenie adresy&lt;br /&gt;
&lt;br /&gt;
'''Dátový formát teploty'''&lt;br /&gt;
&lt;br /&gt;
Teplotné dáta môžu byť čítané z teplomera alebo z registrov pre SetPointy; a zapisované do Setpoint registrov. Teplotné dáta môžu byť čítané kedykoľvek. Ak bude frekvencia čítania dát vysoká, dáta v teplomery sa nestihnú obnoviť. Teplotné dáta sú reprezentované 13-bitovým binárnym číslom s LSB. Jeden bit je rovný 0, 0625 ºC. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Teplotný register LM92.jpg|center|thumb|600px|Obr. 3. Teplotný register]]&lt;br /&gt;
&lt;br /&gt;
Ako vidíme na obr. 3, bity D0 až D2 sú stavové bity. Teplota je na D3 až D14 a D15 je znamienko. Ak D15 je 1, znamienko je -. Príklady reprezentácie teploty sú na obr. 4. Treba si uvedomiť, že ak prečítame tento register získame 16 bitov, čo nie je hneď konkrétna nameraná teplota. Ak chceme získať teplotu, musíme sa zbaviť stavových bitov D0 až D2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Digitálny vystup LM92.jpg|center|thumb|400px|Obr. 4. Digitálny výstup z teplomera]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spojenie LM92 s mikrokontrolérom Cypress ==&lt;br /&gt;
&lt;br /&gt;
Pre spojenie potrebujeme sériové rozhranie I2C, ktoré slúži na komunikáciu mikrokontroléra s teplomerom a napríklad RS232 rozhranie pre komunikáciu mikrokontroléra s počítačom, kde môžme získané informácie ďalej spracovávať a vyhodnocovať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RS232 ==&lt;br /&gt;
&lt;br /&gt;
Toto rozhranie zavedieme použitím hardvérového bloku UART, ktorý Cypress obsahuje. Rýchlosť komunikácie bude 19200Bd, čo znamená frekvenciu 153kHz. Keď chceme nastaviť túto frekvenciu, musíme deliť základnú frekvenciu Cypress 24Mhz/156. Použijeme delič frekvencie VC3, ktorý bude následne zdroj frekvencie pre UART. Pre príjímané dáta použijeme pin P0_4 a pre odosielané dáta použijeme pin P0_2. Konkrétne nastavenia bloku UART priamo v PSoC dizajneri sú na obr. 5. Na obr.6. je vidieť umiestnenie blokov UART s schéme zapojenia.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:nastavenia UART.jpg|center|thumb|400px|Obr. 5. Konkrétne nastavenia bloku UART]]&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Umiestnenie UART.jpg|center|thumb|400px|Obr. 6. Umiestnenie bloku UART v schéme zapojenia]]&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
Aj keď aj pre toto sériové rozhranie existuje hardéverový blok, rozhodli sme sa, že si naprogramujeme vlastný softvér pre implementáciu tohto rozhrania. Toto naše rozhranie nebude potrebovať vonkajšie PULL-UP rezistory.&lt;br /&gt;
&lt;br /&gt;
Ako prvé vytvoríme súbor napr. ''i2c.inc'', v ktorom sa nachádzajú deklarácie pre rozhranie I2C. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
; Definicia portu a pinov &lt;br /&gt;
; upravit podla aktualneho nastavenia&lt;br /&gt;
&lt;br /&gt;
PORT:		equ		PORT_1	        ; PORT_0, PORT_1, PORT_2&lt;br /&gt;
SDA:		equ		P_5		; P_0, P_1, ... P_7&lt;br /&gt;
SCL:		equ		P_4		; P_0, P_1, ... P_7&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Globalne definicie&lt;br /&gt;
I2C_WRITE:	equ		%00000000&lt;br /&gt;
I2C_READ:	equ		%00000001	&lt;br /&gt;
I2C_ACK:	equ		%00000010&lt;br /&gt;
I2C_NOACK:	equ		%00000100&lt;br /&gt;
&lt;br /&gt;
PORT_2:		equ 	PRT2DR&lt;br /&gt;
PORT_1:		equ 	PRT1DR&lt;br /&gt;
PORT_0:		equ 	PRT0DR&lt;br /&gt;
P_7:		equ		%10000000&lt;br /&gt;
P_6:		equ		%01000000&lt;br /&gt;
P_5:		equ		%00100000&lt;br /&gt;
P_4:		equ		%00010000&lt;br /&gt;
P_3:		equ		%00001000&lt;br /&gt;
P_2:		equ		%00000100&lt;br /&gt;
P_1:		equ		%00000010&lt;br /&gt;
P_0:		equ		%00000001&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; Makra pre set/clear pinov SDA, SCL&lt;br /&gt;
MACRO SET_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO SET_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
; Makra pre nastavenie priznakov premennej [Flag]&lt;br /&gt;
MACRO SET_NO_ACK&lt;br /&gt;
	mov [Flag], 0x80&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_NO_ACK&lt;br /&gt;
	mov [Flag], 0x00&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO BIT_DELAY&lt;br /&gt;
	call  BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Potom vytvoríme súbor napr. ''i2c.asm'', ktorý obsahuje konkrétne funkcie pre I2C rozhranie. Program zaberá cca 770 Byte v ROM. Hlavným účelom bolo minimalizovať počet premenných v RAM, zrušiť [Flag] a [BitCnt] nahradiť registrom X. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
include &amp;quot;m8c.inc&amp;quot;&lt;br /&gt;
include &amp;quot;i2c_sw.inc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export I2C_Init&lt;br /&gt;
export I2C_Start&lt;br /&gt;
export I2C_Stop&lt;br /&gt;
export I2C_Send&lt;br /&gt;
export I2C_Recv&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Premenne pre I2C&lt;br /&gt;
area bss(RAM)&lt;br /&gt;
	BitCnt:		BLK 1		; pocitadlo pre pocet bitov&lt;br /&gt;
	SlvAdr:		BLK 1		; adresa slave&lt;br /&gt;
	RcvDat:		BLK 1		; prijate data&lt;br /&gt;
	Flag:		BLK 1		; priznak&lt;br /&gt;
	Temp:		BLK 1		; pomocna premenna&lt;br /&gt;
;=============================================================================&lt;br /&gt;
&lt;br /&gt;
area text&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; BitDly	zakladny delay &lt;br /&gt;
BitDly:		nop			; delay 4x sysclk, upravit podla hodin procesora&lt;br /&gt;
						; v pripade potreby nizsej prenosovej rychlosti &lt;br /&gt;
						; sem doplnte casovy slucku &lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; I2C_Init	inicializacia pinov rozhrania na uroven H&lt;br /&gt;
;			a reset rozhrania&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Init:&lt;br /&gt;
			SET_SDA&lt;br /&gt;
 			SET_SCL&lt;br /&gt;
 			call I2C_Stop&lt;br /&gt;
 			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStart vysle I2C start a adresu slave&lt;br /&gt;
;			nastavuje priznak premennej [Flag] NO_ACK, ak slave nepotvrdil &lt;br /&gt;
;			prijem znaku&lt;br /&gt;
; Vstup&lt;br /&gt;
; 	A - adresa slave&lt;br /&gt;
;	X - mod (I2C_READ, I2C_WRITE)&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Start:	asl A				; posun adrsy&lt;br /&gt;
			mov [SlvAdr],A		; odlozenie adresy&lt;br /&gt;
			swap A,X			; maska modu&lt;br /&gt;
			or [SlvAdr],A	&lt;br /&gt;
			CLR_SDA			 &lt;br /&gt;
			CLR_SCL				&lt;br /&gt;
			mov A, [SlvAdr]&lt;br /&gt;
			call I2C_Send&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStop	vysle stop na I2C a uvolni linku&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Stop:	CLR_SDA&lt;br /&gt;
			SET_SCL&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendByte	vysle znak&lt;br /&gt;
;			nastavuje priznak NO_ACK v premennej [Flag]&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A	- znak&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Send:	CLR_NO_ACK&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
	sbLoop:	asl A				; nastavenie SDA podla rotovaneho bitu v CY&lt;br /&gt;
			&lt;br /&gt;
			push A&lt;br /&gt;
			jnc	sb_low			; ? CY == 0&lt;br /&gt;
			SET_SDA				; 	CY = 1, SDA -&amp;gt; 1	&lt;br /&gt;
			jmp sb_end&lt;br /&gt;
	sb_low:	CLR_SDA				;	CY = 0, SDA -&amp;gt; 0&lt;br /&gt;
	sb_end:	SET_SCL				;					 &lt;br /&gt;
			CLR_SCL				; &lt;br /&gt;
			pop A&lt;br /&gt;
			&lt;br /&gt;
			dec [BitCnt]	&lt;br /&gt;
			jnz sbLoop			; podmienka cyklu&lt;br /&gt;
			&lt;br /&gt;
			SET_SDA				; uvolnenie datovej linky pre ACK &lt;br /&gt;
			SET_SCL				; vyslanie clocku pre ACK&lt;br /&gt;
	&lt;br /&gt;
			mov A, reg[PORT]	; kontrola na potvrdenia ACK od slave&lt;br /&gt;
			and A, SDA&lt;br /&gt;
			jnz sb_ex			; SDA = 1, slave potvrdil&lt;br /&gt;
			SET_NO_ACK			; nastavenie priznaku NoACK&lt;br /&gt;
			&lt;br /&gt;
	sb_ex:	CLR_SCL&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; RecvByte	- nacitanie byte z I2C&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A  - priznak potvrdenia nacitaneho znaku (I2C_ACK, I2C_NO_ACK)&lt;br /&gt;
; Vystup&lt;br /&gt;
;	A - nacitany znak	 &lt;br /&gt;
I2C_Recv:	push A&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
			mov [RcvDat],0x00&lt;br /&gt;
			&lt;br /&gt;
	rbLoop:	SET_SDA				; ***** doplnene&lt;br /&gt;
			SET_SCL				; clock pre nacitanie bitu &lt;br /&gt;
&lt;br /&gt;
			mov A,reg[PORT]		; nacitanie a ulozenie bitu&lt;br /&gt;
&lt;br /&gt;
			mov [Temp],0x80		; nasada pre rotaciu&lt;br /&gt;
			and A,SDA			; kontrola na stav bitu SDA&lt;br /&gt;
			jnz rb_H			;&lt;br /&gt;
			asl [Temp]			; nastavenie CY bitu &lt;br /&gt;
	rb_H:	asl [Temp]			; 1x rotacia - set CY, 2x rotacia - clear CY&lt;br /&gt;
	rb_set: mov A,[RcvDat] &lt;br /&gt;
			rlc A				; presun CY do dat		&lt;br /&gt;
			mov [RcvDat],A&lt;br /&gt;
&lt;br /&gt;
			CLR_SCL&lt;br /&gt;
			dec [BitCnt]&lt;br /&gt;
			jnz rbLoop			; koniec cyklu&lt;br /&gt;
			&lt;br /&gt;
			pop A				; vytiahnutie priznaku zo stacku&lt;br /&gt;
		&lt;br /&gt;
			cmp A, I2C_ACK&lt;br /&gt;
			jnz	rb_noack&lt;br /&gt;
			CLR_SDA				; ack by master&lt;br /&gt;
			jmp rb_ex&lt;br /&gt;
	&lt;br /&gt;
	rb_noack:&lt;br /&gt;
			SET_SDA				; no ack by master, last byte&lt;br /&gt;
			&lt;br /&gt;
	rb_ex:	SET_SCL&lt;br /&gt;
			CLR_SCL				; ***** doplnene&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			mov A,[RcvDat]&lt;br /&gt;
			ret&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5917</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5917"/>
		<updated>2010-06-25T09:57:06Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Popis pinov LM92.jpg|center|thumb|400px|Obr. 2. Popis pinov]]&lt;br /&gt;
&lt;br /&gt;
SDA – sériová obojsmerná dátová linka&lt;br /&gt;
&lt;br /&gt;
SCL – hodinový vstup&lt;br /&gt;
&lt;br /&gt;
T_CRIT_A – výstup alarmu pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
INT – výstup pre prerušenie&lt;br /&gt;
&lt;br /&gt;
GND – zem&lt;br /&gt;
&lt;br /&gt;
+Vs – napájanie&lt;br /&gt;
&lt;br /&gt;
A0 – A1 – nastavenie adresy&lt;br /&gt;
&lt;br /&gt;
'''Dátový formát teploty'''&lt;br /&gt;
&lt;br /&gt;
Teplotné dáta môžu byť čítané z teplomera alebo z registrov pre SetPointy; a zapisované do Setpoint registrov. Teplotné dáta môžu byť čítané kedykoľvek. Ak bude frekvencia čítania dát vysoká, dáta v teplomery sa nestihnú obnoviť. Teplotné dáta sú reprezentované 13-bitovým binárnym číslom s LSB. Jeden bit je rovný 0, 0625 ºC. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Teplotný register LM92.jpg|center|thumb|600px|Obr. 3. Teplotný register]]&lt;br /&gt;
&lt;br /&gt;
Ako vidíme na obr. 3, bity D0 až D2 sú stavové bity. Teplota je na D3 až D14 a D15 je znamienko. Ak D15 je 1, znamienko je -. Príklady reprezentácie teploty sú na obr. 4. Treba si uvedomiť, že ak prečítame tento register získame 16 bitov, čo nie je hneď konkrétna nameraná teplota. Ak chceme získať teplotu, musíme sa zbaviť stavových bitov D0 až D2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Digitálny vystup LM92.jpg|center|thumb|400px|Obr. 4. Digitálny výstup z teplomera]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spojenie LM92 s mikrokontrolérom Cypress ==&lt;br /&gt;
&lt;br /&gt;
Pre spojenie potrebujeme sériové rozhranie I2C, ktoré slúži na komunikáciu mikrokontroléra s teplomerom a napríklad RS232 rozhranie pre komunikáciu mikrokontroléra s počítačom, kde môžme získané informácie ďalej spracovávať a vyhodnocovať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RS232 ==&lt;br /&gt;
&lt;br /&gt;
Toto rozhranie zavedieme použitím hardvérového bloku UART, ktorý Cypress obsahuje. Rýchlosť komunikácie bude 19200Bd, čo znamená frekvenciu 153kHz. Keď chceme nastaviť túto frekvenciu, musíme deliť základnú frekvenciu Cypress 24Mhz/156. Použijeme delič frekvencie VC3, ktorý bude následne zdroj frekvencie pre UART. Pre príjímané dáta použijeme pin P0_4 a pre odosielané dáta použijeme pin P0_2. Konkrétne nastavenia bloku UART priamo v PSoC dizajneri sú na obr. 5. Na obr.6. je vidieť umiestnenie blokov UART s schéme zapojenia.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:nastavenia UART.jpg|center|thumb|400px|Obr. 5. Konkrétne nastavenia bloku UART]]&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Umiestnenie UART.jpg|center|thumb|400px|Obr. 6. Umiestnenie bloku UART v schéme zapojenia]]&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
Aj keď aj pre toto sériové rozhranie existuje hardéverový blok, rozhodli sme sa, že si naprogramujeme vlastný softvér pre implementáciu tohto rozhrania. Toto naše rozhranie nebude potrebovať vonkajšie PULL-UP rezistory.&lt;br /&gt;
&lt;br /&gt;
Ako prvé vytvoríme súbor napr. ''i2c.inc'', v ktorom sa nachádzajú deklarácie pre rozhranie I2C. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Definicia portu a pinov &lt;br /&gt;
; upravit podla aktualneho nastavenia&lt;br /&gt;
&lt;br /&gt;
PORT:		equ		PORT_1	        ; PORT_0, PORT_1, PORT_2&lt;br /&gt;
SDA:		equ		P_5		; P_0, P_1, ... P_7&lt;br /&gt;
SCL:		equ		P_4		; P_0, P_1, ... P_7&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Globalne definicie&lt;br /&gt;
I2C_WRITE:	equ		%00000000&lt;br /&gt;
I2C_READ:	equ		%00000001	&lt;br /&gt;
I2C_ACK:	equ		%00000010&lt;br /&gt;
I2C_NOACK:	equ		%00000100&lt;br /&gt;
&lt;br /&gt;
PORT_2:		equ 	PRT2DR&lt;br /&gt;
PORT_1:		equ 	PRT1DR&lt;br /&gt;
PORT_0:		equ 	PRT0DR&lt;br /&gt;
P_7:		equ		%10000000&lt;br /&gt;
P_6:		equ		%01000000&lt;br /&gt;
P_5:		equ		%00100000&lt;br /&gt;
P_4:		equ		%00010000&lt;br /&gt;
P_3:		equ		%00001000&lt;br /&gt;
P_2:		equ		%00000100&lt;br /&gt;
P_1:		equ		%00000010&lt;br /&gt;
P_0:		equ		%00000001&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; Makra pre set/clear pinov SDA, SCL&lt;br /&gt;
MACRO SET_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO SET_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
; Makra pre nastavenie priznakov premennej [Flag]&lt;br /&gt;
MACRO SET_NO_ACK&lt;br /&gt;
	mov [Flag], 0x80&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_NO_ACK&lt;br /&gt;
	mov [Flag], 0x00&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO BIT_DELAY&lt;br /&gt;
	call  BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Potom vytvoríme súbor napr. ''i2c.asm'', ktorý obsahuje konkrétne funkcie pre I2C rozhranie. Program zaberá cca 770 Byte v ROM. Hlavným účelom bolo minimalizovať počet premenných v RAM, zrušiť [Flag] a [BitCnt] nahradiť registrom X. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
include &amp;quot;m8c.inc&amp;quot;&lt;br /&gt;
include &amp;quot;i2c_sw.inc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export I2C_Init&lt;br /&gt;
export I2C_Start&lt;br /&gt;
export I2C_Stop&lt;br /&gt;
export I2C_Send&lt;br /&gt;
export I2C_Recv&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Premenne pre I2C&lt;br /&gt;
area bss(RAM)&lt;br /&gt;
	BitCnt:		BLK 1		; pocitadlo pre pocet bitov&lt;br /&gt;
	SlvAdr:		BLK 1		; adresa slave&lt;br /&gt;
	RcvDat:		BLK 1		; prijate data&lt;br /&gt;
	Flag:		BLK 1		; priznak&lt;br /&gt;
	Temp:		BLK 1		; pomocna premenna&lt;br /&gt;
;=============================================================================&lt;br /&gt;
&lt;br /&gt;
area text&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; BitDly	zakladny delay &lt;br /&gt;
BitDly:		nop			; delay 4x sysclk, upravit podla hodin procesora&lt;br /&gt;
						; v pripade potreby nizsej prenosovej rychlosti &lt;br /&gt;
						; sem doplnte casovy slucku &lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; I2C_Init	inicializacia pinov rozhrania na uroven H&lt;br /&gt;
;			a reset rozhrania&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Init:&lt;br /&gt;
			SET_SDA&lt;br /&gt;
 			SET_SCL&lt;br /&gt;
 			call I2C_Stop&lt;br /&gt;
 			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStart vysle I2C start a adresu slave&lt;br /&gt;
;			nastavuje priznak premennej [Flag] NO_ACK, ak slave nepotvrdil &lt;br /&gt;
;			prijem znaku&lt;br /&gt;
; Vstup&lt;br /&gt;
; 	A - adresa slave&lt;br /&gt;
;	X - mod (I2C_READ, I2C_WRITE)&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Start:	asl A				; posun adrsy&lt;br /&gt;
			mov [SlvAdr],A		; odlozenie adresy&lt;br /&gt;
			swap A,X			; maska modu&lt;br /&gt;
			or [SlvAdr],A	&lt;br /&gt;
			CLR_SDA			 &lt;br /&gt;
			CLR_SCL				&lt;br /&gt;
			mov A, [SlvAdr]&lt;br /&gt;
			call I2C_Send&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendStop	vysle stop na I2C a uvolni linku&lt;br /&gt;
; Vstup&lt;br /&gt;
;	-&lt;br /&gt;
; Vystup&lt;br /&gt;
;	-&lt;br /&gt;
I2C_Stop:	CLR_SDA&lt;br /&gt;
			SET_SCL&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; SendByte	vysle znak&lt;br /&gt;
;			nastavuje priznak NO_ACK v premennej [Flag]&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A	- znak&lt;br /&gt;
; Vystup&lt;br /&gt;
; 	-&lt;br /&gt;
I2C_Send:	CLR_NO_ACK&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
	sbLoop:	asl A				; nastavenie SDA podla rotovaneho bitu v CY&lt;br /&gt;
			&lt;br /&gt;
			push A&lt;br /&gt;
			jnc	sb_low			; ? CY == 0&lt;br /&gt;
			SET_SDA				; 	CY = 1, SDA -&amp;gt; 1	&lt;br /&gt;
			jmp sb_end&lt;br /&gt;
	sb_low:	CLR_SDA				;	CY = 0, SDA -&amp;gt; 0&lt;br /&gt;
	sb_end:	SET_SCL				;					 &lt;br /&gt;
			CLR_SCL				; &lt;br /&gt;
			pop A&lt;br /&gt;
			&lt;br /&gt;
			dec [BitCnt]	&lt;br /&gt;
			jnz sbLoop			; podmienka cyklu&lt;br /&gt;
			&lt;br /&gt;
			SET_SDA				; uvolnenie datovej linky pre ACK &lt;br /&gt;
			SET_SCL				; vyslanie clocku pre ACK&lt;br /&gt;
	&lt;br /&gt;
			mov A, reg[PORT]	; kontrola na potvrdenia ACK od slave&lt;br /&gt;
			and A, SDA&lt;br /&gt;
			jnz sb_ex			; SDA = 1, slave potvrdil&lt;br /&gt;
			SET_NO_ACK			; nastavenie priznaku NoACK&lt;br /&gt;
			&lt;br /&gt;
	sb_ex:	CLR_SCL&lt;br /&gt;
			ret&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; RecvByte	- nacitanie byte z I2C&lt;br /&gt;
; Vstup&lt;br /&gt;
;	A  - priznak potvrdenia nacitaneho znaku (I2C_ACK, I2C_NO_ACK)&lt;br /&gt;
; Vystup&lt;br /&gt;
;	A - nacitany znak	 &lt;br /&gt;
I2C_Recv:	push A&lt;br /&gt;
			mov	[BitCnt],0x08&lt;br /&gt;
			mov [RcvDat],0x00&lt;br /&gt;
			&lt;br /&gt;
	rbLoop:	SET_SDA				; ***** doplnene&lt;br /&gt;
			SET_SCL				; clock pre nacitanie bitu &lt;br /&gt;
&lt;br /&gt;
			mov A,reg[PORT]		; nacitanie a ulozenie bitu&lt;br /&gt;
&lt;br /&gt;
			mov [Temp],0x80		; nasada pre rotaciu&lt;br /&gt;
			and A,SDA			; kontrola na stav bitu SDA&lt;br /&gt;
			jnz rb_H			;&lt;br /&gt;
			asl [Temp]			; nastavenie CY bitu &lt;br /&gt;
	rb_H:	asl [Temp]			; 1x rotacia - set CY, 2x rotacia - clear CY&lt;br /&gt;
	rb_set: mov A,[RcvDat] &lt;br /&gt;
			rlc A				; presun CY do dat		&lt;br /&gt;
			mov [RcvDat],A&lt;br /&gt;
&lt;br /&gt;
			CLR_SCL&lt;br /&gt;
			dec [BitCnt]&lt;br /&gt;
			jnz rbLoop			; koniec cyklu&lt;br /&gt;
			&lt;br /&gt;
			pop A				; vytiahnutie priznaku zo stacku&lt;br /&gt;
		&lt;br /&gt;
			cmp A, I2C_ACK&lt;br /&gt;
			jnz	rb_noack&lt;br /&gt;
			CLR_SDA				; ack by master&lt;br /&gt;
			jmp rb_ex&lt;br /&gt;
	&lt;br /&gt;
	rb_noack:&lt;br /&gt;
			SET_SDA				; no ack by master, last byte&lt;br /&gt;
			&lt;br /&gt;
	rb_ex:	SET_SCL&lt;br /&gt;
			CLR_SCL				; ***** doplnene&lt;br /&gt;
			SET_SDA&lt;br /&gt;
			mov A,[RcvDat]&lt;br /&gt;
			ret&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5915</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5915"/>
		<updated>2010-06-25T09:49:30Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* I2C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Popis pinov LM92.jpg|center|thumb|400px|Obr. 2. Popis pinov]]&lt;br /&gt;
&lt;br /&gt;
SDA – sériová obojsmerná dátová linka&lt;br /&gt;
&lt;br /&gt;
SCL – hodinový vstup&lt;br /&gt;
&lt;br /&gt;
T_CRIT_A – výstup alarmu pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
INT – výstup pre prerušenie&lt;br /&gt;
&lt;br /&gt;
GND – zem&lt;br /&gt;
&lt;br /&gt;
+Vs – napájanie&lt;br /&gt;
&lt;br /&gt;
A0 – A1 – nastavenie adresy&lt;br /&gt;
&lt;br /&gt;
'''Dátový formát teploty'''&lt;br /&gt;
&lt;br /&gt;
Teplotné dáta môžu byť čítané z teplomera alebo z registrov pre SetPointy; a zapisované do Setpoint registrov. Teplotné dáta môžu byť čítané kedykoľvek. Ak bude frekvencia čítania dát vysoká, dáta v teplomery sa nestihnú obnoviť. Teplotné dáta sú reprezentované 13-bitovým binárnym číslom s LSB. Jeden bit je rovný 0, 0625 ºC. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Teplotný register LM92.jpg|center|thumb|600px|Obr. 3. Teplotný register]]&lt;br /&gt;
&lt;br /&gt;
Ako vidíme na obr. 3, bity D0 až D2 sú stavové bity. Teplota je na D3 až D14 a D15 je znamienko. Ak D15 je 1, znamienko je -. Príklady reprezentácie teploty sú na obr. 4. Treba si uvedomiť, že ak prečítame tento register získame 16 bitov, čo nie je hneď konkrétna nameraná teplota. Ak chceme získať teplotu, musíme sa zbaviť stavových bitov D0 až D2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Digitálny vystup LM92.jpg|center|thumb|400px|Obr. 4. Digitálny výstup z teplomera]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spojenie LM92 s mikrokontrolérom Cypress ==&lt;br /&gt;
&lt;br /&gt;
Pre spojenie potrebujeme sériové rozhranie I2C, ktoré slúži na komunikáciu mikrokontroléra s teplomerom a napríklad RS232 rozhranie pre komunikáciu mikrokontroléra s počítačom, kde môžme získané informácie ďalej spracovávať a vyhodnocovať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RS232 ==&lt;br /&gt;
&lt;br /&gt;
Toto rozhranie zavedieme použitím hardvérového bloku UART, ktorý Cypress obsahuje. Rýchlosť komunikácie bude 19200Bd, čo znamená frekvenciu 153kHz. Keď chceme nastaviť túto frekvenciu, musíme deliť základnú frekvenciu Cypress 24Mhz/156. Použijeme delič frekvencie VC3, ktorý bude následne zdroj frekvencie pre UART. Pre príjímané dáta použijeme pin P0_4 a pre odosielané dáta použijeme pin P0_2. Konkrétne nastavenia bloku UART priamo v PSoC dizajneri sú na obr. 5. Na obr.6. je vidieť umiestnenie blokov UART s schéme zapojenia.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:nastavenia UART.jpg|center|thumb|400px|Obr. 5. Konkrétne nastavenia bloku UART]]&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Umiestnenie UART.jpg|center|thumb|400px|Obr. 6. Umiestnenie bloku UART v schéme zapojenia]]&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
Aj keď aj pre toto sériové rozhranie existuje hardéverový blok, rozhodli sme sa, že si naprogramujeme vlastný softvér pre implementáciu tohto rozhrania. Toto naše rozhranie nebude potrebovať vonkajšie PULL-UP rezistory.&lt;br /&gt;
&lt;br /&gt;
Ako prvé vytvoríme súbor napr. ''i2c.inc'', v ktorom sa nachádzajú deklarácie pre rozhranie I2C. Jeho obsah je nasledovný:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Definicia portu a pinov &lt;br /&gt;
; upravit podla aktualneho nastavenia&lt;br /&gt;
&lt;br /&gt;
PORT:		equ		PORT_1	        ; PORT_0, PORT_1, PORT_2&lt;br /&gt;
SDA:		equ		P_5		; P_0, P_1, ... P_7&lt;br /&gt;
SCL:		equ		P_4		; P_0, P_1, ... P_7&lt;br /&gt;
&lt;br /&gt;
;=============================================================================&lt;br /&gt;
; Globalne definicie&lt;br /&gt;
I2C_WRITE:	equ		%00000000&lt;br /&gt;
I2C_READ:	equ		%00000001	&lt;br /&gt;
I2C_ACK:	equ		%00000010&lt;br /&gt;
I2C_NOACK:	equ		%00000100&lt;br /&gt;
&lt;br /&gt;
PORT_2:		equ 	PRT2DR&lt;br /&gt;
PORT_1:		equ 	PRT1DR&lt;br /&gt;
PORT_0:		equ 	PRT0DR&lt;br /&gt;
P_7:		equ		%10000000&lt;br /&gt;
P_6:		equ		%01000000&lt;br /&gt;
P_5:		equ		%00100000&lt;br /&gt;
P_4:		equ		%00010000&lt;br /&gt;
P_3:		equ		%00001000&lt;br /&gt;
P_2:		equ		%00000100&lt;br /&gt;
P_1:		equ		%00000010&lt;br /&gt;
P_0:		equ		%00000001&lt;br /&gt;
;-----------------------------------------------------------------------------&lt;br /&gt;
; Makra pre set/clear pinov SDA, SCL&lt;br /&gt;
MACRO SET_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SDA&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SDA&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO SET_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_SCL&lt;br /&gt;
	mov A, reg[PORT]&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	or A, SCL&lt;br /&gt;
	xor A, 0xFF&lt;br /&gt;
	mov reg[PORT],A&lt;br /&gt;
	call BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
; Makra pre nastavenie priznakov premennej [Flag]&lt;br /&gt;
MACRO SET_NO_ACK&lt;br /&gt;
	mov [Flag], 0x80&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO CLR_NO_ACK&lt;br /&gt;
	mov [Flag], 0x00&lt;br /&gt;
ENDM&lt;br /&gt;
&lt;br /&gt;
MACRO BIT_DELAY&lt;br /&gt;
	call  BitDly&lt;br /&gt;
ENDM&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5914</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5914"/>
		<updated>2010-06-25T09:32:24Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Popis pinov LM92.jpg|center|thumb|400px|Obr. 2. Popis pinov]]&lt;br /&gt;
&lt;br /&gt;
SDA – sériová obojsmerná dátová linka&lt;br /&gt;
&lt;br /&gt;
SCL – hodinový vstup&lt;br /&gt;
&lt;br /&gt;
T_CRIT_A – výstup alarmu pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
INT – výstup pre prerušenie&lt;br /&gt;
&lt;br /&gt;
GND – zem&lt;br /&gt;
&lt;br /&gt;
+Vs – napájanie&lt;br /&gt;
&lt;br /&gt;
A0 – A1 – nastavenie adresy&lt;br /&gt;
&lt;br /&gt;
'''Dátový formát teploty'''&lt;br /&gt;
&lt;br /&gt;
Teplotné dáta môžu byť čítané z teplomera alebo z registrov pre SetPointy; a zapisované do Setpoint registrov. Teplotné dáta môžu byť čítané kedykoľvek. Ak bude frekvencia čítania dát vysoká, dáta v teplomery sa nestihnú obnoviť. Teplotné dáta sú reprezentované 13-bitovým binárnym číslom s LSB. Jeden bit je rovný 0, 0625 ºC. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Teplotný register LM92.jpg|center|thumb|600px|Obr. 3. Teplotný register]]&lt;br /&gt;
&lt;br /&gt;
Ako vidíme na obr. 3, bity D0 až D2 sú stavové bity. Teplota je na D3 až D14 a D15 je znamienko. Ak D15 je 1, znamienko je -. Príklady reprezentácie teploty sú na obr. 4. Treba si uvedomiť, že ak prečítame tento register získame 16 bitov, čo nie je hneď konkrétna nameraná teplota. Ak chceme získať teplotu, musíme sa zbaviť stavových bitov D0 až D2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Digitálny vystup LM92.jpg|center|thumb|400px|Obr. 4. Digitálny výstup z teplomera]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spojenie LM92 s mikrokontrolérom Cypress ==&lt;br /&gt;
&lt;br /&gt;
Pre spojenie potrebujeme sériové rozhranie I2C, ktoré slúži na komunikáciu mikrokontroléra s teplomerom a napríklad RS232 rozhranie pre komunikáciu mikrokontroléra s počítačom, kde môžme získané informácie ďalej spracovávať a vyhodnocovať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RS232 ==&lt;br /&gt;
&lt;br /&gt;
Toto rozhranie zavedieme použitím hardvérového bloku UART, ktorý Cypress obsahuje. Rýchlosť komunikácie bude 19200Bd, čo znamená frekvenciu 153kHz. Keď chceme nastaviť túto frekvenciu, musíme deliť základnú frekvenciu Cypress 24Mhz/156. Použijeme delič frekvencie VC3, ktorý bude následne zdroj frekvencie pre UART. Pre príjímané dáta použijeme pin P0_4 a pre odosielané dáta použijeme pin P0_2. Konkrétne nastavenia bloku UART priamo v PSoC dizajneri sú na obr. 5. Na obr.6. je vidieť umiestnenie blokov UART s schéme zapojenia.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:nastavenia UART.jpg|center|thumb|400px|Obr. 5. Konkrétne nastavenia bloku UART]]&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Umiestnenie UART.jpg|center|thumb|400px|Obr. 6. Umiestnenie bloku UART v schéme zapojenia]]&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
Aj keď aj pre toto sériové rozhranie existuje hardéverový blok, rozhodli sme sa, že si naprogramujeme vlastný softvér pre implementáciu tohto rozhrania.&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5913</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5913"/>
		<updated>2010-06-25T09:28:00Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Popis pinov LM92.jpg|center|thumb|400px|Obr. 2. Popis pinov]]&lt;br /&gt;
&lt;br /&gt;
SDA – sériová obojsmerná dátová linka&lt;br /&gt;
&lt;br /&gt;
SCL – hodinový vstup&lt;br /&gt;
&lt;br /&gt;
T_CRIT_A – výstup alarmu pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
INT – výstup pre prerušenie&lt;br /&gt;
&lt;br /&gt;
GND – zem&lt;br /&gt;
&lt;br /&gt;
+Vs – napájanie&lt;br /&gt;
&lt;br /&gt;
A0 – A1 – nastavenie adresy&lt;br /&gt;
&lt;br /&gt;
'''Dátový formát teploty'''&lt;br /&gt;
&lt;br /&gt;
Teplotné dáta môžu byť čítané z teplomera alebo z registrov pre SetPointy; a zapisované do Setpoint registrov. Teplotné dáta môžu byť čítané kedykoľvek. Ak bude frekvencia čítania dát vysoká, dáta v teplomery sa nestihnú obnoviť. Teplotné dáta sú reprezentované 13-bitovým binárnym číslom s LSB. Jeden bit je rovný 0, 0625 ºC. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Teplotný register LM92.jpg|center|thumb|600px|Obr. 3. Teplotný register]]&lt;br /&gt;
&lt;br /&gt;
Ako vidíme na obr. 3, bity D0 až D2 sú stavové bity. Teplota je na D3 až D14 a D15 je znamienko. Ak D15 je 1, znamienko je -. Príklady reprezentácie teploty sú na obr. 4. Treba si uvedomiť, že ak prečítame tento register získame 16 bitov, čo nie je hneď konkrétna nameraná teplota. Ak chceme získať teplotu, musíme sa zbaviť stavových bitov D0 až D2.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Digitálny vystup LM92.jpg|center|thumb|400px|Obr. 4. Digitálny výstup z teplomera]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spojenie LM92 s mikrokontrolérom Cypress ==&lt;br /&gt;
&lt;br /&gt;
Pre spojenie potrebujeme sériové rozhranie I2C, ktoré slúži na komunikáciu mikrokontroléra s teplomerom a napríklad RS232 rozhranie pre komunikáciu mikrokontroléra s počítačom, kde môžme získané informácie ďalej spracovávať a vyhodnocovať.&lt;br /&gt;
&lt;br /&gt;
'''RS232'''&lt;br /&gt;
&lt;br /&gt;
Toto rozhranie zavedieme použitím hardvérového bloku UART, ktorý Cypress obsahuje. Rýchlosť komunikácie bude 19200Bd, čo znamená frekvenciu 153kHz. Keď chceme nastaviť túto frekvenciu, musíme deliť základnú frekvenciu Cypress 24Mhz/156. Použijeme delič frekvencie VC3, ktorý bude následne zdroj frekvencie pre UART. Pre príjímané dáta použijeme pin P0_4 a pre odosielané dáta použijeme pin P0_2. Konkrétne nastavenia bloku UART priamo v PSoC dizajneri sú na obr. 5. Na obr.6. je vidieť umiestnenie blokov UART s schéme zapojenia.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:nastavenia UART.jpg|center|thumb|400px|Obr. 5. Konkrétne nastavenia bloku UART]]&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Umiestnenie UART.jpg|center|thumb|400px|Obr. 6. Umiestnenie bloku UART v schéme zapojenia]]&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Umiestnenie_UART.jpg&amp;diff=5912</id>
		<title>Súbor:Umiestnenie UART.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Umiestnenie_UART.jpg&amp;diff=5912"/>
		<updated>2010-06-25T09:24:38Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Nastavenia_UART.jpg&amp;diff=5911</id>
		<title>Súbor:Nastavenia UART.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Nastavenia_UART.jpg&amp;diff=5911"/>
		<updated>2010-06-25T09:24:11Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5910</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5910"/>
		<updated>2010-06-25T09:12:24Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Popis pinov LM92.jpg|center|thumb|400px|Obr. 2. Popis pinov]]&lt;br /&gt;
&lt;br /&gt;
SDA – sériová obojsmerná dátová linka&lt;br /&gt;
&lt;br /&gt;
SCL – hodinový vstup&lt;br /&gt;
&lt;br /&gt;
T_CRIT_A – výstup alarmu pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
INT – výstup pre prerušenie&lt;br /&gt;
&lt;br /&gt;
GND – zem&lt;br /&gt;
&lt;br /&gt;
+Vs – napájanie&lt;br /&gt;
&lt;br /&gt;
A0 – A1 – nastavenie adresy&lt;br /&gt;
&lt;br /&gt;
'''Dátový formát teploty'''&lt;br /&gt;
&lt;br /&gt;
Teplotné dáta môžu byť čítané z teplomera alebo z registrov pre SetPointy; a zapisované do Setpoint registrov. Teplotné dáta môžu byť čítané kedykoľvek. Ak bude frekvencia čítania dát vysoká, dáta v teplomery sa nestihnú obnoviť. Teplotné dáta sú reprezentované 13-bitovým binárnym číslom s LSB. Jeden bit je rovný 0, 0625 ºC.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Teplotný register LM92.jpg|center|thumb|600px|Obr. 3. Teplotný register]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Digitálny vystup LM92.jpg|center|thumb|400px|Obr. 4. Digitálny výstup z teplomera]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spojenie LM92 s mikrokontrolérom Cypress ==&lt;br /&gt;
&lt;br /&gt;
Pre spojenie potrebujeme sériové rozhranie I2C, ktoré slúži na komunikáciu mikrokontroléra s teplomerom a napríklad RS232 rozhranie pre komunikáciu mikrokontroléra s počítačom, kde môžme získané informácie ďalej spracovávať a vyhodnocovať.&lt;br /&gt;
&lt;br /&gt;
'''RS232'''&lt;br /&gt;
&lt;br /&gt;
Toto rozhranie zavedieme použitím hardvérového bloku UART, ktorý Cypress obsahuje. Rýchlosť komunikácie bude 19200Bd, čo znamená frekvenciu 153kHz. Keď chceme nastaviť túto frekvenciu, musíme deliť základnú frekvenciu Cypress 24Mhz/156. Použijeme delič frekvencie VC3, ktorý bude následne zdroj frekvencie pre UART. Pre príjímané dáta použijeme pin P0_4 a pre odosielané dáta použijeme pin P0_2.&lt;br /&gt;
&lt;br /&gt;
'''Ďalšie nastavenia bloku UART'''&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5909</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5909"/>
		<updated>2010-06-25T08:55:13Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Popis pinov LM92.jpg|center|thumb|400px|Obr. 2. Popis pinov]]&lt;br /&gt;
&lt;br /&gt;
SDA – sériová obojsmerná dátová linka&lt;br /&gt;
&lt;br /&gt;
SCL – hodinový vstup&lt;br /&gt;
&lt;br /&gt;
T_CRIT_A – výstup alarmu pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
INT – výstup pre prerušenie&lt;br /&gt;
&lt;br /&gt;
GND – zem&lt;br /&gt;
&lt;br /&gt;
+Vs – napájanie&lt;br /&gt;
&lt;br /&gt;
A0 – A1 – nastavenie adresy&lt;br /&gt;
&lt;br /&gt;
'''Dátový formát teploty'''&lt;br /&gt;
&lt;br /&gt;
Teplotné dáta môžu byť čítané z teplomera alebo z registrov pre SetPointy; a zapisované do Setpoint registrov. Teplotné dáta môžu byť čítané kedykoľvek. Ak bude frekvencia čítania dát vysoká, dáta v teplomery sa nestihnú obnoviť. Teplotné dáta sú reprezentované 13-bitovým binárnym číslom s LSB. Jeden bit je rovný 0, 0625 ºC.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Teplotný register LM92.jpg|center|thumb|600px|Obr. 3. Teplotný register]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Digitálny vystup LM92.jpg|center|thumb|400px|Obr. 4. Digitálny výstup z teplomera]]&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5908</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5908"/>
		<updated>2010-06-25T08:53:07Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Popis pinov LM92.jpg|center|thumb|400px|Obr. 2. Popis pinov]]&lt;br /&gt;
&lt;br /&gt;
SDA – sériová obojsmerná dátová linka&lt;br /&gt;
&lt;br /&gt;
SCL – hodinový vstup&lt;br /&gt;
&lt;br /&gt;
T_CRIT_A – výstup alarmu pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
INT – výstup pre prerušenie&lt;br /&gt;
&lt;br /&gt;
GND – zem&lt;br /&gt;
&lt;br /&gt;
+Vs – napájanie&lt;br /&gt;
&lt;br /&gt;
A0 – A1 – nastavenie adresy&lt;br /&gt;
&lt;br /&gt;
'''Dátový formát teploty'''&lt;br /&gt;
&lt;br /&gt;
Teplotné dáta môžu byť čítané z teplomera alebo z registrov pre SetPointy; a zapisované do Setpoint registrov. Teplotné dáta môžu byť čítané kedykoľvek. Ak bude frekvencia čítania dát vysoká, dáta v teplomery sa nestihnú obnoviť. Teplotné dáta sú reprezentované 13-bitovým binárnym číslom s LSB. Jeden bit je rovný 0, 0625 ºC.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Teplotný register LM92.jpg|center|thumb|400px|Obr. 3. Teplotný register]]&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Digitálny vystup LM92.jpg|center|thumb|400px|Obr. 4. Digitálny výstup z teplomera]]&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Digit%C3%A1lny_vystup_LM92.jpg&amp;diff=5907</id>
		<title>Súbor:Digitálny vystup LM92.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Digit%C3%A1lny_vystup_LM92.jpg&amp;diff=5907"/>
		<updated>2010-06-25T08:50:10Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Teplotn%C3%BD_register_LM92.jpg&amp;diff=5906</id>
		<title>Súbor:Teplotný register LM92.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Teplotn%C3%BD_register_LM92.jpg&amp;diff=5906"/>
		<updated>2010-06-25T08:49:45Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5905</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5905"/>
		<updated>2010-06-25T08:47:04Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Popis pinov LM92.jpg|center|thumb|400px|Obr. 2. Popis pinov]]&lt;br /&gt;
&lt;br /&gt;
SDA – sériová obojsmerná dátová linka&lt;br /&gt;
&lt;br /&gt;
SCL – hodinový vstup&lt;br /&gt;
&lt;br /&gt;
T_CRIT_A – výstup alarmu pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
INT – výstup pre prerušenie&lt;br /&gt;
&lt;br /&gt;
GND – zem&lt;br /&gt;
&lt;br /&gt;
+Vs – napájanie&lt;br /&gt;
&lt;br /&gt;
A0 – A1 – nastavenie adresy&lt;br /&gt;
&lt;br /&gt;
'''Dátový formát teploty'''&lt;br /&gt;
&lt;br /&gt;
Teplotné dáta môžu byť čítané z teplomera alebo z registrov pre SetPointy; a zapisované do Setpoint registrov. Teplotné dáta môžu byť čítané kedykoľvek. Ak bude frekvencia čítania dát vysoká, dáta v teplomery sa nestihnú obnoviť. Teplotné dáta sú reprezentované 13-bitovým binárnym číslom s LSB. Jeden bit je rovný 0, 0625 ºC.&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5904</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5904"/>
		<updated>2010-06-25T08:42:48Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Popis pinov LM92.jpg|center|thumb|400px|Obr. 2. Popis pinov]]&lt;br /&gt;
&lt;br /&gt;
SDA – sériová obojsmerná dátová linka&lt;br /&gt;
&lt;br /&gt;
SCL – hodinový vstup&lt;br /&gt;
&lt;br /&gt;
T_CRIT_A – výstup alarmu pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
INT – výstup pre prerušenie&lt;br /&gt;
&lt;br /&gt;
GND – zem&lt;br /&gt;
&lt;br /&gt;
+Vs – napájanie&lt;br /&gt;
&lt;br /&gt;
A0 – A1 – nastavenie adresy&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5903</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5903"/>
		<updated>2010-06-25T08:42:03Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Popis pinov LM92.jpg|center|thumb|400px|Obr. 2. Popis pinov]]&lt;br /&gt;
&lt;br /&gt;
SDA – sériová obojsmerná dátová linka&lt;br /&gt;
SCL – hodinový vstup&lt;br /&gt;
T_CRIT_A – výstup alarmu pri kritickej teplote&lt;br /&gt;
INT – výstup pre prerušenie&lt;br /&gt;
GND – zem&lt;br /&gt;
+Vs – napájanie&lt;br /&gt;
A0 – A1 – nastavenie adresy&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Popis_pinov_LM92.jpg&amp;diff=5902</id>
		<title>Súbor:Popis pinov LM92.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Popis_pinov_LM92.jpg&amp;diff=5902"/>
		<updated>2010-06-25T08:39:29Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5901</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5901"/>
		<updated>2010-06-25T08:38:16Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;br /&gt;
&lt;br /&gt;
'''Charakteristické znaky'''&lt;br /&gt;
&lt;br /&gt;
-	jednoduchý dizajn&lt;br /&gt;
&lt;br /&gt;
-	zaznamenávanie a kontrola teploty&lt;br /&gt;
&lt;br /&gt;
-	sériové rozhranie&lt;br /&gt;
&lt;br /&gt;
-	výstup pre vypnutie systému pri kritickej teplote&lt;br /&gt;
&lt;br /&gt;
-	minimálna spotreba energie pri Shut-down móde&lt;br /&gt;
&lt;br /&gt;
-	až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu&lt;br /&gt;
&lt;br /&gt;
-	12 bitový znamienkový výstup&lt;br /&gt;
&lt;br /&gt;
-	Operuje až do 150 ºC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Špecifikácie'''&lt;br /&gt;
&lt;br /&gt;
-	napájanie 2,7V až 5,5V&lt;br /&gt;
&lt;br /&gt;
-	spotreba počas behu 350 μA&lt;br /&gt;
&lt;br /&gt;
-       spotreba počas shut-down 5 μA&lt;br /&gt;
&lt;br /&gt;
-	Rozlíšenie 0,0625 ºC&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5900</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5900"/>
		<updated>2010-06-25T08:35:24Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Bloková schéma LM92.jpg|center|thumb|400px|Obr. 1. Bloková schéma]]&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Blokov%C3%A1_sch%C3%A9ma_LM92.jpg&amp;diff=5895</id>
		<title>Súbor:Bloková schéma LM92.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Blokov%C3%A1_sch%C3%A9ma_LM92.jpg&amp;diff=5895"/>
		<updated>2010-06-25T08:14:08Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5894</id>
		<title>Meranie teploty pomocou LM92</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Meranie_teploty_pomocou_LM92&amp;diff=5894"/>
		<updated>2010-06-25T08:11:59Z</updated>

		<summary type="html">&lt;p&gt;Peto: Vytvorená stránka „== Teplotný snímač LM92 ==  '''Všeobecný popis'''  LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napáj…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teplotný snímač LM92 ==&lt;br /&gt;
&lt;br /&gt;
'''Všeobecný popis'''&lt;br /&gt;
&lt;br /&gt;
LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Konfigurovate%C4%BEn%C3%A9_mikroprocesorov%C3%A9_syst%C3%A9my&amp;diff=5893</id>
		<title>Konfigurovateľné mikroprocesorové systémy</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Konfigurovate%C4%BEn%C3%A9_mikroprocesorov%C3%A9_syst%C3%A9my&amp;diff=5893"/>
		<updated>2010-06-25T08:07:50Z</updated>

		<summary type="html">&lt;p&gt;Peto: /* Sériové komunikačné zbernice */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Mikroprocesorové systémy]]&lt;br /&gt;
[[Kategória:Študijné materiály]]&lt;br /&gt;
&amp;lt;properties&amp;gt;&lt;br /&gt;
Názov=Konfigurovateľné mikroprocesorové systémy&lt;br /&gt;
Forma=Prednáška a praktické cvičenia&lt;br /&gt;
Abstrakt=Všeobecnej architektúra počítača a mikrokontroléra, rozdiely a porovnanie. Návrh a tvorb hybridných elektronických systémov na báze mikrokontrolérov PSoC. Komunikácia mikrokontroléra s prostredím. Komunikačné protokoly a štandardy. Pripájanie a riadenie periférií.  &lt;br /&gt;
Rozvrh=3/0/2&lt;br /&gt;
Hodnotenie=Spracovanie projektu a skúška&lt;br /&gt;
Poznámky=Predmetom projektu môže byť téma podľa vlastného výberu z oblasti prednášky a/alebo cvičení spracovaná v písomnej elektronickej podobe a verejne publikovaná na serveri KiWiKi. Hodnotenie a poznámky k projektu budú verejné a zverejnené v diskusii k práci. Pri písaní článkov sa riadte [[Pomoc:Obsah | návodom]] s dôrazom na zadávanie vzťahov vo formáte kiwiki a korektné spracovanie obrázkov. &lt;br /&gt;
&amp;lt;/properties&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:150px;border: none; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
== Všeobecný úvod ==&lt;br /&gt;
* [[Od počítača k mikrokontroléru]]&lt;br /&gt;
* [[Architektúra všeobecného počítača]]&lt;br /&gt;
* [[Architektúra mikrokontroléra]]&lt;br /&gt;
* [[Prehľad aktuálneho stavu mikroprocesorových systémov]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:100px;border: none; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Úvod do technológie PSoC ==&lt;br /&gt;
* [[Prehľad architektúry PSoC]] &lt;br /&gt;
* [[Elektrické a mechanické parametre architektúry PSoC]]&lt;br /&gt;
* [[Vývojové prostredie pre systémy PSoC]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:100px;border: none; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Assembler M8C ==&lt;br /&gt;
* Štruktúra assembleru - Assembler M8C&lt;br /&gt;
* Pseudoinštrukcie assembleru - Assembler M8C&lt;br /&gt;
* Makrá - Assembler M8C&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:220px;border: none; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
== Inštrukcie procesora M8C ==&lt;br /&gt;
* [[Prehľad inštrukcií procesora M8C]]&lt;br /&gt;
* [[Inštrukcie presunu dát - M8C]]&lt;br /&gt;
* [[Aritmetické inštrukcie - M8C]]&lt;br /&gt;
* [[Logické inštrukcie - M8C]]&lt;br /&gt;
* [[Inštrukcie pre prácu zo zásobníkom - M8C]]&lt;br /&gt;
* [[Skoky a podprogramy - M8C]]&lt;br /&gt;
* Špeciálne inštrukcie - M8C&lt;br /&gt;
* Prerušenia - M8C&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:100px;border: none; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Programové konštrukcie assembleru M8C ==&lt;br /&gt;
* Konštrukcia IF-ELSE (assembler)&lt;br /&gt;
* Konštrukcia SWITCH-CASE (assembler)&lt;br /&gt;
* Cykly DO-WHILE, FOR-LOOP (assembler)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:180px;border: none; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GPIO - Všeobecne vstupy a výstupy  PSoC==&lt;br /&gt;
* [[Popis GPIO]]&lt;br /&gt;
* [[Konfigurácia GPIO pomocou designera obvodu]]&lt;br /&gt;
* [[Programová konfigurácia GPIO]]&lt;br /&gt;
* [[Módy portov (M8C)]]&lt;br /&gt;
* [[Pripojenie periférnych obvodov]]&lt;br /&gt;
* [[Pripojenie tlačítok a ošetrenie zákmitov]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:200px;border: none; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
== Sériová asynchrónna komunikácia - UART ==&lt;br /&gt;
* [[Historický vývoj UART]]&lt;br /&gt;
* [[Štandard RS232]]&lt;br /&gt;
* [[Štandard RS485]]&lt;br /&gt;
* [[Blok UART]]&lt;br /&gt;
* [[API UART]]&lt;br /&gt;
* Protokol MODBUS/uBUS&lt;br /&gt;
** [[Popis protokolu MODBUS/uBUS]]&lt;br /&gt;
** [[Implementácia protokolu MODBUS/uBUS]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:200px;border: 10px; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sériové komunikačné zbernice==&lt;br /&gt;
* [[Synchrónna komunikácia I2C]]&lt;br /&gt;
** [[Meranie teploty pomocou LM92]]&lt;br /&gt;
** [[Hodiny reálneho času]] &lt;br /&gt;
* [[Synchrónna komunikácia SPI]]&lt;br /&gt;
* Distribuovaný systém zber dát 1-Wire&lt;br /&gt;
** [[Protokol 1-Wire]]&lt;br /&gt;
** Meranie teploty pomocou teplomera DS18S20&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:250px;border: 10px; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Čítače, časovače a šírkové modulátory PSoC==&lt;br /&gt;
* Blok čítača a časovača (M8C)&lt;br /&gt;
* API čítača a časovača (M8C)&lt;br /&gt;
* Generovanie časových intervalov (M8C)&lt;br /&gt;
* Meranie času a frekvencie (M8C)&lt;br /&gt;
** [[Presné meranie kapacity]]&lt;br /&gt;
** Meranie polohy pomocou magnetostrikčného senzoru&lt;br /&gt;
* [[Šírkový modulátor PWM]]&lt;br /&gt;
* API PWM&lt;br /&gt;
** Riadenie modelárskeho servomotora pomocou PWM&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:250px;border: 10px; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
== Analógové spracovanie signálov ==&lt;br /&gt;
* [[Prevodníky ADC]]&lt;br /&gt;
** Aproximačné prevodníky&lt;br /&gt;
** [[Delta-Sigma prevodníky]]&lt;br /&gt;
* [[Prevodníky DAC]]&lt;br /&gt;
* [[Analógové spracovanie signálov - zosilňovače]]&lt;br /&gt;
* [[Analógové spracovanie signálov - komparátor]]&lt;br /&gt;
** Spracovanie prerušenia od komparátora&lt;br /&gt;
* [[Analógové spracovanie signálov - filtre]]&lt;br /&gt;
** Návrh a realizácia filtrov&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:150px;border: 10px; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Všeobecné zásady tvorby programov ==&lt;br /&gt;
* [[Všeobecné zásady tvorby programov - analýza]]&lt;br /&gt;
* [[Všeobecné zásady tvorby programov - návrh]] &lt;br /&gt;
* [[Všeobecné zásady tvorby programov - implementácia]]&lt;br /&gt;
* [[Všeobecné zásady tvorby programov - testovanie a ladenie programu]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:600px;  padding:15px;position:relative; text-align:left;height:150px;border: 10px; -moz-border-radius:15px;background-color: #F3F781;&amp;quot; &amp;gt;&lt;br /&gt;
== RC-5 ==&lt;br /&gt;
* [[Protokol RC-5]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Podklady k cvičeniam ==&lt;br /&gt;
# Binárne čísla&lt;br /&gt;
## Reprezentácia a formáty zobrazenia čísel&lt;br /&gt;
## Prevody medzi číselnými sústavami&lt;br /&gt;
## Matematické operácie s binárnymi číslami&lt;br /&gt;
# Vývojové prostredie PSoC&lt;br /&gt;
## Tvorba programov v PSoC Designer&lt;br /&gt;
## Vývojový kit CY3210&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=A/D_Prevodn%C3%ADk_s_dvojn%C3%A1sobnou_integr%C3%A1ciou&amp;diff=4246</id>
		<title>A/D Prevodník s dvojnásobnou integráciou</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=A/D_Prevodn%C3%ADk_s_dvojn%C3%A1sobnou_integr%C3%A1ciou&amp;diff=4246"/>
		<updated>2010-05-17T14:14:19Z</updated>

		<summary type="html">&lt;p&gt;Peto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== 1 Základná myšlienka ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Činnosť, resp. základnú myšlienku tohto typu prevodníka, si objasníme na obr. 1. Sú na ňom nakreslené dva zdroje napätia. Veľkosť napätia jedného z nich poznáme, ktoré sa rovná napr. 5 V. Napätie druhého zdroja nepoznáme a máme ho určiť meraním. Na meranie budeme používať RC obvod. Ak sa obidvoma vývodmi tohto obvodu budeme dotýkať v priebehu určitej relatívne krátkej doby Δt oboch pólov batérie s neznámym napätím, kondenzátor sa cez odpor R nabije na určité napätie, pričom počas nabíjania bude napätie na kondenzátore v čase lineárne narastať. Jeho priebeh vystihuje prvý graf na obr. 2. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Obr.7.jpg|center|thumb|400px|Obr. 1. Základná myšlienka na ktorej je založený prevodník s dvojitou integráciou]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Obr.2.jpg|center|thumb|400px|Obr. 2. Priebeh napätia na kondenzátore RC obvodu pri nabíjaní a vybíjaní v lineárnej oblasti]]&lt;br /&gt;
&lt;br /&gt;
Po uplynutí definovanej doby Δt odpojíme RC obvod od zdroja. Meranie pokračuje tak, že RC obvod s nabitým kondenzátorom pripojíme k opačnej polarite na druhý zdroj napätia so známym napätím U. Kondenzátor sa teraz začne vybíjať až na nulové napätie. Pri dlhodobejšom zapojení by sa začal nabíjať aj na opačnú polaritu. Nás však zaujíma vybíjanie len do okamihu, kým sa kondenzátor vybije na nulové napätie. Označme dobu úplného vybitia kondenzátora symbolom Δt'. Ak dokážeme zmerať dobu Δt', môžeme na jej základe určiť aj veľkosť neznámeho napätia. Proces opísaného nabíjania a následného vybíjania kondenzátora spojeného s rezistorom možno vyniesť aj do grafu, ktorý je na obrázku č.3. Na obrázku je aj znázornený spôsob merania vybíjacej doby Δt'. Tá sa určuje na základe počítania impulzov, ktoré vyprodukuje za uvedenú dobu generátor impulzov. Tento počet je označený ako ΔN'. Počítanie impulzov sa zastaví v čase, keď napätie na kondenzátore dosiahne presne nulovú hodnotu.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Obr.3.jpg|center|thumb|400px|Obr. 3. Priebeh nabíjania a vybíjania a podstata merania vybíjacej doby]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2 Prečo sa uvažovaný prevodník nazýva prevodníkom s dvojitou integráciou? ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
V podstate preto, že RC obvod je všeobecne známy. Využívajú sa jeho integračné vlastnosti. V minulosti bol veľmi rozšírený v analógových počítačoch. Faktom je, že napätie na kondenzátore, ktoré je priamo úmerné náboju na jeho doskách a je určené časovým integrálom pripojeného napätia na RC člen. Je teda&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;UC = k\int{Udt}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kde k je konštanta. V našom prípade môžeme integrál so vzorca vypustiť, nakoľko my vždy pripájame konštantné napätie. Z posledného vzťahu získame závislosť U(t) pri nabíjaní v tvare &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;UC = k U\Delta{t}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podobne jednoduché je to aj pri vybíjaní. Rozdiel je len v tom, že sa zmení polarita zdroja a kondenzátor nie je vybitý, ale nabitý, t.j. v začiatočnom stave je kondenzátor nabitý.  &lt;br /&gt;
&lt;br /&gt;
== 3 Praktická realizácia prevodníka s dvojitou integráciou ==&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Obr.6.jpg|center|thumb|400px|Obr. 4 Jednoduchá realizácia prevodníka]]&lt;br /&gt;
&lt;br /&gt;
Na obr. 4 je znázornená jednoduchá schéma takéhoto prevodníka. V kondenzátore C dochádza k akumulácií napätia. Komparátor vyhodnocuje na aké napätie je kondenzátor nabitý. Ak je na nabitý napätie zdroja U, prepne sa prepínač, kondenzátor sa začne vybíjať a obvod časovania meria tento čas. Výstupom je hodnota n, t.j. počet impulzov za čas vybíjania. &lt;br /&gt;
Na obr. 5. vidíme celkové usporiadanie takéhoto prevodníka. Impulzy z generátora G idú k čítaču Č cez logický AND. Ten sa otvorí len vtedy, ak mu vyšle riadiaca jednotka log. 1. Riadiaca jednotka pripája na RC obvod spomínané napätia prostredníctvom dvoch tranzistorov. Buď pripojí známe napätie alebo neznáme (merané) napätie. Tým sa kondenzátor raz nabíja a raz vybíja. Napätie na kondenzátore sleduje komparátor, ktorý dosiahnutie nulovej hodnoty tohto napätia hlási riadiacej jednotke. Tá dá povel na uzavretie spojenia medzi generátorom a čítačom, čo sa vykoná pomocou už spomínaného AND. Vtedy sa začne kondenzátor nabíjať. Ak dosiahne hodnotu napätia zdroja, zopne sa dolný tranzistor a kondenzátor sa začne vybíjať. Riadiacca jednotka otvorí spojenie medzi generátorom a čítačom. Tak sa na čítači získa počet impulzov ΔN', ktoré vzniknú počas vybíjania kondenzátora. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Obr.5.jpg|center|thumb|400px|Obr. 4. Celkové usporiadanie prevodníka s dvojitou integráciou]]&lt;br /&gt;
&lt;br /&gt;
V tomto obvode napätie na kondenzátore spočiatku narastá lineárne, ale neskôr sa  začne spomaľovať a nakoniec sa ustáli na hodnote napätia zdroja. Priebeh napätia na kondenzátore závisí aj od použitého odpou R. Ak použijeme veľký odpor, nárast napätia bude pomalý a naopak. Ak použijeme malý odpor, nárast napätia bude rýchly. Pri tomto prevodníku sa ale využíva lineárna časť charakteristiky pri nabíjaní aj vybíjaní. Riadiaca jednotka musí vysielať log. 1 len v čase od úplného nabitia po čas, keď má kondenzátor presnú nulu. Závisí od toho presnosť celého prevodníka.&lt;br /&gt;
&lt;br /&gt;
== Použitá literatúra ==&lt;br /&gt;
&lt;br /&gt;
1. BANÍK, Ivan Prevodníky. In Prevodníky. Bratislava : Vydavatelství STU, 2008 [cit. 2010-05-14]. Dostupné z WWW: &amp;lt;http://web.svf.stuba.sk/kat/FYZ/fyzika_ta_vola/skripta/other/prevodniky.pdf&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Peto</name></author>
		
	</entry>
</feed>