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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-03-03T22:59:06+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=6220&amp;mode</id>
<entry>
<author><name><![CDATA[lewytolewy]]></name></author>
<updated>2014-03-03T22:59:06+01:00</updated>
<published>2014-03-03T22:59:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6220&amp;p=72958#p72958</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6220&amp;p=72958#p72958"/>
<title type="html"><![CDATA[Re: [Atmega 16] [język C] Prośba o sprawdzenie kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6220&amp;p=72958#p72958"><![CDATA[
wybaczcie koledzy moją ostatnią wypowiedź, byłem na zajęciach w szkole i przez telefon pisałem podczas równań różniczkowych no i tak jakos niebardzo mogłem się skupić <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Już wyjaśniam co chciałem uzyskać ale nie ejstem pewien czy sie udało:<br /><br />TCCR0=0x8B  to konfiguracja timera preskaler przez 64<br />TCNT0 = RELOAD_VAL to ustawienie wartości początkowej licznika na 131<br />TIMSK=(1&lt;&lt;TOIE0) służy konfiguracji przerwania gdy przepełnia się licznik timera 0- włączam przerwanie przy pomocy bitu TOIE0<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3256">lewytolewy</a> — 3 mar 2014, o 22:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[1bobik1]]></name></author>
<updated>2014-03-03T21:46:31+01:00</updated>
<published>2014-03-03T21:46:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6220&amp;p=72953#p72953</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6220&amp;p=72953#p72953"/>
<title type="html"><![CDATA[Re: [Atmega 16] [język C] Prośba o sprawdzenie kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6220&amp;p=72953#p72953"><![CDATA[
[syntax=c]// tryb MASTER, prÄ™dkoÄ‡ zegara 500kHz   8MHz/500kHz=16  || SPI ||<br />SPCR = (1&lt;&lt;MSTR)|(1&lt;&lt;SPR0);<br />SPCR |= (1&lt;&lt;SPE) | (1&lt;&lt;DORD);//wlaczenie SPI, LSB[/syntax]<br /><br />a to jest konfiguracja SPI z mojego projektu, wiesz już o co chodzi ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=464">1bobik1</a> — 3 mar 2014, o 21:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[lewytolewy]]></name></author>
<updated>2014-03-03T15:43:46+01:00</updated>
<published>2014-03-03T15:43:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6220&amp;p=72922#p72922</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6220&amp;p=72922#p72922"/>
<title type="html"><![CDATA[Re: [Atmega 16] [język C] Prośba o sprawdzenie kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6220&amp;p=72922#p72922"><![CDATA[
TCCR0=0x8B to konfiguracja timera<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3256">lewytolewy</a> — 3 mar 2014, o 15:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[1bobik1]]></name></author>
<updated>2014-03-03T07:32:33+01:00</updated>
<published>2014-03-03T07:32:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6220&amp;p=72894#p72894</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6220&amp;p=72894#p72894"/>
<title type="html"><![CDATA[Re: [Atmega 16] [język C] Prośba o sprawdzenie kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6220&amp;p=72894#p72894"><![CDATA[
Niestety na razie nie mogę Ci pomóc ale dam parę rad.<br /><br />1 Wstaw wszystkie pliki z projektu jako załączniki - łatwiej będzie to wrzucać do eclipsa<br />2 &quot;TCCR0=0x8B;&quot; Proponuję zapisywać takie rzeczy jak Mirek radzi, albo przynajmniej w komentarzu napisać co toto ustawia<br /><br />Tak na szybko to tutaj:<br />[syntax=c]for(uint8_t i=0; i&lt;IGEAR_COUNT; i++)<br /> {<br /> if(     GEAR_PIN &amp; ( 1 &lt;&lt; i ) ) continue;<br />   return ++i;<br />  }[/syntax]<br /><br />nie wiem co ++i robi za returnem ? wydaje mi się że powinno być przed a dokładniej w osobnej linii, ale jestem początkujący więc mogę się mylić.<br /><br />i na koniec luźne spostrzeżenie (nie bierz tego do siebie)  wydaje mi się że taka ilość #define-ów jak w twoim kodzie nie poprawia czytelności ale ją zmniejsza. Bez eclipsa nie podochodź <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /> całkiem zgrabnie wyszła Ci pętla while <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />[syntax=c]while(1)<br />      {<br />          wdt_reset();<br />          sys_main();     <br />       }[/syntax]<br /><br />W sumie to całkiem prosty projekt a kod jest tak zamieszany że strach podchodzić.<br />Następnym razem testuj kod od samego początku pisania.<br />Dla mnie to niezrozumiałe jest że napisałeś tyle kodu, a nie działa Ci wyśw<br />Pooglądaj filmy Mirka i zobacz jak on kodzi <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=464">1bobik1</a> — 3 mar 2014, o 07:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[lewytolewy]]></name></author>
<updated>2014-03-03T00:56:10+01:00</updated>
<published>2014-03-03T00:56:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6220&amp;p=72893#p72893</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6220&amp;p=72893#p72893"/>
<title type="html"><![CDATA[[Atmega 16] [język C] Prośba o sprawdzenie kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6220&amp;p=72893#p72893"><![CDATA[
Witam opiszę w czym tkwi problem, zaprojektowałem i wykonałem układ sterujący dwoma siłownikami- wykorzystuję do tego rygle samochodowe. Odpowiadają one za nastawianie przełożeń w pewnej przekładni.<br /><br />Założenia projektu:<br />2 przyciski- wyższy bieg, niższy bieg<br />7-segmentowy wyświetlacz LED wskazujący aktualną pozycję. Co to znaczy? Ano tylko tyle, że gdy naciskamy + na wyświetlaczu dostajemy 1,2,3,4,5 gdy minus 5,4,3,2,1. Oczywiście gdy np jesteśmy na stanie wyświetlacza 3 i naciskamy - to otrzymamy 2 i analogicznie gdy mamy 3 i naciśniemy + dostaniemy 4. Zakres to 1-5.<br />2 elektromagnesy załączające się w zależności który przycisk naciśniemy<br />czujnik biegu- sprzężenie zwrotne pozwalające sprawdzić czy po wyzwoleniu siłownika bieg wszedł czy też nie udało się go wbić. W wypadku gdy się nie powiodło stan wyświetlacza zostaje niezmieniony. Płytkę i schemat sprawdziłem 150 000 razy i tam błędów nie stwierdziłem. Wyświetlacz to wyświetlacz ze wspólną katodą- sterowany 1kami z procesora. Siłowniki wyzwalane są 0-1kowo za pomocą 2 mosfetów.<br />Przyciski podłaczone do JP2, JP5 obsługuje wyświetlacz, JP7 siłowniki natomiast JP3 odbiera sygnały z czujnika biegu- aktualny bieg daje stan wysoki na odpowiedni pin złącza, tam do działania wkraczają transoptory które złączają odpowiednie piny procesora do masy.<br /><br />Teraz troszkę o programie:<br />program zawiera 3 podstawowe moduly<br /><br />klawiatura (keyboard.c)<br />wyswietlacz (display.c)<br />elektromagnesy ( elektro.c)<br />czujnik biegu(gsens.c)<br /><br />kazdy modul ma swoje zadanie i zdarzenia z niego lub informacje sa odbierane lub wysylane w aplikacji.<br /><br />klawiatura :<br /><br />funkcja init ktora zawsze raz na poczatku inicjuje rozne zeczy.<br />z kontekstu przerwania sprawdzany jest stan obydwu przyciskow<br />jezeli jest on stabilny przez 50ms to znaczy ze drgania stykow sie skonczyly i mozna powiedzec ze przycisk jest nacisniety. Przerwanie wtedy ustawia odpowieno dla tego przycisku flage signal. Potem przychodzi kontekst Main i widzi ze jeden z przyciskow ma flage do zgloszenia i zglasza funkcje callback ktora jest odbierana w glownej aplikacji. Po czym flaga jest zerowana.<br /><br />display jest prosty i chyba nie trzeba wiele tlumaczyc.<br /><br />elektromagnesy przyjmuja rozkazy z aplikacji.<br />jezeli dany elektromagnes zostanie pobudzony to wtedy jest on zalaczany i zostaje ustawiony licznik ktory jest co 1ms dekrementowany w przerwaniu.<br />Jezeli dekrementacja osiagnie zero ( po 500ms ) to wtedy zostaja wylaczone elektromagnesy.<br /><br />czujnik biegu sprawdza czy po odpaleniu trigger'ze czyli naciśnięciu przycisku wszedł kolejny lub poprzedni bieg, jeżlei tak to wszystko gra jeżeli coś się nie zgadza- biegu nie udało się wrzucić to dekrementuje lub inkrementuje cyfrę na wyświetlaczu. Po co? By nie doszło do sytuacji, że wskazanie wyświetlacza rozjedzie się z aktualnym przełożeniem. <br /><br />Na czym polega problem?<br />Po podłączeniu zasilania nic się nie grzeje napięcia są ok jednak na wyświetlaczu palą się segmenty a, b, g oraz dp. Gdy naciskam przyciski nie dzieje się nic, nie załączają się ani mosfety ani nie zmienia się nic na wyświetlaczu. Nie mam pojęcia gdzie może leżeć błąd. <br /><br />Nie ukrywając, kod jest dość mocno skomplikowany a stworzony został w istnych męczarniach (do tej pory znałem język C lecz tylko od strony programowania komputerowego- pierwszy raz programuję procesory), dlatego też prosiłem o pomoc osoby z forum ponieważ sam nie jestem jeszcze na takim etapie zaawansowania by to obsłużyć.<br />Na pomysły w czym rzecz czekam gorąco, zwłaszcza interesuje mnie wypowiedź kolegi Mirka ponieważ między innymi jego książką i blogiem się pożytkowałem podczas tworzenia kodu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Pozdrawiam, Krzysiek! <br /><br /><a href="http://forum.atnel.pl/_obrazki/o/3256/fe02dbb3136ebcb78a86e5b04b0f9940.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/3256/fe02dbb3136ebcb78a86e5b04b0f9940.JPG" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/3256/1691c5a5c7422a157497121bc2a85378.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/3256/1691c5a5c7422a157497121bc2a85378.JPG" alt="Obrazek" /></a><br /><br />Kody:<br /><br />display:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &quot;macros.h&quot;<br />#include &quot;display.h&quot;<br /><br />// user definitions<br />#define DISPLAY_PORTC<br /><br />// program definitions<br />#define DISP_DDRDDR_MACRO(DISPLAY_PORT)<br />#define DISP_PORTPORT_MACRO(DISPLAY_PORT)<br /><br />uint8_t test;<br /><br />static uint8_t PROGMEM convTab&#91;10&#93;={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0xEF }; //0-9 cyfry<br /><br />void IDisp_Init(void)<br />{<br />DISP_PORT|=0xFF;<br />DISP_DDR|=0xFF;<br />}<br /><br />void IDisp_Puts(uint8_t digit)<br />{<br />if(digit &gt; 9 ) digit = 0;<br /><br />PORTD = pgm_read_byte( convTab + digit );<br />}[/syntax]<br /><br />[syntax=c]#ifndef _DISPLAY_H<br />#define _DISPLAY_H<br /><br /><br />void IDisp_Init(void);<br />void IDisp_Puts(uint8_t digit);<br /><br /><br />#endif[/syntax]<br /><br />electro:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &quot;macros.h&quot;<br />#include &quot;elektro.h&quot;<br /><br /><br />// user definitions<br />#define ELEKTRO_PORTB<br />#define ELEK_1_LINE_BV(0)<br />#define ELEK_2_LINE_BV(1)<br />#define ELEK_PROBE_LINE_BV(2)<br />#define ELEKTRO_TIME500  // gives 500 ms<br /><br /><br />// program definitions<br />#define ELEK_DDRDDR_MACRO(ELEKTRO_PORT)<br />#define ELEK_PORTPORT_MACRO(ELEKTRO_PORT)<br /><br />#define ELEKTRO_LINES( ELEK_1_LINE | ELEK_2_LINE | ELEK_PROBE_LINE )<br /><br />#define ELEKTRO1_ON()ELEK_PORT |= ELEK_1_LINE | ELEK_PROBE_LINE<br />#define ELEKTRO2_ON()ELEK_PORT |= ELEK_2_LINE | ELEK_PROBE_LINE<br /><br />#define ELEKTRO_ALL_OFF()ELEK_PORT&amp;=~(ELEKTRO_LINES);<br /><br /><br />static volatile uint16_t xTime = 0;<br /><br /><br />void IElektro_Init(void)<br />{<br />ELEK_PORT &amp;= ~ELEKTRO_LINES;<br />ELEK_DDR |= ELEKTRO_LINES;<br />}<br /><br /><br />void IElektro_Trigger(uint8_t which)<br />{<br />if(which) ELEKTRO1_ON();<br />else ELEKTRO2_ON();<br /><br />xTime = ELEKTRO_TIME;<br />}<br /><br /><br /><br />void IElektro_Tick(void)<br />{<br />if(xTime)<br />{<br />if(--xTime == 0) <br />{<br />ELEKTRO_ALL_OFF();<br />IElektro_TriggerFinishCallback();<br />}<br />}<br /><br />}[/syntax]<br /><br />[syntax=c]#ifndef _ELEKTRO_H_<br />#define _ELEKTRO_H_<br /><br />void IElektro_Init(void);<br />void IElektro_Tick(void);<br />void IElektro_Trigger(uint8_t which);<br />extern void IElektro_TriggerFinishCallback(void);<br /><br /><br />#endif[/syntax]<br /><br />gsens:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &quot;gsens.h&quot;<br />#include &quot;macros.h&quot;<br /><br /><br />// user definitions<br />#define IGEAR_PORTA<br />#define IGEAR_USAGE_MASK0x0F<br />#define IGEAR_COUNT5<br /><br />#define GEAR_DDRDDR_MACRO(IGEAR_PORT)<br />#define GEAR_PORTPORT_MACRO(IGEAR_PORT)<br />#define GEAR_PINPIN_MACRO(IGEAR_PORT)<br /><br /><br /><br />uint8_t IGsens_Init(void)<br />{<br />GEAR_DDR&amp;=~IGEAR_USAGE_MASK;<br />GEAR_PORT|=IGEAR_USAGE_MASK;<br /><br />for(uint8_t i=0; i&lt;IGEAR_COUNT; i++)<br />{<br />if(GEAR_PIN &amp; ( 1 &lt;&lt; i ) ) continue;<br />return ++i;<br />}<br /><br />return 0;<br />}<br /><br /><br />uint8_t IGsens_Get(uint8_t gear)<br />{<br />gear--;<br /><br />return  ( GEAR_PIN &amp; ( 1 &lt;&lt; gear ) ) ;<br />}[/syntax]<br />[syntax=c]#ifndef _GSENS_H_<br />#define _GSENS_H_<br /><br /><br />uint8_t IGsens_Init(void);<br />uint8_t IGsens_Get(uint8_t gear);<br /><br /><br />#endif[/syntax]<br /><br />keyboard:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &quot;macros.h&quot;<br />#include &quot;keyboard.h&quot;<br /><br /><br />// user definitions<br />#define KEYBOARD_PORTD<br />#define KEY_UP_LINE_BV(2)<br />#define KEY_DOWN_LINE_BV(3)<br />#define KEY_JITTER50  // 50 * 1 ms = 50 ms<br />#define KEY_COUNT 2<br /><br /><br />// program definitions<br />#define KEY_DDRDDR_MACRO(KEYBOARD_PORT)<br />#define KEY_PORTPORT_MACRO(KEYBOARD_PORT)<br />#define KEY_PINPIN_MACRO(KEYBOARD_PORT)<br /><br /><br /><br />static void key_configure(void)<br />{<br />KEY_PORT|=( KEY_UP_LINE | KEY_DOWN_LINE );<br />KEY_DDR &amp;= ~( KEY_UP_LINE | KEY_DOWN_LINE );<br />}<br /><br /><br />typedef struct<br />{<br />uint8_t keyTime;<br />volatile uint8_t keySignal;<br />} KeyData_ts;<br /><br /><br />static KeyData_ts KeyData&#91;KEY_COUNT&#93;;<br />static uint8_t keyTab&#91;KEY_COUNT&#93; = {  KEY_UP_LINE , KEY_DOWN_LINE };<br /><br /><br />void IKey_Init( void )<br />{<br /><br />key_configure();<br /><br /><br />for(uint8_t k=0; k&lt;KEY_COUNT; k++)<br />{<br />KeyData&#91;k&#93;.keyTime = 0;<br />KeyData&#91;k&#93;.keySignal = 0;<br />}<br />}<br /><br /><br />void IKey_Main(void)<br />{<br />for(uint8_t k=0; k&lt;KEY_COUNT; k++)<br />{<br />if(KeyData&#91;k&#93;.keySignal == 0) continue;<br />IKey_EventCallback(k);<br />KeyData&#91;k&#93;.keySignal = 0;<br />}<br />}<br /><br /><br /><br />void IKey_Tick(void)<br />{<br /><br />for( uint8_t k=0; k&lt;KEY_COUNT; k++)<br />{<br /><br />if( KEY_PIN &amp; keyTab&#91;k&#93; )<br />{<br />KeyData&#91;k&#93;.keyTime = 0;<br />return;<br />}<br /><br />if( KeyData&#91;k&#93;.keyTime &lt; KEY_JITTER )<br />{<br />if(++KeyData&#91;k&#93;.keyTime &gt;= KEY_JITTER)<br />{<br />KeyData&#91;k&#93;.keySignal = 1;<br />}<br />}<br /><br />}<br /><br />}[/syntax]<br />[syntax=c]#ifndef _KEYBOARD_H_<br />#define _KEYBOARD_H_<br /><br /><br /><br />typedef enum<br />{<br />eKeyUp = 0,<br />eKeyDown = 1<br />} TEKey_t;<br /><br /><br />void IKey_Init(void);<br />void IKey_Main(void);<br />void IKey_Tick(void);<br /><br />extern void IKey_EventCallback(TEKey_t aKey);<br /><br />#endif[/syntax]<br />atmega 16<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/wdt.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;system.h&quot;<br /><br />#define RELOAD_VAL 6<br /><br /><br />int main (void)<br />{<br /><br />TCCR0=0x8B;<br />TCNT0 = RELOAD_VAL;<br />TIMSK=(1&lt;&lt;TOIE0);<br />wdt_enable(WDTO_1S);<br /><br />sys_init();<br /><br />sei();<br /><br />while(1)<br />{<br />wdt_reset();<br />sys_main();<br />}<br /><br /><br />}<br /><br /><br />SIGNAL( SIG_OVERFLOW0 )  // 1 ms<br />{<br />TCNT0 = RELOAD_VAL;<br />sys_tick(); <br />}[/syntax]<br />[syntax=c]#ifndef MAIN_H<br />#define MAIN_H<br /><br />#include &lt;avr/io.h&gt;<br /><br />#endif[/syntax]<br />macros<br />[syntax=c]#ifndef _MACROS_H_<br />#define _MACROS_H_<br /><br /><br />#define JOIN(a,b)a##b<br /><br />#define DDR_MACRO(x)JOIN(DDR,x)<br />#define PORT_MACRO(x)JOIN(PORT,x)<br />#define PIN_MACRO(x)JOIN(PIN,x)<br /><br /><br /><br />#endif[/syntax]<br />system<br />[syntax=c]#include &quot;system.h&quot;<br />#include &quot;display.h&quot;<br />#include &quot;keyboard.h&quot;<br />#include &quot;elektro.h&quot;<br />#include &quot;gsens.h&quot;<br /><br /><br />uint8_t myNumber;<br />int8_t failBit;<br /><br /><br />void IKey_EventCallback(TEKey_t aKey)<br />{<br />if(aKey == eKeyUp)<br />{<br />if(myNumber &lt; 5 )  <br />{<br />myNumber++;<br />IElektro_Trigger(1);<br />failBit = -1; // in case of fail need to decrement<br />}<br />}<br /><br /><br />if(aKey == eKeyDown)<br />{<br />if( myNumber &gt; 1 )  <br />{<br />myNumber--;<br />IElektro_Trigger(0);<br />failBit = 1; // in case of fail need to increment<br />}<br />}<br /><br /><br />IDisp_Puts(myNumber);<br />}<br /><br /><br /><br />// from interrupt context<br />void IElektro_TriggerFinishCallback(void)<br />{<br />if( IGsens_Get(myNumber) ) // check if gear success // if not then rollback display<br />{<br />myNumber+= failBit;<br />IDisp_Puts(myNumber);<br />}<br />}<br /><br /><br /><br />void sys_init(void)<br />{<br />IKey_Init();<br />IDisp_Init();<br />IElektro_Init();<br />myNumber = IGsens_Init(); // get current gear from sensor<br />IDisp_Puts(myNumber);// put current gear on display<br />}<br /><br /><br />void sys_main(void)<br />{<br />IKey_Main();<br />}<br /><br /><br />void sys_tick(void)<br />{<br />IKey_Tick();<br />}[/syntax]<br />[syntax=c]#ifndef SYSTEM_H<br />#define SYSTEM_H<br /><br />#include &lt;avr/io.h&gt;<br /><br />void sys_init(void);<br />void sys_tick(void);<br />void sys_main(void);<br /><br />#endif[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3256">lewytolewy</a> — 3 mar 2014, o 00:56</p><hr />
]]></content>
</entry>
</feed>