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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-04-10T17:39:20+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=6697&amp;mode</id>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-04-10T17:39:20+01:00</updated>
<published>2014-04-10T17:39:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77575#p77575</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77575#p77575"/>
<title type="html"><![CDATA[Re: DS18B20 i wyswietlanie na 7seg]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77575#p77575"><![CDATA[
Dobrze kombinujesz. Tak to ma być:<br />[syntax=c]void display_temp() {<br />temp1 = cel / 10; //dziesiątki<br />temp = cel % 10; //jedności<br /><br />if (temp1 != 0) //temperatura 2 cyfrowa<br />{<br />cy2 = temp1; //dziesiątki na 2 wyświetlaczu<br />if(subzero) cy1 = 13; //znak na 1 wyświetlaczu jak temp ujemna<br />else cy1 = 15;<br />}<br />else<br />{<br />cy1 = 15; //1 pusty<br />if(subzero) cy2 = 13; //znak na 2 wyświetlaczu jak temp ujemna<br />else cy2 = 15;<br />}<br />cy3 = temp; //jednostki<br />cy4 = cel_frac_bits; //po przecinku<br />}[/syntax]<br />Do kodów dodaj sobie pusty znak:<br />[syntax=c]// definicja tablicy zawierającej definicje bitowe cyfr LED<br />const uint8_t cyfry&#91;&#93; PROGMEM = {<br />0xC0,   // 0<br />0xF9,   // 1<br />0xA4,   // 2<br />0xB0,   // 3<br />0x99,   // 4<br />0x92,   // 5<br />0x82,   // 6<br />0xD8,   // 7<br />0x80,   // 8<br />0x90,   // 9<br />0x89,   //H 10<br />0x86,   //E 11<br />0xC7,   //L 12<br />0b10111111, //- 13<br />0b01111111, //. 14<br />0xFF, //pusty 15<br />};[/syntax]<br />Dodatkowo upewnij się co do kolejności wyświetlaczy wyświetlając napis HELO po starcie:<br />[syntax=c]int main(void) {<br />d_led_init();<br />cy1 = 10;<br />cy2 = 11;<br />cy3 = 12;<br />cy4 = 0;<br />sei();<br />//...[/syntax]<br />Wystarczy zapalić kropkę, ale to już w funkcji przerwania ISR(TIMER0_COMPA_vect)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 10 kwi 2014, o 17:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sq8dsr]]></name></author>
<updated>2014-04-10T17:33:17+01:00</updated>
<published>2014-04-10T17:33:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77574#p77574</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77574#p77574"/>
<title type="html"><![CDATA[Re: DS18B20 i wyswietlanie na 7seg]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77574#p77574"><![CDATA[
<div class="quotetitle">mileksk8 napisał(a):</div><div class="quotecontent"><br />Jak chce wyświetlić dziesiątki i jedności to jakie działanie powinienem zastosować?<br /></div><br /><br /><br />Jest taka funkcja nazywa się div<br />Znajduje się ona w stdlib.h, więc trzeba będzie ten plik zainkludować.<br /><br />Funkcja div wymaga użycia specjalnego typu zmiennej div_t. <br />Ten tym jest strukturą która posiada dwa pola quot i rem<br />quot to wynik całkowity po dzieleniu, a rem to część ułamkowa.<br />Dzieląc liczbę przez 10 w polu quot mamny &quot;dziesiątki&quot; a polu rem &quot;jedności&quot;<br /><br />Polecam zobaczyć poradnik Mirka o ADC. Tam jest to dobrze wyjaśnione i użyte na takim mniej więcej kodzie:<br />[syntax=c]void get_vol( uint16_t adc, TVOL * voltage ) {<br /><br /><br />uint16_t wynik = ( adc * (uint32_t)voltage-&gt;ref_v ) / voltage-&gt;ref_adc;<br /><br />div_t divmod = div(wynik, 100);<br />itoa( divmod.quot, voltage-&gt;v1, 10 );<br />itoa( divmod.rem, voltage-&gt;v2, 10);<br />if( divmod.rem &lt; 10 ) {<br />voltage-&gt;v2&#91;0&#93;='0';<br />voltage-&gt;v2&#91;1&#93;=divmod.rem+'0';<br />}<br /><br />voltage-&gt;v1&#91;2&#93;=0;<br />voltage-&gt;v2&#91;2&#93;=0;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1589">sq8dsr</a> — 10 kwi 2014, o 17:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mileksk8]]></name></author>
<updated>2014-04-10T16:51:49+01:00</updated>
<published>2014-04-10T16:51:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77569#p77569</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77569#p77569"/>
<title type="html"><![CDATA[Re: DS18B20 i wyswietlanie na 7seg]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77569#p77569"><![CDATA[
Jak chce wyświetlić dziesiątki i jedności to jakie działanie powinienem zastosować?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3540">mileksk8</a> — 10 kwi 2014, o 16:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mileksk8]]></name></author>
<updated>2014-04-10T14:31:36+01:00</updated>
<published>2014-04-10T14:31:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77562#p77562</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77562#p77562"/>
<title type="html"><![CDATA[Re: DS18B20 i wyswietlanie na 7seg]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77562#p77562"><![CDATA[
już prawie ogarnąłem tylko mam mały problem temperatura ciągle spada aż po niżej zera przy pomiarze temperatury w pokoju. Co może być przyczyną?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3540">mileksk8</a> — 10 kwi 2014, o 14:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mileksk8]]></name></author>
<updated>2014-04-10T10:26:52+01:00</updated>
<published>2014-04-10T10:26:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77540#p77540</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77540#p77540"/>
<title type="html"><![CDATA[Re: DS18B20 i wyswietlanie na 7seg]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77540#p77540"><![CDATA[
Działa już mi miałem ustawione źle fuse bity ale teraz za to nie wyświetla mi temp dobrze tylko jakieś krzaki<br /> mam taką funkcję do wyświetlania <br />[syntax=c]void display_temp()<br />{<br />temp1 = cel/10;<br />temp=cel%10;                            /* jedności wyświetlane są na W2 */<br />                 /* reszta z dzielenia modulo wyświetlana jest na W3 */<br /><br />if(temp!=0)<br />{/* sprawdzenie czy zmienna &quot;temp&quot; jest różna od zera */<br />        cy2=temp;<br />}/* jeśli tak, wyświetlacz W2 wyświetla jedności */<br />        else<br />        {<br />        cy4=11;                          /* jeśli nie, wyświetlacz W2 jest pusty */<br />}<br /><br />cy3=temp1;<br />cy2=temp;/* wyświetlacz W3 wyświetla drugą cyfrę temperatury uzyskaną z dzielenia madulo */<br />cy1=cel_frac_bits;<br />}[/syntax]<br /><br />i taką tablice w d_led.c<br />[syntax=c]const uint8_t cyfry&#91;13&#93; PROGMEM = {<br />0xC0,// 0<br />0xF9,// 1<br />0xA4,// 2<br />0xB0,// 3<br />0x99,// 4<br />0x92,// 5<br />0x82,// 6<br />0xD8,// 7<br />0x80,// 8<br />0x90,// 9<br />0x89,<br />0x86,<br />0xC7<br />};[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3540">mileksk8</a> — 10 kwi 2014, o 10:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Paul Dirac]]></name></author>
<updated>2014-04-10T07:44:16+01:00</updated>
<published>2014-04-10T07:44:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77516#p77516</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77516#p77516"/>
<title type="html"><![CDATA[Re: DS18B20 i wyswietlanie na 7seg]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77516#p77516"><![CDATA[
a wstaw przed search_sensor : while(ow_reset);<br />Nie wiem za bardzo co masz w ciele tych funkcji dla obsługi 1wire, ale ja korzystam tez podczas wywołania bitu, odbioru, inicjalizacji z tego co znalazłem w 1wirze na płycie w bb: jakaś zmienna uint8_t sreg i na początku tychże funkcji sreg = SREG; cli();a na końcu nawet przez zwracaniem (jeśli coś zwraca) SREG = sreg; sei(); . Pamiętam miałem też dziwnie wydłużony czas konwersji, zamiast 750ms, ponad 10, 12s. I szukałem przyczyny i okazało się, że wyłączenie przerwań pozwoliło mi zejść do poziomu 750 ms - z noty.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1035">Paul Dirac</a> — 10 kwi 2014, o 07:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mileksk8]]></name></author>
<updated>2014-04-09T21:35:28+01:00</updated>
<published>2014-04-09T21:35:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77495#p77495</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77495#p77495"/>
<title type="html"><![CDATA[Re: DS18B20 i wyswietlanie na 7seg]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77495#p77495"><![CDATA[
nie działa dalej wyświetla mi błąd<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br />tak jakby nie czyta mi funkcji odczytywania temperatury tylko od razu wyświetla mi to co jest pod funkcją błąd<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3540">mileksk8</a> — 9 kwi 2014, o 21:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-04-09T21:23:51+01:00</updated>
<published>2014-04-09T21:23:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77490#p77490</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77490#p77490"/>
<title type="html"><![CDATA[Re: DS18B20 i wyswietlanie na 7seg]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77490#p77490"><![CDATA[
Na początek odpal ograniczony kod (bez tego co było w pętli while(1)) i daj znać czy działa.<br />[syntax=c]int main(void) {<br />d_led_init();<br />cy1 = 0;<br />cy2 = 0;<br />cy3 = 0;<br />cy4 = 0;<br />sei();<br />czujniki_cnt = search_sensors();<br />_delay_ms(50);<br />DS18X20_start_meas(DS18X20_POWER_EXTERN, NULL);<br />_delay_ms(750);<br />//DS18X20_read_meas_single( familycode, &amp;subzero, &amp;cel, &amp;cel_frac_bits);<br />if (DS18X20_OK== DS18X20_read_meas_single(DS18B20_ID, &amp;subzero, &amp;cel, &amp;cel_frac_bits)) <br />        {<br />display_temp(subzero, cel, cel_frac_bits);<br />}<br />else<br />{<br />blad();<br /><br />}<br />        while(1);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 9 kwi 2014, o 21:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mileksk8]]></name></author>
<updated>2014-04-09T21:40:14+01:00</updated>
<published>2014-04-09T20:35:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77486#p77486</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77486#p77486"/>
<title type="html"><![CDATA[DS18B20 i wyswietlanie na 7seg]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6697&amp;p=77486#p77486"><![CDATA[
Cześć próbuję zaprogramować działanie termometru ds18b20 i wyświetlić wynik na wyświetlaczy 7seg. Od kilku dni się z tym męczę już i tracę nadzieję. Wyświetlacze na pewno są podłączone dobrze bo już testowałem je na innych programach. Termometr podłączony jest w trybie normalnym. I nic mi ni czyta od razu pokazuje błąd. Może mam jakiś głupi błąd gdzieś proszę o pomoc.<br />Oczywiście wszystkie biblioteki mam dodane zgodnie z wskazówkami Pana Mirka.<br />main.c<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;avr/delay.h&gt;<br />#include &quot;d_led.h&quot;<br />#include &quot;1Wire/ds18x20.h&quot;<br />uint8_t temp, temp1;<br />uint8_t czujniki_cnt;<br />uint8_t subzero, cel, cel_frac_bits;<br />volatile uint8_t s1_flag;<br />volatile uint8_t sekundy;<br />void display_temp()<br />{<br />temp=cel/10;                            <br />temp1 = cel%10;                 <br />{<br />if(temp!=0)                             <br />        cy2=temp;                        <br />        else<br />        cy2=14;                          <br />}<br />{<br />if (subzero &amp;&amp; temp!=0)           <br />        cy1=11;                          <br />        else<br />        cy1=14;                          <br />}<br />{<br />if (subzero &amp;&amp; temp==0)         <br />        cy2=11;                          <br />}<br />cy3=temp1;                               <br />cy4=cel_frac_bits;<br />}<br />void blad()<br />{<br />        cy1 = 11;<br />cy2 = 11;<br />cy3 = 11;<br />cy4 = 11;<br />}<br />int main(void)<br />{<br />       d_led_init();<br />        cy1=0;<br />        cy2=0;<br />        cy3=0;<br />        cy4=0;<br />        sei();<br />        czujniki_cnt = search_sensors();<br />        _delay_ms(50);<br />        DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br />        _delay_ms(750);<br />        //DS18X20_read_meas_single( familycode, &amp;subzero, &amp;cel, &amp;cel_frac_bits);<br />        if( DS18X20_OK == DS18X20_read_meas_single(DS18B20_ID, &amp;subzero, &amp;cel, &amp;cel_frac_bits) )<br />         {<br />         display_temp(subzero, cel, cel_frac_bits);<br />         }<br />         else<br />         {<br />                   blad();<br /><br />         }<br /><br /><br />           while(1)<br />        {<br />           if(s1_flag) {   <br /><br />            <br />            if( 0 == (sekundy%3) ) czujniki_cnt = search_sensors();<br />            if( 1 == (sekundy%3) ) DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br />            <br />            if( 2 == (sekundy%3) ) {<br />                    if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_frac_bits) ) display_temp(subzero, cel, cel_frac_bits);<br />                    else {<br />                    blad();<br />                    }<br />            }<br /><br />           <br />            s1_flag=0;<br />    } <br />}}[/syntax]<br /><br />ds18x20.h<br />[syntax=c]#ifndef DS18X28_H_<br />#define DS18X28_H_<br /><br />#include &lt;stdlib.h&gt;<br />#include &lt;inttypes.h&gt;<br />#include &quot;onewire.h&quot;<br /><br /><br />#define MAXSENSORS 1// &lt;----- Tutaj definiujemy maksymalną ilość czujników<br /><br /><br />/* return values */<br />#define DS18X20_OK          0x00<br />#define DS18X20_ERROR       0x01<br />#define DS18X20_START_FAIL  0x02<br />#define DS18X20_ERROR_CRC   0x03<br /><br />#define DS18X20_POWER_PARASITE 0x00<br />#define DS18X20_POWER_EXTERN   0x01<br /><br />/* DS18X20 specific values (see datasheet) */<br />#define DS18S20_ID 0x10<br />#define DS18B20_ID 0x28<br /><br />#define DS18X20_CONVERT_T0x44<br />#define DS18X20_READ0xBE<br />#define DS18X20_WRITE0x4E<br />#define DS18X20_EE_WRITE0x48<br />#define DS18X20_EE_RECALL0xB8<br />#define DS18X20_READ_POWER_SUPPLY 0xB4<br /><br />#define DS18B20_CONF_REG    4<br />#define DS18B20_9_BIT       0<br />#define DS18B20_10_BIT      (1&lt;&lt;5)<br />#define DS18B20_11_BIT      (1&lt;&lt;6)<br />#define DS18B20_12_BIT      ((1&lt;&lt;6)|(1&lt;&lt;5))<br /><br />// indefined bits in LSB if 18B20 != 12bit<br />#define DS18B20_9_BIT_UNDF       ((1&lt;&lt;0)|(1&lt;&lt;1)|(1&lt;&lt;2))<br />#define DS18B20_10_BIT_UNDF      ((1&lt;&lt;0)|(1&lt;&lt;1))<br />#define DS18B20_11_BIT_UNDF      ((1&lt;&lt;0))<br />#define DS18B20_12_BIT_UNDF      0<br /><br />// conversion times in ms<br />#define DS18B20_TCONV_12BIT      750<br />#define DS18B20_TCONV_11BIT      DS18B20_TCONV_12_BIT/2<br />#define DS18B20_TCONV_10BIT      DS18B20_TCONV_12_BIT/4<br />#define DS18B20_TCONV_9BIT       DS18B20_TCONV_12_BIT/8<br />#define DS18S20_TCONV            DS18B20_TCONV_12_BIT<br /><br />// constant to convert the fraction bits to cel*(10^-4)<br />#define DS18X20_FRACCONV         625<br /><br />#define DS18X20_SP_SIZE  9<br /><br />extern uint8_t gSensorIDs&#91;MAXSENSORS&#93;&#91;OW_ROMCODE_SIZE&#93;;<br /><br /><br />/* for description of functions see ds18x20.c */<br /><br />uint8_t search_sensors(void);<br /><br />uint8_tDS18X20_get_power_status(uint8_t id&#91;&#93;);<br /><br />uint8_t DS18X20_start_meas( uint8_t with_external, uint8_t id&#91;&#93;);<br /><br />uint8_t DS18X20_read_meas(uint8_t *id, uint8_t *subzero, uint8_t *cel, uint8_t *cel_frac_bits);<br /><br />uint8_t DS18X20_read_meas_single(uint8_t familycode,uint8_t *subzero, uint8_t *cel, uint8_t *cel_frac_bits);<br /><br />int DS18X20_temp_cmp(uint8_t subzero1, uint16_t cel1,uint8_t subzero2, uint16_t cel2);<br /><br /><br /><br />#endif /* DS18X28_H_ */[/syntax]<br />onewire.h<br />[syntax=c]#ifndef ONEWIRE_H_<br />#define ONEWIRE_H_<br /><br />#include &lt;inttypes.h&gt;<br /><br />/*******************************************/<br />/* Hardware connection                     */<br />/*******************************************/<br /><br />/* Wybór PINu oraz PORTu na magistralę 1Wire */<br />#define OW_PIN  PB2<br />#define OW_IN   PINB<br />#define OW_OUT  PORTB<br />#define OW_DDR  DDRB<br /><br /><br /><br />/*******************************************/<br /><br />#define OW_MATCH_ROM0x55<br />#define OW_SKIP_ROM    0xCC<br />#defineOW_SEARCH_ROM0xF0<br /><br />#defineOW_SEARCH_FIRST0xFF// start new search<br />#defineOW_PRESENCE_ERR0xFF<br />#defineOW_DATA_ERR    0xFE<br />#define OW_LAST_DEVICE0x00// last device found<br />//0x01 ... 0x40: continue searching<br /><br />// rom-code size including CRC<br />#define OW_ROMCODE_SIZE 8<br /><br />uint8_t ow_reset(void);<br /><br />uint8_t ow_bit_io( uint8_t b );<br />uint8_t ow_byte_wr( uint8_t b );<br />uint8_t ow_byte_rd( void );<br /><br />uint8_t ow_rom_search( uint8_t diff, uint8_t *id );<br /><br />void ow_command( uint8_t command, uint8_t *id );<br /><br />void ow_parasite_enable(void);<br />void ow_parasite_disable(void);<br />uint8_t ow_input_pin_state(void);<br /><br /><br /><br />#endif /* ONEWIRE_H_ */[/syntax]<br /><br />d_led.h<br />[syntax=c]#ifndef _d_led_h// dyrektywy zabezpieczające przed wielokrotnym dołączaniem<br />#define _d_led_h// tego samego pliku nagłówkowego jeśli będzie dołączany<br />// w wielu różnych plikach programu<br /><br />// definicje portów i pinów wyświetlacza używanych dla ułatwienia w programie jako stałe preprocesora<br />#define LED_DATA PORTD// port z podłączonymi segmentami<br />#defineLED_DATA_DIR DDRD// rejestr kierunku portu katod wyświetlaczy<br />#define ANODY_PORT PORTC// port z podłączonymi anodami- 4 bity najmłodsze<br />#define ANODY_DIR DDRC// rejestr kierunku portu anod wyświetlaczy<br /><br /><br />#define CA1 (1&lt;&lt;PC0)// CA1 oznacza bit nr.0 portu D<br />#define CA2 (1&lt;&lt;PC1)// CA2 oznacza bit nr.1 portu D<br />#define CA3 (1&lt;&lt;PC2)<br />#define CA4 (1&lt;&lt;PC3)// CA3 oznacza bit nr.2 portu D<br />// CA4 oznacza bit nr.3 portu D<br /><br />// definicje bitów dla poszczególnych segmentów LED<br />#define SEG_A (1&lt;&lt;0)<br />#define SEG_B (1&lt;&lt;1)<br />#define SEG_C (1&lt;&lt;2)<br />#define SEG_D (1&lt;&lt;3)<br />#define SEG_E (1&lt;&lt;4)<br />#define SEG_F (1&lt;&lt;5)<br />#define SEG_G (1&lt;&lt;6)<br />#define SEG_DP (1&lt;&lt;7)<br /><br /><br /><br />// same DEKLARACJE zmiennych globalnych na potrzeby wykorzystania ich w innych plikach projektu<br />// przydomek externpowoduje, iż te zmienne będą dostępne we wszystkich modułach, które dołączą plik<br />// d_led.h za pomocą dyrektywy #include<br />extern volatile uint8_t cy1;<br />extern volatile uint8_t cy2;<br />extern volatile uint8_t cy3;<br />extern volatile uint8_t cy4;<br /><br /><br /><br /><br />void d_led_init(void);<br /><br />#endif// koniec _d_led_h[/syntax]<br /><br />d_led.c<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;until/delay.h&gt;<br />#include &quot;d_led.h&quot;<br /><br />volatile uint8_t cy1;<br />volatile uint8_t cy2;<br />volatile uint8_t cy3;<br />volatile uint8_t cy4;<br /><br />const uint8_t cyfry&#91;13&#93; PROGMEM = {<br />0xC0,// 0<br />0xF9,// 1<br />0xA4,// 2<br />0xB0,// 3<br />0x99,// 4<br />0x92,// 5<br />0x82,// 6<br />0xD8,// 7<br />0x80,// 8<br />0x90,// 9<br />0x89,<br />0x86,<br />0xC7<br />};<br />void d_led_init(void)<br />{<br />        LED_DATA_DIR =0xFF;<br />        LED_DATA = 0xFF;<br />        ANODY_DIR |= CA1 | CA2 | CA3| CA4;<br />        ANODY_PORT |= CA1 | CA2 | CA3| CA4;<br /><br />        // ustawienie TIMER0<br />        TCCR2 |= (1&lt;&lt;WGM21);<br />        TCCR2 |= (1&lt;&lt;CS21)|(1&lt;&lt;CS20);<br />        OCR2 = 85;<br />        TIMSK |= (1&lt;&lt;OCIE2);<br />}<br /><br />ISR(TIMER2_COMP_vect)<br />{<br />        static uint8_t licznik=1;<br /><br />        ANODY_PORT = (ANODY_PORT &amp; 0xF0);<br /><br /><br />            if(licznik==1)       LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy1&#93; );<br />        else if(licznik==2) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy2&#93; );<br />        else if(licznik==4) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy3&#93; );<br />        else if(licznik==8) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy4&#93; );<br /><br />        ANODY_PORT = (ANODY_PORT &amp; 0xF0) | (~licznik &amp; 0x0F);<br /><br />        licznik &lt;&lt;= 1;<br />        if(licznik&gt;8) licznik = 1;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3540">mileksk8</a> — 9 kwi 2014, o 20:35</p><hr />
]]></content>
</entry>
</feed>