<?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=46&amp;t=17735&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-02-28T21:49:27+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=46&amp;t=17735&amp;mode</id>
<entry>
<author><name><![CDATA[RafPe]]></name></author>
<updated>2017-02-28T21:49:27+01:00</updated>
<published>2017-02-28T21:49:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17735&amp;p=183801#p183801</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17735&amp;p=183801#p183801"/>
<title type="html"><![CDATA[Re: [DISCOVERY][I2C] Problem z I2C (SCCB) i OV7670]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17735&amp;p=183801#p183801"><![CDATA[
@anonimowy - miales racje! <br /><br /><div class="quotetitle">anonimowy napisał(a):</div><div class="quotecontent"><br />U Ciebie brakuje ACK po komendzie odczytu, podejrzewam, że z powodu tej prędkości.<br /></div><br /><br />sprawdzilem to dokladniej i przyjrzalem sie w koncu jakie mam czasy panujace na lini i rzeczywiscie byly daleko od przyjetych. Zmieniajac wartosci rejestru udalo mi sie dopasowac do predkosci I2C <br /><br /><a href="https://obrazkiforum.atnel.pl/4344/0ac7f01d8f737dffb0f630e71546fa2a.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/4344/0ac7f01d8f737dffb0f630e71546fa2a.png" alt="Obrazek" /></a><br /><br />Zmiany musialem dokonac tutaj <br />[syntax=c]/*<br /> * Depending on the frequency of said prescaler must be installed in<br /> * accordance with the selected data rate.<br /> * We choose the maximum, for standard mode - 100 kHz:<br /> *<br /> *  2MHz / 100 = 20 kHz;<br /> *<br /> *  20 = 400Khz<br /> *  80 - 100Khz<br /> */<br />I2C1-&gt;CCR &amp;= ~I2C_CCR_CCR;<br />I2C1-&gt;CCR |= 80;[/syntax]<br /><br />Zastanawia mnie w tym wypadku jednak jaka tam panuje na tej szynie czestotliwosc. Patrzac na domyslne ustawienia zegara w Cube wychodzi cos takiego<br /><br /><a href="https://obrazkiforum.atnel.pl/4344/70abd065335ffb61cd2857520b8b8473.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/4344/70abd065335ffb61cd2857520b8b8473.png" alt="Obrazek" /></a><br /><br />Ale biorac pod uwage jak musialem zmienic ustawienie wychodzi inaczej ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4344">RafPe</a> — 28 lut 2017, o 21:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anonimowy]]></name></author>
<updated>2017-02-27T21:15:35+01:00</updated>
<published>2017-02-27T21:15:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17735&amp;p=183715#p183715</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17735&amp;p=183715#p183715"/>
<title type="html"><![CDATA[Re: [DISCOVERY][I2C] Problem z I2C (SCCB) i OV7670]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17735&amp;p=183715#p183715"><![CDATA[
Jaką masz częstotliwość i2c? Z tego co widze po przebiegach około 800kHz, kamera ta ma max 400kHz. <br /><br />Tutaj masz jak wygląda u mnie poprawny odczyt jednego rejestru:<br /><a href="https://obrazkiforum.atnel.pl/3542/0e5bcc63fc00164ee28b662e4fe45dfa.PNG"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/3542/0e5bcc63fc00164ee28b662e4fe45dfa.PNG" alt="Obrazek" /></a><br /><br />U Ciebie brakuje ACK po komendzie odczytu, podejrzewam, że z powodu tej prędkości.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3542">anonimowy</a> — 27 lut 2017, o 21:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RafPe]]></name></author>
<updated>2017-02-26T13:42:48+01:00</updated>
<published>2017-02-26T13:42:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17735&amp;p=183570#p183570</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17735&amp;p=183570#p183570"/>
<title type="html"><![CDATA[[DISCOVERY][I2C] Problem z I2C (SCCB) i OV7670]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17735&amp;p=183570#p183570"><![CDATA[
Hej wszystkim! <br /><br />Dostala mi sie w rece kamera OV7670 i postanowilem sprobowac swoich sil w opracowaniu jej przy pomocy disco407. Bazujac na poradniku STM32/Reference Manual i DS udalo mi sie zaimplementowac podstawowy I2C , ktory potwierdzilem , ze dziala ( uzywajac AT42Q1070 ) <br /><br />Na chwile probuje odczytac jeden bajt zeby na tej podstawie zajac sie urzadzeniem dalej. Na chwile obecna wyglada to niestety tak <br /><br /><a href="https://obrazkiforum.atnel.pl/4344/8dd4b31326827400c7c391c13f6e9003.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/4344/8dd4b31326827400c7c391c13f6e9003.png" alt="Obrazek" /></a><br /><br />Wydaje mi sie , ze jest cos czego nie doczytalem lub cos co przeoczylem i gdyby ktos mogl podrzucic jakas wskazowke byloby super! <br /><br />Kod ktorego teraz uzywam <br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 12 Feb 2017<br /> *      Author: rafpe<br /> */<br /><br />#include &quot;stm32f4xx.h&quot;<br />#include &quot;stm32f407xx.h&quot;<br /><br />#define OV_SCCB_ADDRESS   0x21<br />#define OV_SCCB_ADDRESS_W 0x42<br />#define OV_SCCB_ADDRESS_R 0x43<br /><br />#define QT_DEVICE_ID            0x2E    // Chip ID (read from device-address 0)<br />#define QT_I2C_ADDRESS          0x1B    // Qtouch device ID<br />#define QT_I2C_ADDRESS_W        (QT_I2C_ADDRESS &lt;&lt; 1)     // Definicja adresu I2C tzw SLA+W<br />#define QT_I2C_ADDRESS_R        ((QT_I2C_ADDRESS &lt;&lt;1)|1)  // Definicja adresu I2C tzw SLA+R<br />#define QT_CONFIG_ADDR          32                          // Adres od ktorego mozemy uzyc struktury do konfiguracji do odczytu z I2C<br /><br />#define TIMEOUT_MAX  10000<br /><br /><br />uint8_t addr7w,addr7r;<br />uint32_t reg1,reg2;<br /><br />void mc02_init(void);<br />void i2c_setup(void);<br />void rcc_init(void);<br />void i2c_init(void);<br />uint8_t i2c_read(uint8_t address, uint8_t registry);<br /><br />void i2c_set_addr7(uint8_t addr)<br />{<br />addr7w = addr &lt;&lt; 1;<br />addr7r = addr7w | 1;<br />}<br /><br />void rcc_init(void)<br />{<br /><br />RCC-&gt;AHB1ENR |= RCC_AHB1ENR_GPIOBEN|// Enable clock: GPIOB<br />RCC_AHB1ENR_GPIOCEN;// Enable clock: GPIOC<br />RCC-&gt;APB1ENR |= RCC_APB1ENR_I2C1EN;// Enable clock: I2C1<br /><br />__DSB();// Data Synchronization Barrier<br /><br />}<br /><br />void mc02_init(void)<br />{<br />/*<br /> *  Enable SYSCLK output to PC9<br /> */<br />GPIOC-&gt;MODER |= GPIO_MODER_MODER9_1 ;   // AF: PC9 =&gt; MCO2<br />}<br /><br />void i2c_setup(void)<br />{<br />GPIOB-&gt;MODER |= GPIO_MODER_MODER6_1 |   // AF: PB6 =&gt; I2C1_SCL<br />GPIO_MODER_MODER7_1; // AF: PB7 =&gt; I2C1_SDA<br /><br /><br />GPIOB-&gt;OTYPER |= GPIO_OTYPER_OT_6|<br /> GPIO_OTYPER_OT_7;<br /><br />GPIOB-&gt;OSPEEDR |= GPIO_OSPEEDER_OSPEEDR6|<br />  GPIO_OSPEEDER_OSPEEDR7;<br /><br />GPIOB-&gt;PUPDR |= GPIO_PUPDR_PUPDR6_0|<br />GPIO_PUPDR_PUPDR7_0;<br /><br />/*<br /> * Alternate functions are configured in ARFL for PINS 0..7<br /> * and in ARFH for PINS 8..15<br /> * Based on DS we will select appropiate AF0..AF7<br /> */<br />GPIOB-&gt;AFR&#91;0&#93; |= ( 1 &lt;&lt; 30 ) | ( 1 &lt;&lt; 26); // P6/P7 =&gt; AF4<br />}<br /><br />void i2c_init(void)<br />{<br />/*<br /> * FREQ: Set frequencey based on APB1 clock<br /> * when using HSI@8MHz this is 2MHz<br /> */<br />I2C1-&gt;CR2 |= 0x02;<br /><br />/*<br /> * Depending on the frequency of said prescaler must be installed in<br /> * accordance with the selected data rate.<br /> * We choose the maximum, for standard mode - 100 kHz:<br /> *<br /> *  2MHz / 100 = 10 kHz;<br /> *<br /> */<br />I2C1-&gt;CCR &amp;= ~I2C_CCR_CCR;<br />I2C1-&gt;CCR |= 10;<br /><br />/*<br /> * clock period is equal to (1 / 2 MHz = 500 ns), therefore the maximum rise time:<br /> * 1000 ns / 500 ns = 2 + 1 (plus one - a small margin) = 3<br /> *<br /> */<br />I2C1-&gt;TRISE = 3;<br /><br /><br />/*<br /> * Enable perifpherial at the END<br /> */<br />I2C1-&gt;CR1 = I2C_CR1_ACK|<br />I2C_CR1_PE;     // PE : Peripherial enable<br />}<br /><br />uint8_t i2c_read(uint8_t address, uint8_t registry)<br />{<br />uint32_t timeout = TIMEOUT_MAX;<br /><br />while(I2C1-&gt;SR2 &amp; I2C_SR2_BUSY);// Wait for BUSY line<br /><br /><br />I2C1-&gt;CR1 |= I2C_CR1_START;// Generate START condition<br /><br />while (!(I2C1-&gt;SR1 &amp; I2C_SR1_SB)); // Wait for EV5<br />I2C1-&gt;DR = address&lt;&lt;1;// Write device address (W)<br /><br />while (!(I2C1-&gt;SR1 &amp; I2C_SR1_ADDR));// Wait for EV6<br />    reg2 = I2C1-&gt;SR2;// Read SR2<br /><br />while (!(I2C1-&gt;SR1 &amp; I2C_SR1_TXE));// Wait for EV8_1<br />I2C1-&gt;DR = registry;<br /><br />I2C1-&gt;CR1 |= I2C_CR1_STOP;// Generate STOP condition<br /><br /><br /><br /><br /><br />I2C1-&gt;CR1 |= I2C_CR1_START;// Generate START condition<br /><br />while (!(I2C1-&gt;SR1 &amp; I2C_SR1_SB)); // Wait for EV5<br />I2C1-&gt;DR = (address &lt;&lt; 1 ) | 1;// Write device address (R)<br /><br />while (!(I2C1-&gt;SR1 &amp; I2C_SR1_ADDR));// Wait for EV6<br />    reg2 = I2C1-&gt;SR2;<br /><br />I2C1-&gt;SR1 &amp;= ~I2C_SR1_AF;// Clear AF<br />uint32_t value = I2C1-&gt;DR;// Read value<br /><br /><br />I2C1-&gt;CR1 |= I2C_CR1_STOP;// Generate STOP condition<br /><br />return value;<br /><br />}<br /><br /><br /><br />int main(void)<br />{<br /><br />rcc_init();// Peripherial init<br />mc02_init();// SYSCLK to PC9<br /><br />i2c_setup();// Setup I2C<br />i2c_init();// Init  I2C<br /><br /><br /><br />i2c_read(OV_SCCB_ADDRESS, 0x6B);<br /><br /><br /><br />while(1)<br />{<br /><br /><br /><br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4344">RafPe</a> — 26 lut 2017, o 13:42</p><hr />
]]></content>
</entry>
</feed>