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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=13549&amp;mode</id>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-11-13T23:11:20+01:00</updated>
<published>2015-11-13T23:11:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145334#p145334</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145334#p145334"/>
<title type="html"><![CDATA[Re: Modywikacja kodu z BB (at8+led7seg+ds18b20)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145334#p145334"><![CDATA[
<div class="quotetitle">kicajek napisał(a):</div><div class="quotecontent"><br />natomiast brnięcie w AVR'y głęboko użaleznia - przed kompilacją skontaktuj się z lekarzem lub forumowiczem<br /></div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 13 lis 2015, o 23:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RedStar]]></name></author>
<updated>2015-11-13T21:56:08+01:00</updated>
<published>2015-11-13T21:56:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145323#p145323</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145323#p145323"/>
<title type="html"><![CDATA[Re: Modywikacja kodu z BB (at8+led7seg+ds18b20)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145323#p145323"><![CDATA[
Kropka jest i świeci <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br />A to za sprawa wstawki &quot;LED_DATA &amp;=~(SEG_DP);&quot;<br />Jakie badania ?? <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9014">RedStar</a> — 13 lis 2015, o 21:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-11-13T21:28:00+01:00</updated>
<published>2015-11-13T21:28:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145315#p145315</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145315#p145315"/>
<title type="html"><![CDATA[Re: Modywikacja kodu z BB (at8+led7seg+ds18b20)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145315#p145315"><![CDATA[
<div class="quotetitle">RedStar napisał(a):</div><div class="quotecontent"><br />No to Jedak ma znaczenie<br /></div><br />...to masz tą kropkę?<br /><div class="quotetitle">RedStar napisał(a):</div><div class="quotecontent"><br />nauki nie przerywam bo to xxxx sprawa takie programowanie,<br /></div><br />...a badania lekarskie masz aktualne  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 13 lis 2015, o 21:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RedStar]]></name></author>
<updated>2015-11-13T21:09:54+01:00</updated>
<published>2015-11-13T21:09:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145310#p145310</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145310#p145310"/>
<title type="html"><![CDATA[Re: Modywikacja kodu z BB (at8+led7seg+ds18b20)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145310#p145310"><![CDATA[
No to Jedak ma znaczenie <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> A propos tych dziesiętnych części temperatury, zmieniłem na nowy ds i pokazuje już od 0-9 nie jak poprzednio 0 albo 5. Wiec wychodzi na to ze jakiś trafiony czujnik co dziwniejsze temperaturę pokazywał dobra, poza częściami dziesiętnymi <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />:D<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 6 minutach ]</span></strong><br /><br />Dopiero podziałało to po albo..<br />Dzięki wielkie za wszelka pomoc, myślę ze na razie mi to wystarczy aczkolwiek nauki nie przerywam bo to zajebista sprawa takie programowanie, dzięki takim ludziom jak ty zyskuje coraz większe chęci na dalsza naukę <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=9014">RedStar</a> — 13 lis 2015, o 21:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-11-13T20:45:09+01:00</updated>
<published>2015-11-13T20:45:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145304#p145304</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145304#p145304"/>
<title type="html"><![CDATA[Re: Modywikacja kodu z BB (at8+led7seg+ds18b20)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145304#p145304"><![CDATA[
Nie wiem, może tak:<br />[syntax=c]else if(licznik==4) LED_DATA =(pgm_read_byte( &amp;cyfry&#91;cy3&#93;), LED_DATA |=(SEG_DP);[/syntax]<br />albo   ... LED_DATA &amp;=~(SEG_DP);<br />ew. podepnij do GND  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .<br />W każdym razie ja sprawdzam na bieżąco, i u mnie działa ( co prawda mam wyśw. wsp Kat ) ale to (chyba) bez znaczenia.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 13 lis 2015, o 20:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RedStar]]></name></author>
<updated>2015-11-13T19:57:57+01:00</updated>
<published>2015-11-13T19:57:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145297#p145297</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145297#p145297"/>
<title type="html"><![CDATA[Re: Modywikacja kodu z BB (at8+led7seg+ds18b20)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145297#p145297"><![CDATA[
To w takim razie czemu się na ostatnim wyświetlaczu(cy4) wyświetla tylko 5 albo 0 ?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 9 minutach ]</span></strong><br /><br /><div class="quotetitle">kicajek napisał(a):</div><div class="quotecontent"><br />-na &quot;cy3&quot; kropkę.. - nie wiem co masz w &quot;d_led.c&quot;, ale w przerwaniu wystarczy dopisać seg_dp:<br />[syntax=c]else if(licznik==4) ANODY_PORT = (pgm_read_byte (&amp;cyfry&#91;cy3&#93;)|SEG_DP);[/syntax] <br /><br />Pozdr.<br /></div><br />Nie, nie wystarczy nic to nie daje <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br />Tak wygląda teraz obsługa przerwania: <br />[syntax=c]// ================= PROCEDURA OBS£UGI PRZERWANIA – COMPARE MATCH<br />ISR(TIMER2_COMP_vect)<br />{<br />static uint8_t licznik=1;// zmienna do prze³¹czania kolejno anod wyrwietlacza<br /><br />ANODY_PORT = (ANODY_PORT | MASKA_ANODY);// wygaszenie wszystkich wyœwietlaczy<br /><br />if(licznik==1) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy1&#93; );// gdy zapalony wyœw.1 podaj stan zmiennej c1<br />else if(licznik==2) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy2&#93; );// gdy zapalony wyœw.2 podaj stan zmiennej c2<br />else if(licznik==4) LED_DATA =(pgm_read_byte( &amp;cyfry&#91;cy3&#93;)|SEG_DP);// gdy zapalony wyœw.3 podaj stan zmiennej c3<br />else if(licznik==8) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy4&#93; );// gdy zapalony wyœw.4 podaj stan zmiennej c4<br /><br />ANODY_PORT = (ANODY_PORT &amp; ~MASKA_ANODY) | (~licznik &amp; MASKA_ANODY);// cykliczne prze³¹czanie kolejnej anody w ka¿dym przerwaniu<br /><br />// operacje cyklicznego przesuwania bitu zapalaj¹cego anody w zmiennej licznik<br />licznik &lt;&lt;= 1;// przesuniêcie zawartoœci bitów licznika o 1 w lewo<br />if(licznik&gt;8) licznik = 1;// jeœli licznik wiêkszy ni¿ 8 to ustaw na 1<br /><br /><br />}[/syntax]<br />A tak wygląda main.c<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: Nov 11, 2015<br /> *      Author: Red'o Man<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br />#include &quot;1Wire/ds18x20.h&quot;<br />#include &quot;d_led.h&quot;<br /><br />#define LED_PIN (1&lt;&lt;PB1) //definicje pinu z diod¹ LED<br />#define LED_ON PORTB &amp;= ~LED_PIN //makrodefinicja za³¹czanie diody led<br />#define LED_OFF PORTB |= LED_PIN //makrodefinicja wy³¹czanie diody led<br />#define LED_TOG PORTB ^= LED_PIN //makrodefinicja zmiana stanu diody led<br /><br /><br />void display_temp(uint8_t x);<br /><br />uint8_t czujniki_cnt;<br />uint8_t subzero, cel, cel_fract_bits;<br />volatile uint8_t s1_flag;/* flaga tykniêcia timera co 1 sekundê */<br />volatile uint8_t sekundy;/* licznik sekund 0-59 */<br /><br />int main(void)<br />{<br />// ****** inicjalizacja *********<br />d_led_init();   // inicjalizacja wyœwietlacza multipleksowanego<br /><br />/* ustawienie TIMER1 dla F_CPU=8000000MHz */<br />TCCR1B |= (1&lt;&lt;WGM12);/* tryb CTC */<br />TCCR1B |= (1&lt;&lt;CS12)|(1&lt;&lt;CS10);/* preskaler = 1024 */<br />OCR1A = 10;/* dodatkowy podzia³ przez 78 (rej. przepe³nienia) */<br />TIMSK |= (1&lt;&lt;OCIE1B);/* zezwolenie na przerwanie CompareMatch */<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 />// testowa inicjalizacja LED7SEG<br />//cy1=E;<br />//cy2=r;<br />//cy3=r;<br />//cy4=minus;<br /><br /><br />czujniki_cnt = search_sensors();<br /><br /><br /> /* wysy³amy rozkaz wykonania pomiaru temperatury<br /> * do wszystkich czujników na magistrali 1Wire<br /> * zak³adaj¹c, ¿e zasilane s¹ w trybie NORMAL,<br /> * gdyby by³ to tryb Parasite, nale¿a³oby u¿yæ<br /> * jako pierwszego prarametru DS18X20_POWER_PARASITE */<br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br />/* czekamy 750ms na dokonanie konwersji przez pod³¹czone czujniki */<br />_delay_ms(750);<br /><br />/* dokonujemy odczytu temperatury z pierwszego czujnika o ile zosta³ wykryty */<br />/* wyœwietlamy temperaturê gdy czujnik wykryty */<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />else<br />{<br />LED_ON;<br />}<br /><br /><br />sei();/* w³¹czamy globalne przerwania */<br /><br />/* pêtla nieskoñczona */<br />while(1)<br />{<br /><br />if(s1_flag)<br />{/* sprawdzanie flagi tykniêæ timera programowego co 1 sekundê */<br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 0 sprawdzaj iloœæ dostêpnych czujników */<br />if( 0 == (sekundy%3) )<br />{<br /><br />uint8_t *cl=(uint8_t*)gSensorIDs;// pobieramy wskaŸnik do tablicy adresów czujników<br />for( uint8_t i=0; i&lt;MAXSENSORS*OW_ROMCODE_SIZE; i++) *cl++ = 0; // kasujemy ca³¹ tablicê<br />czujniki_cnt = search_sensors();// ponownie wykrywamy ile jest czujników i zape³niamy tablicê<br /><br />}<br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 1 wysy³aj rozkaz pomiaru do czujników */<br />if( 1 == (sekundy%3) ) DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 2 czyli jedn¹ sekundê po rozkazie konwersji<br /> *  dokonuj odczytu i wyœwietlania temperatur z 2 czujników jeœli s¹ pod³¹czone, jeœli nie<br /> *  to poka¿ komunikat o b³êdzie<br /> */<br />if( 2 == (sekundy%3) )<br />{<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />else<br />{<br />LED_ON;<br />}<br />if( 2 == (sekundy%3) ) LED_TOG;<br />}<br /><br />/* zerujemy flagê aby tylko jeden raz w ci¹gu sekundy wykonaæ operacje */<br />s1_flag=0;<br />} /* koniec sprawdzania flagi */<br /><br />} /* koniec pêtli nieskoñczonej */<br />}<br /><br />void display_temp(uint8_t x) {<br />if(subzero) cy1=minus ;<br />cy1=NIC ;<br />cy2=cel/10;<br />cy3=cel%10 ;<br />cy4=cel_fract_bits;<br /><br />}<br />//Procedura Przerwania<br />ISR(TIMER1_COMPB_vect)<br />{<br />static uint8_t cnt=0;<br /><br />if(++cnt&gt;99)<br />{<br />s1_flag=1;<br />sekundy++;<br />if(sekundy&gt;59) sekundy=0;<br />cnt=0;<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9014">RedStar</a> — 13 lis 2015, o 19:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-11-13T19:49:44+01:00</updated>
<published>2015-11-13T19:49:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145296#p145296</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145296#p145296"/>
<title type="html"><![CDATA[Re: Modywikacja kodu z BB (at8+led7seg+ds18b20)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145296#p145296"><![CDATA[
Witam<br /><div class="quotetitle">RedStar napisał(a):</div><div class="quotecontent"><br />To może pierwszy wyświetlacz wygasić, i jak będzie minusowa temperatura to na nim wyświetlać &quot;-&quot;<br />I jeszcze pasowało by wyświetlać na &quot;cy3&quot; kropkę przed wartościami dziesiętnymi temperatury..<br />I czy to normalne ze cześć dziesiętna to tylko 5 albo 0 ?<br />To są moje dalsze założenia..<br /></div><br />Ambitne plany  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />-pierwszy wyświetlacz wygasić, i jak.... - nie uzależniać  jego wskazania od <strong>cel</strong> tylko od <strong>subzero</strong> <br />-na &quot;cy3&quot; kropkę.. - nie wiem co masz w &quot;d_led.c&quot;, ale w przerwaniu wystarczy dopisać seg_dp:<br />[syntax=c]else if(licznik==4) ANODY_PORT = (pgm_read_byte (&amp;cyfry&#91;cy3&#93;)|SEG_DP);[/syntax] <br />I czy to... - nie to nie jest normalne.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 13 lis 2015, o 19:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RedStar]]></name></author>
<updated>2015-11-13T18:30:21+01:00</updated>
<published>2015-11-13T18:30:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145292#p145292</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145292#p145292"/>
<title type="html"><![CDATA[Re: Modywikacja kodu z BB (at8+led7seg+ds18b20)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145292#p145292"><![CDATA[
Nie zauważyłem tego.. jakoś to tak dziwnie, wszędzie TCR1B,OCIE1B a tu nagle OCR1A ?<br />Ale już działa <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 12 minutach ]</span></strong><br /><br />To teraz tak się zastanawiam skoro temperatura np. 21,5*C wyświetla się tak:<br />cy1=0<br />cy2=2<br />cy3=1<br />cy4=5<br />To może pierwszy wyświetlacz wygasić, i jak będzie minusowa temperatura to na nim wyświetlać &quot;-&quot;<br />Bo chyba raczej nigdy nie będę mierzył  temperatury większej od &quot;99&quot; i mniejszej od &quot;-99&quot;<br />I jeszcze pasowało by wyświetlać na &quot;cy3&quot; kropkę przed wartościami dziesiętnymi temperatury..<br />I czy to normalne ze cześć dziesiętna to tylko 5 albo 0 ?<br /><br />To są moje dalsze założenia..<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9014">RedStar</a> — 13 lis 2015, o 18:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-11-13T15:34:52+01:00</updated>
<published>2015-11-13T15:34:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145277#p145277</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145277#p145277"/>
<title type="html"><![CDATA[Re: Modywikacja kodu z BB (at8+led7seg+ds18b20)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145277#p145277"><![CDATA[
Witam<br />Nie potrzebnie przechodziłeś na OCR1B, widać lekkie braki w czytaniu noty.<br />W tamtym rysunku wskazałem, że WGM.. i CS'y były przypisane &quot;nie do tego TCCR'a&quot;, Ty zaś zmieniłeś wszystko choć nota pokazuje że tryb CTC &quot;regulowany&quot; jest przez...<br /><a href="https://obrazkiforum.atnel.pl/826/060aee37485fbb692b559f5e532562c5.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/826/060aee37485fbb692b559f5e532562c5.jpg" alt="Obrazek" /></a><br />...czyli przedtem było prawie dobrze: WGM12 - tryb CTC.<br />Wiesz można napisać gotowca, ale jak sam trochę podłubiesz/poszukasz to lepiej zapamiętasz.<br />I jak to mówią dwie pluskwy: &quot;jakby co to jesteśmy w kontakcie&quot;  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 13 lis 2015, o 15:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RedStar]]></name></author>
<updated>2015-11-13T12:07:39+01:00</updated>
<published>2015-11-13T12:07:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145264#p145264</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145264#p145264"/>
<title type="html"><![CDATA[Re: Modywikacja kodu z BB (at8+led7seg+ds18b20)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145264#p145264"><![CDATA[
Nie rozumiem, ustawiłem tak:<br />[syntax=c]/* ustawienie TIMER1 dla F_CPU=8000000MHz */<br />TCCR1B |= (1&lt;&lt;WGM12);/* tryb CTC */<br />TCCR1B |= (1&lt;&lt;CS12)|(1&lt;&lt;CS10);/* preskaler = 1024 */<br />OCR1B = 78;/* dodatkowy podzia³ przez 78 (rej. przepe³nienia) */<br />TIMSK |= (1&lt;&lt;OCIE1B);/* zezwolenie na przerwanie CompareMatch */[/syntax]<br />A procedura przerwania wygląda tak:<br />[syntax=c]//Procedura Przerwania<br />ISR(TIMER1_COMPB_vect)<br />{<br />static uint8_t cnt=0;<br /><br />if(++cnt&gt;99)<br />{<br />s1_flag=1;<br />sekundy++;<br />if(sekundy&gt;59) sekundy=0;<br />cnt=0;<br />}<br />}[/syntax]<br />I nic ds dalej nie odświeża temperatury..<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9014">RedStar</a> — 13 lis 2015, o 12:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-11-12T13:16:34+01:00</updated>
<published>2015-11-12T13:16:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145162#p145162</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145162#p145162"/>
<title type="html"><![CDATA[Re: Modywikacja kodu z BB (at8+led7seg+ds18b20)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145162#p145162"><![CDATA[
Witam<br /><div class="quotetitle">RedStar napisał(a):</div><div class="quotecontent"><br />co jak sadze znaczy ze timer od ds jest źle skonfigurowany..<br />[syntax=c]TCCR1A |= (1&lt;&lt;WGM12);                           /* tryb CTC */<br /> TCCR1A |= (1&lt;&lt;CS12)|(1&lt;&lt;CS10);          /* preskaler = 1024 */<br /> OCR1A = 107;                                       /* dodatkowy podzia³ przez 108 (rej. przepe³nienia) */<br /> TIMSK |= (1&lt;&lt;OCIE1A);                         /* zezwolenie na przerwanie CompareMatch */[/syntax]<br /></div><br />...a no:<br /><a href="https://obrazkiforum.atnel.pl/826/7f327c2bc7800ecbf4c5baa368a1a184.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/826/7f327c2bc7800ecbf4c5baa368a1a184.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> — 12 lis 2015, o 13:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RedStar]]></name></author>
<updated>2015-11-11T23:57:17+01:00</updated>
<published>2015-11-11T23:57:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145144#p145144</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145144#p145144"/>
<title type="html"><![CDATA[Re: Modywikacja kodu z BB (at8+led7seg+ds18b20)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145144#p145144"><![CDATA[
To tak zamiany wprowadzone, pliki od wyświetlacza  tzn. ''d_led.c&quot;' i ''d_led.h'' są takie jakie są oryginalnie w przykładzie z płytki bb.<br /><br />zmiany w kodzie:<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: Nov 11, 2015<br /> *      Author: Red'o Man<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;1Wire/ds18x20.h&quot;<br />#include &quot;d_led.h&quot;<br /><br />void display_temp(uint8_t x);<br /><br />uint8_t czujniki_cnt;<br />uint8_t subzero, cel, cel_fract_bits;<br />volatile uint8_t s1_flag;/* flaga tykniêcia timera co 1 sekundê */<br />volatile uint8_t sekundy;/* licznik sekund 0-59 */<br /><br />int main(void)<br />{<br />// ****** inicjalizacja *********<br />d_led_init();   // inicjalizacja wyœwietlacza multipleksowanego<br /><br />/* ustawienie TIMER0 dla F_CPU=11,0592MHz */<br />TCCR1A |= (1&lt;&lt;WGM12);/* tryb CTC */<br />TCCR1A |= (1&lt;&lt;CS12)|(1&lt;&lt;CS10);/* preskaler = 1024 */<br />OCR1A = 107;/* dodatkowy podzia³ przez 108 (rej. przepe³nienia) */<br />TIMSK |= (1&lt;&lt;OCIE1A);/* zezwolenie na przerwanie CompareMatch */<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 />// testowa inicjalizacja LED7SEG<br />//cy1=E;<br />//cy2=r;<br />//cy3=r;<br />//cy4=minus;<br /><br /><br />sei();<br /><br />czujniki_cnt = search_sensors();<br /><br /><br /> /* wysy³amy rozkaz wykonania pomiaru temperatury<br /> * do wszystkich czujników na magistrali 1Wire<br /> * zak³adaj¹c, ¿e zasilane s¹ w trybie NORMAL,<br /> * gdyby by³ to tryb Parasite, nale¿a³oby u¿yæ<br /> * jako pierwszego prarametru DS18X20_POWER_PARASITE */<br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br />/* czekamy 750ms na dokonanie konwersji przez pod³¹czone czujniki */<br />_delay_ms(750);<br /><br />/* dokonujemy odczytu temperatury z pierwszego czujnika o ile zosta³ wykryty */<br />/* wyœwietlamy temperaturê gdy czujnik wykryty */<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />else<br />{<br />LED_ON;<br />}<br /><br /><br />sei();/* w³¹czamy globalne przerwania */<br /><br />/* pêtla nieskoñczona */<br />while(1)<br />{<br /><br />if(s1_flag)<br />{/* sprawdzanie flagi tykniêæ timera programowego co 1 sekundê */<br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 0 sprawdzaj iloœæ dostêpnych czujników */<br />if( 0 == (sekundy%3) )<br />{<br /><br />uint8_t *cl=(uint8_t*)gSensorIDs;// pobieramy wskaŸnik do tablicy adresów czujników<br />for( uint8_t i=0; i&lt;MAXSENSORS*OW_ROMCODE_SIZE; i++) *cl++ = 0; // kasujemy ca³¹ tablicê<br />czujniki_cnt = search_sensors();// ponownie wykrywamy ile jest czujników i zape³niamy tablicê<br /><br />}<br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 1 wysy³aj rozkaz pomiaru do czujników */<br />if( 1 == (sekundy%3) ) DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 2 czyli jedn¹ sekundê po rozkazie konwersji<br /> *  dokonuj odczytu i wyœwietlania temperatur z 2 czujników jeœli s¹ pod³¹czone, jeœli nie<br /> *  to poka¿ komunikat o b³êdzie<br /> */<br />if( 2 == (sekundy%3) )<br />{<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />else<br />{<br />LED_ON;<br />}<br /><br />}<br /><br />/* zerujemy flagê aby tylko jeden raz w ci¹gu sekundy wykonaæ operacje */<br />s1_flag=0;<br />} /* koniec sprawdzania flagi */<br /><br />} /* koniec pêtli nieskoñczonej */<br />}<br /><br />void display_temp(uint8_t x) {<br />//if(subzero)  ;<br />cy1=cel/100 ;<br />cy2=cel/10;<br />cy3=cel%10  ;<br />cy4=cel_fract_bits;<br /><br />}<br />//Procedura Przerwania<br />ISR(TIMER1_COMPA_vect)<br />{<br />static uint8_t cnt=0;<br /><br />if(++cnt&gt;99)<br />{<br />s1_flag=1;<br />sekundy++;<br />if(sekundy&gt;59) sekundy=0;<br />cnt=0;<br />}<br />}[/syntax]<br />Reset nic nie daje, dodam ze po usunięciu ''//'' z przez testowej inicjalizacji wyświetlacza pokazuje se ''Err-'' , czyli dokładnie to co ma się pokazywać..<br />Po wprowadzonych zmianach dalej same zera. Nie wiem tez czy timer1 dobrze odpalony, eclipse nie wywala żadnych błędów..<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 17 minutach ]</span></strong><br /><br />Okej stwierdzam ze jestem głupi..<br />Okazało się ze czujnik w bibliotece był przypisany do PD7 a tam był wpięty segment kropki, a czujnik siedział na PB0...<br />Odczyt jest w postaci &quot;0270&quot; po resecie się zmienia dopiero, co jak sadze znaczy ze timer od ds jest źle skonfigurowany..<br />Połowiczny sukces jest <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=9014">RedStar</a> — 11 lis 2015, o 23:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-11-12T13:06:59+01:00</updated>
<published>2015-11-11T23:41:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145140#p145140</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145140#p145140"/>
<title type="html"><![CDATA[Re: Modywikacja kodu z BB (at8+led7seg+ds18b20)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145140#p145140"><![CDATA[
Witam<br /><div class="quotetitle">RedStar napisał(a):</div><div class="quotecontent"><br />nie lepiej było by odczyt z ds zapisać w tabeli<br /></div><br />Nie bardzo wiem o co z tymi tabelami Ci chodzi, ale jak masz zamiar rozpisać (tylko dodatnie) temp. od 0 do np.:50stC w skoku 0,1st?. Przecież tak cel jak i cel_fr... to są &quot;żywe&quot; liczby.<br />To jest dziwne, że masz zera a nie NIC lub 8888 bo to by już o czymś świadczyło ( no chyba że w tym splocie nieszczęść nie łączy seg_G).<br />Spróbuj po wgraniu programu nacisnąć RESET.<br />Tego Ci nie potrzeba<br />[syntax=c]licz1 = cel/100 ;<br />licz2 = cel/10  ;<br />licz3 = cel%10  ;[/syntax]<br />Zapisz tak jak Ci podałem.(źle się wyraziłem: proponuję abyś ....)<br /><br />EDIT: ( dość późno pisałem  <img src="https://forum.atnel.pl/images/smilies/icon_neutral.gif" alt=":|" title="Średnio zadowolony" /> )<br />[syntax=c]void display_temp(void) {<br />                //if(subzero)  ;<br /><br />                cy1=cel/100 ;<br />                cy2=(cel/10)%10 ;<br />                cy3=cel%10 ;<br />                cy4=cel_fract_bits ;<br /><br />}[/syntax]<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 11 lis 2015, o 23:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RedStar]]></name></author>
<updated>2015-11-11T23:08:00+01:00</updated>
<published>2015-11-11T23:08:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145138#p145138</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145138#p145138"/>
<title type="html"><![CDATA[Re: Modywikacja kodu z BB (at8+led7seg+ds18b20)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145138#p145138"><![CDATA[
Propo tego rozbijania, nie lepiej było by odczyt z ds zapisać w tabeli i dopiero z tabeli to obrabiać?<br />Props timera <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Tez mi się wydawało ze to kiepski pomysł. Jutro jak będzie czas to nad tym popracuje, dzisiaj już raczej nic nie wykombinuje ..<br />Jak na razie postaram się wyświetlić jakakolwiek temperaturę <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br />Chyba namieszałem<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: Nov 11, 2015<br /> *      Author: Red'o Man<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;1Wire/ds18x20.h&quot;<br />#include &quot;d_led.h&quot;<br /><br />void display_temp(uint8_t x);<br /><br />uint8_t czujniki_cnt;<br />uint8_t subzero, cel, cel_fract_bits;<br />uint8_t licz1, licz2, licz3, licz4 ;<br />volatile uint8_t s1_flag;/* flaga tykniêcia timera co 1 sekundê */<br />volatile uint8_t sekundy;/* licznik sekund 0-59 */<br /><br />int main(void)<br />{<br />// ****** inicjalizacja *********<br />d_led_init();   // inicjalizacja wyœwietlacza multipleksowanego<br /><br />// testowa inicjalizacja LED7SEG<br />//cy1=E;<br />//cy2=r;<br />//cy3=r;<br />//cy4=kropka;<br /><br /><br />sei();<br /><br />czujniki_cnt = search_sensors();<br /><br /><br /> /* wysy³amy rozkaz wykonania pomiaru temperatury<br /> * do wszystkich czujników na magistrali 1Wire<br /> * zak³adaj¹c, ¿e zasilane s¹ w trybie NORMAL,<br /> * gdyby by³ to tryb Parasite, nale¿a³oby u¿yæ<br /> * jako pierwszego prarametru DS18X20_POWER_PARASITE */<br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br />/* czekamy 750ms na dokonanie konwersji przez pod³¹czone czujniki */<br />_delay_ms(750);<br /><br />/* dokonujemy odczytu temperatury z pierwszego czujnika o ile zosta³ wykryty */<br />/* wyœwietlamy temperaturê gdy czujnik wykryty */<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />else<br />{<br />LED_ON;<br />}<br /><br /><br />sei();/* w³¹czamy globalne przerwania */<br /><br />/* pêtla nieskoñczona */<br />while(1)<br />{<br /><br />if(s1_flag)<br />{/* sprawdzanie flagi tykniêæ timera programowego co 1 sekundê */<br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 0 sprawdzaj iloœæ dostêpnych czujników */<br />if( 0 == (sekundy%3) )<br />{<br /><br />uint8_t *cl=(uint8_t*)gSensorIDs;// pobieramy wskaŸnik do tablicy adresów czujników<br />for( uint8_t i=0; i&lt;MAXSENSORS*OW_ROMCODE_SIZE; i++) *cl++ = 0; // kasujemy ca³¹ tablicê<br />czujniki_cnt = search_sensors();// ponownie wykrywamy ile jest czujników i zape³niamy tablicê<br /><br />}<br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 1 wysy³aj rozkaz pomiaru do czujników */<br />if( 1 == (sekundy%3) ) DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 2 czyli jedn¹ sekundê po rozkazie konwersji<br /> *  dokonuj odczytu i wyœwietlania temperatur z 2 czujników jeœli s¹ pod³¹czone, jeœli nie<br /> *  to poka¿ komunikat o b³êdzie<br /> */<br />if( 2 == (sekundy%3) )<br />{<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />else<br />{<br />LED_ON;<br />}<br /><br />}<br /><br />/* zerujemy flagê aby tylko jeden raz w ci¹gu sekundy wykonaæ operacje */<br />s1_flag=0;<br />} /* koniec sprawdzania flagi */<br />licz1 = cel/100 ;<br />licz2 = cel/10  ;<br />licz3 = cel%10  ;<br />} /* koniec pêtli nieskoñczonej */<br />}<br /><br />void display_temp(uint8_t x) {<br />//if(subzero)  ;<br />cy1=licz1;<br />cy2=licz2;<br />cy3=licz3 ;<br />cy4=cel_fract_bits;<br /><br />}[/syntax]<br />Takie coś zrobiłem ale nic się nie wyświetla, ciągle same zera. <br />Czyżby brak osobnego timera dla ds był tu problemem?<br />Dodam ze dioda która ma sygnalizować błędy w odczytu temp z ds nie świeci..<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 31 minutach ]</span></strong><br /><br /><div class="quotetitle">kicajek napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">RedStar napisał(a):</div><div class="quotecontent">nie mogę odnaleźć nigdzie w kodzie tego przyczyny<br /></div><br />Nie wiem co dłubałeś przy pliku led7 ale u mnie działa prawidłowo, z tym że osobne timery do temp. i 7_led.<br /><br />Pozdr.</div><br />Pomogło usuniecie moich zmian w pliku d_led.c<br />W sumie i tak muszę odpalić drugi timer dla ds, Czy do tego celu nadaje cie timer1 ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9014">RedStar</a> — 11 lis 2015, o 23:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-11-11T23:29:06+01:00</updated>
<published>2015-11-11T22:55:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145136#p145136</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145136#p145136"/>
<title type="html"><![CDATA[Re: Modywikacja kodu z BB (at8+led7seg+ds18b20)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145136#p145136"><![CDATA[
<div class="quotetitle">RedStar napisał(a):</div><div class="quotecontent"><br />muszę rozkminić jak podawać pojedyncze cyfry z cel na każdy wyświetlacz z osobna?<br /></div><br />Przecież Ci podałem  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><div class="quotetitle">RedStar napisał(a):</div><div class="quotecontent"><br />Jesli chodzi o przerwanie to zmodyfikowałem biblioteke d_led.c w ktorej znajduje sie obsluga przerwania, tak by obslugiwalo to przerwanie rowniez czujniki.<br /></div><br />To raczej kiepski pomysł, lepiej odpal drugi timer.<br /><div class="quotetitle">RedStar napisał(a):</div><div class="quotecontent"><br />nie mogę odnaleźć nigdzie w kodzie tego przyczyny<br /></div><br />Nie wiem co dłubałeś przy pliku led7 ale u mnie działa prawidłowo, z tym że osobne timery do temp. i 7_led.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 11 lis 2015, o 22:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RedStar]]></name></author>
<updated>2015-11-11T22:48:08+01:00</updated>
<published>2015-11-11T22:48:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145134#p145134</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145134#p145134"/>
<title type="html"><![CDATA[Re: Modywikacja kodu z BB (at8+led7seg+ds18b20)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145134#p145134"><![CDATA[
Rozumiem ze to nie jest pełne rozwiązanie, muszę rozkminić jak podawać pojedyncze cyfry z cel na każdy wyświetlacz z osobna?<br />I jeszcze jedno nie wiem jak to się stało bo nie mogę odnaleźć  nigdzie w kodzie  tego przyczyny, mianowicie wyświetlacz pokazuje oczywiście 0000, ale w ostatnim szybko miga się kropka.<br />Jakieś sugestie?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9014">RedStar</a> — 11 lis 2015, o 22:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-11-11T20:20:57+01:00</updated>
<published>2015-11-11T20:20:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145117#p145117</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145117#p145117"/>
<title type="html"><![CDATA[Re: Modywikacja kodu z BB (at8+led7seg+ds18b20)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145117#p145117"><![CDATA[
Witam<br />Zacząć by od tego, że nie możesz w ten sposób wyświetlić temp.<br />Zmienna<strong> cel</strong> podawana jest w pełnych stopniach więc odczyt na poszcz. wyświetlacze musisz rozbić:<br />[syntax=c]cy1=cel/100 ;<br />cy2=cel/10 ;<br />cy3=cel%10 ;[/syntax]<br />natomiast wartość dziesiętna to<br />[syntax=c]cy4=cel_fract_bits[/syntax]<br />To tak na początek.<br />Jak to odpalisz to pomyślimy na gaszeniu nieznaczących zer.<br /><div class="quotetitle">RedStar napisał(a):</div><div class="quotecontent"><br />czy opłaca się w to dalej brnąć<br /></div><br />To zależy co masz na myśli; gotowy termometr made in wiadomo to koszt 10PLN  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />natomiast brnięcie w AVR'y głęboko użaleznia - przed kompilacją skontaktuj się z lekarzem lub forumowiczem  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 11 lis 2015, o 20:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RedStar]]></name></author>
<updated>2015-11-11T19:13:36+01:00</updated>
<published>2015-11-11T19:13:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145107#p145107</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145107#p145107"/>
<title type="html"><![CDATA[Modywikacja kodu z BB (at8+led7seg+ds18b20)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13549&amp;p=145107#p145107"><![CDATA[
Witam..<br />Na początku pragnę wspomnieć ze jestem prosto z zieleniaka XD<br />Mianowicie stwierdziłem ze zrobię sobie termometr na ds18b20 i wyświetlaczu 7seg. <br />Wiec złożyłem wyświetlacz przetestowałem programikiem z płytki (03_Multi_LED), no i działa pięknie śmiga i wgl. <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br />Wiec stworzycielem nowy projekt, jako baza posłużył kod z testu, wyciąłem z niego niepotrzebne rzeczy, z projektu 10_1wire <br />zapożyczyłem biblioteki do obsługi 1wire i ds18b20, oraz z pliku main.c tegoż projektu zapożyczyłem obsługę tychże czujników, wycinając oczywiście elementy które były odpowiedzialne za wyświetlanie temp na LCD<br />Jesli chodzi o przerwanie to zmodyfikowałem biblioteke  d_led.c w ktorej znajduje sie obsluga przerwania, tak by obslugiwalo to przerwanie rowniez czujniki.<br />Teraz listing z main.c mojego Frankensteina..<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;1Wire/ds18x20.h&quot;<br />#include &quot;d_led.h&quot;<br /><br />void display_temp(uint8_t x);<br /><br />uint8_t czujniki_cnt;/* iloœæ czujników na magistrali */<br />uint8_t subzero, cel, cel_fract_bits;<br />volatile uint8_t s1_flag;/* flaga tykniêcia timera co 1 sekundê */<br />volatile uint8_t sekundy;/* licznik sekund 0-59 */<br /><br />int main(void)<br />{<br />// ****** inicjalizacja *********<br />d_led_init();   // inicjalizacja wyœwietlacza multipleksowanego<br /><br />// testowa inicjalizacja LED7SEG<br />//cy1=E;<br />//cy2=r;<br />//cy3=r;<br />//cy4=kropka;<br /><br /><br />sei();<br /><br />czujniki_cnt = search_sensors();<br /><br /><br /> /* wysy³amy rozkaz wykonania pomiaru temperatury<br /> * do wszystkich czujników na magistrali 1Wire<br /> * zak³adaj¹c, ¿e zasilane s¹ w trybie NORMAL,<br /> * gdyby by³ to tryb Parasite, nale¿a³oby u¿yæ<br /> * jako pierwszego prarametru DS18X20_POWER_PARASITE */<br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br />/* czekamy 750ms na dokonanie konwersji przez pod³¹czone czujniki */<br />_delay_ms(750);<br /><br />/* dokonujemy odczytu temperatury z pierwszego czujnika o ile zosta³ wykryty */<br />/* wyœwietlamy temperaturê gdy czujnik wykryty */<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />else<br />{<br />LED_ON;<br />}<br /><br /><br />sei();/* w³¹czamy globalne przerwania */<br /><br />/* pêtla nieskoñczona */<br />while(1)<br />{<br /><br />if(s1_flag)<br />{/* sprawdzanie flagi tykniêæ timera programowego co 1 sekundê */<br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 0 sprawdzaj iloœæ dostêpnych czujników */<br />if( 0 == (sekundy%3) )<br />{<br /><br />uint8_t *cl=(uint8_t*)gSensorIDs;// pobieramy wskaŸnik do tablicy adresów czujników<br />for( uint8_t i=0; i&lt;MAXSENSORS*OW_ROMCODE_SIZE; i++) *cl++ = 0; // kasujemy ca³¹ tablicê<br />czujniki_cnt = search_sensors();// ponownie wykrywamy ile jest czujników i zape³niamy tablicê<br /><br />}<br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 1 wysy³aj rozkaz pomiaru do czujników */<br />if( 1 == (sekundy%3) ) DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 2 czyli jedn¹ sekundê po rozkazie konwersji<br /> *  dokonuj odczytu i wyœwietlania temperatur z 2 czujników jeœli s¹ pod³¹czone, jeœli nie<br /> *  to poka¿ komunikat o b³êdzie<br /> */<br />if( 2 == (sekundy%3) )<br />{<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />else<br />{<br />LED_ON;<br />}<br /><br />}<br /><br />/* zerujemy flagê aby tylko jeden raz w ci¹gu sekundy wykonaæ operacje */<br />s1_flag=0;<br />} /* koniec sprawdzania flagi */<br />} /* koniec pêtli nieskoñczonej */<br />}<br /><br />void display_temp(uint8_t x) {<br />//if(subzero)  ;<br />cy1=cel ;<br />cy2=cel ;<br />cy3=cel ;<br />cy4=cel ;<br /><br />}[/syntax] <br />oraz czesc zmodyfikowana z biblioteki d_led.c<br />[syntax=c]// ================= PROCEDURA OBS£UGI PRZERWANIA – COMPARE MATCH<br />ISR(TIMER2_COMP_vect)<br />{<br />static uint8_t licznik=1;// zmienna do prze³¹czania kolejno anod wyrwietlacza<br />static uint8_t cnt=0;<br /><br />ANODY_PORT = (ANODY_PORT | MASKA_ANODY);// wygaszenie wszystkich wyœwietlaczy<br /><br />if(licznik==1) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy1&#93; );// gdy zapalony wyœw.1 podaj stan zmiennej c1<br />else if(licznik==2) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy2&#93; );// gdy zapalony wyœw.2 podaj stan zmiennej c2<br />else if(licznik==4) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy3&#93; );// gdy zapalony wyœw.3 podaj stan zmiennej c3<br />else if(licznik==8) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy4&#93; );// gdy zapalony wyœw.4 podaj stan zmiennej c4<br /><br />ANODY_PORT = (ANODY_PORT &amp; ~MASKA_ANODY) | (~licznik &amp; MASKA_ANODY);// cykliczne prze³¹czanie kolejnej anody w ka¿dym przerwaniu<br /><br />// operacje cyklicznego przesuwania bitu zapalaj¹cego anody w zmiennej licznik<br />licznik &lt;&lt;= 1;// przesuniêcie zawartoœci bitów licznika o 1 w lewo<br />if(licznik&gt;8) licznik = 1;// jeœli licznik wiêkszy ni¿ 8 to ustaw na 1<br /><br />if(++cnt&gt;99)<br />{/* gdy licznik ms &gt; 99 (minê³a 1 sekunda) */<br />s1_flag=1;/* ustaw flagê tykniêcia sekundy */<br />sekundy++;/* zwiêksz licznik sekund */<br />if(sekundy&gt;59) sekundy=0; /* jeœli iloœæ sekund &gt; 59 - wyzeruj */<br />cnt=0;/* wyzeru licznik setnych ms */<br />}<br /><br />}[/syntax]<br /><br />Teraz tak, czy to ma prawo działać? To chciałbym wiedzieć priorytetowo. ( czy opłaca się w to dalej brnąć)<br />A jak ma to jak mam wyświetlać temperaturę na tym wyświetlaczu? W kodzie widać moje próby na ten temat XD<br /><br /><br />I jeszcze jedno...<br />Prosze nie bijcie mnie za to świętokractwo i za moja ułomność <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9014">RedStar</a> — 11 lis 2015, o 19:13</p><hr />
]]></content>
</entry>
</feed>