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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-02-26T00:40:53+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=46&amp;t=16201&amp;mode</id>
<entry>
<author><name><![CDATA[cebulak]]></name></author>
<updated>2017-02-26T00:40:53+01:00</updated>
<published>2017-02-26T00:40:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=183544#p183544</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=183544#p183544"/>
<title type="html"><![CDATA[Re: ADC, ADS1232 i STM32 komunikacja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=183544#p183544"><![CDATA[
Dzięki problem rozwiązałem. Okazało się że miałem w przegródce ze stabilizatorami 3,3V zapodziany 5V z rozpędu nie sprawdziłem i ADS zasilany z 5V nie chciał się dogadać z STM32 na 3,3 V. Po zmianie wszystko zaczęło działać bez najmniejszych problemów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8325">cebulak</a> — 26 lut 2017, o 00:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojtekr51]]></name></author>
<updated>2017-02-22T16:47:47+01:00</updated>
<published>2017-02-22T16:47:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=183272#p183272</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=183272#p183272"/>
<title type="html"><![CDATA[Re: ADC, ADS1232 i STM32 komunikacja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=183272#p183272"><![CDATA[
Wykonanie tych kolejnych 25 taktów, jest może spowodowane nieprawidłowym wyzerowaniem flagi zdarzenia od zbocza opadającego DRDY/DOUT. Chodzi mi o linię 8 w pierwszym listingu, czy GPIO_PIN_3 określa to zdarzenie? W przebiegu który przedstawiłeś, widać że są w sumie 2 zbocza opadające DRDY/DOUT.<br /><br />Jeżeli chodzi o odczytywaną wartość, to zależy ona też od tego jak masz podłączone wejścia REFP i REFN.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1760">wojtekr51</a> — 22 lut 2017, o 16:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[cebulak]]></name></author>
<updated>2017-02-21T18:05:46+01:00</updated>
<published>2017-02-21T18:05:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=183188#p183188</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=183188#p183188"/>
<title type="html"><![CDATA[Re: ADC, ADS1232 i STM32 komunikacja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=183188#p183188"><![CDATA[
Odgrzewam może trochę stary temat ale właśnie powróciłem do walki z ADS 1232<br />Korzystając z tej informacji oraz dokumentacji ADS1232<br /><div class="quotetitle">wojtekr51 napisał(a):</div><div class="quotecontent"><br />Żeby odebrać dane czekasz aż układ zakończy konwersję napięcia. Po dokonaniu konwersji na linii DOUT/DRDY pojawi się stan wysoki. Potem z tej samej linii odczytujesz 24 bity. Taktujesz sygnałem SCLK tylko odbieranie bitów. Jeżeli po odebraniu 24 bitów zrobisz jeszcze jeden dodatkowy takt to układ dokonuje wewnętrznej kalibracji i następny odczyt napięcia jest opóźniony. Tak mniej więcej to wygląda.<br /></div><br />Poszedłem tym tropem w między czasie poprawiłem zdolności rozumienia dokumentacji i korzystając z tego<br /><a href="https://obrazkiforum.atnel.pl/8325/a4d320089a5c8e6c48518c37609044e6.JPG"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/8325/a4d320089a5c8e6c48518c37609044e6.JPG" alt="Obrazek" /></a><br />Stworzyłem następujący<br />[syntax=c]/* USER CODE BEGIN 0 */<br />void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){<br />if(GPIO_Pin == ADS_DIN_Pin){<br />for(int i=0;i&lt;25;i++){<br />HAL_GPIO_WritePin(GPIOC, ADS_SCK_Pin, GPIO_PIN_SET);<br />HAL_GPIO_WritePin(GPIOC, ADS_SCK_Pin, GPIO_PIN_RESET);<br />}<br />__HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_3);<br />}<br />}<br />/* USER CODE END 0 */[/syntax]<br />Inicjalizacja spod CubeMX więc błędów raczej nie ma:<br />[syntax=c]/*Configure GPIO pin : ADS_DIN_Pin */<br />  GPIO_InitStruct.Pin = ADS_DIN_Pin;<br />  GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;<br />  GPIO_InitStruct.Pull = GPIO_NOPULL;<br />  HAL_GPIO_Init(ADS_DIN_GPIO_Port, &amp;GPIO_InitStruct);[/syntax]<br />Sprawdzam sobie analizatorem logicznym i otrzymuje następujący efekt:<br /><a href="https://obrazkiforum.atnel.pl/8325/5e59c73331eccc527540c20f66e8d0a5.JPG"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/8325/5e59c73331eccc527540c20f66e8d0a5.JPG" alt="Obrazek" /></a><br />Do obsługi wykorzystuje tylko dwie linie SCK i DRDY/DOUT. Pojawia mi się na pinie przerwania stan niski, skoro mam falling edge trigger przerwanie się wyzwala i podaje 25 taktów zegara 24 do odczytu bitów i ostatni do tego żeby wymusić stan wysoki na wyjściu z ADS'a. Co zaznaczyłem na czerwono na obrazku, niestety nie wiem skąd bierze mi się kolejne 25 taktów zegara, gdzieś zrobiłem błąd tylko nie wiem gdzie, więc proszę o pomoc. <br />Jest w sumie jeszcze druga sprawa a mianowicie sam odczyt mam spięte piny ainn i ainp razem to nie powinienem dostać samych zer? Tu akurat może wina montażu lutowania + płytki stykowej.<br /><br />PS. 1 Szczerze mówiąc nie widzę tego aby komunikacja z ADS1232 była po I2C, no chyba że jestem ślepy i ktoś mnie oświeci<br />PS. 2. Dzięki za bibliotekę, ale wolę sam od początku do końca napisać kod aby w pełni go rozumieć w przypadku gdy robię to w celach zwiększania swojej wiedzy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8325">cebulak</a> — 21 lut 2017, o 18:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krafin]]></name></author>
<updated>2016-09-14T01:11:28+01:00</updated>
<published>2016-09-14T01:11:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=168700#p168700</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=168700#p168700"/>
<title type="html"><![CDATA[Re: ADC, ADS1232 i STM32 komunikacja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=168700#p168700"><![CDATA[
Podsyłam nawet małą bibliotekę do obsługi co prawda ADS1234 ale to praktycznie to samo. Napisana trochę na szybko bo była taka potrzeba ale nawet działa. Zwraca wynik obcięty do 19 bitów, dalej przy wzmocnieniu 128x to i tak większość szumu. I nie ma obsługi zmiany kanału musiałbyś sobie dopisać mi wtedy nie było potrzebne.<br />ads1234.h:<br />[syntax=c]/*<br /> * ads123x.h<br /> *<br /> *  Created on: Mar 4, 2016<br /> *      Author: Rafal<br /> */<br /><br />#ifndef ADS123X_H_<br />#define ADS123X_H_<br /><br /><br /><br />#endif /* ADS123X_H_ */<br /><br /><br />#define GAIN0_SET GPIOB-&gt;BSRR = (1&lt;&lt;7)<br />#define GAIN0_RESET GPIOB-&gt;BRR = (1&lt;&lt;7)<br /><br />#define GAIN1_SET GPIOB-&gt;BSRR = (1&lt;&lt;6)<br />#define GAIN1_RESET GPIOB-&gt;BRR = (1&lt;&lt;6)<br /><br />#define SPEED_SET GPIOB-&gt;BSRR = (1&lt;&lt;5)<br />#define SPEED_RESET GPIOB-&gt;BRR = (1&lt;&lt;5)<br /><br />#define PDWN_SET GPIOA-&gt;BSRR = (1&lt;&lt;15)<br />#define PDWN_RESET GPIOA-&gt;BRR = (1&lt;&lt;15)<br /><br />#define SCK_SET GPIOB-&gt;BSRR = (1&lt;&lt;3)<br />#define SCK_RESET GPIOB-&gt;BRR = (1&lt;&lt;3)<br /><br />#define SDO_IN (GPIOB-&gt;IDR &amp; (1&lt;&lt;4))<br /><br />typedef enum{<br />ads_10SPS,<br />ads_80SPS<br />}ADS_SPEED;<br /><br />typedef enum{<br />ads_1x,<br />ads_2x,<br />ads_64x,<br />ads_128x<br />}ADS_GAIN;<br /><br />void adsInit();<br />void adsSetSpeed(ADS_SPEED speed);<br />void adsSetGain(ADS_GAIN gain);<br />void adsCalibration();<br />int32_t adsRead();<br />uint8_t adsStatus();<br />void adsDataRead_callback(void(*callback)(int32_t));<br />void adsStart();<br />void adsStop();<br />void ADS_EVENT();[/syntax]<br /><br />ads1234.c:<br />[syntax=c]/*<br /> * ads123x.c<br /> *<br /> *  Created on: Mar 4, 2016<br /> *      Author: Rafal<br /> */<br /><br /><br />#include &quot;stm32f0xx.h&quot;<br />#include &quot;ads123x.h&quot;<br /><br />uint8_t status;<br />uint8_t cal_start;<br />void(*read_callback)(int32_t);<br /><br />static inline void _delay(uint8_t n){<br />while(n--);<br />}<br /><br />void adsInit(){<br />GPIOB-&gt;MODER |= GPIO_MODER_MODER3_0 | GPIO_MODER_MODER5_0 | GPIO_MODER_MODER6_0 | GPIO_MODER_MODER7_0;<br />GPIOA-&gt;MODER |= GPIO_MODER_MODER15_0;<br />SCK_RESET;<br />PDWN_RESET;<br />adsSetGain(ads_128x);<br />adsSetSpeed(ads_10SPS);<br />}<br /><br />void adsSetSpeed(ADS_SPEED speed){<br />if(speed == ads_10SPS) SPEED_RESET;<br />else SPEED_SET;<br />}<br /><br />void adsSetGain(ADS_GAIN gain){<br />switch (gain){<br />case ads_1x:<br />GAIN0_RESET;<br />GAIN1_RESET;<br />case ads_2x:<br />GAIN0_SET;<br />GAIN1_RESET;<br />case ads_64x:<br />GAIN0_RESET;<br />GAIN1_SET;<br />case ads_128x:<br />GAIN0_SET;<br />GAIN1_SET;<br />}<br />}<br />void adsCalibration(){<br />for(uint8_t i = 0; i &lt; 26; i++){<br />SCK_SET;<br />_delay(5);<br />SCK_RESET;<br />_delay(5);<br />}<br /><br />cal_start = 100;<br />status |= (1&lt;&lt;1);<br />}<br /><br />int32_t adsRead(){<br />uint32_t tmp = 0;<br /><br />for(uint8_t i = 0; i &lt; 24; i++){<br />tmp &lt;&lt;= 1;<br />SCK_SET;<br />_delay(5);<br />if(SDO_IN) tmp |= 1;<br />SCK_RESET;<br />_delay(5);<br />}<br />SCK_SET;<br />_delay(5);<br />SCK_RESET;<br />tmp &gt;&gt;= 5;<br />if(tmp &amp; (1&lt;&lt;18)) tmp |= 0xfff80000;<br />return tmp;<br />}<br /><br />uint8_t adsStatus(){<br />return status;<br />}<br /><br />void adsDataRead_callback(void(*callback)(int32_t)){<br />read_callback = callback;<br />}<br /><br />void adsStart(){<br />status = 0;<br />PDWN_SET;<br />adsCalibration();<br />}<br /><br />void adsStop(){<br />status |= (1&lt;&lt;3);<br />PDWN_RESET;<br />}<br /><br />void ADS_EVENT(){<br />static uint8_t timeout;<br />if(status &amp; (1&lt;&lt;1)){<br />cal_start--;<br />if((!cal_start) &amp;&amp; SDO_IN){<br />status |= (1&lt;&lt;2);<br />status &amp;= ~(1&lt;&lt;1);<br />}<br />else{<br />status &amp;= ~((1&lt;&lt;1) | (1&lt;&lt;2));<br />}<br />}<br /><br />if(!(status &amp; (1&lt;&lt;3)) &amp;&amp; !SDO_IN){<br />int32_t data = adsRead();<br />if(read_callback) read_callback(data);<br />timeout = 15;<br />status &amp;= ~(1&lt;&lt;0);<br />}<br /><br />if(timeout){<br />timeout--;<br />if(!timeout) status |= (1&lt;&lt;0);<br />}<br />}[/syntax]<br /><br />i obsługa:<br />[syntax=c]int main(void)<br />{<br />        iwdgSet();<br />rs485Init();<br />rs485NewData_callback(*rs485NewData);<br />adsInit();<br />adsDataRead_callback(*adsNewData);<br />adsStart();<br /><br />SystemCoreClockUpdate();<br />SysTick_Config(SystemCoreClock / 1000); //event every 1 ms<br />  while (1)<br />  {<br />  if(!tim1){<br />  tim1 = 10;<br />  ADS_EVENT(); //call ads_event every 10ms<br />  }<br />  RS485_EVENT();<br />  IWDG-&gt;KR = 0xaaaa;<br />  }<br />  return 0;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=487">krafin</a> — 14 wrz 2016, o 01:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojtekr51]]></name></author>
<updated>2016-09-13T21:54:32+01:00</updated>
<published>2016-09-13T21:54:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=168691#p168691</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=168691#p168691"/>
<title type="html"><![CDATA[Re: ADC, ADS1232 i STM32 komunikacja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=168691#p168691"><![CDATA[
Żeby odebrać dane czekasz aż układ zakończy konwersję napięcia. Po dokonaniu konwersji na linii DOUT/DRDY pojawi się stan wysoki. Potem z tej samej linii odczytujesz 24 bity. Taktujesz sygnałem SCLK tylko odbieranie bitów. Jeżeli po odebraniu 24 bitów zrobisz jeszcze jeden dodatkowy takt to układ dokonuje wewnętrznej kalibracji i następny odczyt napięcia jest opóźniony. Tak mniej więcej to wygląda.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1760">wojtekr51</a> — 13 wrz 2016, o 21:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[HomoChemicus]]></name></author>
<updated>2016-09-13T21:16:05+01:00</updated>
<published>2016-09-13T21:16:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=168685#p168685</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=168685#p168685"/>
<title type="html"><![CDATA[Re: ADC, ADS1232 i STM32 komunikacja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=168685#p168685"><![CDATA[
Jaki masz konkretnie uC? Nawet F030 ma 2x I2C.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10470">HomoChemicus</a> — 13 wrz 2016, o 21:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[cebulak]]></name></author>
<updated>2016-09-13T20:06:24+01:00</updated>
<published>2016-09-13T20:06:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=168679#p168679</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=168679#p168679"/>
<title type="html"><![CDATA[ADC, ADS1232 i STM32 komunikacja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16201&amp;p=168679#p168679"><![CDATA[
Jak to jest z komunikacją między ADS1232 (two wire serial interface) a STM32. Generalnie się zastanawiałem nad wykorzystaniem sprzętowego SPI ale tutaj mamy więcej przewodów czyli chyba raczej odpada, chyba że się jakoś da to zrobić. Rozwiązanie jakie widzę na ten moment to zrobienie komunikacji softwarem. Tylko tak jak przetwornik ADC wykonuje 80 pomiarów (lub 10) w ciągu sekundy to jak jest z czasem odbieranego sygnału. To jak wygląda kwestia odbioru tego sygnału w sensie czy muszę odebrać wszystkie pomiary. W sensie wyzwalam start &quot;nadawania&quot; przez ADS1232 potem generuje &quot;sygnały zegarowy&quot; o długości każdego stanu 1ms, po kolei odbieramy bity nadawane przez ADC i zapisuje do zmiennej. Czy ADS1232 przechowuje jakoś wynik konwersji czy bezspośrednio wysyła na output dane bez żadnego bufora, chodzi o to że czy istnieje możliwość, że jakieś dane zgubie albo odczytam jeden bit jako dwa itp. Tak jak patrze na to co napisałem to wystarczyłoby przetestować i wszystko byłoby jasne tylko nie wiem jak skontrolować czy otrzymany wynik jest poprawny, jest na to jakiś sposób, bo teraz nic mi do głowy nie przychodzi.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8325">cebulak</a> — 13 wrz 2016, o 20:06</p><hr />
]]></content>
</entry>
</feed>