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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=11192&amp;mode</id>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-03-29T18:39:52+01:00</updated>
<published>2015-03-29T18:39:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124993#p124993</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124993#p124993"/>
<title type="html"><![CDATA[Re: Matryca LED 5X8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124993#p124993"><![CDATA[
<div class="quotetitle">svistak2000 napisał(a):</div><div class="quotecontent"><br />Wpadłem jeszcze na pomysł żeby nic nie zmieniać w programie (bo bezpośrednio z portu działa tylko słabo świeci), a tranzystor PNP (podpięty kolektorem do anod diod) załączać tranzystorem NPN  mniej więcej coś takiego:<br /></div><br /> <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><div class="quotetitle">kicajek napisał(a):</div><div class="quotecontent"><br />... pasowałoby tranzystory PNP zasilić z wyższego napięcia; niestety wymaga to dodatkowych czterech tranzystorów NPN.<br /></div><br />ta &quot;czwórka&quot; to z rozpędu pod wyświetlacze 7segm.<br />Fakt - proponowałem bez schematu; tego typu klucze są na tyle uniwersalne, że na PNP'a możesz dać dowolne ( w rozsądnych granicach ) napięcie zasilające LED'y/wyswietlacze.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 29 mar 2015, o 18:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2015-03-29T10:46:19+01:00</updated>
<published>2015-03-29T10:46:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124955#p124955</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124955#p124955"/>
<title type="html"><![CDATA[Re: Matryca LED 5X8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124955#p124955"><![CDATA[
ja się tak bawiłem , <!-- m --><a class="postlink" href="https://www.youtube.com/watch?v=a3_aSX3CIn8" >https://www.youtube.com/watch?v=a3_aSX3CIn8</a><!-- m --><br />zasilanie bezpośrednio z portu to trochę głupi pomysł , można przeciążyć łatwo <br />bez problemu klasyczne tranzystory bipolarne dadzą radę na filmiku masz ok 400Hz<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 29 mar 2015, o 10:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[svistak2000]]></name></author>
<updated>2015-03-29T00:12:00+01:00</updated>
<published>2015-03-29T00:12:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124943#p124943</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124943#p124943"/>
<title type="html"><![CDATA[Re: Matryca LED 5X8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124943#p124943"><![CDATA[
Wpadłem jeszcze na pomysł żeby nic nie zmieniać w programie (bo bezpośrednio z portu działa tylko słabo świeci), a tranzystor PNP (podpięty kolektorem do anod diod) załączać tranzystorem NPN  mniej więcej coś takiego:<br /><img src="http://obrazki.elektroda.net/61_1280360207.png" alt="Obrazek" /><br />Oczywiście wartości rezystorów zostaną odpowiednio zmienione. Tylko teraz mam pytanie. O ile dobrze rozumiem program to multipleksowane są wiersze, dobrałem prędkość przełaczania pinów od wierszy tak aby to było 100Hz na wiersz czyli ustaliłem prędkość multipleksowania na 800Hz (bo 8 wierszy). Nie wtedy będzie problemów z tranzystorami przy takiej częstotliwości?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1016">svistak2000</a> — 29 mar 2015, o 00:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-03-28T21:38:10+01:00</updated>
<published>2015-03-28T21:38:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124927#p124927</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124927#p124927"/>
<title type="html"><![CDATA[Re: Matryca LED 5X8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124927#p124927"><![CDATA[
Witam<br />Nie wiem jak pomóc, ale zapis:<br />[syntax=c]RowDDR &amp;= ~(RowPin0 | RowPin1 | RowPin2 | RowPin3 | RowPin4 | RowPin5 | RowPin6 | RowPin7); // Ustawienie pinów wierszy[/syntax]<br />&quot;robi&quot; z PORTD wejście.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 28 mar 2015, o 21:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[svistak2000]]></name></author>
<updated>2015-03-27T23:00:08+01:00</updated>
<published>2015-03-27T23:00:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124841#p124841</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124841#p124841"/>
<title type="html"><![CDATA[Re: Matryca LED 5X8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124841#p124841"><![CDATA[
No niestety nie działa nadal <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> Ktoś ma jakiś pomysł? Co może być przyczyną? I Jak rozwiązać ten problem? Co jeszcze w programie muszę zanegować?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1016">svistak2000</a> — 27 mar 2015, o 23:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[svistak2000]]></name></author>
<updated>2015-03-28T02:25:49+01:00</updated>
<published>2015-03-27T20:58:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124821#p124821</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124821#p124821"/>
<title type="html"><![CDATA[Re: Matryca LED 5X8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124821#p124821"><![CDATA[
Przy pełnym wysterowaniu na BC327 spadek napięcia wynosi 0,2-0,3V... Więc moim zdaniem nie jest to na tyle dużo, żeby diody prawie w ogóle nie świeciły... <br />Teraz sobie siedzę w pociągu patrzę na kod i widzę jak byk linijkę:<br />[syntax=c]static inline void InitPorts(void)      // Funkcja uzyta tylko raz w celu zainicjowania pinów<br />{<br />  ShiftDDR |= (LatchPin | ClkPin | DataPin | OE);       // ustawienie pinów controlnych rejestru<br />  RowDDR |= (RowPin0 | RowPin1 | RowPin2 | RowPin3 | RowPin4 | RowPin5 | RowPin6 | RowPin7); // Ustawienie pinów wierszy<br /> <br />  ShiftPort |= OE;<br />  RowPort |= RowPin0;                              <br /> <br />  ShiftPort |= LatchPin;                                //Ustawienie Zatrazsku na stan wysoki (hi)<br />  ShiftPort &amp;= ~(ClkPin | DataPin);     //Ustawienie ClkPin i DataPin na stan niski (low)<br />}[/syntax]<br />Nie wystarczyło by jej czasem zmienić tylko na:<br />[syntax=c]static inline void InitPorts(void)      // Funkcja uzyta tylko raz w celu zainicjowania pinów<br />{<br />  ShiftDDR |= (LatchPin | ClkPin | DataPin | OE);       // ustawienie pinów controlnych rejestru<br />  RowDDR &amp;= ~(RowPin0 | RowPin1 | RowPin2 | RowPin3 | RowPin4 | RowPin5 | RowPin6 | RowPin7); // Ustawienie pinów wierszy<br /> <br />  ShiftPort |= OE;<br />  RowPort &amp;= ~RowPin0;                              <br /> <br />  ShiftPort |= LatchPin;                                //Ustawienie Zatrazsku na stan wysoki (hi)<br />  ShiftPort &amp;= ~(ClkPin | DataPin);     //Ustawienie ClkPin i DataPin na stan niski (low)<br />}[/syntax]<br />W każdym bądź razie sprawdzę jak przyjadę do domu... Jeżeli to było wczorajszym błędem to aż mi wstyd <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=1016">svistak2000</a> — 27 mar 2015, o 20:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mczarny]]></name></author>
<updated>2015-03-27T19:30:03+01:00</updated>
<published>2015-03-27T19:30:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124809#p124809</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124809#p124809"/>
<title type="html"><![CDATA[Re: Matryca LED 5X8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124809#p124809"><![CDATA[
cześć<br />ja zasilam tranzystory z 3,3V z tym, ze zastosowałem mosfetyP Logic Level i wszystko śmiga jak należy<br />na takim tranzystorze praktycznie nie masz spadku napięcia bo po wysterowaniu jego oporność to tylko 30mOmów<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4651">mczarny</a> — 27 mar 2015, o 19:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-03-27T15:12:28+01:00</updated>
<published>2015-03-27T15:12:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124785#p124785</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124785#p124785"/>
<title type="html"><![CDATA[Re: Matryca LED 5X8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124785#p124785"><![CDATA[
Witam<br /><br /><div class="quotetitle">svistak2000 napisał(a):</div><div class="quotecontent"><br />[syntax=c]#define RowPin6        (0 &lt;&lt; 6)<br />#define RowPin7        (0 &lt;&lt; 7)[/syntax]<br />Później robiłem jeszcze kilka innych mniej lub bardziej świadomych operacji<br /></div><br /> <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> rzeczywiście; poniżej masz przykład jak &quot;jedynkami&quot; zapisywać &quot;zera&quot; ( cyt. z kodu kol. <strong>SunRiver</strong>) <br /><br />[syntax=c]ShiftPort &amp;= ~(LatchPin | ClkPin | DataPin);     //Wszystkie piny na (LOW) - LatchPin w stanie LOW = zapis[/syntax]<br />Z tranzystorami dobry pomysł, ale na nich też stracisz 0V7.<br />Na takim warsztacie ciężko Ci będzie to opanować, ale pasowałoby tranzystory PNP zasilić z wyższego napięcia; niestety wymaga to dodatkowych czterech tranzystorów NPN.<br />W tym gąszczu nie widzę rejestru - masz go?<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 27 mar 2015, o 15:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[svistak2000]]></name></author>
<updated>2015-03-27T12:59:12+01:00</updated>
<published>2015-03-27T12:59:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124775#p124775</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124775#p124775"/>
<title type="html"><![CDATA[Re: Matryca LED 5X8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124775#p124775"><![CDATA[
Proszę bardzo, poniżej przedstawiam schemat sterownika oraz użytej matrycy. Wszystko jest zasilane z napięcia 5V.<br /><a href="http://forum.atnel.pl/_obrazki/o/1016/073572c704d355e386bafb5afb9ab837.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1016/073572c704d355e386bafb5afb9ab837.jpg" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/1016/38879dcb8192b200c79efd63c7fa3f48.GIF"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/1016/38879dcb8192b200c79efd63c7fa3f48.GIF" alt="Obrazek" /></a><br /><br />Ogólnie to tranzystory PNP sterują wierszami matrycy (a raczej powinny sterować), a rejestr steruje kolumnami. Rezystor na kolumnach został dobrany jako 33ohm ponieważ prąd dla jednego piksela przyjąłem I=20mA, U=5V, spadek dla pojedynczej diody czerwone 2,2V tyle że piksel składa się z dwóch takich diod więc spadek przyjąłem 4,4V.  Problemem jest jednak to, że tranzystory nie są dobrze sterowane przez program... Zmieniłem definicje pinów na to aby były sterowane &quot;ZERAMI&quot;, ale nic nie pomogło.<br />#define RowPort         PORTD<br />#define RowDDR          DDRD<br />#define RowPin0         (0 &lt;&lt; 0)<br />#define RowPin1         (0 &lt;&lt; 1)<br />#define RowPin2         (0 &lt;&lt; 2)<br />#define RowPin3         (0 &lt;&lt; 3)<br />#define RowPin4         (0 &lt;&lt; 4)<br />#define RowPin5         (0 &lt;&lt; 5)<br />#define RowPin6         (0 &lt;&lt; 6)<br />#define RowPin7         (0 &lt;&lt; 7)<br />Później robiłem jeszcze kilka innych mniej lub bardziej świadomych operacji na kodzie ale też nic nie pomogło <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /> Układ wpięty bezpośrednio wiersze matrycy=&gt;PortD z mikrokontrolera działa. Tylko jasność jest tak słaba że nawet w nocy ledwo co widać. Związane to jest z ograniczeniem prądowym na porcie atmegi. Dlatego chce zastosować Tranzystory PNP do sterowania anodami na wierszach matrycy...<br /><br />P.S.<br />A i tak to wygląda w rzeczywistości... Wstyd trochę pokazywać ze względu na bajzel ale wszystko styka/łączy. <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><a href="http://forum.atnel.pl/_obrazki/o/1016/e133e221f47b689603bd38b8bb41480f.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1016/e133e221f47b689603bd38b8bb41480f.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1016">svistak2000</a> — 27 mar 2015, o 12:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-03-27T11:27:00+01:00</updated>
<published>2015-03-27T11:27:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124768#p124768</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124768#p124768"/>
<title type="html"><![CDATA[Re: Matryca LED 5X8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124768#p124768"><![CDATA[
Witam<br /><br /><div class="quotetitle">svistak2000 napisał(a):</div><div class="quotecontent"><br />...Na początku matrycę podłączyłem bezpośrednio do portu uC (Atmega8) i po kilku przeróbkach (matryca ma na kolumnach katody) zaczął się wyświetlać oczekiwany tekst. Problemem jednak jest to, że ustaliłem punkt pracy diod na I=20mA każda...<br /></div><br />Wstaw może schemat bo z opisu brzmi groźnie  <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> — 27 mar 2015, o 11:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[svistak2000]]></name></author>
<updated>2015-03-26T23:00:15+01:00</updated>
<published>2015-03-26T23:00:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124743#p124743</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124743#p124743"/>
<title type="html"><![CDATA[Matryca LED 5X8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11192&amp;p=124743#p124743"><![CDATA[
Dzień dobry!<br />Na wstępie chciałbym się ze wstydem przyznać, że jeszcze jestem dużym laikiem i rzuciłem się z moimi niewielkimi umiejętnościami programistycznymi na głęboką (tak mi się przynajmniej wydaje) wodę. Otóż zamierzam zrobić matrycę 5x8. Projekt oparłem na programie forumowicza SunRiver (załącznik na dole). Na początku matrycę podłączyłem bezpośrednio do portu uC (Atmega8) i po kilku przeróbkach (matryca ma na kolumnach katody) zaczął się wyświetlać oczekiwany tekst. Problemem jednak jest to, że ustaliłem punkt pracy diod na I=20mA każda. W dzień widoczność była tak słaba że myślałem że nie świeci. Dlatego postanowiłem użyć tranzystorów PNP pełniących rolę buforów do sterowania wierszami. Wiem, że muszą one być sterowane &quot;0&quot; i to muszę zmienić w programie poniżej. Jednak po całym dniu dzisiejszych prób, matryca ciągle nie działa poprawnie... Stąd też prośba do was drodzy forumowicze o pomoc. Bo ja już kompletnie nie wiem jak mogę ten program zmienić aby program działał przy użyciu tranzystorów PNP na wierszach... Z góry dziękuję za pomoc i przepraszam za moją niewiedzę <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />[syntax=c]#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 />#include &quot;font5x8.h&quot;<br /><br />//Te piny użyłem do sterowania rejestrem:<br />#define ShiftPort PORTC<br />#define ShiftDDRDDRC<br />#define LatchPin(1 &lt;&lt; 0)<br />#define DataPin(1 &lt;&lt; 1)<br />#define ClkPin(1 &lt;&lt; 2)<br />#define OE    (1 &lt;&lt; 3)<br /><br />//tymi pinami steruje wierszami:<br />#define RowPortPORTD<br />#define RowDDRDDRD<br />#define RowPin0(1 &lt;&lt; 0)<br />#define RowPin1(1 &lt;&lt; 1)<br />#define RowPin2(1 &lt;&lt; 2)<br />#define RowPin3(1 &lt;&lt; 3)<br />#define RowPin4(1 &lt;&lt; 4)<br />#define RowPin5(1 &lt;&lt; 5)<br />#define RowPin6(1 &lt;&lt; 6)<br />#define RowPin7(1 &lt;&lt; 7)<br /><br />// dla łatwiejszego zrozumienia w kodzie używam oznaczeń anglojezycznych w nazwach <br />// row = wiersze <br />// col = kolumny <br />// Kolumny sa sterowane przez rejestr przesuwny<br /><br /><br /><br />#define ScrollSpeed75// szybkość przewijania<br /><br />typedef unsigned char u8;<br />typedef unsigned int u16;<br /><br />u8 row_track = 0;<br /><br />volatile u8 row_buffer&#91;8&#93; = { 0, 0, 0, 0, 0, 0, 0, 0 }; // bufor dla wierszy (row) <br /><br />static const char PROGMEM Messages1&#91;&#93; = { &quot;8x8 LEDowa matryca&quot; };<br />static const char PROGMEM Messages2&#91;&#93; = { &quot;Sterowanie przez 74HC595 jest naprawde proste.&quot; };<br /><br />void Delay_ms(int cnt)//Funkcja podaje opóźnienie w milisekundach - jest zależna od F-CPU<br />{<br />  while (cnt--&gt;0) _delay_ms(1);<br />}<br /><br />static inline void InitPorts(void)// Funkcja uzyta tylko raz w celu zainicjowania pinów <br />{<br />  ShiftDDR |= (LatchPin | ClkPin | DataPin | OE);// ustawienie pinów controlnych rejestru<br />  RowDDR |= (RowPin0 | RowPin1 | RowPin2 | RowPin3 | RowPin4 | RowPin5 | RowPin6 | RowPin7); // Ustawienie pinów wierszy<br />  <br />  ShiftPort |= OE;<br />  RowPort |= RowPin0;    <br /><br />  ShiftPort |= LatchPin; //Ustawienie Zatrazsku na stan wysoki (hi)<br />  ShiftPort &amp;= ~(ClkPin | DataPin); //Ustawienie ClkPin i DataPin na stan niski (low)<br />}<br /><br />static inline void InitTimers(void)    // Funkcja ustawia Timer  --- uzyta tylko raz<br />{<br />  TCCR1B |= 1&lt;&lt;WGM12 | 1&lt;&lt;CS11 | 1&lt;&lt;CS10;    //Start timer1 w trybie CTC prescaler 64<br />  TIMSK |= 1&lt;&lt;OCIE1A;     //właczenie porównania dla przerwania<br />  OCR1A = 0x00BB;         //wartość porównania ustawiona na  1 mSec<br />  sei();             //Właczenie przerwań<br />}<br /><br />void Shift_Int(u8 shiftData)               // Funkcja przesuwania danych<br />{<br />  ShiftPort &amp;= ~(LatchPin | ClkPin | DataPin);     //Wszystkie piny na (LOW) - LatchPin w stanie LOW = zapis<br />  <br />  for (char i=0; i&lt;8; i++)<br />  {<br />    ShiftPort &amp;= ~ClkPin;           //UStawienie CLKPin na stan LOW<br /><br />    if (shiftData &amp; (1&lt;&lt;i)) ShiftPort |= DataPin;  //Jeśli aktualny bit = 1 to ustawia DataPin na HI<br />    else ShiftPort &amp;= ~DataPin;       //Jeśli aktualny bit = 0 to ustawia DataPin na LOW<br /><br />    ShiftPort |= ClkPin;           //Ustawienie CLKPin na HI  = incrementacja rejestru<br />    ShiftPort &amp;= ~DataPin;           //UStawienie DataPin na LOW = przygotowanie do nastepnego zapisu<br />  }<br /><br />  ShiftPort |= LatchPin;          //Ustawienie Zatrzasku na HI sygnalizuje koniec zapisu<br />  ShiftPort &amp;= ~(ClkPin | DataPin);  //Reset ClkPin i DataPin czyli dla obu stan niski (low)<br />}<br /><br />void each_led(void)//Ta funkcja włacza diody pojedyńczo <br />{<br />  for (u8 j=0; j&lt;8; j++)<br />  {<br />    cli();<br />    row_buffer&#91;j&#93; = 0x0001;<br />    sei();<br />    Delay_ms(50);<br />    for (char i=0; i&lt;8; i++)<br />    {<br />      cli();<br />      row_buffer&#91;j&#93; &lt;&lt;= 1;<br />      sei();<br />      Delay_ms(50);<br />    }<br />    cli();<br />    row_buffer&#91;j&#93; = 0x0000;<br />    sei();<br />  }<br />}<br /><br />void Write_Char(u8 letter)//Funkcja zapisuje jeden znak do matrycy (bez przewijania)<br />{<br />  <br />  <br />  //litery sa pobierane do tablicy font5x8&#91;&#93; z pliku (font5x8.h)<br />  letter -= 32;//Ustawienie indeksów tablicy na odpowiednie znaki<br />  char temp;<br />  for (char i=0; i&lt;5; i++)//odczyt jednej kolumny znaku<br />  {<br />    temp = pgm_read_byte((char *)((int)font5x8 + (5 * letter) + i));//Pobranie kolumny z pamięci<br />    for (char j=0; j&lt;8; j++)<br />    {<br />      //Zapis bitów do odpowiednich komórek tablicy (row_buffer)<br />      if (temp &amp; (1&lt;&lt;j)) row_buffer&#91;7-j&#93; |= 1&lt;&lt;(4-i);<br />      else row_buffer&#91;7-j&#93; &amp;= ~(1&lt;&lt;(4-i));<br />    }<br />  }<br />}<br /><br />void shift_row_buffer_left(u8 columns)//Funkcja przesuwa wszystkie wiersze w LEWO<br />{<br />  for (u8 buffer_index=0; buffer_index&lt;8; buffer_index++)<br />  {<br />    row_buffer&#91;buffer_index&#93; &lt;&lt;= columns;<br />  }<br />}<br /><br />void Scroll_Char (char myChar)//Funkcja przewija Znak na matrycy od PRAWEJ do LEWEJ<br />{<br />  myChar -= 32;//Ustawienie wartości na odpowiednia z indexem<br />  char temp;<br />  shift_row_buffer_left(1);  //Wstawianie pustej kolumny przed każdą nową literę<br />  Delay_ms(ScrollSpeed);<br />  for (u8 i=0; i&lt;5; i++)<br />  {<br />    shift_row_buffer_left(1);<br />    temp = pgm_read_byte((char *)((int)font5x8 + (5 * myChar) + i));//Pobranie nowej kolumny<br />    for (u8 j=0; j&lt;8; j++)<br />    {<br />      if (temp &amp; (1&lt;&lt;j)) row_buffer&#91;7-j&#93; |= 1&lt;&lt;0;<br />      else row_buffer&#91;7-j&#93; &amp;= ~(1&lt;&lt;0);<br />    }<br />    Delay_ms(ScrollSpeed);<br />  }<br />}<br />void Scroll_String(char * myString)//Funkcja przewija po ekranie zadany napis <br />{<br />  while (*myString)//Powtarzanie aż zostanie napodkany znak NULL<br />  {<br />    Scroll_Char(*myString);//Przewijanie nastepnego znaku<br />    ++myString;<br /><br />  }<br />}<br /><br />void Scroll_String_P(const char * myString)  //Funkcja odczytuje łańcuch z pamieci i wyswietla go na matrycy<br />{<br />  while (pgm_read_byte(myString))<br />  {<br />    Scroll_Char(pgm_read_byte(myString));<br />    ++myString;<br />  }<br />}<br /><br />void Scroll_Clear(void)//Funkcja czyści ekran <br />                                //w zasadzie przewijam wszystko w lewo <br />{<br />  for(u8 i=0; i&lt;8; i++)<br />  {<br />    shift_row_buffer_left(1);<br />    Delay_ms(ScrollSpeed);<br />  }<br />}<br /><br />int main(void)<br />{<br />  InitPorts();<br />  InitTimers();<br />  while(1)<br />  {<br />    Scroll_String(&quot;POZDRAWIAM !&quot;);//Troche mało optymalne wyświetlanie - zuzywa sporo ramu<br />    Scroll_Clear();        //Przewijanie w lewo aż do wyczyszczenia <br />    Scroll_String_P(Messages1);//Wyswietlanie ciągu z pamieci programu -- zuzywa mało ramu<br />    Scroll_Clear();<br />    Scroll_String_P(Messages2);<br />    Scroll_Clear();<br />    <br />    each_led();<br /><br />    for (char x=33; x&lt;128; x++)//Zapis znaków ascii <br />    {<br />      Write_Char(x);<br />      Delay_ms(500);<br />    }<br />  }<br />}<br /><br />ISR(TIMER1_COMPA_vect)//Interrupt Service Routine -- praca w przerwaniu<br />{<br />  if(++row_track == 8) row_track = 0;//Śledzenie wiersza (ROW)<br />  Shift_Int(row_buffer&#91;row_track&#93;);//przewijanie danych do nastepnego wiersza<br /><br />  ShiftPort &amp;= ~OE;//Uzyłem w celu zapobiegania zakłuceniom <br />                                //moze lepiej by było dać tu NOP ??<br />  if (row_track == 0)//Wyłaczenie controli<br />  {<br />    RowPort &amp;= ~(1&lt;&lt;7);//Jeśli ROW0 to zatrzymaj na ROW7  -- chyba wiadomo dlaczego<br />  }<br />  else<br />  {<br />    RowPort &amp;= ~(1&lt;&lt;(row_track-1));//Wyłacz poprzedni wiersz<br />  }<br /><br />  ShiftPort |= LatchPin;<br />  RowPort |= (1&lt;&lt;row_track);<br />  ShiftPort |= OE;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1016">svistak2000</a> — 26 mar 2015, o 23:00</p><hr />
]]></content>
</entry>
</feed>