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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-08-20T23:11:07+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=3887&amp;mode</id>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2013-08-20T23:11:07+01:00</updated>
<published>2013-08-20T23:11:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46485#p46485</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46485#p46485"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46485#p46485"><![CDATA[
opanowane zagadnienia ktore tutaj omawialismy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />teraz wiem co jak i od czego no i po co <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />teraz sie tym jeszcze pobawie ... i bede tworzyl plytke z LCD 2x20 obadamy ... co i jak mam nadzieje ze jak gdzies zlapie zwieche to moge pisac ? <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />oczywiscie pomogl leci za wyprowadzenie mnie z mojej glupoty <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />pozdrawiam <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br />jeżeli ktoś z początkujących nie zrozumie tego co tutaj omawialiśmy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> oczywiście służę pomocą <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />wyjaśnię najlepiej jak mi się uda a gdyby co to chłopaki mnie pałą w łeb i wyprowadzą z głupoty <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 20 sie 2013, o 23:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2013-08-20T21:03:53+01:00</updated>
<published>2013-08-20T21:03:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46456#p46456</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46456#p46456"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46456#p46456"><![CDATA[
kurcze widzisz faktycznie :/<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 20 sie 2013, o 21:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-08-20T20:59:14+01:00</updated>
<published>2013-08-20T20:59:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46455#p46455</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46455#p46455"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46455#p46455"><![CDATA[
Zapomnij o tym co napisałeś, bo się cofasz. Przecież wystarczy dodać sekwencję jak wcześniej to było robione:<br />[syntax=c]void sekwencja4(void) {<br />        uint8_t tab&#91;&#93; = { <br />        LED1|LED2|LED3,<br />        ~(LED1|LED2|LED3),<br />        LED1|LED2|LED3,<br />        ~(LED1|LED2|LED3),<br />        LED1|LED2|LED3,<br />        ~(LED1|LED2|LED3),<br />        LED4|LED5|LED6,<br />        LED4|LED5|LED6,<br />        ~(LED4|LED5|LED6),<br />        ~(LED4|LED5|LED6),<br />        LED4|LED5|LED6,<br />        LED4|LED5|LED6,<br />        ~(LED4|LED5|LED6),<br />        ~(LED4|LED5|LED6),<br />        LED4|LED5|LED6,<br />        LED4|LED5|LED6,<br />        ~(LED4|LED5|LED6),<br />        ~(LED4|LED5|LED6)<br />        };<br />        static uint8_t i = 0; //zmienna pamiętana po wyjściu z funkcji<br />        //krok sekwencji<br />        PORTC = ~tab&#91;i++&#93;;<br />        if (i &gt; 17) i = 0;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 20 sie 2013, o 20:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2013-08-20T20:27:18+01:00</updated>
<published>2013-08-20T20:27:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46451#p46451</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46451#p46451"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46451#p46451"><![CDATA[
moze ktos pomoc ? dlaczego led tylko swieci 1% mocy ? jak zmiejsze timer ... w sensie podam 200 to wyraznie widac ze mruga ale 1% mocy<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 20 sie 2013, o 20:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2013-08-20T19:02:23+01:00</updated>
<published>2013-08-20T19:02:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46426#p46426</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46426#p46426"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46426#p46426"><![CDATA[
ok tak mam ale w sekwencji 4 nie za bardzo wiem jak wykonac te mrugi :/<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 12 minutach ]</span></strong><br /><br />w sekwencji 4 mam taki kod ...<br /><br />[syntax=c]void sekwencja4(void) {<br />        <br />PORTC &amp;= ~(LED1|LED2|LED3); //zapal 0ms<br /><br />PORTC |= (LED1|LED2|LED3); //zgas 50ms<br /><br />PORTC &amp;= ~(LED1|LED2|LED3); //zapal 100ms<br /><br />PORTC |= (LED1|LED2|LED3);  //zgas 50ms<br /><br />PORTC &amp;= ~(LED1|LED2|LED3); //zapal 200ms<br /><br />PORTC |= (LED1|LED2|LED3); //zgas 250ms<br /><br /><br />PORTC &amp;= ~(LED4|LED5|LED6); //zapal 300ms<br /><br />PORTC |= (LED4|LED5|LED6); //zgas 400ms<br /><br />PORTC &amp;= ~(LED4|LED5|LED6); //zapal 450ms<br /><br />PORTC |= (LED4|LED5|LED6); //zgas 500ms<br /><br />PORTC &amp;= ~(LED4|LED5|LED6); //zapal 550ms<br /><br />PORTC |= (LED4|LED5|LED6); //zgas 600ms<br /><br /><br />}[/syntax]<br /><br /><br />czy wstawiac tutaj :<br /><br />[syntax=c]if(Timer4==150) {PORTC &amp;= ~(LED1|LED2|LED3); //zapal }<br /><br />if(Timer4==140) {PORTC |= (LED1|LED2|LED3); //zgas }[/syntax]<br /><br /><br />czy inaczej to rozwiazac ?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 20 minutach ]</span></strong><br /><br />bez if niby dziala ale nie do konca ... ledy sie swieca w 1% :/ jak to rozwiazac ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 20 sie 2013, o 19:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-08-20T18:17:28+01:00</updated>
<published>2013-08-20T18:17:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46415#p46415</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46415#p46415"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46415#p46415"><![CDATA[
A dlaczego musi odliczać w górę?<br />[syntax=c]if (!Timer4) { //wykonanie kroku sekwencji co 5*10ms (pod warunkiem, że zmienna sterująca jest ustawiona)<br />   Timer4 = 5;<br />   if( program4 == 1 ) sekwencja4();<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 20 sie 2013, o 18:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2013-08-20T18:13:39+01:00</updated>
<published>2013-08-20T18:13:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46413#p46413</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46413#p46413"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46413#p46413"><![CDATA[
też tak myśle lecz nie wiem jak ustawić np Timer4 by odliczał od 0 w górę ale jakoś to może opanuje ... ewentualnie jakaś podpowiedz ? <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 20 sie 2013, o 18:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-08-20T17:59:57+01:00</updated>
<published>2013-08-20T17:59:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46409#p46409</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46409#p46409"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46409#p46409"><![CDATA[
Do jakiegoś timera programowego wpisać 5 (5*10ms), a sekwencję zrobić w taki sposób:<br />Zapal LED1..3 //0ms<br />Zgaś LED1..3 //50ms<br />Zapal LED1..3 //100ms<br />Zgaś LED1..3 <br />Zapal LED1..3 //200ms<br />Zgaś LED1..3 <br />Zapal LED4..6 //300ms<br />Zapal LED4..6 <br />Zgaś LED4..6 //400ms<br />Zgaś LED4..6 <br />Zapal LED4..6 //500ms<br />Zapal LED4..6<br />Zgaś LED4..6 //600ms<br />Zgaś LED4..6<br />Zapal LED4..6 //700ms<br />Zapal LED4..6<br />Zgaś LED4..6 //800ms<br />Zgaś LED4..6<br />//900ms<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 20 sie 2013, o 17:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2013-08-20T16:58:13+01:00</updated>
<published>2013-08-20T16:58:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46396#p46396</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46396#p46396"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46396#p46396"><![CDATA[
Ok dziekuje za wyjasnienia bardzo mi pomogly za co i leci pomogl.<br /><br />Mam jeszcze jedno pytanie. Mianowicie opierajac sie o timery chcialbym aby w ciagu np 0,3sek 3razy mrugnely ledy od 1do3 a nastepnie w ciagu 0,6 sek 3 krotnie mrugnely ledy od 4do 6 jak mozna to zrobic na timerach ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 20 sie 2013, o 16:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-08-20T13:50:37+01:00</updated>
<published>2013-08-20T13:50:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46370#p46370</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46370#p46370"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46370#p46370"><![CDATA[
<div class="quotetitle">majster napisał(a):</div><div class="quotecontent"><br />SW1 wlaczy funkcje ... SW2 nie wylaczy 1 i nie wystartuje funkcja 2<br />racja ?<br /></div><br />Masz rację, ale sekwencja 2 zostanie mimo wszystko uruchomiona i będą 2 działać, ale 1 nie zobaczysz, bo wynik nadpisze 2. Jakby sekwencje były na innych portach to byłoby widać, że działają jednocześnie. Jak włączając sekwencję 2 chcesz wyłączyć pozostałe to oczywiście nie ma problemu:<br />[syntax=c]void program_led3(void) {<br />   program2 = 1; //załącz sekwencję<br />   //wyłącz pozostałe sekwencje<br />   program1 = 0;<br />   program3 = 0;<br />   program4 = 0;<br />   program5 = 0;<br />   program6 = 0;<br />}[/syntax]<br /><div class="quotetitle">majster napisał(a):</div><div class="quotecontent"><br />[syntax=c]if( !Timer2 ) {<br />   Timer2=10;<br />       PORTC &amp;= ~LED1;<br />   Timer2=20;<br />       PORTC ^= LED1;<br />  }[/syntax]<br />ok 1 timer liczy do 10 tikniec pozniej do 20 tikniec i zeruje sie liczac 10 tikniec pozniej 20 tikniec -&gt; powinno dzialac czyz nie ?<br /><br />u mnie jak widzisz na 10 tiknieciu led mial sie zapalic a na 20 zgasnac ... a u ciebie na 20 tiknieciu na chlke zmienia stan nie prawdaz ?? czyz to nie inaczej dziala niz moje zadanie ?<br /></div><br />Timer2 jest zmniejszany, czyli na początku gdy Timer2 = 0 program wykona kolejno: wpisze do Timer2 10 i od razu zapali LED i od razu wpisze 20 do zmiennej Timer2 i od razu zmieni stan na przeciwny co zgasi LED. Jako, że Timer2 = 20, będzie zmniejszany o 1 co 10ms to w tym czasie LED pozostanie zgaszony, bo warunek nie jest spełniony. Po 20*10ms warunek będzie prawdziwy i LED zostanie zapalony na bardzo krótką chwilę jak wcześniej.<br />W takim przypadku:<br />[syntax=c]if( !Timer2 ) {<br />   Timer2=20;<br />    PORTC ^= LED1; //zmień stan na przeciwny<br />}[/syntax]<br />Na początku Timer2 = 0 i wykonany zostanie kod w którym, do zmiennej Timer2 wpisana zostaje nowa wartość 20 i od razu stan LED jest zmieniany na przeciwny co skutkuje zapaleniem LED. W następnym obiegu Timer2 = 2 i warunek nie jest spełniony, czyli LED ciągle się świeci, a co każde 10ms zmienna Timer2 jest zmniejszana i dopiero jak zostanie zdekrementowana do 0 to warunek będzie spełniony, a będzie to po 20*10ms = 200ms = 0,2s. Wtedy to do zmiennej Timer2 zostanie wpisana wartość 20 i od razu zostanie zmieniony stan na przeciwny co zgasi LED. Znowu trzeba czekać 200ms, aby się zapaliła.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 20 sie 2013, o 13:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2013-08-20T11:34:49+01:00</updated>
<published>2013-08-20T11:34:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46359#p46359</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46359#p46359"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46359#p46359"><![CDATA[
czy mi sie wydaje czy to nie zadziala tak jak zalozylem<br /><br />mianowicie teraz<br /><br />SW1 zaczaczy funcje  SW 1 - trzmyany wylaczy<br />SW2 zaczaczy funcje  SW 2 - trzmyany wylaczy<br /><br />ale nie zadziala tak<br /><br />SW1 zalaczy funkcje ... klikne SW2 i co ? pewnie klapa nie przelaczy funkji ...<br /><br />nie jestem pewny dopiero raczkuje ... jestem w pracy sprawdzic nie moge ...<br /><br />to tylko moje przypuszczenia i prosze o wyjasnienie czy sie myle czy tez nie?<br /><br />SW1 wlaczy funkcje ... SW2 nie wylaczy 1 i nie wystartuje funkcja 2<br /><br />racja ?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 3 minutach ]</span></strong><br /><br /><div class="quotetitle">Krauser napisał(a):</div><div class="quotecontent"><br />Pierwszy program nie działa, bo Timer jest zmniejszany do 0.<br />Drugi nie działa jak chcesz, bo jest nieprzemyślany. Wystarczy tylko tyle:<br />[syntax=c]if( !Timer2 ) {<br />   Timer2=20;<br />    PORTC ^= LED1; //zmień stan na przeciwny<br />}[/syntax]<br /></div><br /><br /><br />ok 1 timer liczy do 10 tikniec pozniej do 20 tikniec i zeruje sie liczac 10 tikniec pozniej 20 tikniec -&gt; powinno dzialac czyz nie ?<br /><br />u mnie jak widzisz na 10 tiknieciu led mial sie zapalic a na 20 zgasnac ... a u ciebie na 20 tiknieciu na chlke zmienia stan nie prawdaz ?? czyz to nie inaczej dziala niz moje zadanie ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 20 sie 2013, o 11:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-08-20T10:07:18+01:00</updated>
<published>2013-08-20T10:07:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46353#p46353</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46353#p46353"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46353#p46353"><![CDATA[
Pierwszy program nie działa, bo Timer jest zmniejszany do 0.<br />Drugi nie działa jak chcesz, bo jest nieprzemyślany. Wystarczy tylko tyle:<br />[syntax=c]if( !Timer2 ) {<br />   Timer2=20;<br />    PORTC ^= LED1; //zmień stan na przeciwny<br />}[/syntax]<br />A ping-pong ma w sobie nieskończoną pętlę i nigdy się nie skończy. Trzeba zmienić podejście. Można zrobić tak, że timer programowy Timer2 wyznacza czas przełączania sekwencji, a w funkcjach od przycisków zmieniasz stan zmiennej, która włącza lub wyłącza wykonywanie sekwencji. W każdym cyklu Timera2 nie wykonujesz całej sekwencji tylko jeden krok:<br /><br />[syntax=c]/*<br /> * kod nie był testowany<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define LED1 (1&lt;&lt;PC0)<br />#define LED2 (1&lt;&lt;PC1)<br />#define LED3 (1&lt;&lt;PC2)<br />#define LED4 (1&lt;&lt;PC3)<br />#define LED5 (1&lt;&lt;PC4)<br />#define LED6 (1&lt;&lt;PC5)<br /><br />#define KEY1 (1&lt;&lt;PD0)<br />#define KEY2 (1&lt;&lt;PD1)<br />#define KEY3 (1&lt;&lt;PD2)<br />#define KEY4 (1&lt;&lt;PD3)<br />#define KEY5 (1&lt;&lt;PD4)<br />#define KEY6 (1&lt;&lt;PD5)<br /><br />typedef struct {<br />volatile uint8_t *KPIN;<br />uint8_t key_mask;<br />uint8_t wait_time_s;<br />void (*kfun1)(void);<br />void (*kfun2)(void);<br />uint8_t klock;<br />uint8_t flag;<br />} TBUTTON;<br /><br />// konfuguracja timerow programowych<br />volatile uint16_t Timer1, Timer2, Timer3;<br />//zmienne sterujące<br />uint8_t program1, program2, program3, program4, program5, program6;<br /><br />// własne funkcje - 12 (po 2 na key)<br />void program_led1(void) {<br />program1 = 1; //uruchom sekwencję<br />}<br /><br />void program_led2(void) {<br />program1 = 0; //zatrzymaj sekwencję<br />}<br /><br />void program_led3(void) {<br />program2 = 1;<br />}<br /><br />void program_led4(void) {<br />program2 = 0;<br />}<br /><br />void program_led5(void) {<br />program3 = 1;<br />}<br /><br />void program_led6(void) {<br />program3 = 0;<br />}<br /><br />void program_led7(void) {<br />program4 = 1;<br />}<br /><br />void program_led8(void) {<br />program4 = 0;<br />}<br /><br />void program_led9(void) {<br />program5 = 1;<br />}<br /><br />void program_led10(void) {<br />program5 = 0;<br />}<br /><br />void program_led11(void) {<br />program6 = 1;<br />}<br /><br />void program_led12(void) {<br />program6 = 0;<br />}<br /><br />void sekwencja1(void) {<br />uint8_t tab&#91;&#93; = { 1, 2, 4, 8, 16, 32, 16, 8, 4, 2 };<br />static uint8_t i = 0; //zmienna pamiętana po wyjściu z funkcji<br />//krok sekwencji<br />PORTC = ~tab&#91;i++&#93;;<br />if (i &gt; 9) i = 0;<br />}<br /><br />void sekwencja2(void) {<br />uint8_t tab&#91;&#93; = { 3, 6, 12, 24, 48, 96, 48, 24, 12, 6 };<br />static uint8_t i = 0; //zmienna pamiętana po wyjsciu z funkcji<br />//krok sekwencji<br />PORTC = ~tab&#91;i++&#93;;<br />if (i &gt; 9) i = 0;<br />}<br /><br />void sekwencja3(void) {<br />uint8_t tab&#91;&#93; = { 0b10000001, 0b01000010, 0b00100100, 0b00011000, 0b00100100, 0b01000010 };<br />static uint8_t i = 0; //zmienna pamiętana po wyjściu z funkcji<br />//krok sekwencji<br />PORTC = ~tab&#91;i++&#93;;<br />if (i &gt; 5) i = 0;<br />}<br /><br />// funkcja obsługi klawiszy<br />void key_press(TBUTTON * btn);<br /><br />//definicja klawiszy<br />TBUTTON buttons&#91;6&#93; = { { &amp;PIND, KEY1, 3, program_led1, program_led2, 0, 0 }, //klawisz 1<br />{ &amp;PIND, KEY2, 3, program_led3, program_led4, 0, 0 }, //klawisz 2<br />{ &amp;PIND, KEY3, 3, program_led5, program_led6, 0, 0 }, //klawisz 3<br />{ &amp;PIND, KEY4, 3, program_led7, program_led8, 0, 0 }, //klawisz 4<br />{ &amp;PIND, KEY5, 3, program_led9, program_led10, 0, 0 }, //klawisz 5<br />{ &amp;PIND, KEY6, 3, program_led11, program_led12, 0, 0 }, //klawisz 6<br />};<br /><br />//------------------------------------------------------------------<br />int main(void) {<br /><br />PORTD |= KEY1 | KEY2 | KEY3 | KEY4 | KEY5 | KEY6; // podciagamy linie wejsc do VCC<br />DDRC |= LED1 | LED2 | LED3 | LED4 | LED5 | LED6;    // piny LED jako wyjscia<br />PORTC |= LED1 | LED2 | LED3 | LED4 | LED5 | LED6;        // wylaczamy ledy<br /><br />/* Timer2 – konfigurcajca silnika timerow programowych */<br />TCCR2 |= (1&lt;&lt; WGM21);  // tryb pracy CTC<br />TCCR2 |= (1 &lt;&lt; CS22) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);   // preskaler = 1024<br />OCR2 = 114;// przerwanie porownania co 10ms (100Hz)<br />TIMSK = (1 &lt;&lt; OCIE2);// odblokowanie przerwania CompareMatch<br /><br />sei();<br /><br />while (1) {<br /><br />//sprawdzanie wciśnięcia klawiszy<br />uint8_t k;<br />for (k = 0; k &lt; 6; k++) {<br />key_press(&amp;buttons&#91;k&#93;);<br />}<br /><br />if (!Timer2) { //wykonanie kroku sekwencji co 20*10ms (pod warunkiem, że zmienna sterująca jest ustawiona)<br />Timer2 = 20;<br />if( program1 == 1 ) sekwencja1();<br />if( program2 == 1 ) sekwencja2();<br />}<br />if (!Timer3) { //wykonanie kroku sekwencji co 50*10ms (pod warunkiem, że zmienna sterująca jest ustawiona)<br />Timer3 = 50;<br />if( program3 == 1 ) sekwencja3();<br />}<br />}<br />}<br /><br />//Funkcje klawiszy<br />//------------------------------------------------------------------//<br /><br />void key_press(TBUTTON * btn) {<br /><br />register uint8_t key_press = (*btn-&gt;KPIN &amp; btn-&gt;key_mask);<br /><br />if (!btn-&gt;klock &amp;&amp; !key_press) {<br />btn-&gt;klock = 1;<br /><br />// reakcja na krotkie wciśnięcie klawisza<br />if (btn-&gt;kfun1)<br />btn-&gt;kfun1();<br />btn-&gt;flag = 1;<br />Timer1 = (btn-&gt;wait_time_s * 1000) / 10;<br /><br />} else if (btn-&gt;klock &amp;&amp; key_press) {<br />(btn-&gt;klock)++;<br />if (!btn-&gt;klock) {<br />Timer1 = 0;<br />btn-&gt;flag = 0;<br />}<br />} else if (btn-&gt;flag &amp;&amp; !Timer1) {<br /><br />// reakcja na dłuższe wciśniecie klawisza<br />if (btn-&gt;kfun2)<br />btn-&gt;kfun2();<br />btn-&gt;flag = 0;<br />}<br /><br />}<br /><br />//przerwanie Timer2 CompareMatch<br />ISR(TIMER2_COMP_vect) {<br /><br />uint16_t n;<br /><br />n = Timer1; /* 100Hz Timer1 */<br />if (n) Timer1 = --n;<br />n = Timer2; /* 100Hz Timer2 */<br />if (n) Timer2 = --n;<br />n = Timer3; /* 100Hz Timer3 */<br />if (n) Timer3 = --n;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 20 sie 2013, o 10:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2013-08-19T23:44:21+01:00</updated>
<published>2013-08-19T23:44:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46333#p46333</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46333#p46333"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46333#p46333"><![CDATA[
UP<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 19 sie 2013, o 23:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2013-08-19T20:33:53+01:00</updated>
<published>2013-08-19T20:33:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46314#p46314</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46314#p46314"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46314#p46314"><![CDATA[
ok wszystko dziala  i wcisniecie i dluzsze wcisniecie <br /><br />teraz trzeba bedzie ustawic sekwencje mrugan dla poszczegolnych programow<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 57 minutach ]</span></strong><br /><br />dlaczego jak dam w programie1 taki kod<br /><br />[syntax=c]if (Timer2==10) {// Tutaj realizujemy opóźnienie jako 10 tyknięc timera (musi doliczyć do 10)<br />            PORTC &amp;= ~LED1;<br />        } else if (Timer2==20) {// Tutaj realizujemy opóźnienie jako 20 tyknięc timera (musi doliczyć do 20)<br />            PORTC ^= LED1;<br />             Timer2=0;<br />}[/syntax]<br /><br />to nic sie nie wykonuje ??<br /><br />takie zalozenie rowniez nie dziala tylko mrygnie 5% mody leda i nic wiecej<br /><br />[syntax=c]if( !Timer2 ) {<br />   Timer2=10;<br />       PORTC &amp;= ~LED1;<br />   Timer2=20;<br />       PORTC ^= LED1;<br />  }[/syntax]<br /><br /><br />Idac mirek36 sladami wstawiam ping ponga do programu<br /><br />[syntax=c]void program_led1(void) {<br /> <br /><br />    uint8_t tab&#91;&#93; = {1,2,4,8,16,32,16,8,4,2};<br />     <br />    uint8_t i=0;<br />     <br />    while(1) {<br />     <br />        PORTC = ~tab&#91;i++&#93;;<br />        if( i&gt;9 ) i = 0;<br />        _delay_ms(100);<br />     <br />    }<br /><br /><br /> <br />}[/syntax]<br /><br /><br />wbijam guziola i co jest ping pong ... wbijam inny guzik ... nie ma innego programu trzymam dlugo guziola od ping ponga i co ? program tez sie nie zmienia ...<br /><br />jak w tych programach zrobic .... petle ledow w jakiejs sekwencji by mozna bylo z niej wyjsc ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 19 sie 2013, o 20:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2013-08-19T19:03:02+01:00</updated>
<published>2013-08-19T19:03:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46304#p46304</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46304#p46304"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46304#p46304"><![CDATA[
ok nie ma bledow<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 30 minutach ]</span></strong><br /><br />wgrane do atmegi ale ... ale nie dziala dluzsze przytrzymanie przycisku .... dlaczego ??<br />kurcze ... nie moge znalezc :/<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /> <br />#define LED1 (1&lt;&lt;PC0)<br />#define LED2 (1&lt;&lt;PC1)<br />#define LED3 (1&lt;&lt;PC2)<br />#define LED4 (1&lt;&lt;PC3)<br />#define LED5 (1&lt;&lt;PC4)<br />#define LED6 (1&lt;&lt;PC5)<br /><br />#define KEY1 (1&lt;&lt;PD0) <br />#define KEY2 (1&lt;&lt;PD1)<br />#define KEY3 (1&lt;&lt;PD2)<br />#define KEY4 (1&lt;&lt;PD3)<br />#define KEY5 (1&lt;&lt;PD4)<br />#define KEY6 (1&lt;&lt;PD5)<br /><br />typedef struct {<br /> volatile uint8_t *KPIN;<br /> uint8_t key_mask;<br /> uint8_t wait_time_s;<br /> void (*kfun1)(void);<br /> void (*kfun2)(void);<br /> uint8_t klock;<br /> uint8_t flag;<br />} TBUTTON;<br /> <br />// konfuguracja timerow programowych<br />volatile uint16_t Timer1, Timer2;<br /> <br />// własne funkcje - 12 (po 2 na key)<br />void program_led1(void) {<br /> PORTC &amp;= ~LED1;<br />}<br /> <br />void program_led2(void) {<br /> PORTC |= LED1;<br />}<br /><br />void program_led3(void) {<br /> PORTC &amp;= ~LED2;<br />}<br /><br />void program_led4(void) {<br /> PORTC |= LED2;<br />}<br /><br />void program_led5(void) {<br /> PORTC &amp;= ~LED3;<br />}<br /><br />void program_led6(void) {<br /> PORTC |= LED3;<br />}<br /><br />void program_led7(void) {<br /> PORTC &amp;= ~LED4;<br />}<br /><br />void program_led8(void) {<br /> PORTC |= LED4;<br />}<br /><br />void program_led9(void) {<br /> PORTC &amp;= ~LED5;<br />}<br /><br />void program_led10(void) {<br /> PORTC |= LED5;<br />}<br /><br />void program_led11(void) {<br /> PORTC &amp;= ~LED6;<br />}<br /><br />void program_led12(void) {<br /> PORTC |= LED6;<br />}<br /><br />// funkcja obsługi klawiszy<br />void key_press( TBUTTON * btn );<br /> <br /><br />//definicja klawiszy<br />    TBUTTON buttons&#91;6&#93; = {<br />    { &amp;PIND, KEY1, 3, program_led1, program_led2, 0,  0 }, //klawisz 1<br />    { &amp;PIND, KEY2, 3, program_led3, program_led4, 0,  0 }, //klawisz 2<br />    { &amp;PIND, KEY3, 3, program_led5, program_led6, 0,  0 }, //klawisz 3<br />    { &amp;PIND, KEY4, 3, program_led7, program_led8, 0,  0 }, //klawisz 4<br />    { &amp;PIND, KEY5, 3, program_led9, program_led10, 0,  0 }, //klawisz 5<br />    { &amp;PIND, KEY6, 3, program_led11, program_led12, 0,  0 }, //klawisz 6<br />    };<br /><br /> <br />//------------------------------------------------------------------<br />int main(void) {<br /> <br /> PORTD |= KEY1|KEY2|KEY3|KEY4|KEY5|KEY6;  // podciagamy linie wejsc do VCC<br /> DDRC |= LED1|LED2|LED3|LED4|LED5|LED6;   // piny LED jako wyjscia<br /> PORTC |= LED1|LED2|LED3|LED4|LED5|LED6;  // wylaczamy ledy<br /> <br /> /* Timer2 – konfigurcajca silnika timerow programowych */<br /> TCCR2  |= (1&lt;&lt;WGM21);   // tryb pracy CTC<br /> TCCR2  |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20); // preskaler = 1024<br /> OCR2  = 114;  // przerwanie porownania co 10ms (100Hz)<br /> TIMSK  = (1&lt;&lt;OCIE2);// odblokowanie przerwania CompareMatch<br /> <br /><br /> <br /> sei();<br /> <br /> while(1) {<br /> <br />//sprawdzanie wcisniecia klawiszy<br />uint8_t k;<br />     for(k=0; k&lt;6; k++)<br />    {<br />       key_press( &amp;buttons&#91;k&#93; );<br />    }<br /><br /> <br />  // przykładowy niezależny i nieblokujący proces<br />  if( !Timer2 ) {<br />   Timer2=10000;<br />   PORTC &amp;= LED1|LED2|LED3|LED4|LED5|LED6;<br />   Timer2=10010;<br />   PORTC |= LED1|LED2|LED3|LED4|LED5|LED6;<br />  }<br /> <br /> }<br /> <br />}<br /><br /><br />//Funcje klawiszy<br />//------------------------------------------------------------------//<br /> <br /> <br />void key_press( TBUTTON * btn ) {<br /> <br /> register uint8_t key_press = (*btn-&gt;KPIN &amp; btn-&gt;key_mask);<br /> <br /> if( !btn-&gt;klock &amp;&amp; !key_press ) {<br />  btn-&gt;klock=1;<br /> <br />  // reakcja na krotkie wcinięcie klawisza<br />  if(btn-&gt;kfun1) btn-&gt;kfun1();<br />  btn-&gt;flag=1;<br />  Timer1 = (btn-&gt;wait_time_s*1000)/10;<br /> <br /> }<br /> else if( btn-&gt;klock &amp;&amp; key_press ) {<br />  (btn-&gt;klock)++;<br />  if( !btn-&gt;klock ) {<br />   Timer1=0;<br />   btn-&gt;flag=0;<br />  }<br /> } else if( btn-&gt;flag &amp;&amp; !Timer1 ) {<br /><br />  // reakcja na dluzsze wciniecie klawisza<br />  if(btn-&gt;kfun2) btn-&gt;kfun2();<br />  btn-&gt;flag=0;<br /> }<br /> <br />}<br /> <br />//przerwanie Timer2 CompareM<br />ISR(TIMER2_COMP_vect) {<br /> <br /> uint16_t n;<br /> <br /> n = Timer1;  /* 100Hz Timer1 */<br /> if (n) Timer1 = --n;<br /> n = Timer2;  /* 100Hz Timer2 */<br /> if (n) Timer2 = --n;<br />}[/syntax]<br /><br />czy mozesz wytlumaczyc dlaczego nie dziala dluzsze przytrzymanie klawisza ?<br />oraz czy da sie odchudzic kod ... bo wydaje mi sie ze kilka rzeczy teraz jest zbednych<br />np ten fragment<br /><br />typedef struct {<br /> volatile uint8_t *KPIN;<br /> uint8_t key_mask;<br /> uint8_t wait_time_s;<br /> void (*kfun1)(void);<br /> void (*kfun2)(void);<br /> uint8_t klock;<br /> uint8_t flag;<br />} TBUTTON;<br /><br /><br />a ten fragment trzeba dostosowac do obslugi wiekszej ilosci klawisza jak sadze<br /><br />[syntax=c]register uint8_t key_press = (*btn-&gt;KPIN &amp; btn-&gt;key_mask);<br /> <br /> if( !btn-&gt;klock &amp;&amp; !key_press ) {<br />  btn-&gt;klock=1;<br /> <br />  // reakcja na krotkie wcinięcie klawisza<br />  if(btn-&gt;kfun1) btn-&gt;kfun1();<br />  btn-&gt;flag=1;<br />  Timer1 = (btn-&gt;wait_time_s*1000)/10;<br /> <br /> }<br /> else if( btn-&gt;klock &amp;&amp; key_press ) {<br />  (btn-&gt;klock)++;<br />  if( !btn-&gt;klock ) {<br />   Timer1=0;<br />   btn-&gt;flag=0;<br />  }<br /> } else if( btn-&gt;flag &amp;&amp; !Timer1 ) {<br /> <br />  // reakcja na dluzsze wciniecie klawisza<br />  if(btn-&gt;kfun2) btn-&gt;kfun2();<br />  btn-&gt;flag=0;<br /> }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 19 sie 2013, o 19:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-08-19T18:53:47+01:00</updated>
<published>2013-08-19T18:53:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46303#p46303</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46303#p46303"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46303#p46303"><![CDATA[
3 - to liczba sekund jaką należy przytrzymać klawisz, aby uruchomić tą drugą funkcję, a zera to początkowa wartość dwóch zmiennych w tej strukturze. W przykładzie z bloga tworzona jest jedna struktura (zmienna globalna) i bez początkowej inicjalizacji wszystkie pola przyjmują wartość 0.<br />Inicjalizację struktury button oczywiście wyrzucasz, bo nie ma zmiennej button. W zamian za to masz zainicjowane wszystkie pola przy tworzeniu tablicy struktur.<br /><br />error: 'for' loop initial declaration used outside C99 mode<br />wynika z tego, że trzymasz się pierwotnego standardu języka C i musisz wprowadzić taką zmianę:<br />[syntax=c]uint8_t k;<br />for(k=0; k&lt;6; k++)<br />{<br />   key_press( &amp;buttons&#91;k&#93; );<br />}[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 5 minutach ]</span></strong><br /><br />Tak nie możesz zrobić mając tablicę struktur:<br />[syntax=c]buttons.KPIN = &amp;PIND;<br />buttons.key_mask = KEY1;<br />buttons.wait_time_s = 3;<br />buttons.kfun1 = program_led1;<br />buttons.kfun2 = program_led6;[/syntax]<br />tylko tak i to 6 razy (dla 0, 1 ...5), ale to nie jest potrzebne:<br />[syntax=c]buttons&#91;0&#93;.KPIN = &amp;PIND;<br />buttons&#91;0&#93;.key_mask = KEY1;<br />buttons&#91;0&#93;.wait_time_s = 3;<br />buttons&#91;0&#93;.kfun1 = program_led1;<br />buttons&#91;0&#93;.kfun2 = program_led6;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 19 sie 2013, o 18:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2013-08-19T18:08:28+01:00</updated>
<published>2013-08-19T18:08:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46300#p46300</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46300#p46300"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46300#p46300"><![CDATA[
fajnie teraz już coraz więcej rozumie a możesz mi wytłumaczyć co oznaczają te cyfry pod każdym klawiszem są te same ?<br /><br />{ &amp;PINC, KEY2,<span style="color: #0000FF"> 3</span>, moja_funkcja1, moja_funkcja2, <span style="color: #0000FF">0</span>,  <span style="color: #0000FF">0</span> }, //klawisz 2<br /><br />z góry przepraszam za stosowanie koloru ale to uzasadnione <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><br />i co zrobić z tym ? skoro już nie mam w kodzie button a buttons ?<br />[syntax=c]button.KPIN = &amp;PIND;<br /> button.key_mask = KEY1;<br /> button.wait_time_s = 3;<br /> button.kfun1 = program_led1;<br /> button.kfun2 = program_led6;[/syntax]<br /><br />bo nie mogę zrozumieć wiem że button już nie ma jest buttons ale ?<br /><br />../obsl_klawiszy.c:113: error: 'button' undeclared (first use in this function)<br />../obsl_klawiszy.c:113: error: (Each undeclared identifier is reported only once<br />../obsl_klawiszy.c:113: error: for each function it appears in.)<br />../obsl_klawiszy.c:124: error: 'for' loop initial declaration used outside C99 mode<br /><br /><br />jak wstawię buttons to mam błędy następujące<br /><br />../obsl_klawiszy.c:113: error: request for member 'KPIN' in something not a structure or union<br />../obsl_klawiszy.c:114: error: request for member 'key_mask' in something not a structure or union<br />../obsl_klawiszy.c:115: error: request for member 'wait_time_s' in something not a structure or union<br />../obsl_klawiszy.c:116: error: request for member 'kfun1' in something not a structure or union<br />../obsl_klawiszy.c:117: error: request for member 'kfun2' in something not a structure or union<br />../obsl_klawiszy.c:124: error: 'for' loop initial declaration used outside C99 mode<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 13 minutach ]</span></strong><br /><br />czy tutaj jest ok ?<br /><br />void key_press( TBUTTON * btn );<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 27 minutach ]</span></strong><br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /> <br />#define LED1 (1&lt;&lt;PC0)<br />#define LED2 (1&lt;&lt;PC1)<br />#define LED3 (1&lt;&lt;PC2)<br />#define LED4 (1&lt;&lt;PC3)<br />#define LED5 (1&lt;&lt;PC4)<br />#define LED6 (1&lt;&lt;PC5)<br /><br />#define KEY1 (1&lt;&lt;PD0) <br />#define KEY2 (1&lt;&lt;PD1)<br />#define KEY3 (1&lt;&lt;PD2)<br />#define KEY4 (1&lt;&lt;PD3)<br />#define KEY5 (1&lt;&lt;PD4)<br />#define KEY6 (1&lt;&lt;PD5)<br /> <br />typedef struct {<br /> volatile uint8_t *KPIN;<br /> uint8_t key_mask;<br /> uint8_t wait_time_s;<br /> void (*kfun1)(void);<br /> void (*kfun2)(void);<br /> uint8_t klock;<br /> uint8_t flag;<br />} TBUTTON;<br /> <br />// konfuguracja timerow programowych<br />volatile uint16_t Timer1, Timer2;<br /> <br />// własne funkcje - 12 (po 2 na key)<br />void program_led1(void) {<br /> PORTC &amp;= LED1;<br />}<br /> <br />void program_led2(void) {<br /> PORTC |= LED1;<br />}<br /><br />void program_led3(void) {<br /> PORTC &amp;= LED2;<br />}<br /><br />void program_led4(void) {<br /> PORTC |= LED2;<br />}<br /><br />void program_led5(void) {<br /> PORTC &amp;= LED3;<br />}<br /><br />void program_led6(void) {<br /> PORTC |= LED3;<br />}<br /><br />void program_led7(void) {<br /> PORTC &amp;= LED4;<br />}<br /><br />void program_led8(void) {<br /> PORTC |= LED4;<br />}<br /><br />void program_led9(void) {<br /> PORTC &amp;= LED5;<br />}<br /><br />void program_led10(void) {<br /> PORTC |= LED5;<br />}<br /><br />void program_led11(void) {<br /> PORTC &amp;= LED6;<br />}<br /><br />void program_led12(void) {<br /> PORTC |= LED6;<br />}<br /><br />// funkcja obsługi klawiszy<br />void key_press( TBUTTON * btn );<br /> <br /><br />//definicja klawiszy<br />    TBUTTON buttons&#91;6&#93; = {<br />    { &amp;PIND, KEY1, 3, program_led1, program_led2, 0,  0 }, //klawisz 1<br />    { &amp;PIND, KEY2, 3, program_led3, program_led4, 0,  0 }, //klawisz 2<br />    { &amp;PIND, KEY3, 3, program_led5, program_led6, 0,  0 }, //klawisz 3<br />    { &amp;PIND, KEY4, 3, program_led7, program_led8, 0,  0 }, //klawisz 4<br />    { &amp;PIND, KEY5, 3, program_led9, program_led10, 0,  0 }, //klawisz 5<br />    { &amp;PIND, KEY6, 3, program_led11, program_led12, 0,  0 }, //klawisz 6<br />    };<br /><br /> <br />//------------------------------------------------------------------<br />int main(void) {<br /> <br /> PORTD |= KEY1|KEY2|KEY3|KEY4|KEY5|KEY6;  // podciagamy linie wejsc do VCC<br /> DDRC |= LED1|LED2|LED3|LED4|LED5|LED6;   // piny LED jako wyjscia<br /> PORTC |= LED1|LED2|LED3|LED4|LED5|LED6;  // wylaczamy ledy<br /> <br /> /* Timer2 – konfigurcajca silnika timerow programowych */<br /> TCCR2  |= (1&lt;&lt;WGM21);   // tryb pracy CTC<br /> TCCR2  |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20); // preskaler = 1024<br /> OCR2  = 114;  // przerwanie porownania co 10ms (100Hz)<br /> TIMSK  = (1&lt;&lt;OCIE2);// odblokowanie przerwania CompareMatch<br /> <br /> buttons.KPIN = &amp;PIND;<br /> buttons.key_mask = KEY1;<br /> buttons.wait_time_s = 3;<br /> buttons.kfun1 = program_led1;<br /> buttons.kfun2 = program_led6;<br /> <br /> sei();<br /> <br /> while(1) {<br /> <br />//sprawdzanie wcisniecia klawiszy<br />     for(uint8_t k=0; k&lt;6; k++)<br />    {<br />       key_press( &amp;buttons&#91;k&#93; );<br />    }<br /><br /> <br />  // przykładowy niezależny i nieblokujący proces<br />  if( !Timer2 ) {<br />   Timer2=10;<br />   PORTC ^= LED1|LED2|LED3|LED4|LED5|LED6;<br />  }<br /> <br /> }<br /> <br />}<br /><br /><br />//Funcje klawiszy<br />//------------------------------------------------------------------//<br /> <br /> <br />void key_press( TBUTTON * btn ) {<br /> <br /> register uint8_t key_press = (*btn-&gt;KPIN &amp; btn-&gt;key_mask);<br /> <br /> if( !btn-&gt;klock &amp;&amp; !key_press ) {<br />  btn-&gt;klock=1;<br /> <br />  // reakcja na krotkie wcinięcie klawisza<br />  if(btn-&gt;kfun1) btn-&gt;kfun1();<br />  btn-&gt;flag=1;<br />  Timer1 = (btn-&gt;wait_time_s*1000)/10;<br /> <br /> }<br /> else if( btn-&gt;klock &amp;&amp; key_press ) {<br />  (btn-&gt;klock)++;<br />  if( !btn-&gt;klock ) {<br />   Timer1=0;<br />   btn-&gt;flag=0;<br />  }<br /> } else if( btn-&gt;flag &amp;&amp; !Timer1 ) {<br /><br />  // reakcja na dluzsze wciniecie klawisza<br />  if(btn-&gt;kfun2) btn-&gt;kfun2();<br />  btn-&gt;flag=0;<br /> }<br /> <br />}<br /> <br />//przerwanie Timer2 CompareM<br />ISR(TIMER2_COMP_vect) {<br /> <br /> uint16_t n;<br /> <br /> n = Timer1;  /* 100Hz Timer1 */<br /> if (n) Timer1 = --n;<br /> n = Timer2;  /* 100Hz Timer2 */<br /> if (n) Timer2 = --n;<br />}[/syntax]<br /><br />i teraz klapa ... 6 bledow tych ostatnich co powyzej<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 19 sie 2013, o 18:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-08-19T17:26:28+01:00</updated>
<published>2013-08-19T17:26:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46298#p46298</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46298#p46298"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46298#p46298"><![CDATA[
[syntax=c]TBUTTON button; // definicja KLAWISZA[/syntax]<br />zastąp i od razu zainicjuj wszystkie pola:<br />[syntax=c]TBUTTON buttons&#91;6&#93; = {<br />{ &amp;PINC, KEY1, 3, change_led1, change_led2, 0,  0 }, //klawisz 1<br />{ &amp;PINC, KEY2, 3, moja_funkcja1, moja_funkcja2, 0,  0 }, //klawisz 2<br />{ &amp;PINC, KEY3, 3, moja_funkcja3, moja_funkcja4, 0,  0 }, //klawisz 3<br />{ &amp;PINC, KEY4, 3, moja_funkcja5, moja_funkcja6, 0,  0 }, //klawisz 4<br />{ &amp;PINC, KEY5, 3, moja_funkcja7, moja_funkcja8, 0,  0 }, //klawisz 5<br />{ &amp;PINC, KEY6, 3, moja_funkcja9, moja_funkcja10, 0,  0 }, //klawisz 6<br />};[/syntax]<br />a w pętli zamiast:<br />[syntax=c]key_press( &amp;button );[/syntax]<br />umieść:<br />[syntax=c]for(uint8_t k=0; k&lt;6; k++)<br />{<br />   key_press( &amp;buttons&#91;k&#93; );<br />}[/syntax]<br />Pozostaje tylko dopisać funkcje.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 19 sie 2013, o 17:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2013-08-19T15:46:59+01:00</updated>
<published>2013-08-19T15:46:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46292#p46292</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46292#p46292"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46292#p46292"><![CDATA[
ok przeczytałem całkowicie trzy części artykułu mirka36 ... teraz już w pełni rozumiem gdzie popełniłem błąd i dlaczego liniowe jest liniowe a wielowątkowe jest lepsze <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />mam natomiast małe pytanie odnośnie tego artykułu.<br /><br /><a href="http://mirekk36.blogspot.com/2012/10/obsuga-klawiszy-zwoka-czasowa-cd3.html"  class="postlink">http://mirekk36.blogspot.com/2012/10/obsuga-klawiszy-zwoka-czasowa-cd3.html</a><br /><br />Rozumie że dla większej ilości klawiszy muszę je zdefiniować itp ...<br /><br />wiem również że tutaj <br /><br />[syntax=c]void (*kfun1)(void);<br /> void (*kfun2)(void);[/syntax]<br /><br />dodaję dodatkowe funkcje i w tych funkcjach<br /><br />[syntax=c]void change_led1(void) {<br /> PORTC ^= LED1;<br />}[/syntax]<br /><br />mogę robić powtarzalną sekwencję mrugania diody (również większej ilości)<br /><br />głowie się natomiast jak tutaj dodać obsługę 6 klawiszy.<br /><br />na pewno muszę zdefiniować je tutaj:<br />[syntax=c]#define KEY1 (1&lt;&lt;PC0) // podać odpowiedni port klawisza 1<br />#define KEY2 (1&lt;&lt;PC1) // podać odpowiedni port klawisza 2<br />#define KEY3 (1&lt;&lt;PC2) // podać odpowiedni port klawisza 3<br />#define KEY4 (1&lt;&lt;PC3) // podać odpowiedni port klawisza 4<br />#define KEY5 (1&lt;&lt;PC4) // podać odpowiedni port klawisza 5<br />#define KEY6 (1&lt;&lt;PC5) // podać odpowiedni port klawisza 6[/syntax]<br /><br />ale co dalej ?<br />gdzie jeszcze dopisać obsługę większej ilości klawiszy ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 19 sie 2013, o 15:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2013-08-18T13:30:17+01:00</updated>
<published>2013-08-18T13:30:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46182#p46182</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46182#p46182"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46182#p46182"><![CDATA[
dokladnie tak .. brakowalo go jak napisalem i wyzej moze malo zrozumiale to napisalem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />no i brakowalo deklaracji  i=0;<br /><br />teraz jest ok<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br />dobra teraz doczytam artykuł o stykach .... i spróbuję zrobić coś jak w moim 1 kodzie czyli 5 programów ... z 5 przycisków i 6sty przycisk jako stop programu i wylaczenie led ...<br /><br />zobaczymy czy sie uda<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 18 sie 2013, o 13:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sq8dsr]]></name></author>
<updated>2013-08-18T13:19:19+01:00</updated>
<published>2013-08-18T13:19:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46179#p46179</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46179#p46179"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46179#p46179"><![CDATA[
Nie widzę jak wygląda teraz kod, ale chyba brakuje średnika po deklaracji tablicy stałych.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1589">sq8dsr</a> — 18 sie 2013, o 13:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2013-08-18T13:11:03+01:00</updated>
<published>2013-08-18T13:11:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46177#p46177</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46177#p46177"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46177#p46177"><![CDATA[
jak widac wiele musze sie jeszcze nauczyc <br /><br />../osiem_led.c:86: error: expected ',' or ';' before 'int'<br /><br /><br />to mi wychodzi w int main(void){<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 7 minutach ]</span></strong><br /><br />uint8_t i=0;<br /><br />brakowalo i   ; po } od programu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 18 sie 2013, o 13:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sq8dsr]]></name></author>
<updated>2013-08-18T13:06:21+01:00</updated>
<published>2013-08-18T13:06:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46176#p46176</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46176#p46176"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46176#p46176"><![CDATA[
a jest #include &lt;avr/pgmspace.h&gt; ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1589">sq8dsr</a> — 18 sie 2013, o 13:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2013-08-18T13:03:52+01:00</updated>
<published>2013-08-18T13:03:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46175#p46175</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46175#p46175"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46175#p46175"><![CDATA[
mimo wszsytko sa bledy<br /><br />../osiem_led.c:119: warning: implicit declaration of function 'pgm_read_byte'<br />../osiem_led.c:119: error: 'sekwencja' undeclared (first use in this function)<br />../osiem_led.c:119: error: (Each undeclared identifier is reported only once<br />../osiem_led.c:119: error: for each function it appears in.)<br />../osiem_led.c:119: error: 'i' undeclared (first use in this function)<br /><br /><br />brakowalo  ,  ale to juz uzupelnilem i pozostaly powyzsze<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 18 sie 2013, o 13:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sq8dsr]]></name></author>
<updated>2013-08-18T13:01:03+01:00</updated>
<published>2013-08-18T13:01:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46174#p46174</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46174#p46174"/>
<title type="html"><![CDATA[Re: Atmega8 - początki [C] [AVR Studio]]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3887&amp;p=46174#p46174"><![CDATA[
<div class="quotetitle">majster napisał(a):</div><div class="quotecontent"><br />const uint8_t sekwencja[] PROGMEM = {<br /><br />przed int main(void){ ??<br /></div><br /><br />Tak, skoro ma to być definicja tablicy stałych.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1589">sq8dsr</a> — 18 sie 2013, o 13:01</p><hr />
]]></content>
</entry>
</feed>