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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2021-09-13T17:21:19+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=23915&amp;mode</id>
<entry>
<author><name><![CDATA[fofex]]></name></author>
<updated>2021-09-13T17:21:19+01:00</updated>
<published>2021-09-13T17:21:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233561#p233561</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233561#p233561"/>
<title type="html"><![CDATA[Re: multipleksowanie wyswietlacza LED - zapis do FLASH]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233561#p233561"><![CDATA[
<div class="quotetitle">krawi92 napisał(a):</div><div class="quotecontent"><br />Co muszę doczytać, żeby to zrozumieć?<br /></div><br />O reprezentacji liczb ujemnych a więc o tzw. kodzie uzupełnień do dwóch. <br /><br />1. Wyrażenie (1&lt;&lt;7) to binarnie 0b0000000010000000, dziesiętnie 128. <br />2. Po zaaplikowaniu negacji bitowej 0b1111111101111111 dziesiętnie -129. <br />3. Po obcięciu starszego bajta: 01111111 dziesiętnie 127. <br />Obcięcie spowodowało utratę bitu znaku - kompilator emituje ostrzeżenie.<br /><br />1. Wyrażenie (1&lt;&lt;6) to binarnie 0b0000000001000000 dziesiętnie 64<br />2. Po negacji bitowej 1111111110111111 dziesiętnie -65<br />3. Po obcięciu starszego bajta 0b10111111, dziesiętnie -65<br />Nie nastąpiła utrata znaku - brak ostrzeżenia.<br /><br />Domyślnie stałe takie jak 1 są interpretowane jako int a więc jako liczba ze znakiem. Można wymusić by stała była traktowana jako liczba bez znaku, i uniknąć nieprzyjemności związanych z bitem znaku, dopisując do stałej u lub U czyli np. 1U. A więc w Twoim przypadku pozbędziesz się ostrzeżenia definiując segment jako<br />#define SEG_DP (1U&lt;&lt;7)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21072">fofex</a> — 13 wrz 2021, o 17:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krawi92]]></name></author>
<updated>2021-09-13T11:58:46+01:00</updated>
<published>2021-09-13T11:58:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233560#p233560</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233560#p233560"/>
<title type="html"><![CDATA[Re: multipleksowanie wyswietlacza LED - zapis do FLASH]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233560#p233560"><![CDATA[
Głupio aż, ale nie rozumiem tego. Rozpisuje sobie na kartce binarnie te liczby, neguje, sumuje te wagi i nie wiem jak to jest ze wychodzę poza zakres 8bit. Co muszę doczytać, żeby to zrozumieć?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21771">krawi92</a> — 13 wrz 2021, o 11:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2021-09-12T21:34:10+01:00</updated>
<published>2021-09-12T21:34:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233559#p233559</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233559#p233559"/>
<title type="html"><![CDATA[Re: multipleksowanie wyswietlacza LED - zapis do FLASH]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233559#p233559"><![CDATA[
<div class="quotetitle">krawi92 napisał(a):</div><div class="quotecontent"><br />No i nie wiem czemu wyrażenie 1&lt;&lt;7 jest 16 bitowe. A przy wyrażeniu 1&lt;&lt;6 nie krzyczy nic.<br /></div><br />Pisałem tobie, że KAŻDE takie wyrażenie jest 16 bitowe a ty mieszasz sobie sam w głowie pisząc o krzyczeniu.<br /><br />Przy ~(1&lt;&lt;7) jest taki efekt, bo ustawiając najstarszy bit zmienia się znak, przez co w zapisie binarnym muszą zmienić się również bity starszego bajtu skoro liczba ma być ujemna w typie int. Przy ~(1&lt;&lt;6) wyrażenie 8-bitowe nie staje się liczbą ujemną a starszy bajt jest = 0.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 12 wrz 2021, o 21:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krawi92]]></name></author>
<updated>2021-09-12T14:54:30+01:00</updated>
<published>2021-09-12T14:54:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233558#p233558</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233558#p233558"/>
<title type="html"><![CDATA[Re: multipleksowanie wyswietlacza LED - zapis do FLASH]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233558#p233558"><![CDATA[
Już wiem, w którym miejscu zrobić to rzutowanie <br />(uint8_t)~(SEG_DP), // kropka<br />Ale nadal nie mogę zrozumieć, dlaczego akurat przy tej operacji bitowej wywala warning. :/<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21771">krawi92</a> — 12 wrz 2021, o 14:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krawi92]]></name></author>
<updated>2021-09-12T13:32:03+01:00</updated>
<published>2021-09-12T13:32:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233557#p233557</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233557#p233557"/>
<title type="html"><![CDATA[Re: multipleksowanie wyswietlacza LED - zapis do FLASH]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233557#p233557"><![CDATA[
Nie wiem jak to zastosować teraz w kodzie. Mam to zrobić w #define gdzie definiuje co to jest SEG_DP czy w zawartości tablicy?<br />No i nie wiem czemu wyrażenie 1&lt;&lt;7 jest 16 bitowe. A przy wyrażeniu 1&lt;&lt;6 nie krzyczy nic.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21771">krawi92</a> — 12 wrz 2021, o 13:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2021-09-12T13:13:29+01:00</updated>
<published>2021-09-12T13:13:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233556#p233556</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233556#p233556"/>
<title type="html"><![CDATA[Re: multipleksowanie wyswietlacza LED - zapis do FLASH]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233556#p233556"><![CDATA[
<div class="quotetitle">krawi92 napisał(a):</div><div class="quotecontent"><br />Ktoś rozjaśni czego tu nie kumam?<br /></div><br /><br />Nie rozumiesz tego, że w AVR GCC jest domyślna promocja do typu INT. A to oznacza, że jeśli nie zastosujemy jawnego rzutowania np<br /><br />[syntax=c](uint8_t)(1&lt;&lt;7)[/syntax]<br /><br />to właśnie spotkasz się z warningiem.<br /><br />Wszystkie stałe zdefiniowane za pomocą #define, albo stałe dosłowne czyli właśnie (1&lt;&lt;7) kompilator rzutuje sobie domyślnie ale niejawnie do typu int (2 bajty) więc jeśli robisz operację<br /><br />[syntax=c]uint8_t a = (1&lt;&lt;7); // to masz warning[/syntax]<br /><br />bo zmienna a jest 8-bitowa a obliczone wyrażenie w nawiasach jest 16-bitowe (int) więc kompilator ostrzega cię, że utracisz starszy bajt<br /><br />wystarczy że zrobisz jawne rzutowanie<br /><br />[syntax=c]uint8_t a = (uint8_t)(1&lt;&lt;7); // i nie będzie warninga[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 12 wrz 2021, o 13:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krawi92]]></name></author>
<updated>2021-09-12T12:36:16+01:00</updated>
<published>2021-09-12T12:36:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233555#p233555</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233555#p233555"/>
<title type="html"><![CDATA[Re: multipleksowanie wyswietlacza LED - zapis do FLASH]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233555#p233555"><![CDATA[
Bluebook o tym wspomina, bo pamiętam to, jednak jeszcze ciężko skojarzyć wszystkie fakty, gdy się stykam z czymś 1x. I może jeszcze jedno pytanie trochę poza tematem. W BB jest zdefiniowana tablica uint8 i w niej cyfry. Gdy jednak do tej tablicy dodam kropkę DP która jest u mnie na pd7 to zapis wtedy jest 1&lt;&lt;7. Ale wtedy mam warning że używam nieodpowiedniego typu, dopiero gdy zrobię uint16 to jest ok. Średnio to rozumiem, przecież nie wychodzę poza 1 bajt,jestem na samym końcu bajtu a typ muszę zwiększyć hmmm. Ktoś rozjaśni czego tu nie kumam?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21771">krawi92</a> — 12 wrz 2021, o 12:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tonygryps]]></name></author>
<updated>2021-09-12T11:25:43+01:00</updated>
<published>2021-09-12T11:25:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233554#p233554</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233554#p233554"/>
<title type="html"><![CDATA[Re: multipleksowanie wyswietlacza LED - zapis do FLASH]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233554#p233554"><![CDATA[
Zrobiłeś dobrze Bluebook był pisany kiedy zamiast atmelowskiego tulczaina był win avr a tam nie trzeba było dopisywać specyfikatora const dopiero później atmel to uporządkował i wypuścił tulczain w którym trzeba stosować ten specyfikator (const) i słusznie zobacz co on znaczy sam się przekonasz<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12014">tonygryps</a> — 12 wrz 2021, o 11:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krawi92]]></name></author>
<updated>2021-09-12T11:08:01+01:00</updated>
<published>2021-09-12T11:08:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233553#p233553</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233553#p233553"/>
<title type="html"><![CDATA[multipleksowanie wyswietlacza LED - zapis do FLASH]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23915&amp;p=233553#p233553"><![CDATA[
Witam. Doszedłem to momentu w BB, gdzie pokazane jest, jak zapisać tablice w pamieci FLASH, by nie zajmowała tyle pamięci RAM. Zainkludowałem biblioteke pgmspace, dodalem słówko PROGMEM  i do odczytu korzystam z pgm_read_byte. Kompilator wywala błąd jednak:<br />error: variable 'cyfry' must be const in order to be put into read-only section by means of '__attribute__((progmem))'<br /><br />Więc dodałem specyfikator CONST i teraz działa. W BB nie wspomniano o tym, więc zastanawiam się czy czegoś źle nie zrobiłem i czy to tak powinno być.<br /><br />Kod pliku d_led.c<br /><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 &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 uint16_t cyfry&#91;15&#93; PROGMEM = {<br />~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F), // 0<br />~(SEG_B|SEG_C), // 1<br />~(SEG_A|SEG_B|SEG_D|SEG_E|SEG_G), // 2<br />~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_G), //3<br />~(SEG_B|SEG_C|SEG_F|SEG_G), // 4<br />~(SEG_A|SEG_C|SEG_D|SEG_F|SEG_G), // 5<br />~(SEG_A|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G), // 6<br />~(SEG_A|SEG_B|SEG_C|SEG_F), // 7<br />~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G), // 8<br />~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_F|SEG_G), //9<br />~(SEG_D|SEG_E|SEG_F), // litera L<br />~(SEG_A|SEG_B|SEG_C|SEG_G|SEG_E|SEG_F), // litera A<br />~(SEG_DP),<br />};<br /><br />void d_led_init(void) { // inicjacja wyswietlacza i timera<br /><br />LED_DATA_DIR = 0xFF; // wszystkie piny portu D jako wyjscia segmentow<br />LED_DATA = 0xFF; // wygaszenie segmentów<br />ANODY_DIR |= CA1|CA2|CA3|CA4; // Anody jako wyjscia<br />ANODY_PORT |= CA1|CA2|CA3|CA4; // wylaczenie anod - stan wysoki<br /><br />TCCR0A |= (1&lt;&lt;WGM01); // tryb ctc timer8bit<br />TCCR0B |= (1&lt;&lt;CS00)|(1&lt;&lt;CS02); // prescaler 1024<br />OCR0A = 38;<br />TIMSK0 |= (1&lt;&lt;OCIE0A); // zezwolenie na przerwanie compare match<br />}<br />ISR(TIMER0_COMPA_vect) { // procedura obslugi przerwania<br />static uint8_t licznik = 1;<br /><br />ANODY_PORT = ~licznik;<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 />licznik &lt;&lt;= 1;<br />if (licznik&gt;8) licznik = 1;<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21771">krawi92</a> — 12 wrz 2021, o 11:08</p><hr />
]]></content>
</entry>
</feed>