<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=21076&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-08-02T22:40:01+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=21076&amp;mode</id>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2018-08-02T22:40:01+01:00</updated>
<published>2018-08-02T22:40:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21076&amp;p=210368#p210368</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21076&amp;p=210368#p210368"/>
<title type="html"><![CDATA[Re: Problem z komunikacją I2C/TWI - HDC1080 + ATmega8A]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21076&amp;p=210368#p210368"><![CDATA[
1. Adres jest nie taki jak trzeba. Producent podaje 7-bitowy 0b1000000 = 0x40. Co oznacza, że trzeba użyć 0b10000000 = 0x80 do zapisu i 0b10000001 = 0x81 do odczytu.<br />2. Procedura odczytu powinna zawierać za funkcją _delay_ms jeszcze ponowne wywołanie i2cInit z adresem do odczytu<br />3. Po co liczby zmiennoprzecinkowe?<br />Zamiast:<br />[syntax=c]return (rawT / 65536.0) * 165.0 - 40.0;[/syntax]<br />można:<br />[syntax=c]return ( (rawT * 165UL)&gt;&gt;16 - 40 );[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 2 sie 2018, o 22:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[VaZZoN]]></name></author>
<updated>2018-08-02T21:10:06+01:00</updated>
<published>2018-08-02T21:10:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21076&amp;p=210367#p210367</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21076&amp;p=210367#p210367"/>
<title type="html"><![CDATA[Problem z komunikacją I2C/TWI - HDC1080 + ATmega8A]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21076&amp;p=210367#p210367"><![CDATA[
Witam,<br />Mam problem ze współpracą czujnika HDC1080 oraz uC ATmega8A. Kod robiłem wg. datasheet'a oraz przykładów, ale po walkach nadal nie działa. Po UART wypluwa ciągle 0x00.<br />Mój kod:<br />[syntax=c]void i2cInit(uint8_t address)<br />{<br />TWCR = 0;<br />TWCR = (1&lt;&lt;TWINT) | ( 1&lt;&lt;TWSTA) |  (1&lt;&lt;TWEN);<br />while (! (TWCR &amp; (1&lt;&lt;TWINT)));<br />TWDR = address;<br />TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);<br />while( !(TWCR &amp; (1&lt;&lt;TWINT)) );<br />}<br /><br />void i2cWrite(uint8_t data)<br />{<br />TWDR = data;<br />TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);<br />while (! (TWCR &amp; (1&lt;&lt;TWINT)));<br />}<br /><br />uint8_t i2cReadAck()<br />{<br />TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEA) | (1&lt;&lt;TWEN);<br />while (! (TWCR &amp; (1&lt;&lt;TWINT)));<br />return TWDR;<br />}<br /><br />uint8_t i2cReadNack()<br />{<br />TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);<br />while (! (TWCR &amp; (1&lt;&lt;TWINT)));<br />return TWDR;<br />}<br /><br />void i2cEnd()<br />{<br />TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTO);<br />}<br /><br />void hdc1080Begin()<br />{<br />i2cInit(0x40);<br />i2cWrite(0x02);//config<br />i2cWrite(0x10);<br />i2cWrite(0x00);<br />i2cEnd();<br />}<br /><br />uint16_t readData(uint8_t pointer)<br />{<br />i2cInit(0x40);<br />i2cWrite(pointer);<br /><br />_delay_ms(20);<br />uint8_t msb = i2cReadAck();<br />uint8_t lsb = i2cReadNack();<br /><br />UDR = msb;<br />UDR = lsb;<br /><br />return msb &lt;&lt; 8 | lsb;<br />}<br /><br />uint16_t hdc1080readTemp()<br />{<br />uint16_t rawT;<br />rawT = readData(0x00);<br />return (rawT / 65536.0) * 165.0 - 40.0;<br />}<br /><br />double hdc1080readHum()<br />{<br />uint16_t rawH = readData(0x01);<br />return (rawH / 65536.0) * 100.0;<br />}<br /><br />int main(void)<br />{<br />_delay_ms(20);<br />uartInit();<br /><br />hdc1080Begin();<br />uint16_t temp, hum;<br /><br />while (1)<br />{<br />temp = hdc1080readTemp();<br />hum = hdc1080readHum();<br />_delay_ms(5000);<br />}<br />}[/syntax]<br /><br />Nie wiem co jest nie tak, według mnie wszystko powinno śmigać. Gdzie robię błąd? Pomocy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7781">VaZZoN</a> — 2 sie 2018, o 21:10</p><hr />
]]></content>
</entry>
</feed>