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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-07-20T19:32:01+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=12371&amp;mode</id>
<entry>
<author><name><![CDATA[jaca_76]]></name></author>
<updated>2015-07-20T19:32:01+01:00</updated>
<published>2015-07-20T19:32:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12371&amp;p=135042#p135042</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12371&amp;p=135042#p135042"/>
<title type="html"><![CDATA[Re: Komunikacja po SPI z AS3935. Detektor burzy.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12371&amp;p=135042#p135042"><![CDATA[
Chyba znalazłem rozwiązanie, zmodyfikowałem funkcję odczytu:<br />[syntax=c]/*<br /> * AS3935.c<br /> *<br /> *  Created on: 16 lip 2015<br /> *      Author: Jacek<br /> */<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &quot;AS3935.h&quot;<br />#define _INDOR 0x12<br />#define _OUTDOOR 0x0E<br />#define CS_HIGH RF_PORT|=(1&lt;&lt;CS)<br />#define CS_LOW RF_PORT&amp;=~(1&lt;&lt;CS)<br /><br /><br />void SPI_Init(void)<br />{<br /><br />RF_DDR  |= (1&lt;&lt;SDI)|(1&lt;&lt;SCK)|(1&lt;&lt;CS);//MOSI, SCK, CS' jako wyjścia<br />CS_HIGH;<br />RF_DDR  &amp;= ~(1&lt;&lt;SDO); // MISO jako wejście<br />//SPCR |= (1 &lt;&lt; SPE) | (1 &lt;&lt; MSTR) | (1 &lt;&lt; SPR1) | (1 &lt;&lt; SPR0);<br />SPCR = ( 1 &lt;&lt; SPE ) | ( 1 &lt;&lt; MSTR ) | ( 1 &lt;&lt; SPR1 )| (1 &lt;&lt; CPHA) ;   //Włączamy SPI,    }<br />}<br /><br />void SPI_Write(uint8_t bajt){<br />SPDR = bajt;                    //Wysyłamy zawartość zmiennej bajt<br />while(!(SPSR &amp; (1&lt;&lt;SPIF)));        //Oczekujemy na zakończenie transmisji ( do ustawienia SPIF ) przez sprzęt}<br /><br />}<br /><br />uint8_t  SPI_Read(void){                            //Czekamy na koniec transmisji danych<br />while(!(SPSR &amp; (1&lt;&lt;SPIF)));  // ( aż do ustawienie flagi SPIF    )<br />return SPDR;                    //Zwracamy to co dostaliśmy do SPDR}<br />}<br /><br />uint8_t SPI_Transfer(uint8_t bajt)<br />{<br />SPDR=bajt;<br />while(!(SPSR &amp; (1&lt;&lt;SPIF)));<br />return SPDR;<br />}<br /><br />uint8_t SPI_Transfer2(uint8_t high,uint8_t low)<br />{<br />CS_LOW;<br />SPI_Transfer(high);<br />uint8_t regval = SPI_Transfer(low);<br />CS_HIGH;<br />return regval;<br />}<br /><br />/*******************************************************************************<br />* Function Thunder_Write(unsigned short address, unsigned short data1)<br />* ------------------------------------------------------------------------------<br />* Overview: Function writes desired byte into specified register address<br />* Input: register address, byte<br />* Output: Nothung<br />*******************************************************************************/<br />void Thunder_Write(uint8_t  address, uint8_t  data1)  {<br />address &amp;= ~(1 &lt;&lt; 7);<br />address &amp;= ~(1 &lt;&lt; 6);<br />CS_LOW;<br />SPI_Write(address);<br />SPI_Write(data1);<br />CS_HIGH;<br />}<br /><br /><br />/*******************************************************************************<br />* Function Thunder_Read(unsigned short address)<br />* ------------------------------------------------------------------------------<br />* Overview: Function reads byte from specified address<br />* Input: register address<br />* Output: desired byte<br />*******************************************************************************/<br />uint8_t  Thunder_Read(uint8_t  address) {<br />  return SPI_Transfer2((address &amp; 0x3F) | 0x40, 0);<br />}<br /><br /><br />void Thunder_Init(void) {<br />uint8_t  temp;<br /><br /><br /> Thunder_Write(0x3C, 0x96);           // set all registers in default mode<br />  Thunder_Write(0x3D, 0x96);           // calibrate internal oscillator<br /><br />  temp = Thunder_Read(0x00) &amp; 0xC1;<br />  Thunder_Write(0x00, ((_INDOR &lt;&lt; 1) | temp)); // set to indoor<br /><br />  temp = Thunder_Read(0x01) &amp; 0x80;<br />  Thunder_Write(0x01, 0x44 | temp);    // set NFL and WDTreshold<br /><br />  temp = Thunder_Read(0x02) &amp; 0x80;    // clear statistics, min number of ligtning, spike rejection<br />  Thunder_Write(0x02, 0x40 | temp);<br /><br />  temp = Thunder_Read(0x03) &amp; 0x1F;    // Frequency division ratio(antenna),mask disturber, interrupt<br />  Thunder_Write(0x03, 0x00 | temp);<br /><br />  Thunder_Write(0x08, 0x00);<br />}<br /><br /><br /><br /><br /><br /><br /><br /><br />/*******************************************************************************<br />* Function Thunder_Read_distance()<br />* ------------------------------------------------------------------------------<br />* Overview: Function reads distance from detected thunder<br />* Input: Nothing<br />* Output: Measured result<br />*******************************************************************************/<br />uint8_t Thunder_Read_distance() {<br />uint8_t Out_thunder_distance;<br /><br />  Out_thunder_distance = Thunder_Read(0x07) &amp; 0x3F;<br /><br />  return Out_thunder_distance;<br />}<br /><br />/*******************************************************************************<br />* Function Thunder_Read_Energy()<br />* ------------------------------------------------------------------------------<br />* Overview: Function reads energy of detected thunder<br />* Input: Nothing<br />* Output: Measured result<br />*******************************************************************************/<br />uint16_t Thunder_Read_Energy() {<br />uint8_t  low_byte, mid_byte;<br />uint16_t Out_thunder_energy;<br /><br />  Out_thunder_energy = Thunder_Read(0x06|0x40) &amp; 0x1F;<br />  mid_byte = Thunder_Read(0x05);<br />  low_byte = Thunder_Read(0x04);<br /><br />  Out_thunder_energy = (Out_thunder_energy &lt;&lt; 8);<br />  Out_thunder_energy = (Out_thunder_energy | mid_byte);<br />  Out_thunder_energy = (Out_thunder_energy &lt;&lt; 8);<br />  Out_thunder_energy = (Out_thunder_energy | low_byte);<br /><br />  return Out_thunder_energy;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2479">jaca_76</a> — 20 lip 2015, o 19:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jaca_76]]></name></author>
<updated>2015-07-17T22:43:13+01:00</updated>
<published>2015-07-17T22:43:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12371&amp;p=134852#p134852</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12371&amp;p=134852#p134852"/>
<title type="html"><![CDATA[Komunikacja po SPI z AS3935. Detektor burzy.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12371&amp;p=134852#p134852"><![CDATA[
Witam piszę program do układu AS3935 na płytce od MikroElektroniki na podstawie tego co znalazłem w sieci.<br />I chciałbym żeby ktoś zweryfikował ustawienia SPI .<br />Jak narazie dostaję same zera przy odczycie.<br />W jaki sposób zweryfikować poprawność transmisji ?<br /><br />Atmega644PA - 18432000Hz<br />Połączenia:<br />Mikroe    AVR<br />CS - PB4<br />SCK - PB7<br />SDO - PB6 <br />SDI - PB5<br /><br /><br />main.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;AS3935/AS3935.h&quot;<br />#include &quot;SSD1306/ssd1306.h&quot;<br />uint8_t Distance;<br />uint8_t Thunder_dane;<br />int main (void) {<br />    i2cSetBitrate(100);<br />    ssd1306_Init(SSD1306_SWITCHCAPVCC, REFRESH_MIN);<br />    SPI_Init();<br />    Thunder_Init();<br /><br /><br /><br />while(1)<br />{<br />   Distance=Thunder_Read_distance();<br />   _delay_ms(150);<br />   ssd1306_puts(2,15,&quot;Dist&quot;,1,1,0);<br />   ssd1306_put_int(40,15,Distance,1,1,0);<br />   Thunder_dane=Thunder_Read(0x02);<br />   ssd1306_put_int(2,45,Thunder_dane,1,1,0);<br />ssd1306_display();<br />}<br />}[/syntax]<br /> AS3935.c<br />[syntax=c]#include &lt;util/delay.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &quot;AS3935.h&quot;<br />#define _INDOR 0x12<br />#define _OUTDOOR 0x0E<br />#define CS_HIGH RF_PORT|=(1&lt;&lt;CS)<br />#define CS_LOW RF_PORT&amp;=~(1&lt;&lt;CS)<br /><br /><br />void SPI_Init(){<br />CS_HIGH;<br />RF_DDR  |= (1&lt;&lt;SDI)|(1&lt;&lt;SCK)|(1&lt;&lt;CS);//MOSI, SCK, CS' jako wyjścia<br />RF_DDR  &amp;= ~(1&lt;&lt;SDO); // MISO jako wejście<br />SPCR |= (1 &lt;&lt; SPE) | (1 &lt;&lt; MSTR) | (1 &lt;&lt; SPR1) | (1 &lt;&lt; SPR0);<br />//SPCR = ( 1 &lt;&lt; SPE ) | ( 1 &lt;&lt; MSTR ) | ( 1 &lt;&lt; SPR0 ) ;   //Włączamy SPI,    }<br />}<br /><br />void SPI_Write(uint8_t bajt){<br />SPDR = bajt;                    //Wysyłamy zawartość zmiennej bajt<br />while(!(SPSR &amp; (1&lt;&lt;SPIF)));        //Oczekujemy na zakończenie transmisji ( do ustawienia SPIF ) przez sprzęt}<br /><br />}<br /><br />uint8_t  SPI_Read(){                            //Czekamy na koniec transmisji danych<br />while(!(SPSR &amp; (1&lt;&lt;SPIF)));  // ( aż do ustawienie flagi SPIF    )<br />return SPDR;                    //Zwracamy to co dostaliśmy do SPDR}<br />}<br /><br />/*******************************************************************************<br />* Function Thunder_Write(unsigned short address, unsigned short data1)<br />* ------------------------------------------------------------------------------<br />* Overview: Function writes desired byte into specified register address<br />* Input: register address, byte<br />* Output: Nothung<br />*******************************************************************************/<br />void Thunder_Write(uint8_t  address, uint8_t  data1)  {<br /><br />CS_LOW;<br />SPI_Write(address);<br />SPI_Write(data1);<br />CS_HIGH;<br />}<br /><br /><br /><br />/*******************************************************************************<br />* Function Thunder_Read(unsigned short address)<br />* ------------------------------------------------------------------------------<br />* Overview: Function reads byte from specified address<br />* Input: register address<br />* Output: desired byte<br />*******************************************************************************/<br />uint8_t  Thunder_Read(uint8_t  address) {<br />uint8_t  tmp = 0;<br />  CS_LOW;<br />  SPI_Write(address);<br />  tmp = SPI_Read(0);<br />  CS_HIGH;<br />  return tmp;<br />}<br /><br />void Thunder_Init(void) {<br />uint8_t  temp;<br /><br />  Thunder_Write(0x3C, 0x96);           // set all registers in default mode<br />  Thunder_Write(0x3D, 0x96);           // calibrate internal oscillator<br /><br />  temp = Thunder_Read(0x00) &amp; 0xC1;<br />  Thunder_Write(0x00, ((_INDOR &lt;&lt; 1) | temp)); // set to indoor<br /><br />  temp = Thunder_Read(0x01) &amp; 0x80;<br />  Thunder_Write(0x01, 0x44 | temp);    // set NFL and WDTreshold<br /><br />  temp = Thunder_Read(0x02) &amp; 0x80;    // clear statistics, min number of ligtning, spike rejection<br />  Thunder_Write(0x02, 0x40 | temp);<br /><br />  temp = Thunder_Read(0x03) &amp; 0x1F;    // Frequency division ratio(antenna),mask disturber, interrupt<br />  Thunder_Write(0x03, 0x00 | temp);<br /><br />  Thunder_Write(0x08, 0x00);           // LCO, SRCO, TRCO on IRQ, capacitors tuning<br />}<br /><br /><br />/*******************************************************************************<br />* Function Thunder_Read_distance()<br />* ------------------------------------------------------------------------------<br />* Overview: Function reads distance from detected thunder<br />* Input: Nothing<br />* Output: Measured result<br />*******************************************************************************/<br />uint8_t Thunder_Read_distance() {<br />uint8_t Out_thunder_distance;<br /><br />  Out_thunder_distance = Thunder_Read(0x07) &amp; 0x3F;<br /><br />  return Out_thunder_distance;<br />}<br /><br />/*******************************************************************************<br />* Function Thunder_Read_Energy()<br />* ------------------------------------------------------------------------------<br />* Overview: Function reads energy of detected thunder<br />* Input: Nothing<br />* Output: Measured result<br />*******************************************************************************/<br />uint16_t Thunder_Read_Energy() {<br />uint8_t  low_byte, mid_byte;<br />uint16_t Out_thunder_energy;<br /><br />  Out_thunder_energy = Thunder_Read(0x06) &amp; 0x1F;<br />  mid_byte = Thunder_Read(0x05);<br />  low_byte = Thunder_Read(0x04);<br /><br />  Out_thunder_energy = (Out_thunder_energy &lt;&lt; 8);<br />  Out_thunder_energy = (Out_thunder_energy | mid_byte);<br />  Out_thunder_energy = (Out_thunder_energy &lt;&lt; 8);<br />  Out_thunder_energy = (Out_thunder_energy | low_byte);<br /><br />  return Out_thunder_energy;<br />}<br /><br /><br />}[/syntax]<br /><br /> AS3935.h<br /><br />[syntax=c]/*<br /> * AS3935.h<br /> *<br /> *  Created on: 16 lip 2015<br /> *      Author: Jacek<br /> */<br /><br />#ifndef AS3935_AS3935_H_<br />#define AS3935_AS3935_H_<br /><br />#define RF_PORTPORTB<br />#define RF_DDRDDRB<br />#define RF_PINPINB<br />#define SDI5// MOSI- wyjście<br />#define SCK7// SCK<br />#define CS4// SS<br />#define SDO6// MISO- wejście<br />void CS_HIGH();<br />void CS_LOW();<br />void SPI_Write(uint8_t);<br />uint8_t SPI_Transfer(uint8_t);<br />uint8_t SPI_Read();<br />void SPI_Init();<br />void Thunder_Init(void);<br />uint8_t Thunder_Read_distance();<br />uint8_t  Thunder_Read(uint8_t);<br />#endif /* AS3935_AS3935_H_ */[/syntax]<br /><br />-------------------------------------------<br />Edit<br />Mała zmiana jak wynika z datasheet bit 6 adresu przy odczycie powinien być ustawiony <br />[syntax=c]/*<br /> * AS3935.c<br /> *<br /> *  Created on: 16 lip 2015<br /> *      Author: Jacek<br /> */<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &quot;AS3935.h&quot;<br />#define _INDOR 0x12<br />#define _OUTDOOR 0x0E<br />#define CS_HIGH RF_PORT|=(1&lt;&lt;CS)<br />#define CS_LOW RF_PORT&amp;=~(1&lt;&lt;CS)<br /><br /><br />void SPI_Init(){<br />CS_HIGH;<br />RF_DDR  |= (1&lt;&lt;SDI)|(1&lt;&lt;SCK)|(1&lt;&lt;CS);//MOSI, SCK, CS' jako wyjścia<br />RF_DDR  &amp;= ~(1&lt;&lt;SDO); // MISO jako wejście<br />//SPCR |= (1 &lt;&lt; SPE) | (1 &lt;&lt; MSTR) | (1 &lt;&lt; SPR1) | (1 &lt;&lt; SPR0);<br />SPCR = ( 1 &lt;&lt; SPE ) | ( 1 &lt;&lt; MSTR ) | ( 1 &lt;&lt; SPR1 ) ;   //Włączamy SPI,    }<br />}<br /><br />void SPI_Write(uint8_t bajt){<br />SPDR = bajt;                    //Wysyłamy zawartość zmiennej bajt<br />while(!(SPSR &amp; (1&lt;&lt;SPIF)));        //Oczekujemy na zakończenie transmisji ( do ustawienia SPIF ) przez sprzęt}<br /><br />}<br /><br />uint8_t  SPI_Read(){                            //Czekamy na koniec transmisji danych<br />while(!(SPSR &amp; (1&lt;&lt;SPIF)));  // ( aż do ustawienie flagi SPIF    )<br />return SPDR;                    //Zwracamy to co dostaliśmy do SPDR}<br />}<br /><br />uint8_t SPI_Transfer(uint8_t bajt)<br />{<br />SPDR=bajt;<br />while(!(SPSR &amp; (1&lt;&lt;SPIF)));<br />return SPDR;<br />}<br /><br />uint8_t SPI_Transfer2(uint8_t high,uint8_t low)<br />{<br />CS_LOW;<br />SPI_Transfer(high);<br />uint8_t regval = SPI_Transfer(low);<br />CS_HIGH;<br />return regval;<br />}<br /><br /><br /><br />void Thunder_Init(void) {<br />uint8_t  temp;<br /><br />  Thunder_Write(0x3C, 0x96);           // set all registers in default mode<br />  Thunder_Write(0x3D, 0x96);           // calibrate internal oscillator<br /><br />  temp = Thunder_Read(0x00|0x40) &amp; 0xC1;<br />  Thunder_Write(0x00, ((_INDOR &lt;&lt; 1) | temp)); // set to indoor<br /><br />  temp = Thunder_Read(0x01|0x40) &amp; 0x80;<br />  Thunder_Write(0x01, 0x44 | temp);    // set NFL and WDTreshold<br /><br />  temp = Thunder_Read(0x02|0x40) &amp; 0x80;    // clear statistics, min number of ligtning, spike rejection<br />  Thunder_Write(0x02, 0x40 | temp);<br /><br />  temp = Thunder_Read(0x03|0x40) &amp; 0x1F;    // Frequency division ratio(antenna),mask disturber, interrupt<br />  Thunder_Write(0x03, 0x00 | temp);<br /><br />  Thunder_Write(0x08, 0x00);           // LCO, SRCO, TRCO on IRQ, capacitors tuning<br />}<br /><br /><br /><br /><br /><br />/*******************************************************************************<br />* Function Thunder_Write(unsigned short address, unsigned short data1)<br />* ------------------------------------------------------------------------------<br />* Overview: Function writes desired byte into specified register address<br />* Input: register address, byte<br />* Output: Nothung<br />*******************************************************************************/<br />void Thunder_Write(uint8_t  address, uint8_t  data1)  {<br /><br />CS_LOW;<br />SPI_Write(address);<br />SPI_Write(data1);<br />CS_HIGH;<br />}<br /><br /><br /><br />/*******************************************************************************<br />* Function Thunder_Read(unsigned short address)<br />* ------------------------------------------------------------------------------<br />* Overview: Function reads byte from specified address<br />* Input: register address<br />* Output: desired byte<br />*******************************************************************************/<br />uint8_t  Thunder_Read(uint8_t  address) {<br />uint8_t  tmp = 0;<br />  CS_LOW;<br />  SPI_Write(address);<br />  tmp = SPI_Read();<br />  CS_HIGH;<br />  return tmp;<br />}<br /><br /><br />/*******************************************************************************<br />* Function Thunder_Read_distance()<br />* ------------------------------------------------------------------------------<br />* Overview: Function reads distance from detected thunder<br />* Input: Nothing<br />* Output: Measured result<br />*******************************************************************************/<br />uint8_t Thunder_Read_distance() {<br />uint8_t Out_thunder_distance;<br /><br />  Out_thunder_distance = Thunder_Read(0x07|0x40) &amp; 0x3F;<br /><br />  return Out_thunder_distance;<br />}<br /><br />/*******************************************************************************<br />* Function Thunder_Read_Energy()<br />* ------------------------------------------------------------------------------<br />* Overview: Function reads energy of detected thunder<br />* Input: Nothing<br />* Output: Measured result<br />*******************************************************************************/<br />uint16_t Thunder_Read_Energy() {<br />uint8_t  low_byte, mid_byte;<br />uint16_t Out_thunder_energy;<br /><br />  Out_thunder_energy = Thunder_Read(0x06|0x40) &amp; 0x1F;<br />  mid_byte = Thunder_Read(0x05|0x40);<br />  low_byte = Thunder_Read(0x04|0x40);<br /><br />  Out_thunder_energy = (Out_thunder_energy &lt;&lt; 8);<br />  Out_thunder_energy = (Out_thunder_energy | mid_byte);<br />  Out_thunder_energy = (Out_thunder_energy &lt;&lt; 8);<br />  Out_thunder_energy = (Out_thunder_energy | low_byte);<br /><br />  return Out_thunder_energy;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2479">jaca_76</a> — 17 lip 2015, o 22:43</p><hr />
]]></content>
</entry>
</feed>