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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-12-23T12:08:14+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=5203&amp;mode</id>
<entry>
<author><name><![CDATA[adi19887]]></name></author>
<updated>2013-12-23T12:08:14+01:00</updated>
<published>2013-12-23T12:08:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=62127#p62127</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=62127#p62127"/>
<title type="html"><![CDATA[Re: Kod w języku c. Proszę o sprawdzenie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=62127#p62127"><![CDATA[
OK dziękuję za odpowiedź. Zwrócę na to uwagę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2079">adi19887</a> — 23 gru 2013, o 12:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-12-21T23:38:44+01:00</updated>
<published>2013-12-21T23:38:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=62014#p62014</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=62014#p62014"/>
<title type="html"><![CDATA[Re: Kod w języku c. Proszę o sprawdzenie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=62014#p62014"><![CDATA[
Wyłączenie przerwań nie zatrzymuje timerów i nie zeruje liczników i preskalera ani flagi przerwania. Może być przykładowo tak, że wyłączasz przerwania i po pewnym czasie je włączasz, a skoro timery dalej zliczały to spowoduje to natychmiastowe wywołanie przerwania, bo flaga przerwania została już ustawiona.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 21 gru 2013, o 23:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adi19887]]></name></author>
<updated>2013-12-21T17:08:16+01:00</updated>
<published>2013-12-21T17:08:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61980#p61980</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61980#p61980"/>
<title type="html"><![CDATA[Re: Kod w języku c. Proszę o sprawdzenie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61980#p61980"><![CDATA[
Dziękuje za odpowiedzi. Ostatnio intensywnie eksploatuję to forum, projekt zbliża się ku końcowi, nie wszystko zrobiłem tak jak chciałem jednak działa podstawa. Możliwe, że się pochwalę jednak jeszcze nie teraz. Z kodem się uwinąłem jednak nadal nie wiem dlaczego timery (przerwania nie działają jak należy tzn. nie liczą częstotliwości. Kod z timerami jak jest w osobnym programie działa jak należy jednak kiedy dowolnie chcę włączać i wyłączać przerwania to nie działa... Może jednak ktoś życzliwy sprawdzi dlaczego tak sie dzieje ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2079">adi19887</a> — 21 gru 2013, o 17:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-12-19T21:46:13+01:00</updated>
<published>2013-12-19T21:46:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61827#p61827</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61827#p61827"/>
<title type="html"><![CDATA[Re: Kod w języku c. Proszę o sprawdzenie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61827#p61827"><![CDATA[
<div class="quotetitle">MirkoT napisał(a):</div><div class="quotecontent"><br />A co to ma do rzeczy? W AS też można w parametrach projektu wstawić taktowanie...<br />Pooglądaj poradniki Mirka<br /></div><br /><br />Np ten i od tego momentu:<br /><br /><!-- m --><a class="postlink" href="http://www.youtube.com/watch?feature=player_detailpage&amp;v=UhcyBpM57vo#t=3015" >http://www.youtube.com/watch?feature=pl ... 7vo#t=3015</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 19 gru 2013, o 21:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2013-12-19T21:09:24+01:00</updated>
<published>2013-12-19T21:09:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61825#p61825</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61825#p61825"/>
<title type="html"><![CDATA[Re: Kod w języku c. Proszę o sprawdzenie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61825#p61825"><![CDATA[
<div class="quotetitle">adi19887 napisał(a):</div><div class="quotecontent"><br />Natomiast co do F_CPU to pracuje na atmel studio bo mnie eclipse nawalil ostatnio i nie chce ożyć,<br /></div><br />A co to ma do rzeczy? W AS też można w parametrach projektu wstawić taktowanie...<br />Pooglądaj poradniki Mirka<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 19 gru 2013, o 21:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adi19887]]></name></author>
<updated>2013-12-18T18:03:56+01:00</updated>
<published>2013-12-18T18:03:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61676#p61676</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61676#p61676"/>
<title type="html"><![CDATA[Re: Kod w języku c. Proszę o sprawdzenie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61676#p61676"><![CDATA[
W każdym elemencie tablicy oprócz [0] powinno się znajdować zero. W zerowym powinien znajdować się wynik konwersji ADC. Natomiast co do F_CPU to pracuje na atmel studio bo mnie eclipse nawalil ostatnio i nie chce ożyć, chociaż i tak nie wiem czy mnie atmel studio nie oszukuje (bo program wydaj się jakby &quot;skakał&quot; od obsługi usarta do koncowego usarta  - wydaje mnie się tak ponieważ czasowo mnie się nie zgadza, coś za szybko wyniki dostaję, jakby delaye nie działały no i nie programuje mnie DDS-a (SPI) albo mój oscyloskop tak szybko nie reaguje).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2079">adi19887</a> — 18 gru 2013, o 18:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[D_C]]></name></author>
<updated>2013-12-18T17:31:03+01:00</updated>
<published>2013-12-18T17:31:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61668#p61668</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61668#p61668"/>
<title type="html"><![CDATA[Re: Kod w języku c. Proszę o sprawdzenie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61668#p61668"><![CDATA[
[syntax=c]#define F_CPU 16000000UL[/syntax]<br />FUJ wywal to coś  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  <br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2013/01/rs232-ubrr-jak-prawidowo-obliczac-trick.html" >http://mirekk36.blogspot.com/2013/01/rs ... trick.html</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1165">D_C</a> — 18 gru 2013, o 17:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[acid3]]></name></author>
<updated>2013-12-18T17:22:23+01:00</updated>
<published>2013-12-18T17:22:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61664#p61664</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61664#p61664"/>
<title type="html"><![CDATA[Re: Kod w języku c. Proszę o sprawdzenie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61664#p61664"><![CDATA[
<div class="quotetitle">adi19887 napisał(a):</div><div class="quotecontent"><br />ponieważ teraz program reaguje (wysyła bez usart ciąg taki jak powinien tylko, że z samymi zerami np. 254 0 0 0 0 0 0 0 0 0 0)<br /></div><br /><br />to taki jak powinien czy nie taki ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=944">acid3</a> — 18 gru 2013, o 17:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adi19887]]></name></author>
<updated>2013-12-18T17:18:09+01:00</updated>
<published>2013-12-18T17:18:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61663#p61663</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61663#p61663"/>
<title type="html"><![CDATA[Kod w języku c. Proszę o sprawdzenie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5203&amp;p=61663#p61663"><![CDATA[
Witam serdecznie,<br /><br />Chciałbym prosić osoby obeznane o sprawdzenie kodu który wklejam:<br />[syntax=c]//Definicje<br />#define F_CPU 16000000UL<br />#define BAUD 9600<br />#define MYUBRR (( F_CPU  + BAUD * 8UL  ) / (16UL * BAUD) -1)<br />#define RESET_DDS 0x2100<br />#define NORMAL_DDS 0x2002<br />#define DDS_SCS 0x02<br />#define DDS_PORT PORTB<br />#define DDS_DATA 0x08<br />#define DDS_SCLK 0x20<br />#define DDS_DDR DDRB<br />#define VREF 4.93<br />#define ADCIN PC0<br /><br />//Pliki nagłówkowe<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />//Zmienne<br />volatile int licznik = 0;<br />volatile uint16_t reszta;<br />volatile uint16_t czestotliwosc; //Zmierzona czestotliwosc<br />volatile uint8_t przepelnienie = 61; //Timer0 8 bit przy kwarcu 16MHz<br />volatile uint8_t sekunda_flaga;<br />volatile uint8_t flaga_konca_pomiaru_czestotliwosci =0;<br /><br />//Tablice<br /><br />//STRUKTURA DO POMIARU<br />volatile uint8_t flagaADC;<br />volatile uint8_t currentadc =0;<br />volatile uint16_t ppomiar&#91;20&#93;;<br />uint8_t flaga_rozpoczecie_synch = 0; //informuje o rozpoczęciu komunikacji z PC<br /><br />volatile struct pomiarADC<br />{<br />uint16_t probki&#91;20&#93;;<br />uint16_t pomiary&#91;20&#93;;<br />uint16_t wart_max&#91;1&#93;;<br />uint16_t wart_min&#91;1&#93;;<br />uint16_t amplituda&#91;10&#93;;<br />}pomiar;<br /><br />volatile struct dane_z_PC<br />{<br />uint8_t czestotliwosc&#91;10&#93;; //Tutaj laduja czestotliwosci podzielone przez 10 !!!<br />uint16_t czestotliwoscx10&#91;10&#93;; // Tutaj laduja czestotliwosci przemnozone przez 10!!!<br />uint8_t liczba_pomiarow; // jezeli 1 to 10 pomiarow, jezeli 0 to 1 pomiar.<br />}dane;<br /><br />volatile struct dane_do_PC<br />{<br />uint8_t amplituda_do_PC&#91;10&#93;; //amplituda podzielona przez 10;<br />}dane_do_PC;<br /><br />volatile struct pomiar_freq<br />{<br />uint16_t czestotliwoscDDS&#91;10&#93;;<br />uint16_t blad_bezwzgledny;<br />uint16_t blad_wzgledny;<br />}freq;<br />//FUNKCJE<br />//SPI<br />void DDS_Write(uint16_t Write)<br />{<br />  signed char i;<br /><br />  DDS_PORT &amp;= ~DDS_SCS;<br />  _delay_us(1);<br />  for (i=15;i!=-1;i--)<br />  {<br />if (Write &amp;(1&lt;&lt;i)) DDS_PORT |= DDS_DATA;<br />else DDS_PORT &amp;= ~DDS_DATA;<br />_delay_us(1);<br />DDS_PORT &amp;= ~DDS_SCLK;<br />   _delay_us(1);<br />DDS_PORT |= DDS_SCLK;<br />  }<br />  _delay_us(1);<br />  DDS_PORT |= DDS_SCS;<br />}<br /><br />void DDS_Init(void)<br />{<br />DDS_DDR |= DDS_DATA +DDS_SCLK+ DDS_SCS;<br />DDS_PORT |= DDS_DATA +DDS_SCLK+ DDS_SCS;<br />DDS_Write(0b0010000100000000);// Reset<br />  DDS_Write(0b0010000000000000);// Normal<br />}<br /><br />void SetDDSFrequancy(float Freq)//podawane podzielone przez 100<br />{<br />long i,lsb,msb;<br /><br />//Freq = Freq / 0.186264515f;  // for 50Mhz osc<br />Freq = ((Freq*100) / 0.093132258);     // for 25Mhz<br /><br /><br />i = (long)Freq;<br />lsb = (i &amp; 0x3fff) + 0x4000;<br />msb = ((i&gt;&gt;14) &amp; 0x3fff) + 0x4000;<br />DDS_Write(lsb);<br />DDS_Write(msb);<br />}<br />//END_SPI<br />//USART<br />void USART_Init( unsigned int ubrr)<br />{<br />/* Set baud rate */<br />UBRRH = (unsigned char)(ubrr&gt;&gt;8);<br />UBRRL = (unsigned char)ubrr;<br />/* Enable receiver and transmitter */<br />UCSRB = (1&lt;&lt;RXEN)|(1&lt;&lt;TXEN);<br />/* Set frame format: 8data, 2stop bit */<br />UCSRC = (1&lt;&lt;URSEL)|(1&lt;&lt;USBS)|(3&lt;&lt;UCSZ0);<br />}<br /><br />void usart_putc(unsigned char c)<br />{<br />   // wait until UDR ready<br />   while(!(UCSRA &amp; (1 &lt;&lt; UDRE)));<br />   UDR = c;    // send character<br />}<br />char odbierz(void)<br />{<br />  /* Wait for data to be received */<br />while ( !(UCSRA &amp; (1&lt;&lt;RXC)) )<br />;<br />/* Get and return received data from buffer */<br />return UDR;<br />}<br />//END_USART<br />//ADC<br />void inicjalizacja_przetwornik()<br />{<br />ADCSRA|=<br />/*|(1&lt;&lt; ADFR)*/<br />(1&lt;&lt; ADPS2) // CLK/128; 125kHz<br />|(1&lt;&lt; ADPS1)<br />|(1&lt;&lt; ADPS0)<br />|(1&lt;&lt; ADIE)<br />/*|(1&lt;&lt;ADIF)*/;<br /><br /><br />ADMUX |=(1&lt;&lt;REFS1)|(1&lt;&lt;REFS0)/*|(1&lt;&lt;MUX0)*/; // Referencja Vcc z zewnetrznym kondensatorem<br /><br />/*PORTC&amp;=~0x3E;*/<br /><br />}<br />void obrobka()<br />{<br />pomiar.wart_max&#91;0&#93; = pomiar.pomiary&#91;0&#93;;<br />pomiar.wart_min&#91;0&#93; = pomiar.pomiary&#91;0&#93;;<br /><br />uint8_t j;<br />for(j=0;j&lt;=19;j++)<br />{<br /><br />if(pomiar.pomiary&#91;j&#93;&gt;pomiar.wart_max&#91;0&#93;)<br />pomiar.wart_max&#91;0&#93;=pomiar.pomiary&#91;j&#93;;<br />if(pomiar.pomiary&#91;j&#93;&lt;pomiar.wart_min&#91;0&#93;)<br />pomiar.wart_min&#91;0&#93;=pomiar.pomiary&#91;j&#93;;<br /><br />}<br />}<br /><br />void przetworzenie()<br />{<br />for(int i =0; i&lt;10;i++)<br />{<br />dane.czestotliwoscx10&#91;i&#93; = dane.czestotliwosc&#91;i&#93;*10; //Przemnazam przez 10 i zapisuje do nowej tablicy<br />}<br />}<br />//PRZERWANIE OD ADC<br />ISR(ADC_vect)<br />{<br /><br />pomiar.probki&#91;currentadc&#93;=ADCW;<br /><br /><br /><br />if(++currentadc==19)<br />        {<br />currentadc=0;<br /><br />ADCSRA&amp;=~(1&lt;&lt;ADFR);<br />for(int i=0;i&lt;=19;i++)<br />pomiar.pomiary&#91;i&#93;=pomiar.probki&#91;i&#93;;<br /><br />}<br /><br /><br />}<br />//END_PRZERWANIE OD ADC<br />//PRZERWANIA OD TIMERA1 i TIMERA0<br />ISR(TIMER0_OVF_vect) //odmierza 1s.<br />{<br />przepelnienie--;<br />if(przepelnienie == 0)<br />{<br />sekunda_flaga=1;<br />przepelnienie =61;<br /><br />}<br />}<br /><br />ISR(TIMER1_OVF_vect)<br />{<br />licznik++;<br />}<br />//END_PRZERWANIA OD T1 i T0<br />//END_ADC<br />//TIMER<br />void inicjalizacja_timery()<br />{<br />//PORTB &amp;=~(1&lt;&lt;PB0); Dioda tutuaj była<br /><br />//Wejście T1 podciągamy do +<br />DDRB &amp;=~(1&lt;&lt;PB5);<br />PORTB |=(1&lt;&lt;PB5);<br />//Ustawianie Timera0<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00); // preskaler 1024<br />//TIMSK |= (1&lt;&lt;TOIE0)|(1&lt;&lt;TOIE1); //Przerwania od timera0<br />//Ustawienie Timera1<br />TCCR1B|=(1&lt;&lt;CS12)|(1&lt;&lt;CS11)|(1&lt;&lt;CS10);//External event<br />//TIMSK |= (1&lt;&lt;TOIE1);<br />}<br /><br /><br />void timer_obrobka()<br />{<br />if(sekunda_flaga==1)<br />{<br />sekunda_flaga = 0;<br />reszta=TCNT1;<br />TCNT1=0;<br />czestotliwosc=licznik*65536;<br />czestotliwosc=czestotliwosc+reszta;<br />flaga_konca_pomiaru_czestotliwosci =1;<br />}<br />}<br />//END_TIMER<br />//PORTY<br />void porty()<br />{<br /><br />}<br />//END porty<br />//INICJALIZACJA Wszytsko<br />void inicjalizacja_komponentow(unsigned int ubrr)<br />{<br />DDS_Init();<br />inicjalizacja_przetwornik();<br />USART_Init(ubrr);<br />inicjalizacja_timery();<br />}<br />//END<br />//MAIN<br />int main()<br />{<br />inicjalizacja_komponentow(MYUBRR);<br />sei();<br />while(1)<br />{<br />//Najpierw Uart - czeka na odbió danych od PC, Jeżeli odbierze flagę 255 to zaczyna odbiór wartosci częstotliwosci&#91;10&#93;, jak odbierze to robi prawdziwym warunek rozpoczęcia głównej pętli.<br />flaga_rozpoczecie_synch = odbierz();<br />if(flaga_rozpoczecie_synch == 255)<br />{<br /><br />for(int i = 0; i&lt;10;i++)<br />{<br />dane.czestotliwosc&#91;i&#93; = odbierz();<br />przetworzenie();<br />dane.liczba_pomiarow =1;<br />}<br /><br />}else<br />if(flaga_rozpoczecie_synch == 254)<br />{<br />dane.czestotliwosc&#91;0&#93; = odbierz();<br />dane.czestotliwoscx10&#91;0&#93; = dane.czestotliwosc&#91;0&#93;*10;<br />dane.liczba_pomiarow = 0;<br />}<br /><br />//End uart<br />//Własciwy kod<br />if((dane.liczba_pomiarow==1))<br />{<br /><br />for(int i=0;i&lt;10;i++) //Petla pomiarowa<br />{<br />SetDDSFrequancy(dane.czestotliwoscx10&#91;i&#93;/100);<br />_delay_ms(1000); //Deklay na ustabilizowanie się<br />//przełaczam Relay<br />DDRB |= (1&lt;&lt;PB2); //jako wyjscie<br />PORTB&amp;= ~(1&lt;&lt;PB2);<br /><br />//Koniec Relay<br />//Pomiar czestotliwości sygnału DDS_out<br /><br />TIMSK |= (1&lt;&lt;TOIE1)|(1&lt;&lt;TOIE0);<br /><br /><br />do{<br />timer_obrobka();<br />}while(flaga_konca_pomiaru_czestotliwosci ==1);<br /><br />TIMSK &amp;=~(1&lt;&lt;TOIE1);//Wyłączam możliwość przrwań od timera0 i timera1<br />TIMSK &amp;=~(1&lt;&lt;TOIE0);<br />freq.czestotliwoscDDS&#91;i&#93;  = czestotliwosc; //Zapisuję próbkę z pomiary czestotliwosci <br />freq.blad_bezwzgledny = dane.czestotliwoscx10&#91;i&#93; - freq.czestotliwoscDDS&#91;i&#93;;<br />freq.blad_wzgledny = (freq.blad_bezwzgledny/dane.czestotliwosc&#91;i&#93;)*100;<br />if(freq.blad_wzgledny &gt;10)<br />{<br />//błąd !!!<br />}<br />//Przełączam Relay<br />PORTB|= (1&lt;&lt;PB2); //stan wysoki na czas pomiaru.<br />//Koniec Relay<br />//Czekam na stabilizacje na wzmacniaczu<br />_delay_us(100);<br />//Koniec czekania<br />//pomiar napiecia ADC układu pomiarowego.<br /><br />ADCSRA |= (1&lt;&lt;ADFR);<br />_delay_ms(2);<br />ADCSRA |=(1&lt;ADEN);<br />_delay_ms(2); //Inicjalizuje się ok 2ms<br />ADCSRA |= (1&lt;&lt;ADSC); //włączam konwersję.<br />_delay_ms(30); //CZas na zebranie 20 probek ok 15ms<br />//Wylaczam ADC w przerwaniu !!!ADCSRA&amp;=~(1&lt;&lt;ADFR);<br />ADCSRA &amp;=~(1&lt;ADEN);<br />obrobka();<br />pomiar.amplituda&#91;i&#93;=(pomiar.wart_min&#91;0&#93; + pomiar.wart_max&#91;0&#93;)/2 ;//wyliczam amplitude sygnału, do welementow tablicy zapisane probki w postaci wartosci rejestru ADC<br />pomiar.amplituda&#91;i&#93; = pomiar.amplituda&#91;i&#93;/10; //Dziele przez 10 zeby sie zmiescilo w zmiennej<br />//Koniec pomiarów !!!<br />}<br />//USART wysyłanie.<br />usart_putc(0xFF); // Synchronizacja;<br />for(int i=0;i&lt;10;i++)<br />{<br />usart_putc(pomiar.amplituda&#91;i&#93;); // wysyła 10 pomiarów.!!! Koniec do początku.<br />}<br /><br />}else<br />if((dane.liczba_pomiarow == 0))<br />{<br />SetDDSFrequancy(dane.czestotliwoscx10&#91;0&#93;/100);<br />_delay_ms(1000); //Deklay na ustabilizowanie się<br />//przełaczam Relay<br />DDRB |= (1&lt;&lt;PB2); //jako wyjscie<br />PORTB&amp;= ~(1&lt;&lt;PB2);<br /><br />//Koniec Relay<br />//Pomiar czestotliwości sygnału DDS_out<br /><br />TIMSK |= (1&lt;&lt;TOIE1)|(1&lt;&lt;TOIE0);<br /><br />do{<br />timer_obrobka();<br />}while(flaga_konca_pomiaru_czestotliwosci ==1);<br /><br />TIMSK &amp;=~(1&lt;&lt;TOIE1);//Wyłączam możliwość przrwań od timera0 i timera1<br />TIMSK &amp;=~(1&lt;&lt;TOIE0);<br />_delay_ms(10);<br />freq.czestotliwoscDDS&#91;0&#93;  = czestotliwosc; //Zapisuję próbkę z pomiary czestotliwosci <br />freq.blad_bezwzgledny = dane.czestotliwoscx10&#91;0&#93; - freq.czestotliwoscDDS&#91;0&#93;;<br />freq.blad_wzgledny = (freq.blad_bezwzgledny/dane.czestotliwosc&#91;0&#93;)*100;<br />if(freq.blad_wzgledny &gt;10)<br />{<br />//błąd !!!<br />}<br />//Przełączam Relay<br />//PORTB|= (1&lt;&lt;PB2); //stan wysoki na czas pomiaru.<br />//Koniec Relay<br />//Czekam na stabilizacje na wzmacniaczu<br />_delay_us(100);<br />//Koniec czekania<br />//pomiar napiecia ADC układu pomiarowego.<br /><br />ADCSRA |= (1&lt;&lt;ADFR);<br /> _delay_ms(2);<br />ADCSRA |=(1&lt;ADEN);<br />_delay_ms(2); //Inicjalizuje się ok 2ms<br />ADCSRA |= (1&lt;&lt;ADSC); //włączam konwersję.<br />_delay_ms(30); //CZas na zebranie 20 probek ok 15ms<br />//Wylaczam ADC w przerwaniu !!!ADCSRA&amp;=~(1&lt;&lt;ADFR);<br />ADCSRA &amp;=~(1&lt;ADEN);<br />obrobka();<br />pomiar.amplituda&#91;0&#93;=(pomiar.wart_min&#91;0&#93; + pomiar.wart_max&#91;0&#93;)/2 ;//wyliczam amplitude sygnału, do welementow tablicy zapisane probki w postaci wartosci rejestru ADC<br />pomiar.amplituda&#91;0&#93; = pomiar.amplituda&#91;0&#93;/10; //Dziele przez 10 zeby sie zmiescilo w zmiennej<br />pomiar.amplituda&#91;1&#93; =0;<br />pomiar.amplituda&#91;2&#93; =0;<br />pomiar.amplituda&#91;3&#93; =0;<br />pomiar.amplituda&#91;4&#93; =0;<br />pomiar.amplituda&#91;5&#93; =0;<br />pomiar.amplituda&#91;6&#93; =0;<br />pomiar.amplituda&#91;7&#93; =0;<br />pomiar.amplituda&#91;8&#93; =0;<br />pomiar.amplituda&#91;9&#93; =0;<br />usart_putc(0xFE);<br />for(int i=0;i&lt;10;i++)<br />{<br />usart_putc(pomiar.amplituda&#91;i&#93;); // wysyła 10 pomiarów.!!! Koniec do początku.<br />}<br /><br />}<br /><br />//END<br />}<br />}[/syntax] <br /><br />Nieco przydługi jednak mam problem, myślę, z przerwaniami. Bardzo proszę o sprawdzenie mojego toku myślenia, ponieważ teraz program reaguje (wysyła bez usart ciąg taki jak powinien tylko, że z samymi zerami np. 254 0 0 0 0 0 0 0 0 0 0) jednak chciałbym, żeby coś zmierzył na ADC i potem trochę przerobił i wysyłał.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2079">adi19887</a> — 18 gru 2013, o 17:18</p><hr />
]]></content>
</entry>
</feed>