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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-02-17T11:37:09+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=2368&amp;mode</id>
<entry>
<author><name><![CDATA[krzychu0808]]></name></author>
<updated>2013-02-17T11:37:09+01:00</updated>
<published>2013-02-17T11:37:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2368&amp;p=28403#p28403</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2368&amp;p=28403#p28403"/>
<title type="html"><![CDATA[Re: Termometr. Reset programu na sei();]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2368&amp;p=28403#p28403"><![CDATA[
Nie wiem jak to się stało ale nie podałem że mam Atmega328P, zawsze podawałem(o 2 w nocy chyba nie kontaktowałem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ). Tak myślałem że coś tam będzie nie tak ale właśnie nie widziałem co tam zmienić. Dziękuję bardzo &quot;Krauser&quot; za oświecenie gdzie znajdę wszystkie nazwy przerwań bardzo przydatna rzecz dla początkującego i za wyjaśnienie sprawy dotyczącej który kod można umieszczać na forum a który nie. <br /><br />Problem rozwiązany wystarczyło zmienić TIMER0_COMP_vect na TIMER0_COMPA_vect.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=933">krzychu0808</a> — 17 lut 2013, o 11:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-02-17T10:10:50+01:00</updated>
<published>2013-02-17T10:10:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2368&amp;p=28398#p28398</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2368&amp;p=28398#p28398"/>
<title type="html"><![CDATA[Re: Termometr. Reset programu na sei();]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2368&amp;p=28398#p28398"><![CDATA[
TCCR0A, TCCR0B i TIMSK0 sugerują, że to nie ATMEGA32 tylko nowsze ATMEGAxx4 lub ATMEGAxx8. Na pewno było ostrzeżenie, że nazwa przerwania jest nie taka:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">warning: 'TIMER0_COMP_vect' appears to be a misspelled signal handler</div><br />W eclipse masz łatwy dostęp do tych nazw. Wystarczy wejść Window-&gt;ShowView-&gt;Other-&gt;AVR-&gt;AVR Device Explorer i z listy rozwijanej wybrać odpowiedni procesor (choć zwykle sam się przestawia). Są trzy zakładki Registers, Ports i Interrupts. Właśnie w tej 3 masz nazwę przerwania.<br />Co do kodów z książki to nie należy umieszczać kodów bibliotek, bo są one integralną jej częścią i ich publikacja to powielanie treści tak samo jak publikacja skanów książek. W twoim przypadku pliki z folderu LCD i 1Wire są taką treścią. Poza tym jak korzystasz z tych bibliotek to wiadomo o co chodzi.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 17 lut 2013, o 10:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzychu0808]]></name></author>
<updated>2013-02-17T02:35:10+01:00</updated>
<published>2013-02-17T02:35:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2368&amp;p=28387#p28387</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2368&amp;p=28387#p28387"/>
<title type="html"><![CDATA[Re: Termometr. Reset programu na sei();]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2368&amp;p=28387#p28387"><![CDATA[
Wklejam cały kod mam nadzieję że głową nie zapłacę za to <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />[syntax=c]<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br /><br />#include &quot;1Wire/ds18x20.h&quot;<br /><br />void display_temp(uint8_t x);<br /><br />uint8_t czujniki_cnt;/* ilość czujników na magistrali */<br />volatile uint8_t s1_flag;/* flaga tyknięcia timera co 1 sekundę */<br />volatile uint8_t sekundy;/* licznik sekund 0-59 */<br /><br />uint8_t subzero, cel, cel_fract_bits;<br /><br />int main(void) {<br /><br /><br />TCCR0A |= (1&lt;&lt;WGM01); /* tryb CTC */<br />TCCR0B |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);/* preskaler = 1024 */<br />OCR0A=78;<br />TIMSK0 |= (1&lt;&lt;OCIE0A);/* zezwolenie na przerwanie CompareMatch */<br /><br />/* przerwanie wykonywane z częstotliwością ok 10ms (100 razy na sekundę) */<br />/* do naszych celów nie musi być to bardzo dokładne 10ms */<br /><br />lcd_init();/* inicjalizacja LCD */<br />lcd_locate(0,0);<br />lcd_str(&quot; Start 2&quot;);<br />_delay_ms(750);<br />/* sprawdzamy ile czujników DS18xxx widocznych jest na magistrali */<br />czujniki_cnt = search_sensors();<br /><br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br />_delay_ms(750);<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs[0], &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />else {<br />lcd_locate(1,0);<br />lcd_str(&quot; error &quot;);<br />}<br /><br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs[1], &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(9);<br />else {<br />lcd_locate(1,9);<br />lcd_str(&quot; error &quot;);<br />}<br />lcd_locate(0,0);<br />lcd_str(&quot;  T1       T2&quot;); <br />_delay_ms(750);<br /><br />sei();/* włączamy globalne przerwania */<br /><br />        lcd_locate(0,0);<br />lcd_str(&quot; OK &quot;); <br />_delay_ms(750);<br /><br />while(1) {<br />if(s1_flag) {/* sprawdzanie flagi tyknięć timera programowego co 1 sekundę */<br /><br />if( 0 == (sekundy%3) ) czujniki_cnt = search_sensors();<br />if( 1 == (sekundy%3) ) DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br />if( 2 == (sekundy%3) ) {<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs[0], &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />else {<br />lcd_locate(0,2);<br />lcd_int(sekundy);<br />lcd_locate(1,0);<br />lcd_str(&quot; error &quot;);<br /><br />}<br /><br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs[1], &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(9);<br />else {<br />lcd_locate(1,9);<br />lcd_str(&quot; error &quot;);<br />}<br />}<br /><br />s1_flag=0;<br />} <br />} <br />}<br /><br />void display_temp(uint8_t x) {<br />lcd_locate(1,x);<br />if(subzero) lcd_str(&quot;-&quot;);<br />else lcd_str(&quot; &quot;);<br />lcd_int(cel);<br />lcd_str(&quot;.&quot;);<br />lcd_int(cel_fract_bits); <br />lcd_str(&quot; C &quot;); <br />}<br /><br /><br />/* ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH */<br /><br />ISR(TIMER0_COMP_vect)<br />{<br />static uint8_t cnt=0;<br />if(++cnt&gt;99) {<br />s1_flag=1;<br />sekundy++;<br />if(sekundy&gt;59) sekundy=0; <br />cnt=0;<br />}<br />}<br /><br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=933">krzychu0808</a> — 17 lut 2013, o 02:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krafin]]></name></author>
<updated>2013-02-17T01:59:43+01:00</updated>
<published>2013-02-17T01:59:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2368&amp;p=28384#p28384</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2368&amp;p=28384#p28384"/>
<title type="html"><![CDATA[Re: Termometr. Reset programu na sei();]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2368&amp;p=28384#p28384"><![CDATA[
A masz obsłużone to przerwanie <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=487">krafin</a> — 17 lut 2013, o 01:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzychu0808]]></name></author>
<updated>2013-02-17T01:50:06+01:00</updated>
<published>2013-02-17T01:50:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2368&amp;p=28383#p28383</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2368&amp;p=28383#p28383"/>
<title type="html"><![CDATA[Termometr. Reset programu na sei();]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2368&amp;p=28383#p28383"><![CDATA[
Witam..<br />Chciałem dzisiaj pobawić się z termometrem DS18B20 tylko mam pewien problem. Gdy w programie chce włączyć  globalne przerwania funkcją sei(); to resetuje mi się układ i program leci od nowa. Włączony mam wewnętrzny oscylator 8Mhz.<br />Wklejam tylko część kodu ponieważ nie wiem czy mogę udostępnić na forum cały kod programu z książki pana Mirosława. <br />[syntax=c]<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br /><br />#include &quot;1Wire/ds18x20.h&quot;<br /><br />void display_temp(uint8_t x);<br /><br />uint8_t czujniki_cnt;/* ilość czujników na magistrali */<br />volatile uint8_t s1_flag;/* flaga tyknięcia timera co 1 sekundę */<br />volatile uint8_t sekundy;/* licznik sekund 0-59 */<br /><br />uint8_t subzero, cel, cel_fract_bits;<br /><br />int main(void) {<br /><br /><br />TCCR0A |= (1&lt;&lt;WGM01); /* tryb CTC */<br />TCCR0B |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);/* preskaler = 1024 */<br />OCR0A=78;<br />TIMSK0 |= (1&lt;&lt;OCIE0A);/* zezwolenie na przerwanie CompareMatch */<br /><br />/* przerwanie wykonywane z częstotliwością ok 10ms (100 razy na sekundę) */<br />/* do naszych celów nie musi być to bardzo dokładne 10ms */<br /><br />lcd_init();/* inicjalizacja LCD */<br />lcd_locate(0,0);<br />lcd_str(&quot; Start 2&quot;);<br />_delay_ms(750);<br /><br />czujniki_cnt = search_sensors();<br /><br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br />_delay_ms(750);<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs[0], &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />else {<br />lcd_locate(1,0);<br />lcd_str(&quot; error &quot;);/* wyświetlamy informację o błędzie jeśli np brak czujnika lub błąd odczytu */<br />}<br /><br />/* dokonujemy odczytu temperatury z pierwszego czujnika o ile został wykryty */<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs[1], &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(9);<br />else {<br />lcd_locate(1,9);<br />lcd_str(&quot; error &quot;);<br />}<br /><br />lcd_locate(0,0);<br />lcd_str(&quot;  T1       T2&quot;); /* wyświetl napisy w zerowej linii LCD */<br />_delay_ms(750);<br />sei();/* włączamy globalne przerwania */<br />lcd_locate(0,0);<br />lcd_str(&quot; OK &quot;);<br />[/syntax]<br /><br />Aby sprawdzić czy faktycznie się resetuje to wyświetlam sobie na początku programu start, później znika i pojawia się aktualna temperatura odczekuje i chce włączyć globalne przerwania i wtedy program leci od nowa napis Start... Napis OK się nie wyświetla. <br /><br />Wyświetlacz podłączyłem pod C2-C5 i RS,RW, E pod D0-D2<br />[syntax=c]<br />#define LCD_D7PORT  C<br />#define LCD_D7 5<br />#define LCD_D6PORT  C<br />#define LCD_D6 4<br />#define LCD_D5PORT  C<br />#define LCD_D5 3<br />#define LCD_D4PORT  C<br />#define LCD_D4 2<br /><br />#define LCD_RSPORT D<br />#define LCD_RS 0<br /><br />#define LCD_RWPORT D<br />#define LCD_RW 1<br /><br />#define LCD_EPORT D<br />#define LCD_E 2<br />[/syntax]<br />Termometr podłączyłem pod PB0<br />[syntax=c]<br />#define OW_PIN  PB0<br />#define OW_IN   PINB<br />#define OW_OUT  PORTB<br />#define OW_DDR  DDRB<br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=933">krzychu0808</a> — 17 lut 2013, o 01:50</p><hr />
]]></content>
</entry>
</feed>