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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=4283&amp;mode</id>
<entry>
<author><name><![CDATA[s.uchy]]></name></author>
<updated>2013-09-27T10:09:54+01:00</updated>
<published>2013-09-27T10:09:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=51067#p51067</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=51067#p51067"/>
<title type="html"><![CDATA[Re: Atmega8 - sterowaie lampami - proszę o pomoc]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=51067#p51067"><![CDATA[
Sterowanie lampami ma się odbywać za pomocą triaków np BT138, ale chyba będę rezygnował z pisania programu, bo nawet po podpowiedziach nie kumam jak to posklejać w jedną całość <img src="https://forum.atnel.pl/images/smilies/icon_cry.gif" alt=":cry:" title="Płacze" /> , a musiałbym to zrobić do końca następnego tygodnia, wiec lipa.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1794">s.uchy</a> — 27 wrz 2013, o 10:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2013-09-26T18:56:24+01:00</updated>
<published>2013-09-26T18:56:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50997#p50997</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50997#p50997"/>
<title type="html"><![CDATA[Re: Atmega8 - sterowaie lampami - proszę o pomoc]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50997#p50997"><![CDATA[
a jak sterujesz lampami ? z wyjścia uc 5V ?<br />pytam z ciekawości <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> — 26 wrz 2013, o 18:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2013-09-25T21:42:40+01:00</updated>
<published>2013-09-25T21:42:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50884#p50884</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50884#p50884"/>
<title type="html"><![CDATA[Re: Atmega8 - sterowaie lampami - proszę o pomoc]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50884#p50884"><![CDATA[
Oczywiście nie zapomnij zdeklarować zmiennych prog_timer i flaga. No i włącz globalne zezwolenie na przerwania.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 25 wrz 2013, o 21:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[s.uchy]]></name></author>
<updated>2013-09-25T21:33:53+01:00</updated>
<published>2013-09-25T21:33:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50882#p50882</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50882#p50882"/>
<title type="html"><![CDATA[Re: Atmega8 - sterowaie lampami - proszę o pomoc]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50882#p50882"><![CDATA[
No miło jest jak ktoś pomaga takim &quot;zielonym&quot; jak ja. Postaram się to posklejać w całość i może wreszcie zadziała, bo już uC mi się przegrzewa od myślenia <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=1794">s.uchy</a> — 25 wrz 2013, o 21:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2013-09-25T21:21:59+01:00</updated>
<published>2013-09-25T21:21:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50879#p50879</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50879#p50879"/>
<title type="html"><![CDATA[Re: Atmega8 - sterowaie lampami - proszę o pomoc]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50879#p50879"><![CDATA[
Masz procka więc czasówka nie jest potrzebna. Zagoń do roboty timera programowego <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /><br />Podam Ci kilka klocków a Ty ułóż to w jedną całość.<br /><br />Najpierw timer programowy. Przerwanie co 10ms:<br />[syntax=c]TCCR2 |= (1&lt;&lt;WGM21);// tryb CTC<br />TCCR2 |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20);// preskaler = 1024<br />OCR2 = 78;// dodatkowy podział przez 78 (rej. przepełnienia)<br />TIMSK |= (1&lt;&lt;OCIE2);// zezwolenie na przerwanie CompareMatch[/syntax]<br /><br />Obsługa przerwania:<br />[syntax=c]ISR(TIMER2_COMP_vect)<br />{<br />uint16_t n;<br /><br />n = prog_timer;/* 100Hz Timer1 */<br />if (n) prog_timer = --n;<br />}[/syntax]<br /><br />W pętli głównej dodajesz obsługę ósmego przycisku analogicznie jak poprzednie przyciski.<br />W funkcji, wywołanej wciśnięciem przycisku, wyłączasz 6 lamp i nakręcasz timer:<br />[syntax=c]void light_off(void)<br />{<br />PORTC |= (OUT2)|(OUT3)|(OUT4)|(OUT5)|(OUT6);<br />PORTD |= (OUT7);<br />prog_timer = 1000;      //1000 x 10ms = 10s<br />flaga = 1;<br />}[/syntax]<br />A w pętli głównej sprawdzasz czy timer programowy doliczył do zera. Jeśli tak wyłączasz ostatnią lampę<br />[syntax=c]if(flaga)<br />{<br />      if(!prog_timer)<br />      {<br />     PORTC |= OUT1;<br />     flaga = 0;<br />      }<br />}[/syntax]<br /><br />Nie twierdzę, że to jest jest najlepsze rozwiązanie. Jedno z wielu ale działa zgodnie z założeniami. <br />Program testowałem na ATB z Atmegą32 taktowaną wew. oscylatorem 8MHz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 25 wrz 2013, o 21:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[s.uchy]]></name></author>
<updated>2013-09-25T20:59:58+01:00</updated>
<published>2013-09-25T20:59:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50872#p50872</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50872#p50872"/>
<title type="html"><![CDATA[Re: Atmega8 - sterowaie lampami - proszę o pomoc]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50872#p50872"><![CDATA[
Dzięki za podpowiedź, jutro spróbuję coś pokombinować, może się uda, a jak nie to trzeba będzie kupić czasówkę hehe, bo jakoś mój EEPROM nie chce przyswoić tego nawału wiadomości <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=1794">s.uchy</a> — 25 wrz 2013, o 20:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krokodyl1220]]></name></author>
<updated>2013-09-25T16:17:06+01:00</updated>
<published>2013-09-25T16:17:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50803#p50803</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50803#p50803"/>
<title type="html"><![CDATA[Re: Atmega8 - sterowaie lampami - proszę o pomoc]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50803#p50803"><![CDATA[
Zgaszenie wszystkich i opóźnienie jednej można w najprostszym przypadku rozwiązać przy użyciu delaya:<br />-gasisz wszystkie lampy oprócz jednej<br />-czekasz 10s<br />-gasisz ostatnią lampę<br /><br />Oczywiście będzie skutkowało to całkowitym zablokowaniem uC na 10s, co w wielu przypadkach może być niedopuszczalne. <br />Wtedy na ratunek przybywa mechanizm timera programowego, który po zgaszeniu wszystkich lamp ustawiasz na 10s. Szczegóły w rozdziale &quot;wstęp do systemów czasu rzeczywistego&quot; albo rozdziale o 1-wire, o ile mnie EEPROM nie myli.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=768">krokodyl1220</a> — 25 wrz 2013, o 16:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[s.uchy]]></name></author>
<updated>2013-09-25T11:31:20+01:00</updated>
<published>2013-09-25T11:31:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50759#p50759</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50759#p50759"/>
<title type="html"><![CDATA[Atmega8 - sterowaie lampami - proszę o pomoc]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4283&amp;p=50759#p50759"><![CDATA[
Witam wszystkich forumowiczów.<br />Na samym początku chciałbym zaznaczyć ze jestem jeszcze &quot;zielony&quot; jeżeli chodzi o pisanie programów.<br />Wiec do rzeczy... <br />Chcę zrobić sterowanie 7-ma lampami typu włącz\wyłącz (1 przyc. na każdą lampę ), do tego jeden przycisk wyłączający wszystkie lampy, gdzie przy wciśnięciu przycisku gaszącego wszystkie lampy jedna z siedmiu świeci jeszcze przez 10 sek. i gaśnie.<br /><br />Skleciłem taki kod z bloga i książki Pana Mirka K. i wyszło mi coś takiego jak niżej. Włączanie i wyłączanie działa jak należy, ale nawet po zagłębieniu się w książkę nie mogę rozgryźć jak napisać te wyłączenie wszystkich lamp + opóźnienie jednej. <br />Proszę o przeanalizowanie kodu i ewentualnie jakąś podpowiedź.<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define OUT1 (1&lt;&lt;PC0) //Sterowanie 1 Lampą<br />#define OUT2 (1&lt;&lt;PC1) //Sterowanie 2 Lampą<br />#define OUT3 (1&lt;&lt;PC2) //Sterowanie 3 Lampą<br />#define OUT4 (1&lt;&lt;PC3) //Sterowanie 4 Lampą<br />#define OUT5 (1&lt;&lt;PC4) //Sterowanie 5 Lampą<br />#define OUT6 (1&lt;&lt;PC5) //Sterowanie 6 Lampą<br />#define OUT7 (1&lt;&lt;PD4) //Sterowanie 7 Lampą<br /><br />#define KEY1 (1&lt;&lt;PB0) //Klawisz 1<br />#define KEY2 (1&lt;&lt;PB1) //Klawisz 2<br />#define KEY3 (1&lt;&lt;PB2) //Klawisz 3<br />#define KEY4 (1&lt;&lt;PB3) //Klawisz 4<br />#define KEY5 (1&lt;&lt;PB4) //Klawisz 5<br />#define KEY6 (1&lt;&lt;PD3) //Klawisz 6<br />#define KEY7 (1&lt;&lt;PD1) //Klawisz 7<br />#define KEY8 (1&lt;&lt;PD2) //Klawisz 8 All OFF<br /><br /><br /><br />uint8_t key1_lock, key2_lock, key3_lock, key4_lock, key5_lock, key6_lock, key7_lock, key8_lock;<br /><br />void change_out1(void) {<br /> PORTC ^= OUT1;<br />}<br />void change_out2(void) {<br /> PORTC ^= OUT2;<br />}<br />void change_out3(void) {<br /> PORTC ^= OUT3;<br />}<br />void change_out4(void) {<br /> PORTC ^= OUT4;<br />}<br />void change_out5(void) {<br /> PORTC ^= OUT5;<br />}<br />void change_out6(void) {<br /> PORTC ^= OUT6;<br />}<br />void change_out7(void) {<br /> PORTD ^= OUT7;<br />}<br /><br /><br />void key_press( uint8_t * klock, volatile uint8_t * KPIN, uint8_t key_mask, void (*kfun)(void) ) ;<br /><br />//**************** OBSŁUGA KLAWISZY********************<br /><br />int main(void) {<br /><br /> PORTB |= KEY1 | KEY2 | KEY3 | KEY4 | KEY5;          // podciągamy linie klawiszy do VCC<br /> PORTD |= KEY6 | KEY7 | KEY8;// podciągamy linie klawiszy do VCC<br /> DDRC |= OUT1 | OUT2 | OUT3 | OUT4 | OUT5 | OUT6;        // piny LED jako Wyjścia<br /> DDRD |= OUT7;                // piny LED jako Wyjścia<br /><br /> _delay_ms(10);<br /><br /> while(1)<br /><br /> {<br /><br />  key_press( &amp;key1_lock, &amp;PINB, KEY1, change_out1 );<br />  key_press( &amp;key2_lock, &amp;PINB, KEY2, change_out2 );<br />  key_press( &amp;key3_lock, &amp;PINB, KEY3, change_out3 );<br />  key_press( &amp;key4_lock, &amp;PINB, KEY4, change_out4 );<br />  key_press( &amp;key5_lock, &amp;PINB, KEY5, change_out5 );<br />  key_press( &amp;key6_lock, &amp;PIND, KEY6, change_out6 );<br />  key_press( &amp;key7_lock, &amp;PIND, KEY7, change_out7 );<br /><br /><br /> }<br />}<br /><br /><br />void key_press(uint8_t * klock, volatile uint8_t * KPIN, uint8_t key_mask, void (*kfun)(void) ) {<br /><br /> register uint8_t key_press = (*KPIN &amp; key_mask);<br /><br /> if( !*klock &amp;&amp; !key_press ) {<br />  *klock=1;<br /><br />  // reakcja na PRESS (wcinięcie przycisku)<br />  if(kfun) kfun();<br /><br /> } else if( *klock &amp;&amp; key_press ) (*klock)++;<br />}[/syntax]<br /><br /><span style="color: #FF0000">Kody wklejamy przy pomocy syntax=c - Anty.</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1794">s.uchy</a> — 25 wrz 2013, o 11:31</p><hr />
]]></content>
</entry>
</feed>