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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-09-07T15:12:01+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=869&amp;mode</id>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-09-07T15:12:01+01:00</updated>
<published>2013-09-07T15:12:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=869&amp;p=48603#p48603</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=48603#p48603"/>
<title type="html"><![CDATA[Re: wyświetlanie kropki na wyświetlaczu LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=48603#p48603"><![CDATA[
Inny przykład:<br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic2944.html?hilit=Modyfikacja%2003Multi_LED#p35234" >topic2944.html?hilit=Modyfikacja%2003Multi_LED#p35234</a><!-- l --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 7 wrz 2013, o 15:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sq8dsr]]></name></author>
<updated>2013-09-07T14:34:15+01:00</updated>
<published>2013-09-07T14:34:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=869&amp;p=48600#p48600</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=48600#p48600"/>
<title type="html"><![CDATA[Re: wyświetlanie kropki na wyświetlaczu LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=48600#p48600"><![CDATA[
Ja mam podobnie jak rezasurmar, jedną większa tablicę z dodatkowymi znakami oraz cyframi z kropką.<br />[syntax=c]uint8_t cyfry&#91;40&#93; = {<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_A|SEG_B|SEG_C|SEG_E|SEG_F|SEG_G),// 10 - A<br />~(SEG_A|SEG_D|SEG_E|SEG_F),// 11 - C<br />~(SEG_A|SEG_D|SEG_E|SEG_F|SEG_G),// 12 - E<br />~(SEG_A|SEG_E|SEG_F|SEG_G),// 13 - F<br />~(SEG_B|SEG_C|SEG_E|SEG_F|SEG_G),// 14 - H<br />~(SEG_D|SEG_E|SEG_F),// 15 - L<br />~(SEG_A|SEG_B|SEG_E|SEG_F|SEG_G),// 16 - P<br />~(SEG_A|SEG_B|SEG_F|SEG_G),// 17 - górna<br />~(SEG_C|SEG_D|SEG_E|SEG_G),// 18 - dolna<br />~(SEG_B|SEG_C|SEG_D|SEG_E|SEG_F),// 19 - U<br />~(SEG_B|SEG_E|SEG_G),// 20 - Z<br />~(SEG_C|SEG_F|SEG_G),// 21 - odwrotne Z<br />~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_DP),// 0<br />~(SEG_B|SEG_C|SEG_DP),// 1<br />~(SEG_A|SEG_B|SEG_D|SEG_E|SEG_G|SEG_DP),// 2<br />~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_G|SEG_DP),// 3<br />~(SEG_B|SEG_C|SEG_F|SEG_G|SEG_DP),   // 4<br />~(SEG_A|SEG_C|SEG_D|SEG_F|SEG_G|SEG_DP),// 5<br />~(SEG_A|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G|SEG_DP),// 6<br />~(SEG_A|SEG_B|SEG_C|SEG_F|SEG_DP),// 7<br />~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G|SEG_DP),// 8<br />~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_F|SEG_G|SEG_DP),// 9<br />0xFF// puste<br />};[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1589">sq8dsr</a> — 7 wrz 2013, o 14:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jari17]]></name></author>
<updated>2013-09-07T14:26:14+01:00</updated>
<published>2013-09-07T14:26:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=869&amp;p=48598#p48598</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=48598#p48598"/>
<title type="html"><![CDATA[Re: wyświetlanie kropki na wyświetlaczu LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=48598#p48598"><![CDATA[
Projektuje zegarek na wyświetlaczu LED. Mam podobne problemy z kropkami, które z czasem maja służyć jako sekundnik. <br />-ściągnąłem errate kodu 03_Multi_LED<br />-na samym początku wprowadziłem prosty licznik - dla próby <br />-następnie sugerując się tym forum zmodyfikowałem kod, by możliwe było wyświetlanie kropek. <br /><br />[syntax=c]ISR(TIMER2_COMP_vect)<br />{<br />static uint8_t licznik=1;// zmienna do przełączania kolejno anod wyrwietlacza<br /><br />ANODY_PORT = (ANODY_PORT &amp; 0xF0);// wygaszenie wszystkich wyświetlaczy<br />/*<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 /><br /><br /><br /><br />if(licznik==1)          <br /><br />LED_DATA = (k1) ? pgm_read_byte( &amp;cyfry&#91;cy1&#93; ) | SEG_DP : pgm_read_byte( &amp;cyfry&#91;cy1&#93; ) ;<br /><br />else if(licznik==2) LED_DATA = (k2) ? pgm_read_byte( &amp;cyfry&#91;cy2&#93; ) | SEG_DP : pgm_read_byte( &amp;cyfry&#91;cy2&#93; ) ;<br /><br />        else if(licznik==4) LED_DATA = (k3) ? pgm_read_byte( &amp;cyfry&#91;cy3&#93; ) | SEG_DP : pgm_read_byte( &amp;cyfry&#91;cy3&#93; ) ;<br /><br />        else if(licznik==8) LED_DATA = (k4) ? pgm_read_byte( &amp;cyfry&#91;cy4&#93; ) | SEG_DP : pgm_read_byte( &amp;cyfry&#91;cy4&#93; ) ;<br /><br /><br /><br />ANODY_PORT = (ANODY_PORT &amp; 0xF0) | (~licznik &amp; 0x0F);// 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 />}[/syntax]<br /><br />Oczywiście zadeklarowałem również zmienne k1-k2.<br />kropek jednak jak nie było tak nie ma wyświetlonych.<br /><br />procesor atmega8 i 8Mhz<br /><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 /><br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;I2C_TWI/i2c_twi.h&quot;<br />#include &quot;wys_led/d_led.h&quot;// dołączenie naszego pliku nagłówkowego (obsługa LED)<br /><br />//zegarek<br />#define PCF8583_ADDR 0xA0<br /><br />volatile uint8_t int0_flag=1;// flaga zmieniana w przerwaniu i sprawdzana w pętli głównej<br /><br />// konwersja liczby dziesiętnej na BCD<br />uint8_t dec2bcd(uint8_t dec);<br />// konwersja liczby BCD na dziesiętną<br />uint8_t bcd2dec(uint8_t bcd);<br /><br />uint8_t sekundy, minuty, godziny, dni, miesiace, rok ;<br />uint32_t a, b1, b2, licznik2=4999;<br /><br /><br /><br /><br />int main(void)<br />{<br /><br />/*// Przerwanie INT0 &quot;External Interrupts&quot;<br />MCUCR |= (1&lt;&lt;ISC01);// wyzwalanie zboczem opadającym<br />GICR |= (1&lt;&lt;INT0);// odblokowanie przerwania<br />PORTD |= (1&lt;&lt;PD2);// podciągnięcie pinu INT0 do VCC*/<br /><br /><br /><br /><br />// definiujemy sobie dla polepszenia czytelności programu typ wyliczeniowy<br />// wskazujący nam później na odpowiednie indeksy w tablicy (buforze)<br />//enum {ss=1, mm, hh, dd, mm2};//ss=1 mm=2 ....<br />//uint8_t bufor&#91;6&#93;;// rezerwacja bufora 6 bajty<br /><br />//i2cSetBitrate(100);<br /><br /><br /><br /><br />/*// Ustawianie czasu na godzinę: 18:34:27<br />//program wgrywamy 2 razy raz z ustawieniem czasu,<br />//a drugi raz bez. przez to czas bedzie sie utrzumywał<br /><br />bufor&#91;0&#93; = 0;// setne części sekundy<br />bufor&#91;1&#93; = dec2bcd(50);// sekundy<br />bufor&#91;2&#93; = dec2bcd(40);// minuty<br />bufor&#91;3&#93; = dec2bcd(12);// godziny<br />bufor&#91;4&#93; = dec2bcd(28);// dni<br />bufor&#91;5&#93; = dec2bcd(8);// miesiące<br />// zapis 4 bajtów z bufora pod adres 0x01 w pamięci RAM naszego RTC<br />TWI_write_buf( PCF8583_ADDR, 0x01, 6, bufor );*/<br /><br /><br /><br /><br /><br />// ****** inicjalizacja *********<br />d_led_init();   // inicjalizacja wyświetlacza multipleksowanego<br /><br /><br />// testowa inicjalizacja zmiennych oraz liczb mających się wyświetlać na wyrw. LED<br />//cy1=2;<br />//cy2=0;<br /><br />//cy3=1;<br />//cy4=2;<br /><br /><br /><br /><br />sei();<br />while(1)<br />{<br />/*if ( int0_flag ) {<br />//odczyt 4 bajtów do bufora od adresu 0x01 z pamięci RAM naszego RTC<br />TWI_read_buf( PCF8583_ADDR, 0x01, 6, bufor );<br /><br />cy1=bufor&#91;mm&#93;&gt;&gt;4;<br />cy2=bufor&#91;mm&#93;&amp;0x0f;<br />cy3=bufor&#91;ss&#93;&gt;&gt;4;<br />cy4=bufor&#91;ss&#93;&amp;0x0f;<br /><br /><br /><br /><br /><br />int0_flag=0;<br />}*/<br /><br />a=licznik2--;<br /><br />b1=dec2bcd(a/100);<br />b2=dec2bcd(a%100);<br />k4=1;<br />cy1=b1&gt;&gt;4;<br />cy2=b1&amp;0x0f;<br /><br />cy3=b2&gt;&gt;4;<br />cy4=b2&amp;0x0f;<br /><br /><br />_delay_ms(1000);<br /><br /><br /><br />}<br /><br />}<br /><br />// procedura obsługi przerwania INT 0<br />ISR( INT0_vect ) {<br />int0_flag = 1;<br /><br />}<br /><br /><br />// konwersja liczby dziesiętnej na BCD<br />uint8_t dec2bcd(uint8_t dec) {<br />return ((dec / 10)&lt;&lt;4) | (dec % 10);<br />}<br /><br />// konwersja liczby BCD na dziesiętną<br />uint8_t bcd2dec(uint8_t bcd) {<br />    return ((((bcd) &gt;&gt; 4) &amp; 0x0F) * 10) + ((bcd) &amp; 0x0F);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1173">jari17</a> — 7 wrz 2013, o 14:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-08-11T07:22:26+01:00</updated>
<published>2012-08-11T07:22:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=869&amp;p=12363#p12363</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=12363#p12363"/>
<title type="html"><![CDATA[Re: wyświetlanie kropki na wyświetlaczu LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=12363#p12363"><![CDATA[
<div class="quotetitle">rezasurmar napisał(a):</div><div class="quotecontent"><br />Wiedząc, że ma być wyświetlona kropka, po prostu dodaję do wartości wyświetlanej przesuniecie i tyle.<br /></div><br /><br />Jak mówiłem jest milion sposobów a każdy ma swoje wady i zalety <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> w tym przypadku będzie zajęte nieco więcej pamięci Flash, ale cóż to jest z drugiej strony te kilka dodatkowych znaków ? ... a w poprzednim przypadku procedura obsługi przerwania nieco się wydłuży ale też można powiedzieć, cóż to jest tych kilka dodatkowych us? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 11 sie 2012, o 07:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2012-08-10T23:51:51+01:00</updated>
<published>2012-08-10T23:51:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=869&amp;p=12361#p12361</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=12361#p12361"/>
<title type="html"><![CDATA[Re: wyświetlanie kropki na wyświetlaczu LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=12361#p12361"><![CDATA[
Sam wykorzystałem prostszy sposób z dodatkową tablicą, tj. ta sama tablica tylko dłuższa, a cyfry z kropką przesunięte o 20miejsc <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />. Można o mniej, ale mi jeszcze dochodzą dodatkowe znaki.<br /><br />Wiedząc, że ma być wyświetlona kropka, po prostu dodaję do wartości wyświetlanej przesuniecie i tyle.<p>Statystyki: Napisane przez Gość — 10 sie 2012, o 23:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-08-10T21:59:03+01:00</updated>
<published>2012-08-10T21:59:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=869&amp;p=12347#p12347</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=12347#p12347"/>
<title type="html"><![CDATA[Re: wyświetlanie kropki na wyświetlaczu LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=12347#p12347"><![CDATA[
A dlaczego miałbym nie popierać własnych modyfikacji ? kodów z książki - jak najbardziej popieram i brawo za wymyślenie jednej z wielu metod w tym przypadku <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />odpowiadając na twoje dwa pytania:<br /><br />1. a dlaczegóż nie można byłoby zrobić tego na Timer0 w m8 ??? hmmm toż to taki sam sprzętowy timer. No może nie ma trybu CTC - ale co nie można go w podobny sposób użyć jak przy CTC??? Można <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> trzeba jedynie wartość TCNT0 przeładowywać w procedurze obsługi przerwania. Więc żaden problem.<br /><br />2. zastanawiałem się nad jakimiś poważniejszymi modyfikacjami w zestawach ATB - ale niestety wciąż mam na to za mało czasu a na prawdę nie chciał bym spaprać tego co jest teraz - tym bardziej, że z doniesień użytkowników są same pozytywne opinie - no może poza ceną - ale niedługo przygotuję pewien film porównawczy, który mam nadzieję rzuci nowe światło na ten stosunek ceny do jakości..... Dlatego reasumując nawet jeśli w najbliższym czasie miałaby się pojawić jakaś modyfikacja w ATB to raczej bardzo drobna i kosmetyczna. Tyle mogę powiedzieć - ale na pewno nie uda mi się żadnych terminów określić <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 10 sie 2012, o 21:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[lukas12]]></name></author>
<updated>2012-08-10T20:09:40+01:00</updated>
<published>2012-08-10T20:09:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=869&amp;p=12321#p12321</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=12321#p12321"/>
<title type="html"><![CDATA[Re: wyświetlanie kropki na wyświetlaczu LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=12321#p12321"><![CDATA[
Witam, to mój pierwszy post na tym forum. Temat dość stary, ale go odświeżę( może kolega nie rozwiązał jeszcze swojego problemu).<br />Więc przedstawię gotowca(wiem, że Mirek tego nie popiera), tylko, że mój program jest na Atmega8 i wyświetlaczu ze wspólnymi katodami więc kieruję tylko anodami, program działa mi bardzo dobrze, gdy w głównej funkcji main wpiszę k=3 to kropka znajdzie się na 3 cyfrze.<br />[syntax=c]#include &lt;avr/io.h&gt;// dołączenie głównego systemowego  pliku nagłówkowego<br />#include &lt;avr/interrupt.h&gt;// dołączenie pl. nagłówkowego potrzebnego do obsł. przerwań<br />#include &lt;avr/pgmspace.h&gt;// dołączenie pl. nagłówkowego potrzebnego do odczytu<br />// danych zawartych w pamięci programu FLASH<br /><br />#include &quot;d_led.h&quot;// dołączenie naszego pliku nagłówkowego<br />// w nim znajdują się potrzebne tu m.in. definicje preprocesora<br /><br />// definicje zmiennych globalnych przechowujących cyfry do wyświetlania<br />// volatile – ponieważ będą wykorzystywane do odczytu i zapisu zarówno w przerwaniu i programie<br />// głównym. Trzeba więc wyłączyć optymalizację dostępu do nich. (zmienne ulotne)<br />volatile uint8_t cy1;<br />volatile uint8_t cy2;<br />volatile uint8_t cy3;<br />volatile uint8_t cy4;<br />volatile uint8_t k1;<br />volatile uint8_t k2;<br />volatile uint8_t k3;<br />volatile uint8_t k4;<br /><br /><br /><br />// definicja tablicy zawierającej definicje bitowe cyfr LED<br />uint8_t cyfry[15] 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 />0x00// NIC (puste miejsce)<br />};<br /><br /><br /><br />// ****** definicja funkcji inicjalizującej pracę z wyświetlaczem multipleksowanym<br />void d_led_init(void)<br />{<br />LED_DATA_DIR = 0xFF;   // wszystkie piny portu b jako WYJŚCIA(anody)<br />LED_DATA = 0x00;// wygaszenie wszystkich anod – stan niski<br />ANODY_DIR |= CA1 | CA2 | CA3 | CA4;// 4 piny portu A jako WYJŚCIA (anody wyświetlaczy)<br />ANODY_PORT &amp;= CA1 | CA2 | CA3  | CA4;// wygaszenie wszystkich wyświetlaczy - katody<br /><br />// ustawienie TIMER0<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 = 39;// dodatkowy podział przez 39 (rej. przepełnienia)<br />TIMSK |= (1&lt;&lt;OCIE2);// zezwolenie na przerwanie CompareMatch<br />}<br /><br /><br />// ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH<br />ISR(TIMER2_COMP_vect)<br />{<br />static uint8_t licznik=1;// zmienna do przełączania kolejno anod wyświetlacza<br /><br />ANODY_PORT = (ANODY_PORT &amp; 0xF0);// wygaszenie wszystkich wyświetlaczy<br /><br /><br />if(licznik==1) LED_DATA = (k1) ? pgm_read_byte( &amp;cyfry[cy1] ) | SEG_DP : pgm_read_byte( &amp;cyfry[cy1] ) ;<br />// gdy zapalony wyśw.1 podaj stan zmiennej c1, gdy k1=1 zapal kropkę<br />else if(licznik==2) LED_DATA = (k2) ? pgm_read_byte( &amp;cyfry[cy2] ) | SEG_DP : pgm_read_byte( &amp;cyfry[cy2] ) ;<br />else if(licznik==4) LED_DATA = (k3) ? pgm_read_byte( &amp;cyfry[cy3] ) | SEG_DP : pgm_read_byte( &amp;cyfry[cy3] ) ;<br />else if(licznik==8) LED_DATA = (k4) ? pgm_read_byte( &amp;cyfry[cy4] ) | SEG_DP : pgm_read_byte( &amp;cyfry[cy4] ) ;<br /><br />ANODY_PORT = (ANODY_PORT &amp; 0xF0) | (licznik &amp; 0x0F);// 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 />}[/syntax]<br />Dodam, że fajnie można sobie poćwiczyć dzięki takiemu ćwiczeniu(Atmega32--&gt;Atmega8) zaglądanie do noty katalogowej i pisanie kodów.<br /><br />Wyświetlacz i mikrokontroler wykorzystałem taki bo nie mam innych rzeczy(oprócz książki) - zestaw ATB planuję niedługo kupić, ale jescze nie jest mi potrzebny jak widać, bo oprócz tego mam parę diod wyświetlacz diodę RGB itp.<br /><br />Mam jeszcze 2 pytania odnośnie tego projektu i nie tylko:<br />1. Czy można, a jeśli tak to jak zrobić program obsługi wyświetlacza 7-segmentowego na Timerze 0 Atmegi8  <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" /> <br />2. Czy trwają pracę nad kolejną wersją płytki ATB <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=513">lukas12</a> — 10 sie 2012, o 20:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[worner]]></name></author>
<updated>2012-02-22T20:53:08+01:00</updated>
<published>2012-02-22T20:53:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3333#p3333</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3333#p3333"/>
<title type="html"><![CDATA[Re: wyświetlanie kropki na wyświetlaczu LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3333#p3333"><![CDATA[
Z racji swojego braku doświadczenia, w pierwszym odruchu pomyślałem, że najprostszym rozwiązaniem będzie utworzenie drugiej tablicy z cyframi i kropką, czyli następna tablica 10 elementowa, a w zasadzie 11 elementowa prawda?<br />Jest to oczywiście wersja &quot;rozrzutna&quot;, bo niestety tracimy znowu cenne miejsce w pamięci naszego procka.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=150">worner</a> — 22 lut 2012, o 20:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[infa08]]></name></author>
<updated>2012-02-25T18:53:15+01:00</updated>
<published>2012-02-22T19:45:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3330#p3330</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3330#p3330"/>
<title type="html"><![CDATA[Re: wyświetlanie kropki na wyświetlaczu LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3330#p3330"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />Ale spokojnie - ja może powiem troszkę inaczej bo coś przez skórę czuję chyba problem kolegi - aczkolwiek może się mylę.<br /></div><br /><br />Masz rację nie mylisz się i dzięki, że powtórzyłeś to co już napisałem:<br /><br /><div class="quotetitle">infa08 napisał(a):</div><div class="quotecontent"><br />kiedy ją dopiszę do cyfry nr 2 jako: &quot;cy2=d2|11&quot; albo jak dodam ją tak: &quot;cy2=d2|SEG_DP&quot; to na cy2 dzieje się wszystko tylko nie to czego chcę. <br />Domyślam się, że kompilator po prostu dodaje sobie SEG_DP do zmiennej d2 co w wyniku daje liczbę &gt; 9 czyli nie możliwą do wyświetlenie<br /></div><br /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />dlatego podpowiem, że obsługę kropek można sobie zrobić ale np poprzez lekką modyfikację funkcji z przerwaniu i opcji OR z SEG_DP użyć w jakimś dodatkowym warunku gdy wywalany jest wzór o kodzie w cy2 na LED.... to na tym etapie w zależności tak na przykład od jakiejś dodatkowej zmiennej czy zmiennych np k1, k2, k3, k4 .... dokonywać np coś takiego:<br />       <br /><br />[syntax=c]   if(licznik==1) (k1) ? pgm_read_byte( &amp;cyfry[cy1] ) | SEG_DP : pgm_read_byte( &amp;cyfry[cy1] ) ;<br />   else if(licznik==2) LED_DATA = (k2) ? pgm_read_byte( &amp;cyfry[cy2] ) | SEG_DP : pgm_read_byte( &amp;cyfry[cy2] ) ;<br />   else if(licznik==4) LED_DATA = (k3) ? pgm_read_byte( &amp;cyfry[cy3] ) | SEG_DP : pgm_read_byte( &amp;cyfry[cy3] ) ;<br />   else if(licznik==8) LED_DATA = (k4) ? pgm_read_byte( &amp;cyfry[cy4] ) | SEG_DP : pgm_read_byte( &amp;cyfry[cy4] ) ;[/syntax]<br /><br />wtedy oprócz zmiennych cy1, cy2, cy3, cy4 definiujesz sobie jeszcze dodatkowo k1, k2, k3, k4<br /></div><br /><br />Dodałem zmienne k1, k2, k3, k4 do pliku d_led.h i przepisałem twój kod. Wgrałem do mikrokontrolera i diody przestały działać (pojawił się wszędzie INDEX &quot;NIC&quot;) toteż zmodyfikowałem go troszeczkę:<br /><br />[syntax=c]if(licznik==1)<br />{<br />LED_DATA = pgm_read_byte( &amp;cyfry[cy1] ) ;// gdy zapalony wyśw.1 podaj stan zmiennej c1<br />if(k1=1) pgm_read_byte( &amp;cyfry[cy1] ) | SEG_DP;<br />}<br />if(licznik==2)<br />{<br />LED_DATA = pgm_read_byte( &amp;cyfry[cy2] ) ;// gdy zapalony wyśw.2 podaj stan zmiennej c2<br />if(k2=1) pgm_read_byte( &amp;cyfry[cy2] ) | SEG_DP;<br />}<br />if(licznik==4)<br />{<br />LED_DATA = pgm_read_byte( &amp;cyfry[cy3] ) ;// gdy zapalony wyśw.3 podaj stan zmiennej c3<br />if(k3=1) pgm_read_byte( &amp;cyfry[cy3] ) | SEG_DP;<br />}<br />if(licznik==8)<br />{<br />LED_DATA = pgm_read_byte( &amp;cyfry[cy4] ) ;// gdy zapalony wyśw.4 podaj stan zmiennej c4<br />if(k4=1) pgm_read_byte( &amp;cyfry[cy4] ) | SEG_DP;<br />}[/syntax]<br /><br />I efekt był taki sam jak za pierwszym podejściem. Testowałem też dodawanie i usuwanie SEG_DP z tablicy znaków jednak nie przyniosło to żadnego rezultatu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=235">infa08</a> — 22 lut 2012, o 19:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-22T00:44:30+01:00</updated>
<published>2012-02-22T00:44:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3279#p3279</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3279#p3279"/>
<title type="html"><![CDATA[Re: wyświetlanie kropki na wyświetlaczu LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3279#p3279"><![CDATA[
Ale spokojnie - ja może powiem troszkę inaczej bo coś przez skórę czuję chyba problem kolegi - aczkolwiek może się mylę.<br /><br />Po pierwsze faktem jest że w książce w ogóle nie poruszyłem zagadnienia jak wyświetlać sobie kropki - ale nie samą kropkę tylko np kropkę po jakiejś cyfrze.....<br /><br />Ty widzę, że poszedłeś bardzo złą drogą, bo jak piszesz zdefiniowałeś sobie znak kropkę jako kolejny znak w tablicy znaków na LED - dobrze myślę ? No gdy wpiszesz jej kod czyli INDEX do zmiennej cy1, czy cy2 - to sama kropka pewnie się świeci ? dobrze zgaduję ?<br /><br />No ale następnie podjąłeś się karkołomnej operacji:<br /><br />cy2=d2|SEG_DP;<br /><br />O jej! co ty robisz ? weź sobie oblicz jaka liczba wyląduje w zmiennej cy2 po tej operacji: d2|SEG_DP ..... toż to będzie jakiś indeks w tej tablicy, który nie odpowiada żadnemu elementowi w niej (tu widać, że jeszcze nie do końca zrozumiałeś na czym polega do końca to wyświetlanie pojedynczych znaków - tzn jak one są pobierane z tej tablicy wzorców - zgadza się?)<br /><br />dlatego podpowiem, że obsługę kropek można sobie zrobić ale np poprzez lekką modyfikację funkcji z przerwaniu i opcji OR z SEG_DP użyć w jakimś dodatkowym warunku gdy wywalany jest wzór o kodzie w cy2 na LED.... to na tym etapie w zależności tak na przykład od jakiejś dodatkowej zmiennej czy zmiennych np k1, k2, k3, k4 .... dokonywać np coś takiego:<br />       <br /><br />[syntax=c]   if(licznik==1) (k1) ? pgm_read_byte( &amp;cyfry[cy1] ) | SEG_DP : pgm_read_byte( &amp;cyfry[cy1] ) ;<br />   else if(licznik==2) LED_DATA = (k2) ? pgm_read_byte( &amp;cyfry[cy2] ) | SEG_DP : pgm_read_byte( &amp;cyfry[cy2] ) ;<br />   else if(licznik==4) LED_DATA = (k3) ? pgm_read_byte( &amp;cyfry[cy3] ) | SEG_DP : pgm_read_byte( &amp;cyfry[cy3] ) ;<br />   else if(licznik==8) LED_DATA = (k4) ? pgm_read_byte( &amp;cyfry[cy4] ) | SEG_DP : pgm_read_byte( &amp;cyfry[cy4] ) ;[/syntax]<br /><br />wtedy oprócz zmiennych cy1, cy2, cy3, cy4 definiujesz sobie jeszcze dodatkowo k1, k2, k3, k4<br /><br />i jak chcesz na stałe wyświetlić kropkę na drugim wyświetlaczu to <br /><br />k2=1;<br />cy1=1; cy2=2; cy3=0; cy4=5<br /><br />uzyskasz wtedy liczbę 12.05<br /><br />albo:<br /><br />k2=0;<br />k3=1;<br />cy1=8; cy2=3; cy3=7; cy4=2<br /><br />uzyskasz liczbę 837.2 <br /><br />oczywiście jak widzisz musiałem zgasić kropkę na pozycji 2 ....<br /><br />troszkę to tak na kolanie napisałem więc może nie zadziałać od pierwszego kopa - ale taką drogą można pójść <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />i doczytaj jeszcze raz po co jest to:<br /><br />pgm_read_byte( &amp;cyfry[cyn] );<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 22 lut 2012, o 00:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[DidekxD]]></name></author>
<updated>2012-02-21T23:36:47+01:00</updated>
<published>2012-02-21T23:36:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3277#p3277</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3277#p3277"/>
<title type="html"><![CDATA[Re: wyświetlanie kropki na wyświetlaczu LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3277#p3277"><![CDATA[
Bardzo prosta rzecz kolego <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ale jak wspominał SunRiver. Podaj jakiś kod to Cię spróbujemy nakierować bo gotowców to raczej nikt nie daje i nie powinien tego robić.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=146">DidekxD</a> — 21 lut 2012, o 23:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[infa08]]></name></author>
<updated>2012-02-21T22:43:55+01:00</updated>
<published>2012-02-21T22:43:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3274#p3274</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3274#p3274"/>
<title type="html"><![CDATA[Re: wyświetlanie kropki na wyświetlaczu LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3274#p3274"><![CDATA[
chodzi mi o to, że jak mam do możliwości wyświetlenia na wyświetlaczu LED 4 cyfry z kropkami, to 4 cyfry jestem w stanie wyświetlić jednak kiedy do jakiejkolwiek cyfry dodać kropkę to na wyświetlaczu na tej cyfrze zaczynają się pojawiać dziwne rzeczy a nie cyfra + kropka pod nią. Kod do okiełzania multipleksu LED jest napisany na podstawie kodu z płyty DVD (jest praktycznie taki sam) tylko w tablicy z zapisanymi cyframi dodałem swoją kropkę i mam problem z dodaniem jej do main.c ponieważ nie wiem gdzie ją wpleść do mojej pętli głównej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=235">infa08</a> — 21 lut 2012, o 22:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-02-21T22:31:59+01:00</updated>
<published>2012-02-21T22:31:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3272#p3272</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3272#p3272"/>
<title type="html"><![CDATA[Re: wyświetlanie kropki na wyświetlaczu LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3272#p3272"><![CDATA[
jaśniej może napisz , przedstaw kod ,  bo ciężko zgadnąć o co ci chodzi<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 21 lut 2012, o 22:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[infa08]]></name></author>
<updated>2012-02-21T22:04:17+01:00</updated>
<published>2012-02-21T22:04:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3267#p3267</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3267#p3267"/>
<title type="html"><![CDATA[wyświetlanie kropki na wyświetlaczu LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=869&amp;p=3267#p3267"><![CDATA[
Witam,<br />Znalazłem, że kropka to segment H, to też ją dodałem do mojej tablicy jako 11 z kolei, tylko kiedy ją dopiszę do cyfry nr 2 jako: &quot;cy2=d2|11&quot; albo jak dodam ją tak: &quot;cy2=d2|SEG_DP&quot; to na cy2 dzieje się wszystko tylko nie to czego chcę. <br />Domyślam się, że kompilator po prostu dodaje sobie SEG_DP do zmiennej d2 co w wyniku daje liczbę &gt; 9 czyli nie możliwą do wyświetlenie ale nie wiem gdzie dopisać tą kropkę aby zniwelować ten błąd.<br />Proszę o pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=235">infa08</a> — 21 lut 2012, o 22:04</p><hr />
]]></content>
</entry>
</feed>