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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-12-10T21:03:39+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=39&amp;t=13813&amp;mode</id>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2015-12-10T21:03:39+01:00</updated>
<published>2015-12-10T21:03:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147616#p147616</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147616#p147616"/>
<title type="html"><![CDATA[Re: DS18B20 i 7-SEG LED organizacja wyświetlania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147616#p147616"><![CDATA[
<div class="quotetitle">Krauser napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">avrfun napisał(a):</div><div class="quotecontent">Nie wiem jak zaświecić kropkę dziesiętną:<br /></div><br />Przed wysłaniem na wyświetlacz należy zrobić lub nie AND ze zdefiniowaną liczbą gdzie jest tylko kropka. Zgodnie z BB ja mam tak:<br />[syntax=c]if(kropka &amp; licznik) LED_DATA &amp;= pgm_read_byte( &amp;cyfry&#91;DOT&#93; ); //DOT pozycja w tablicy cyfry[/syntax]</div><br /><br />Witam!<br />Bardzo dziękuję. Ja zrealizowałem to tak. Nie wiem czy poprawnie, ale spełnia założenia:<br />[syntax=c]const uint8_t Cyfra&#91;&#93; PROGMEM = {<br /><br />0x03,// 0 0<br />0x9F,// 1 1<br />0x25,// 2 2<br />0x0D,// 3 3<br />0x99,// 4 4<br />0x49,// 5 5<br />0x41,// 6 6<br />0x1B,// 7 7<br />0x01,// 8 8<br />0x09,// 9 9<br />0x02,// 10 0.<br />0x9E,// 11 1.<br />0x24,// 12 2.<br />0x0C,// 13 3.<br />0x98,// 14 4.<br />0x48,// 15 5.<br />0x40,// 16 6.<br />0x1A,// 17 7.<br />0x00,// 18 8.<br />0x08,// 19 9.<br />0x39,   // 20 symbol stopień<br />0xFD,   // 21 symbol &quot;-&quot;<br />0xFF,   // 22 puste miejsce<br />};[/syntax]<br />[syntax=c]void display_temp(uint8_t x) {<br />cy1 = (subzero == 1 ? 21 : 22);  /* jeżli subzero==1 wyświetla znak minus (21) (temp. ujemna), gdy inaczej puste miejsce (22) */<br />cy2 = (cel &lt; 10 ? 22 : cel/10); /* jeżeli temp&lt;10 stopni to puste miejsce (22), gdy inaczej dziesiątki temperatury */<br />cy3 = ((cel) % 10) + 10;         // jedności temperatury (cy2 z kropką)<br />cy4 = (cel_fract_bits);          // część dziesiętna stopnia<br />}[/syntax]<br /><br />Mam jeszcze jeden problem do rozwiązania (na chwilę obecną). Chciałbym wyświetlać naprzemiennie czas z rtc np (20:49): cy1=2, cy2=0, cy3=4, cy5=9 i temperaturę jak powyżej.<br />[syntax=c]init_rtc();<br />register_rtc_event_callback(pokazuj_date_czas);[/syntax]<br />naprzemiennie z:<br />[syntax=c]if ( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;1&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits)) {display_temp(0);[/syntax]<br />Jak to zrealizować?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 10 gru 2015, o 21:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-12-10T19:49:37+01:00</updated>
<published>2015-12-10T19:49:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147606#p147606</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147606#p147606"/>
<title type="html"><![CDATA[Re: DS18B20 i 7-SEG LED organizacja wyświetlania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147606#p147606"><![CDATA[
<div class="quotetitle">avrfun napisał(a):</div><div class="quotecontent"><br />Nie wiem jak zaświecić kropkę dziesiętną:<br /></div><br />Przed wysłaniem na wyświetlacz należy zrobić lub nie AND ze zdefiniowaną liczbą gdzie jest tylko kropka. Zgodnie z BB ja mam tak:<br />[syntax=c]if(kropka &amp; licznik) LED_DATA &amp;= pgm_read_byte( &amp;cyfry&#91;DOT&#93; ); //DOT pozycja w tablicy cyfry[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 10 gru 2015, o 19:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2015-12-09T22:23:10+01:00</updated>
<published>2015-12-09T22:23:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147519#p147519</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147519#p147519"/>
<title type="html"><![CDATA[Re: DS18B20 i 7-SEG LED organizacja wyświetlania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147519#p147519"><![CDATA[
Nadal nie odświeża temperatury. Odczyt jednorazowy. Debugger jednodiodowy (linia 37) nie zmienia swego stanu. Nie widzę resetowania licznika counter.<br />[syntax=c]int main(void){<br /><br />DDRC |= (1&lt;&lt;PC7);<br />PORTC |= (1&lt;&lt;PC7);<br /><br />// ustawienia TCCR0 na potrzeby timerów programowych i multipleksowania 7-segmentowych wyświetlaczy LED<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb CTC<br />TCCR2 |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20);// preskaler = 1024<br />OCR2 = 107;// 2.5ms/400Hz<br />TIMSK |= (1&lt;&lt;OCIE2);// zezwolenie na przerwanie CompareMatch<br /><br />InitSpi();<br />SendSpi(0);<br /><br />sei();<br /><br />while(1){<br />if(flag_search)<br />{<br />czujniki_cnt = search_sensors();<br />flag_search = 0;<br />}<br />if(flag_meas)<br />{<br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL);<br />flag_meas = 0;<br />}<br />if(flag_read)<br />{<br />if ( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel,<br />&amp;cel_fract_bits)) {<br />display_temp(0);<br /><br />} else {<br />}<br />flag_read = 0;<br />PORTC ^= (1&lt;&lt;PC7);<br />}<br />}<br />}<br /><br />ISR( TIMER2_COMP_vect ){<br /><br />static uint8_t anoda;<br />if(anoda == 0) disp_send(~(pgm_read_byte(&amp;Display&#91;0&#93;)), (pgm_read_byte(&amp;Cyfra&#91;cy4&#93;)));<br />else if(anoda == 1) disp_send(~(pgm_read_byte(&amp;Display&#91;1&#93;)), (pgm_read_byte(&amp;Cyfra&#91;cy3&#93;)));<br />else if(anoda == 2) disp_send(~(pgm_read_byte(&amp;Display&#91;2&#93;)), (pgm_read_byte(&amp;Cyfra&#91;cy2&#93;)));<br />else if(anoda == 3) disp_send(~(pgm_read_byte(&amp;Display&#91;3&#93;)), (pgm_read_byte(&amp;Cyfra&#91;cy1&#93;)));<br />anoda++;<br />if(anoda &gt; 3) anoda = 0;<br /><br />static uint16_t counter;<br /><br />if(0 == counter) flag_search = 1;<br />if(200 == counter) flag_meas = 1;<br />if(400 == counter) flag_read = 1;<br /><br />counter++;<br />}[/syntax]<br /><br />P.S. Zmienną counter zadeklarowałem jako volatile w programie głównym. Zerowanie licznika counter=0 ustawiłem po odczycie temperatury. Odczyt ruszył <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Ciekawi mnie tylko dlaczego części dziesiętne wyświetlane są tylko jako 0 i 5. Na LCD było płynnie 0-9.<br /><br />Nie wiem jak zaświecić kropkę dziesiętną:<br />[syntax=c]kropka = (1 &lt;&lt; 1);[/syntax]<br /><br />Mam jeszcze jeden problem. Korzystam z wyświetlania LED na magistrali SPI. Tablice dla nr wyświetlacza LED i cyfr są zdefiniowane w programie głównym (cyfry bez kropki i z kropką). W jaki sposób dopisać do tablicy Cyfra[] symbol własny np. stopień Celcjusza Hex: 0x39 i użyć go do wyświetlenia cyfry 4: cy4= ?<br />[syntax=c]const uint8_t Display&#91;6&#93; PROGMEM = {1,2,4,8,16,32}; // wybór wyświetlacza<br />const uint8_t Cyfra&#91;&#93; PROGMEM = {<br />0x03,// 0<br />0x9F,// 1<br />0x25,// 2<br />0x0D,// 3<br />0x99,// 4<br />0x49,// 5<br />0x41,// 6<br />0x1B,// 7<br />0x01,// 8<br />0x09,// 9<br /><br />0x02,// 0<br />0x9E,// 1<br />0x24,// 2<br />0x0C,// 3<br />0x98,// 4<br />0x48,// 5<br />0x40,// 6<br />0x1A,// 7<br />0x00,// 8<br />0x08,// 9<br />};[/syntax]<br /><br />Dziękuję bardzo!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 9 gru 2015, o 22:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2015-12-09T20:37:45+01:00</updated>
<published>2015-12-09T20:37:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147505#p147505</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147505#p147505"/>
<title type="html"><![CDATA[Re: DS18B20 i 7-SEG LED organizacja wyświetlania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147505#p147505"><![CDATA[
Czy warunek z timerem programowym nie ma szans powodzenia?<br />Debugger jednodiodowy pokazuje, że on działa tylko trochę nieregularnie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> :<br />[syntax=c]while(1){<br />if(!Timer1){<br />PORTC ^= (1&lt;&lt;PC7);<br />if ( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits)) {<br />display_temp(14);<br /><br />}<br />}<br />}[/syntax]<br />Gdzie wstawić[syntax=c]Timer1=400;[/syntax]:<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 9 gru 2015, o 20:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-12-09T20:23:45+01:00</updated>
<published>2015-12-09T20:23:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147501#p147501</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147501#p147501"/>
<title type="html"><![CDATA[Re: DS18B20 i 7-SEG LED organizacja wyświetlania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147501#p147501"><![CDATA[
Zrób tak (ewentualnie zmień rejestry):<br />[syntax=c]#include &lt;avr/io.h&gt;// dołączenie głównego systemowego  pliku nagłówkowego<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;d_led.h&quot;// dołączenie naszego pliku nagłówkowego (obsługa LED)<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 />volatile uint8_t flag_search, flag_meas, flag_read;<br /><br />int main(void) {<br />// ****** inicjalizacja *********<br />TCCR2A |= (1&lt;&lt;WGM01); //CTC<br />TCCR2B |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20); //preskaler 1024<br />OCR2A = F_CPU/1024/100 - 1;//100Hz<br />TIMSK2 |= (1&lt;&lt;OCIE2A);<br /><br /><br />d_led_init();   // inicjalizacja wyświetlacza multipleksowanego<br />kropka = (1 &lt;&lt; 1);   //zapal<br /><br />sei();<br />while (1) {<br />if(flag_search)<br />{<br />czujniki_cnt = search_sensors();<br />flag_search = 0;<br />}<br />if(flag_meas)<br />{<br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL);<br />flag_meas = 0;<br />}<br />if(flag_read)<br />{<br />if ( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel,<br />&amp;cel_fract_bits)) {<br />display_temp(0);<br />} else {<br />}<br />flag_read = 0;<br />}<br />}<br />}<br /><br />void display_temp(uint8_t x) {<br />cy1 = (cel) / 10;<br />cy2 = (cel) % 10;<br />cy3 = (cel_fract_bits);<br />}<br /><br />ISR( TIMER2_COMPA_vect ){<br />static uint8_t counter;<br />if(0 == counter) flag_search = 1;<br />if(100 == counter) flag_meas = 1;<br />if(200 == counter) flag_read = 1;<br />counter++;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 9 gru 2015, o 20:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2015-12-09T19:44:15+01:00</updated>
<published>2015-12-09T19:44:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147497#p147497</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147497#p147497"/>
<title type="html"><![CDATA[Re: DS18B20 i 7-SEG LED organizacja wyświetlania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147497#p147497"><![CDATA[
<div class="quotetitle">Krauser napisał(a):</div><div class="quotecontent"><br />Bo temperatura odczytywana jest tylko na starcie.<br /></div><br />Próbuję zorganizować warunek na timerze programowym, ale nadal nie działa.<br />[syntax=c]while(1){<br />if( !Timer1){<br />DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits);<br />display_temp(14);<br />}<br />}[/syntax]<br />[syntax=c]ISR( TIMER2_COMP_vect ){<br /><br />/* Timery programowe - 2.5ms/400Hz */<br />static uint16_t n;<br />n = Timer1;<br />if(n) Timer1 = --n;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 9 gru 2015, o 19:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-12-09T19:16:39+01:00</updated>
<published>2015-12-09T19:16:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147490#p147490</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147490#p147490"/>
<title type="html"><![CDATA[Re: DS18B20 i 7-SEG LED organizacja wyświetlania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147490#p147490"><![CDATA[
<div class="quotetitle">avrfun napisał(a):</div><div class="quotecontent"><br />Na Wyświetlaczu LED pojawia się wartość: 2800, a czujnik temperatury nie reaguje.<br /></div><br />Bo temperatura odczytywana jest tylko na starcie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 9 gru 2015, o 19:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2015-12-09T19:13:09+01:00</updated>
<published>2015-12-09T19:13:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147489#p147489</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147489#p147489"/>
<title type="html"><![CDATA[Re: DS18B20 i 7-SEG LED organizacja wyświetlania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147489#p147489"><![CDATA[
<div class="quotetitle">Krauser napisał(a):</div><div class="quotecontent"><br />Taka funkcja main zadziała:<br /></div><br />Dzięki, ale jeszcze nie działa. Wyświetlacz mam podłączony przez SPI. Działa prawidłowo - wyświetla wartości po wpisaniu wprost: np cy=1 itd. Kod, który napisałem na wzór Twojego kompiluje się bez błędów i ostrzeżeń. Efekt jest jednak daleki od oczekiwań. Na Wyświetlaczu LED pojawia się wartość: 2800, a czujnik temperatury nie reaguje. W innych projektach, ale z wyświetlaniem na LCD na tym samym hardware czujnik działa poprawnie. Proszę o sprawdzenie, Kod poniżej:<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;util/delay.h&gt;<br />#include &lt;avr/wdt.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &quot;1Wire/ds18x20.h&quot;<br /><br />// SPI hardware - ustawienia<br />#define MOSI PB5//   &lt;---- A (SER IN)<br />#define SCK PB7//   &lt;---- SHIFT CLOCK (SC)<br />#define CS PB4// &lt;---- LATCH CLOCK (LC)<br /><br />const uint8_t Display&#91;6&#93; PROGMEM = {1,2,4,8,16,32}; // wybór wyświetlacza<br />const uint8_t Cyfra&#91;&#93; PROGMEM = {<br />0x03,// 0<br />0x9F,// 1<br />0x25,// 2<br />0x0D,// 3<br />0x99,// 4<br />0x49,// 5<br />0x41,// 6<br />0x1B,// 7<br />0x01,// 8<br />0x09,// 9<br /><br />0x02,// 0<br />0x9E,// 1<br />0x24,// 2<br />0x0C,// 3<br />0x98,// 4<br />0x48,// 5<br />0x40,// 6<br />0x1A,// 7<br />0x00,// 8<br />0x08,// 9<br />};<br /><br />volatile uint8_t cy1, cy2, cy3, cy4;<br />uint8_t subzero, cel, cel_fract_bits, czujniki_cnt;<br /><br />void InitSpi(void);<br />void SendSpi( uint8_t bajt );<br />void disp_send( uint8_t cyfra, uint8_t segment);<br />void display_temp(uint8_t x);<br /><br />int main(void){<br /><br />// ustawienia TCCR0 na potrzeby timerów programowych i multipleksowania 7-segmentowych wyświetlaczy LED<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb CTC<br />TCCR2 |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20);// preskaler = 1024<br />OCR2 = 26;// 2.5ms/400Hz<br />TIMSK |= (1&lt;&lt;OCIE2);// zezwolenie na przerwanie CompareMatch<br /><br />InitSpi();<br />SendSpi(0);<br /><br />/* sprawdzamy ile czujników DS18xxx widocznych jest na magistrali */<br />czujniki_cnt = search_sensors();<br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<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(14);<br /><br />sei();<br /><br />while(1){<br />}<br />}<br /><br />ISR( TIMER2_COMP_vect ){<br /><br />static uint8_t anoda;<br />if(anoda == 0) disp_send(~(pgm_read_byte(&amp;Display&#91;0&#93;)), (pgm_read_byte(&amp;Cyfra&#91;cy4&#93;)));<br />else if(anoda == 1) disp_send(~(pgm_read_byte(&amp;Display&#91;1&#93;)), (pgm_read_byte(&amp;Cyfra&#91;cy3&#93;)));<br />else if(anoda == 2) disp_send(~(pgm_read_byte(&amp;Display&#91;2&#93;)), (pgm_read_byte(&amp;Cyfra&#91;cy2&#93;)));<br />else if(anoda == 3) disp_send(~(pgm_read_byte(&amp;Display&#91;3&#93;)), (pgm_read_byte(&amp;Cyfra&#91;cy1&#93;)));<br />anoda++;<br />if(anoda &gt; 3) anoda = 0;<br />}<br /><br />void display_temp(uint8_t x) {<br /><br />cy1 = (cel) / 10;<br />cy2 = (cel) % 10;<br />cy3 = (cel_fract_bits);<br />}<br /><br />void InitSpi(void){<br />/* ustawienie kierunku wyjściowego dla linii MOSI, SCK i CS */<br />DDRB |= (1&lt;&lt;MOSI)|(1&lt;&lt;SCK)|(1&lt;&lt;CS);<br />/* aktywacja  SPI, tryb pracy Master, prędkość zegara Fosc/64 */<br />SPCR |= (1&lt;&lt;SPE)|(1&lt;&lt;MSTR)|(1&lt;&lt;SPR1);<br />}<br /><br />void SendSpi( uint8_t bajt ){<br />/* wysyłamy bajt do układu Slave */<br />SPDR = bajt;<br />/* czekamy aż zostanie wysłany ostatni bit */<br />while( !(SPSR &amp; (1&lt;&lt;SPIF)) );<br /><br />/* zbocze narastające sygnału „Latch Clock” powoduje<br /> * przepisanie wartości rejestru do wyjść Qa - Qh */<br />PORTB |= (1&lt;&lt;CS);<br />/* odczekanie 1 us – czas trwania impulsu LE */<br />_delay_us(1);<br />/* przywracamy stan niski na linii LE dzięki czemu<br /> * podczas wysyłania następnego bajtu nie będą widoczne zmiany<br /> * na wyjściach Qa-Qh podczas przesuwania się rejestru do czasu<br /> * ponownego zatrzaśnięcia całego bajtu */<br />PORTB &amp;= ~(1&lt;&lt;CS);<br />}<br /><br />void disp_send( uint8_t cyfra, uint8_t anoda){<br /><br />     SPDR = cyfra;<br />     while( !(SPSR &amp; (1&lt;&lt;SPIF)) );<br />     SPDR = anoda;<br />     while( !(SPSR &amp; (1&lt;&lt;SPIF)) );<br />     // zatrzaskiwanie po wysłaniu 2 bajtów<br />     PORTB |= (1&lt;&lt;CS);<br />     PORTB &amp;= ~(1&lt;&lt;CS);<br />}<br /><br />void zs_delay (uint16_t ms){<br />while(ms--){<br />_delay_ms(1);<br />}<br />}[/syntax]<br /><br />P.S. Działa, ale nie odświeża temperatury. Po resecie widać, że jest inna <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=9310">avrfun</a> — 9 gru 2015, o 19:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-12-09T17:14:07+01:00</updated>
<published>2015-12-09T17:14:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147482#p147482</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147482#p147482"/>
<title type="html"><![CDATA[Re: DS18B20 i 7-SEG LED organizacja wyświetlania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147482#p147482"><![CDATA[
Taka funkcja main zadziała:<br />[syntax=c]#include &lt;avr/io.h&gt;// dołączenie głównego systemowego  pliku nagłówkowego<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;d_led.h&quot;// dołączenie naszego pliku nagłówkowego (obsługa LED)<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 />// ****** inicjalizacja *********<br />czujniki_cnt = search_sensors();<br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL);<br />_delay_ms(750);<br /><br />if ( DS18X20_OK<br />== DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel,<br />&amp;cel_fract_bits)) {<br />display_temp(0);<br />} else {<br /><br />}<br /><br />d_led_init();   // inicjalizacja wyświetlacza multipleksowanego<br />//kropka = (1 &lt;&lt; 1);   //zapal<br /><br />sei();<br /><br />//**********************  pętla główna<br />while (1) {<br />}<br />}<br /><br />void display_temp(uint8_t x) {<br />cy1 = (cel) / 10;<br />cy2 = (cel) % 10;<br />cy3 = (cel_fract_bits);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 9 gru 2015, o 17:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-12-09T17:04:38+01:00</updated>
<published>2015-12-09T17:04:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147481#p147481</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147481#p147481"/>
<title type="html"><![CDATA[Re: DS18B20 i 7-SEG LED organizacja wyświetlania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147481#p147481"><![CDATA[
Witam<br />To może spróbuj najpierw napisać takie coś:<br />[syntax=c]st=cel;<br />dz_st=cel_fract_bits;[/syntax]<br />i działać na st i dz_st.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 9 gru 2015, o 17:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2015-12-09T10:34:36+01:00</updated>
<published>2015-12-09T10:34:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147461#p147461</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147461#p147461"/>
<title type="html"><![CDATA[DS18B20 i 7-SEG LED organizacja wyświetlania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13813&amp;p=147461#p147461"><![CDATA[
Witam!<br /><br />Proszę o pomoc w zorganizowaniu wyświetlania temperatury na wyświetlaczu 4x7SEG (ATB V1.03) analogicznie do wyświetlania godziny:<br />[syntax=c]cy1 = (dt-&gt;hh) / 10;<br />cy2_temp = (dt-&gt;hh) % 10;<br />cy2 = cy2_temp;<br />cy3 = (dt-&gt;mm) / 10;<br />cy4 = (dt-&gt;mm) % 10;[/syntax]<br />Pomiar temperatury odbywa się za pomocą czujnika DS18B20 i z użyciem biblioteki Mirka:<br />[syntax=c]#include &quot;1Wire/ds18x20.h&quot;[/syntax]<br />[syntax=c]if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(14);[/syntax]<br />Wyświetlenie cel i cel_fract_bits w sposób jak poniżej nie daje spodziewanego efektu:<br />[syntax=c]void display_temp(uint8_t x) {<br />cy1 = (cel) / 10;<br />cy2 = (cel) % 10;<br />cy3 = (cel_fract_bits);<br />}[/syntax]<br />Na wyświetlaczu LCD działa poprawnie (oczywiście inne ciało funkcji).<br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 9 gru 2015, o 10:34</p><hr />
]]></content>
</entry>
</feed>