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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2021-03-05T00:35:49+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=23645&amp;mode</id>
<entry>
<author><name><![CDATA[Mario17]]></name></author>
<updated>2021-03-05T00:35:49+01:00</updated>
<published>2021-03-05T00:35:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23645&amp;p=231289#p231289</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23645&amp;p=231289#p231289"/>
<title type="html"><![CDATA[Re: Komunikacja z AD7192 przez Soft SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23645&amp;p=231289#p231289"><![CDATA[
Aktywnym zboczem dla ADC jest zbocze opadające ale dopiero przy zboczu narastającym dane są poprawne. Strona 11, opis pinu DOUT/RDY.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3695">Mario17</a> — 5 mar 2021, o 00:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[faber33]]></name></author>
<updated>2021-03-04T17:34:54+01:00</updated>
<published>2021-03-04T17:34:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23645&amp;p=231284#p231284</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23645&amp;p=231284#p231284"/>
<title type="html"><![CDATA[Komunikacja z AD7192 przez Soft SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23645&amp;p=231284#p231284"><![CDATA[
Witam. Panowie potrzebuje pomocy  <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> . Mianowicie próbuje okiełznać komunikację z ADC AD7192 przez programowe SPI (Biblioteka do SPI od Mirka).<br /><br />Czytając notę katalogową wychodzi mi że:<br />&quot; The SCLK active edge is the falling edge of SCLK. &quot; - strona 7 czyli aktywnym zboczem jest zbocze opadające ?<br />W stanie nie aktywność SCLK ma być w stanie wysokim, i od najstarszego bitu czyli MSB -  strona 8 <br /><br />Według tego wychodzi że trzeba ustawić w bibliotece MK_SPI:<br />czyli PHASE na  0  I POLARITY NA 1<br /><br />[syntax=c]#define USE_SOFT_SPI 1// 1-tryb Software SPI, 0-tryb Hardware SPI<br /><br />#define SEND_ONLY0// 1-jeśli mają być tylko wysyłane dane, linia MISO nie używana (tylko dla trybu MASTER)<br /><br />/* PINY dla SPI, w przypadku SOFT SPI mogą być dowolne na dowolnym porcie! */<br />#define aSS           PA4                     // SS (CS Chip Select)<br />#define aMOSI    PA7                     // MOSI pin<br />#define aMISO    PA6                     // MISO pin<br />#define aSCK     PA5                     // SCK pin<br /><br /><br />#define MOSI_DIRDDRA// jeśli używasz hardware SPI<br />#define MOSI_PORTPORTA// wystarczy skonfigurować tylko te dwie linie<br /><br />//------------------------------- część konfiguracji tylko na potrzeby soft spi ---<br />#define MISO_DIRDDRA<br />#define MISO_PORTPORTA<br />#define MISO_PINPINA<br /><br />#define SCK_DIRDDRA<br />#define SCK_PORTPORTA<br />//-------------------------------- koniec ------------------------<br /><br />#define SS_DIRDDRA<br />#define SS_PORTPORTA<br /><br /><br />#define SCK_SPEEDSCK_FOSC_DIV_128// taktowanie SPI<br /><br />#defineSPI_DATA_ORDERMSB_FIRST// MSB_FIRST (default), LSB_FIRST<br />#define SCK_POLARITY 1// 0-Low when idle (default), 1-High when idle<br />#define SCK_PHASE0// 0-Data Sampled on First Edge (default), 1-Data Sampled on Second Edge<br /><br />#define MASTER_SPI_DELAY_US0<br />***********************************[/syntax]<br /><br /><br />No teraz zacząłem  pisać  sobie bibliotekę do odczytu/zapisu tego układu:<br /><br />AD7192_def.h<br />[syntax=c]/** @nameRegister adresses of the AD7192 (from RS2, RS1, RS0 Bits)*/<br />/*@{*/<br />#define COMM0<br />#define STATUS  0<br />#define MODE1<br />#define CONF    2<br />#define DATA    3<br />#define ID      4<br />#define GPOCON  5<br />#define OFFSET  6<br />#define FULLSC  7<br />/*@}*/<br /><br />/** @nameBitdefinitions within the registers */<br />/*@{*/<br /><br />/** @detailsBitdefinition of COMM */<br />#define WEN     7<br />#define RW      6<br />#define RS2     5<br />#define RS1     4<br />#define RS0     3<br />#define CREAD   2<br /><br />/*@}*/[/syntax]<br /><br /><br />AD7192.h<br />[syntax=c]bool AD7192_writeToRegister(uint8_t regAddr);<br /><br />bool AD7192_readFromRegister(uint8_t regAddr);<br /><br />uint32_t AD7192_getConfReg();[/syntax]<br /><br /><br />AD7192.c<br />[syntax=c]bool AD7192_writeToRegister(uint8_t regAddr)<br />{<br />    uint8_t comm = 0;<br />    comm |= (regAddr &lt;&lt; 3);<br /> <br />    spi_xmit_byte(comm);<br /><br />    return ( 1 );<br />}<br /><br /><br />bool AD7192_readFromRegister(uint8_t regAddr)<br />{<br />    uint8_t comm = 0;<br />    comm |= (1 &lt;&lt; RW);<br />    comm |= (regAddr &lt;&lt; (uint8_t)3);<br />   <br />    spi_xmit_byte(comm);<br /><br />    return ( 1 );<br />}<br /><br /><br /><br />uint32_t AD7192_getConfReg()<br />{<br />    uint32_t conf = 0;<br />    uint8_t in1, in2, in3;<br /><br />    SS_LO;<br />    AD7192_readFromRegister(CONF);<br /><br />    in3 = (uint8_t)spi_xmit_byte(0xFF);<br />    in2 = (uint8_t)spi_xmit_byte(0xFF);<br />    in1 = (uint8_t)spi_xmit_byte(0xFF);<br />    SS_HI;<br /><br />    conf  = (uint32_t)in3 &lt;&lt; 16L;<br />    conf |= (uint32_t)in2 &lt;&lt; 8L;<br />    conf |= (uint32_t)in1;<br /><br /><br />    return conf;<br />}[/syntax]<br /><br />i w main.c<br />Najprościej próbuje odczytać stan tego rejestru konfiguracyjnego i odczytaną wartość wypluwam na uarta żeby mieć podgląd co odczytał:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;AD7192/ad7192.h&quot;<br />#include &quot;AD7192/mk_spi.h&quot;<br /><br />uint32_t test;<br /><br />int main(void) {<br /><br />/* ustawienie TIMER0 dla F_CPU=14,7456 MHz */<br />TCCR0A |= (1&lt;&lt;WGM01);/* tryb CTC */<br />TCCR0B |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);/* preskaler = 1024 */<br />OCR0A = 143;/* dodatkowy podział przez 143 (rej. przepełnienia) */<br />TIMSK0 |= (1&lt;&lt;OCIE0A);// Odblokowanie przerawania CompareMatch<br />/* przerwanie wykonywane z częstotliwością ok 10ms (100 razy na sekundę) */<br /><br />       spi_init(); //Inicjalizacja dla AD7192<br /><br />USART_Init( __UBRR ); // inicjalizacja UART<br /><br />        sei();<br /><br />while(1){<br />                    if(!Timer1){<br />            Timer1 = 200;<br />    SS_LO;<br />    test = AD7192_getConfReg();<br />    SS_HI;<br />    uart_putlongint(test, 2);<br />    uart_putc('\r');<br />    uart_putc('\n');<br />        }<br />       }<br /><br />}[/syntax]<br /><br />W nocie i tabeli 14 na stronie 18 <br />&quot;Idling the DIN pin high between data transfers minimizes the  effects of spurious SCLK pulses on the serial interface.  &quot;<br /><br />Wysyłam bajt do rejestru komunikacyjnego: 01010000 - i to wygląda niby dobrze <br />Z noty wynika że powinien odebrać 24 bity i taką wartość tego rejestru 00000000 00000001  00010111.<br /><br />Z tego wywnioskowałem żeby zamiast: spi_xmit_byte(0x00); wpisać spi_xmit_byte(0xFF); w funkcji odczytu. W jakimś sensie to pomogło<br /><br />Jednak w odpowiedzi jakby wartość przesuniętą o jeden bit, tzn brakuje najmłodszego( tzn. całość jest przesunięta w prawo o 1 bit?). Co powoduje to przesunięcie i jak je usunąć ? <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" />  <img src="https://forum.atnel.pl/images/smilies/icon_eek.gif" alt=":shock:" title="Zaszokowany" /> <br /><br />Wartość fizycznie wygląda dobrze w Salae Logic a w putty widać to przesunięcie o którym pisałem:<br /><a href="https://obrazkiforum.atnel.pl/976/ca93c5095c91584947b6b88278e03f84.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/976/ca93c5095c91584947b6b88278e03f84.png" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/976/08d0db210cc776f51379debafc5deafb.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/976/08d0db210cc776f51379debafc5deafb.png" alt="Obrazek" /></a><br /><br />Link do noty: <br /><!-- m --><a class="postlink" href="https://www.analog.com/media/en/technical-documentation/data-sheets/AD7192.pdf" >https://www.analog.com/media/en/technic ... AD7192.pdf</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=976">faber33</a> — 4 mar 2021, o 17:34</p><hr />
]]></content>
</entry>
</feed>