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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-05-07T16:19:55+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=11625&amp;mode</id>
<entry>
<author><name><![CDATA[dominx]]></name></author>
<updated>2015-05-07T16:19:55+01:00</updated>
<published>2015-05-07T16:19:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11625&amp;p=128505#p128505</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11625&amp;p=128505#p128505"/>
<title type="html"><![CDATA[Re: Atmega 328P TIMERy undeclared (first use in this functio]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11625&amp;p=128505#p128505"><![CDATA[
Dziękuję za Twoją odpowiedź. Faktycznie wyświetla się tam atmega32. Projekt był właśnie na taką atmegę robiony, a ja chciałem go przerobić by działał na atmedze 328P. Jednak nie rozumiem czemu w konsoli nadal widnieje tam taka nazwa, gdyż w zakładce Properties ustawiłem atmegę 328P. Oto dowód: <a href="http://forum.atnel.pl/_obrazki/o/9804/3a97bfc43d2df8cdcfe37de4e6f2075c.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/9804/3a97bfc43d2df8cdcfe37de4e6f2075c.jpg" alt="Obrazek" /></a><br /><br />Drugi problem został rozwiązany i warning już się nie pokazuje <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />EDIT: Problem dziś niespodziewanie ustąpił. Utworzyłem nowy projekt, dokładnie go skonfigurowałem i skopiowałem do niego kod programu. Jakimś cudem kompiluje się teraz bez żadnych błędów. Temat do zamknięcia <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9804">dominx</a> — 7 maja 2015, o 16:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-05-07T15:43:49+01:00</updated>
<published>2015-05-07T15:43:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11625&amp;p=128502#p128502</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11625&amp;p=128502#p128502"/>
<title type="html"><![CDATA[Re: Atmega 328P TIMERy undeclared (first use in this functio]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11625&amp;p=128502#p128502"><![CDATA[
Witam<br />Odniosę się tylko do dwóch rzeczy, za resztą nie nadążam  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />1.W tytule podajesz ATmega328P a w.g Twojego projektu masz wpisane ATmega32.<br /><a href="http://forum.atnel.pl/_obrazki/o/826/d5fc3049e61e4c94eabc7ded6ff97207.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/826/d5fc3049e61e4c94eabc7ded6ff97207.JPG" alt="Obrazek" /></a><br />Dla AT328P po zmianie ISR'a ( to ta druga sprawa ) program się kompiluje:<br /><a href="http://forum.atnel.pl/_obrazki/o/826/ed2b97ff74a48526c1e812e0b82dac72.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/826/ed2b97ff74a48526c1e812e0b82dac72.JPG" alt="Obrazek" /></a><br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 7 maja 2015, o 15:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dominx]]></name></author>
<updated>2015-05-07T13:35:49+01:00</updated>
<published>2015-05-07T13:35:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11625&amp;p=128486#p128486</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11625&amp;p=128486#p128486"/>
<title type="html"><![CDATA[Atmega 328P TIMERy undeclared (first use in this function)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11625&amp;p=128486#p128486"><![CDATA[
Witam.<br />Mam problem z prawidłowym ustawieniem TIMER2 oraz TIMER0 w procesorze Atmega 328P. Jestem na etapie poznawania poszczególnych projektów z niebieskiej książki M. Kardasia. Chciałem zmodyfikować zawarte tam projekty: 05_PWM oraz 03_Multi_LED, tak aby działały na innym niż tam ustawiony. Korzystam z Eclipse Luna skonfigurowanym zgodnie z <a href="http://forum.atnel.pl/topic9325.html"  class="postlink">tym</a> poradnikiem. <br /><br />Po przeanalizowaniu noty katalogowej wydawało mi się, że wystarczy dodać parę literek przy nazwach poszczególnych bitów (np. TCCR0A zamiast TCCR0) oraz zmienić procesor w ustawieniach projektu. Jednak mimo dokładnego sprawdzenia nazw bitów w nocie oraz dokładnej analizy kodu wciąż wyskakuje mi ten niepokojący komunikat.<br /><br />Poniżej załączam pełen kod programu. <strong>Kłopotliwe linijki to: 23-26, 38-41, 52 oraz inne zawierające nazwę OCR0A.</strong><br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2010-04-05<br /> *       Autor: Mirosław Kardaś<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /><br />// definicje zmiennych do sterowania 6 kanałami programowych PWM<br />// zmienne typu uint8_t, rozdzielczość 8-bitowa<br />volatile uint8_t pwm1, pwm2, pwm3, pwm4, pwm5, pwm6;<br /><br />// główna funkcja programu main()<br />int main(void)<br />{<br />//***** SPRZĘTOWY PWM - 1 KANAŁ OC0 (PB3) *******<br />// ustawienie końcówki OC0 (PB3) sprzętowy PWM jako WYJŚCIE<br />DDRB |= (1&lt;&lt;PB3);<br />// ustawienia TIMER0 w Fast PWM<br />TCCR0A |= (1&lt;&lt;WGM01)|(1&lt;&lt;WGM00);// tryb Fast PWM<br />TCCR0A |= (1&lt;&lt;COM0A1);// clear at TOP<br />TCCR0B |= (1&lt;&lt;CS00);// preskaler = 1<br />OCR0A=255;// wygaszenie diody w kanale PWM<br /><br /><br />//***** PROGRAMOWY PWM - 6 KANAŁÓW *******<br />// ustawienie pinów kanałów programowych PWM jako WYJŚCIA<br />DDRC |= (1&lt;&lt;PC0)|(1&lt;&lt;PC1)|(1&lt;&lt;PC2);<br />DDRD |= (1&lt;&lt;PD7)|(1&lt;&lt;PD6)|(1&lt;&lt;PD2);<br />// wyłączenie diod LED podłączonych katodami do wyjść<br />PORTC |= (1&lt;&lt;PC0)|(1&lt;&lt;PC1)|(1&lt;&lt;PC2);<br />PORTD |= (1&lt;&lt;PD7)|(1&lt;&lt;PD6)|(1&lt;&lt;PD2);<br /><br />// ustawienia TIMER2 w tryb CTC<br />TCCR2A |= (1&lt;&lt;WGM21);// tryb  CTC<br />TCCR2B |= (1&lt;&lt;CS20);// preskaler = 1<br />OCR2B = 199;// dodatkowy podział częsttotliwości przez 200<br />TIMSK2 |= (1&lt;&lt;OCIE2A);// zezwolenie na przerwanie CompareMatch<br /><br />sei();// odblokowanie globalne przerwań<br />uint8_t i;// definicja zmiennej i na potrzeby pętli for()<br /><br /><br />while(1)<br />{<br />// pętla rozjaśniająca 6 diod LED<br />for(i=0;i&lt;255;i++)<br />{<br />OCR0A=i;// ta dioda będzie ulegała ściemnianiu w tej pętli<br />pwm1=i;<br />pwm2=i;<br />pwm3=i;<br />pwm4=i;<br />pwm5=i;<br />pwm6=i;<br /><br />// W związku z dużą nieliniowością zależności prądu diod LED<br />// i jasności świecenia, wprowadzone jest zmienne opóźnienie<br />// przy wartościach bliskich zera aby zminimalizować ten efekt<br />if(i&gt;50) _delay_ms(3);<br />else _delay_ms(10);<br />}<br />// całkowite rozjaśnienie diody LED przez 100ms<br />OCR0A=255;<br />// rozświetlenie na maksimum przez 100ms<br />pwm1=255;<br />pwm2=255;<br />pwm3=255;<br />pwm4=255;<br />pwm5=255;<br />pwm6=255;<br />_delay_ms(500);<br /><br />// pętla stopniowo ściemniająca 6 diod LED<br />for(i=255;i;i--)<br />{<br />OCR0A=i;// ta dioda będzie ulegała rozjaśnianiu w tej pętli<br />pwm1=i;<br />pwm2=i;<br />pwm3=i;<br />pwm4=i;<br />pwm5=i;<br />pwm6=i;<br /><br />// W związku z dużą nieliniowością zależności prądu diod LED<br />// i jasności świecenia, wprowadzone jest zmienne opóźnienie<br />// przy wartościach bliskich zera aby zminimalizować ten efekt<br />if(i&gt;50) _delay_ms(3);<br />else _delay_ms(10);<br />}<br />// całkowite rozjaśnienie diody LED przez 100ms<br />OCR0A=0;<br />// całkowite wygaszenie diod LED przez 100ms<br />pwm1=0;<br />pwm2=0;<br />pwm3=0;<br />pwm4=0;<br />pwm5=0;<br />pwm6=0;<br />_delay_ms(500);<br />}<br /><br />}<br /><br /><br />// ciało procedury obsługi przerwania Compare Match Timera2<br />ISR( TIMER2_COMP_vect )<br />{<br />static uint8_t cnt; // definicja naszego licznika PWM<br /><br />// bezpośrednie sterowanie wyjściami kanałów PWM<br />if(cnt&gt;=pwm1) PORTC |= (1&lt;&lt;PC0); else PORTC &amp;= ~(1&lt;&lt;PC0);<br />if(cnt&gt;=pwm2) PORTC |= (1&lt;&lt;PC1); else PORTC &amp;= ~(1&lt;&lt;PC1);<br />if(cnt&gt;=pwm3) PORTC |= (1&lt;&lt;PC2); else PORTC &amp;= ~(1&lt;&lt;PC2);<br />if(cnt&gt;=pwm4) PORTD |= (1&lt;&lt;PD7); else PORTD &amp;= ~(1&lt;&lt;PD7);<br />if(cnt&gt;=pwm5) PORTD |= (1&lt;&lt;PD6); else PORTD &amp;= ~(1&lt;&lt;PD6);<br />if(cnt&gt;=pwm6) PORTD |= (1&lt;&lt;PD2); else PORTD &amp;= ~(1&lt;&lt;PD2);<br /><br />cnt++;// zwiększanie licznika o 1<br />}[/syntax]<br /><br />Oto wpis z konsoli:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">14:16:34 **** Incremental Build of configuration Release for project 05_PWM ****<br />make all <br />'Building file: ../main.c'<br />'Invoking: AVR Compiler'<br />avr-gcc -Wall -Os -fpack-struct -fshort-enums -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=11059200UL -MMD -MP -MF&quot;main.d&quot; -MT&quot;main.d&quot; -c -o&quot;main.o&quot; &quot;../main.c&quot;<br />../main.c: In function 'main':<br />../main.c:23:2: error: 'TCCR0A' undeclared (first use in this function)<br />../main.c:23:2: note: each undeclared identifier is reported only once for each function it appears in<br />../main.c:24:16: error: 'COM0A1' undeclared (first use in this function)<br />../main.c:25:2: error: 'TCCR0B' undeclared (first use in this function)<br />../main.c:26:2: error: 'OCR0A' undeclared (first use in this function)<br />../main.c:38:2: error: 'TCCR2A' undeclared (first use in this function)<br />../main.c:39:2: error: 'TCCR2B' undeclared (first use in this function)<br />../main.c:40:2: error: 'OCR2B' undeclared (first use in this function)<br />../main.c:41:2: error: 'TIMSK2' undeclared (first use in this function)<br />../main.c:41:16: error: 'OCIE2A' undeclared (first use in this function)<br />make: *** &#91;main.o&#93; Błąd 1<br /><br />14:16:37 Build Finished (took 2s.482ms)</div><br /><br />Jak widać problemem jest komunikat: 'BIT' undeclared (first use in this function). Dodam, że z timerów korzystałem również w projekcie 03_Multi_LED, który po wyżej opisanych modyfikacjach kompiluje się bez problemu. Mało tego, gdy do tamtego projektu skopiuje wadliwe procedury, to w nim nie wyświetlają mi się żadne errory i również jest możliwość kompilacji. Czyli tak jakby, gdy timer jest ustawiany w pliku main.c problem jest, a gdy w innym pliku źródłowym to go nie ma.<br /><br />Próbowałem również utworzyć nowy projekt i zjawisko jest jeszcze ciekawsze: w pliku main.c komunikaty jak najbardziej się pokazują, jednak po utworzeniu dodatkowego pliku źródłowego i wklejeniu tam linijek dotyczących timera, udaje się skompilować projekt mimo wyskakujących błędów (wyskakują te same błędy jak w main.c, ale kompilacja przechodzi). <br /><br />Mam jeszcze jeden mały problem który dotyczy projektu 03_Multi_LED, bo o ile wcześniej kompilował się bez żadnych problemów, to gdy zacząłem mu wklejać do testów TIMER2 z projektu o PWM, to zaczął mi wyskakiwać dziwny warning przy funkcji:<br />[syntax=c]// ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH<br />ISR(TIMER0_COMP_vect)<br />{<br />}[/syntax]<br />Wyskakujący komunikat zawiera taką treść: <div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />'TIMER0_COMP_vect' appears to be a misspelled signal handler [enabled by default]<br /></div> Również z nim nie potrafię się uporać.<br /><br />Jest to mój pierwszy post na tym forum. Pozdrawiam wszystkich i z góry dziękuję za udzielone wskazówki <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9804">dominx</a> — 7 maja 2015, o 13:35</p><hr />
]]></content>
</entry>
</feed>