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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-10-07T22:23:34+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=21331&amp;mode</id>
<entry>
<author><name><![CDATA[bobuss88]]></name></author>
<updated>2018-10-07T22:23:34+01:00</updated>
<published>2018-10-07T22:23:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=212409#p212409</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=212409#p212409"/>
<title type="html"><![CDATA[Re: Attiny13 PWM +3led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=212409#p212409"><![CDATA[
Dziękuję bardzo. Program działa zgodnie z opisem. Program jest zrozumiały.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17191">bobuss88</a> — 7 paź 2018, o 22:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2018-10-06T16:35:46+01:00</updated>
<published>2018-10-06T16:35:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=212343#p212343</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=212343#p212343"/>
<title type="html"><![CDATA[Re: Attiny13 PWM +3led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=212343#p212343"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Wstępnie nasuwa mi się pytanie. W jaki sposob jest przypisane pwm1 do pb0, pwm2 do pb1 oraz pwm3 do pb2?<br /></div>Na samym dole w procedurze obsługi przerwania masz warunki które w zależności od wartości zmiennych PWM1...3 oraz licznika zmieniają stan na odpowiadających im pinach.<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Mam jeszcze pytanie odnośnie attiny85. Czy on posiada tylko 2pwm czy 3pwm? Nie do końca jest dla mnie zrozumiała notka katalogowa.<br /></div> Jak na moje oko ma 4 kanały PWM, choć na stronie microchipa w tabelce specyfikacji jest &quot;5PWM&quot; <img src="https://forum.atnel.pl/images/smilies/icon_eek.gif" alt=":shock:" title="Zaszokowany" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 6 paź 2018, o 16:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bobuss88]]></name></author>
<updated>2018-10-05T11:13:40+01:00</updated>
<published>2018-10-05T11:13:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=212282#p212282</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=212282#p212282"/>
<title type="html"><![CDATA[Re: Attiny13 PWM +3led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=212282#p212282"><![CDATA[
Bardzo dziękuję za kod do programu. <br />Tak w wszystkich opcjach led ma się płynnie rozjaśnić, następnie ciągle świecić a potem płynnie się wyłączyć. <br />Poprawiłem w pierwszym poście założenia programu.<br /><br />Jutro sprawdze kod oraz przeanalizuję pracę działania.<br />Wstępnie nasuwa mi się pytanie. W jaki sposob jest przypisane pwm1 do pb0, pwm2 do pb1 oraz pwm3 do pb2? <br />Mam jeszcze pytanie odnośnie attiny85. Czy on posiada tylko 2pwm czy 3pwm? Nie do końca jest dla mnie zrozumiała notka katalogowa.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17191">bobuss88</a> — 5 paź 2018, o 11:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2018-10-04T21:14:03+01:00</updated>
<published>2018-10-04T21:14:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=212256#p212256</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=212256#p212256"/>
<title type="html"><![CDATA[Re: Attiny13 PWM +3led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=212256#p212256"><![CDATA[
Tak analizując Twoje założenia, i kod który wrzuciłeś to jedno z drugim się nie pokrywa. W założeniach masz że najpierw dioda się rozjaśnia przez pewien czas, później świeci z PWM=240 przez pewien czas następnie gaśnie; natomiast w kodzie masz jeszcze ściemnianie przez pewien czas do 0  <img src="https://forum.atnel.pl/images/smilies/icon_eek.gif" alt=":shock:" title="Zaszokowany" /> <br />I teraz tak, tu masz kod - przerobiony który wrzuciłeś i dostosowany do założeń:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define ZMI  (1&lt;&lt;PB3)<br />#define ZMII (1&lt;&lt;PB4)<br /><br />volatile uint8_t PWM1, PWM2, PWM3;<br />uint8_t i;<br /><br />int main(void) {<br />TCCR0B |= (1&lt;&lt;CS00);<br />TIMSK0 |= (1&lt;&lt;TOIE0);<br /><br />DDRB |= (1&lt;&lt;PB0)|(1&lt;&lt;PB1)|(1&lt;&lt;PB2);<br />        PORTB |= ZMI|ZMII;   // podciągamy linie klawiszy do VCC<br /><br />sei();<br />while(1) {<br />        //OPCJA 1<br />if(!(PINB&amp;ZMI)&amp;&amp;(PINB&amp;ZMII)){     // ZMI stan niski oraz ZMII stan wysoki.<br />for(i=0; i&lt;=240; i++){<br />PWM1=i;<br />_delay_ms(500);  //(120s) rozjasnianie  (480) KANAŁ1<br />}<br />_delay_ms(160000);        //(160s) swiecenie ciagle  (160000) KANAŁ1<br />PWM1=0;  // zgaszenie KANAŁ1<br />}<br />        //OPCJA 2<br />if((PINB&amp;ZMI)&amp;&amp;(PINB&amp;ZMII)){     // ZMI stan wysoki oraz ZMII stan wysoki.<br />for(i=0; i&lt;=240; i++){<br />PWM1=i;<br />_delay_ms(500);  //(120s) rozjasnianie  (480) KANAŁ1<br />}<br />_delay_ms(120000);        //(120s) swiecenie ciagle  (120000) KANAŁ1<br />PWM1=0;  // zgaszenie KANAŁ1<br />for(i=0; i&lt;=240; i++){<br />PWM2=i;<br />_delay_ms(500);  //(120s) rozjasnianie  (480) KANAŁ2<br />}<br />_delay_ms(120000);        //(120s) swiecenie ciagle  (120000)  KANAŁ2<br />PWM2=0;  // zgaszenie KANAŁ2<br />}<br />        //OPCJA 3<br />if((PINB&amp;ZMI)&amp;&amp;(!(PINB&amp;ZMII))){     // ZMI stan wysoki oraz ZMII stan niski.<br />for(i=0; i&lt;=240; i++){<br />PWM1=i;<br />_delay_ms(500);  //(120s) rozjasnianie  (480) KANAŁ1<br />}<br />_delay_ms(90000);    //(90s) swiecenie ciagle  (90000) KANAŁ1<br />PWM1=0; // zgaszenie KANAŁ1<br />for(i=0; i&lt;=240; i++){<br />PWM2=i;<br />_delay_ms(500);  //(120s) rozjasnianie  (480) KANAŁ2<br />}<br />_delay_ms(90000);    //(90s) swiecenie ciagle  (90000) KANAŁ2<br />PWM2=0; // zgaszenie KANAŁ2<br />for(i=0; i&lt;=240; i++){<br />PWM3=i;<br />_delay_ms(500);  //(120s) rozjasnianie  (480) KANAŁ3<br />}<br />_delay_ms(90000);    //(90s) swiecenie ciagle  (90000)  KANAŁ3<br />PWM3=0; // zgaszenie KANAŁ3<br />}<br />}<br />}<br />//Przerwanie na potrzeby licznika programowego który napędza 3 kanały programowego PWM<br />ISR(TIM0_OVF_vect){<br />static uint8_t licznik;<br />if(licznik &lt; PWM1)PORTB |= (1&lt;&lt;PB0); else PORTB &amp;= ~(1&lt;&lt;PB0);<br />if(licznik &lt; PWM2)PORTB |= (1&lt;&lt;PB1); else PORTB &amp;= ~(1&lt;&lt;PB1);<br />if(licznik &lt; PWM3)PORTB |= (1&lt;&lt;PB2); else PORTB &amp;= ~(1&lt;&lt;PB2);<br />licznik++;<br />}[/syntax]<br /><br />Jeśli jednak chcesz mieć to ściemnianie to kod będzie wyglądał tak:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define ZMI  (1&lt;&lt;PB3)<br />#define ZMII (1&lt;&lt;PB4)<br /><br />volatile uint8_t PWM1, PWM2, PWM3;<br />uint8_t i;<br /><br />int main(void) {<br />TCCR0B |= (1&lt;&lt;CS00);<br />TIMSK0 |= (1&lt;&lt;TOIE0);<br /><br />DDRB |= (1&lt;&lt;PB0)|(1&lt;&lt;PB1)|(1&lt;&lt;PB2);<br />        PORTB |= ZMI|ZMII;   // podciągamy linie klawiszy do VCC<br /><br />sei();<br />while(1) {<br />        //OPCJA 1<br />if(!(PINB&amp;ZMI)&amp;&amp;(PINB&amp;ZMII)){     // ZMI stan niski oraz ZMII stan wysoki.<br />for(i=0; i&lt;=240; i++){<br />PWM1=i;<br />_delay_ms(500);  //(120s) rozjasnianie  (480) KANAŁ1<br />}<br />_delay_ms(160000);        //(160s) swiecenie ciagle  (160000) KANAŁ1<br />for(i=240; i&gt;0; i--){<br />PWM1=i;<br />_delay_ms(500);  //(120s) gaszenie  (480) KANAŁ1<br />}<br />PWM1=0;  // zgaszenie KANAŁ1<br />}<br />        //OPCJA 2<br />if((PINB&amp;ZMI)&amp;&amp;(PINB&amp;ZMII)){     // ZMI stan wysoki oraz ZMII stan wysoki.<br />for(i=0; i&lt;=240; i++){<br />PWM1=i;<br />_delay_ms(500);  //(120s) rozjasnianie  (480) KANAŁ1<br />}<br />_delay_ms(120000);        //(120s) swiecenie ciagle  (120000) KANAŁ1<br />for(i=240; i&gt;0; i--){<br />PWM1=i;<br />_delay_ms(500);  //(120s) gaszenie  (480) KANAŁ1<br />}<br />PWM1=0;  // zgaszenie KANAŁ1<br />for(i=0; i&lt;=240; i++){<br />PWM2=i;<br />_delay_ms(500);  //(120s) rozjasnianie  (480) KANAŁ2<br />}<br />_delay_ms(120000);        //(120s) swiecenie ciagle  (120000)  KANAŁ2<br />for(i=240; i&gt;0; i--){<br />PWM2=i;<br />_delay_ms(500);  //(120s) gaszenie  (480) KANAŁ2<br />}<br />PWM2=0;  // zgaszenie KANAŁ2<br />}<br />        //OPCJA 3<br />if((PINB&amp;ZMI)&amp;&amp;(!(PINB&amp;ZMII))){     // ZMI stan wysoki oraz ZMII stan niski.<br />for(i=0; i&lt;=240; i++){<br />PWM1=i;<br />_delay_ms(500);  //(120s) rozjasnianie  (480) KANAŁ1<br />}<br />_delay_ms(90000);    //(90s) swiecenie ciagle  (90000) KANAŁ1<br />for(i=240; i&gt;0; i--){<br />PWM1=i;<br />_delay_ms(500);  //(120s) gaszenie  (480) KANAŁ1<br />}<br />PWM1=0; // zgaszenie KANAŁ1<br />for(i=0; i&lt;=240; i++){<br />PWM2=i;<br />_delay_ms(500);  //(120s) rozjasnianie  (480) KANAŁ2<br />}<br />_delay_ms(90000);    //(90s) swiecenie ciagle  (90000) KANAŁ2<br />for(i=240; i&gt;0; i--){<br />PWM2=i;<br />_delay_ms(500);  //(120s) gaszenie  (480) KANAŁ2<br />}<br />PWM2=0; // zgaszenie KANAŁ2<br />for(i=0; i&lt;=240; i++){<br />PWM3=i;<br />_delay_ms(500);  //(120s) rozjasnianie  (480) KANAŁ3<br />}<br />_delay_ms(90000);    //(90s) swiecenie ciagle  (90000)  KANAŁ3<br />for(i=240; i&gt;0; i--){<br />PWM3=i;<br />_delay_ms(500);  //(120s) gaszenie  (480) KANAŁ3<br />}<br />PWM3=0; // zgaszenie KANAŁ3<br />}<br />}<br />}<br />//Przerwanie na potrzeby licznika programowego który napędza 3 kanały programowego PWM<br />ISR(TIM0_OVF_vect){<br />static uint8_t licznik;<br />if(licznik &lt; PWM1)PORTB |= (1&lt;&lt;PB0); else PORTB &amp;= ~(1&lt;&lt;PB0);<br />if(licznik &lt; PWM2)PORTB |= (1&lt;&lt;PB1); else PORTB &amp;= ~(1&lt;&lt;PB1);<br />if(licznik &lt; PWM3)PORTB |= (1&lt;&lt;PB2); else PORTB &amp;= ~(1&lt;&lt;PB2);<br />licznik++;<br />}[/syntax]<br /><br />Mam nadzieję że chociaż przeanalizujesz dogłębnie ten kod...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 4 paź 2018, o 21:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bobuss88]]></name></author>
<updated>2018-10-02T18:54:13+01:00</updated>
<published>2018-10-02T18:54:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=212165#p212165</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=212165#p212165"/>
<title type="html"><![CDATA[Re: Attiny13 PWM +3led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=212165#p212165"><![CDATA[
znalazł by się ktoś kto by odpłatnie wykonał ten program? proszę na priv.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17191">bobuss88</a> — 2 paź 2018, o 18:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2018-09-26T19:34:06+01:00</updated>
<published>2018-09-26T19:34:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=212026#p212026</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=212026#p212026"/>
<title type="html"><![CDATA[Re: Attiny13 PWM +3led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=212026#p212026"><![CDATA[
Widzisz, ja wskazuje Ci błędy a Ty nadal je powtarzasz. Tryb PWM nr. 5  nie wysteruje Ci 2 kanałów PWM bo rejestr OCR0A jest w tym trybie używany nie do regulacji wypełnienia ale czasu trwania okresu i rozdzielczości samego PWM-a. Zapewne mimo to Ci to działa bo bit WGM02 próbujesz ustawić w rejestrze TCCR0A, a faktycznie znajduje się on w rejestrze TCCR0B. Bit WGM02 jest bitem nr 3 w rejestrze B i na twoje szczęście w rejestrze A pod numerem 3 jest bit nie wykorzystany więc tak na prawdę ustawiasz tryb PWM nr 1 czyli PWM Phase Correct z licznikiem zliczającym do wartości 0xFF, i w tym trybie funkcjonalne są oba kanały.<br /><br />Co do programowych kanałów PWM to można to zrobić na przerwaniu od licznika. Powołujesz do życia 4 zmienne z dopiskiem Volatile, pierwsza zmienna może być typu static i będzie to nasz licznik programowy który będzie co każde przerwanie zwiększana o 1.<br />Pozostałe 3 zmienne będą odpowiednikami rejestrów OCR0A i OCR0B - czyli zmienne przechowujące wartości poszczególnych kanałów PWM. W przerwaniu po inkrementacji licznika wstawiasz 3 warunki porównujące zmienną licznika programowego ze zmiennymi PWM i jeśli zmienna większa od licznika to ustaw &quot;1&quot; na pinie, jeśli mniejsza to ustaw &quot;0&quot; na pinie (lub odwrotnie jeśli chcesz mieć odwrócony stan). Powyższe będzie odpowiednikiem trybu FastPWM (jeśli zależy ci na trybie Phase Correct to musisz sobie dorobić warunek zmieniający cyklicznie kierunek zliczania licznika i odpowiednio dostosować warunki porównujące licznik ze zmiennymi PWM).<br />Musisz jeszcze dobrać częstotliwość z jaką wywoływane będzie przerwanie, tak by odstępy pomiędzy wywoływaniami przerwania były większe niż sam czas wykonywania przerwania bo inaczej wszystko będzie się przycinać.<br />Całość masz bardzo dobrze opisane przez Mirka w książce &quot;Mikrokontrolery AVR Język C - podstawy programowania&quot; potocznej zwanej BB<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 26 wrz 2018, o 19:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bobuss88]]></name></author>
<updated>2018-09-25T22:28:17+01:00</updated>
<published>2018-09-25T22:28:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=211995#p211995</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=211995#p211995"/>
<title type="html"><![CDATA[Re: Attiny13 PWM +3led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=211995#p211995"><![CDATA[
Dla 2 led wykorzystałem  OCRA I OCRB ale nie wiem jak sie zabrać za programowy pwm dla 3 kanałów. Tutaj program z obsługi 2 led.<br /><br />[syntax=c]/*<br />&#93; * main.c<br /> *<br /> *  Created on: 10 cze 2017<br /> *      Author: Marcin<br /> */<br /><br />    #include &lt;avr/io.h&gt;<br />    #include &lt;util/delay.h&gt;<br />//procesor &quot;U1B&quot;<br />//bialy cieply+zolty+czerwony  --  niebieski+zielony   2min+3min+2min+1min=ok 8min cykl<br />    uint16_t i = 0;<br />    uint16_t a=0;<br />    uint32_t b=0;<br />    int main( void ) {<br />        DDRB = (1&lt;&lt;PB1)|(1&lt;&lt;PB0);        // ustawiamy PB0 i PB1 jako wyjścia<br />        TCCR0A = (1&lt;&lt;COM0A1)|(1&lt;&lt;COM0B1)|(1&lt;&lt;WGM02)|(0&lt;&lt;WGM01)|(1&lt;&lt;WGM00); // wyjście PB0 oraz PB1 pracują w trybie normalnym<br />           // PWM poprawny fazowo Tryb nr.5<br />        // Ustawiamy rejestry porównań<br />        OCR0A = 0;                       // Wygaszenie  LED1<br />        OCR0B = 0;                       // Wygaszenie  LED2<br />        TCCR0B = ( 1 &lt;&lt; CS01 );          // presccaler 8 (czestotliwosc 4,69kHz)<br /><br />        while (1) {<br />                for (; i &lt; 240; i++ ) {<br />                    if(i&lt;=160)OCR0A = i;<br />                    if(i&gt;80)OCR0B = (i-80);<br />                    _delay_ms(590);  //590   120 sekund 2min rozjasnianie<br />                }<br />                _delay_ms(180000);  //180 sekund 3min    ciagle swiecenie<br />                for (; i; i--) {<br />                    if(i&gt;80)OCR0A = (i-81);<br />                    if(i&lt;=160)OCR0B = (i-1);<br />                    _delay_ms(590);  //590  120 sekund sciemnianie<br />                 }<br />            }<br />        }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17191">bobuss88</a> — 25 wrz 2018, o 22:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2018-09-25T21:23:56+01:00</updated>
<published>2018-09-25T21:23:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=211990#p211990</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=211990#p211990"/>
<title type="html"><![CDATA[Re: Attiny13 PWM +3led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=211990#p211990"><![CDATA[
Tak zapytam z ciekawości: jak chcesz uzyskać 3 sprzętowe kanały PWM skoro attiny13(V/A) posiadają tylko 2 sprzętowe PWM-y?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 11 minutach ]</span></strong><br /><br />Dodatkowo próbujesz ustawić tryb licznika nr 5 czyli tryb Phase correct ze zliczaniem do wartości OCRA więc tak naprawdę masz w takiej konfiguracji tylko jeden kanał PWM bo w tym wypadku OCRA steruje okresem i rozdzielczością PWM a OCRB steruje wypełnieniem kanału B.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 16 minutach ]</span></strong><br /><br />Pominę już fakt że np bit WGM02 znajduje się nie w rejestrze TCCROA  a w rejestrze TCCROB, więc tak na prawdę ustawiasz tryb 1 czyli Phase Correct ze zliczaniem do maxa więc tu finalnie było by ok.<br /><br />Tak czy inaczej na tiny13 nie uzyskasz 3 sprzętowych kanałów PWM.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 30 minutach ]</span></strong><br /><br />Tak patrząc na ten Twój kod mam wrażenie że nie do końca wiesz jak działają te sprzętowe PWM-y bo każdy kanał próbujesz regulować rejestrem OCRA. A faktycznie jest tak że rejestr OCRA steruje kanałem pierwszym, OCRB steruje kanałem drugim, kanałem trzecim nie posterujesz bo go nima.<br />Ewentualnie możesz spróbować to zrobić na programowym PWM-ie...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 25 wrz 2018, o 21:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bobuss88]]></name></author>
<updated>2018-10-05T12:04:01+01:00</updated>
<published>2018-09-25T20:56:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=211988#p211988</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=211988#p211988"/>
<title type="html"><![CDATA[Attiny13 PWM +3led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21331&amp;p=211988#p211988"><![CDATA[
Witam.<br />Mam problem z napisaniem programu do obsługi 3 diodami led.<br />Procesor to Attiny13. <br />Podłączenie:<br />PB0- KANAŁ1 (LED1)<br />PB1 -KANAŁ2 (LED2)<br />PB2- KANAŁ3 (LED3)<br />PB3- PRZYCISK(ZMI)<br />PB4- PRZYCISK (ZMII)<br />Częstotliwość: ok 5kHz. (9.6MHz + preskaler 8)<br />PWM z rozdzielczością 0-240.<br />Zasada działania:<br />1.Przy włączeniu wszystkie diody led wyłączone.<br />2. <br />   I.)Jeśli przycisk ZMI(PB3)=0 oraz ZMII(PB4)=1 to: <br />       A.)KANAŁ1(LED1) załącza się poprzez PWM 0-240 przez czas 120sekund. <br />       B.)Jeśli LED1=240 to świeci ciągle przez czas 160 sekund.<br />       C.)LED1 płynnie wyłącza się 240-0 przez 120sekund i od razu startuje program od pkt.&quot;A&quot;.<br /><br /> II.) Jeśli przycisk ZMI(PB3)=1 oraz ZMII(PB4)=1 to:<br />       A.)KANAŁ1(LED1) załącza się poprzez PWM 0-240 przez czas 120sekund. <br />       B.)Jeśli LED1=240 to świeci ciągle przez czas 120 sekund.<br />       C.)LED1 wyłącza się płynnie 240-0 przez czas 120 sekund.<br />       D.)KANAŁ2(LED2) załącza się poprzez PWM 0-240 przez czas 120sekund. <br />       E.)Jeśli LED2=240 to świeci ciągle przez czas 120 sekund.<br />       F.)LED2 wyłącza się płynnie 240-0 przez czas 120sekund i startuje program od pkt.&quot;A&quot;<br /><br />III.) Jeśli przycisk ZMI(PB3)=1 oraz ZMII(PB4)=0 to:<br />       A.)KANAŁ1(LED1) załącza się poprzez PWM 0-240 przez czas 120sekund. <br />       B.)Jeśli LED1=240 to świeci ciągle przez czas 90 sekund.<br />       C.)LED1 wyłącza się płynnie 240-0 przez czas 120sekund.<br />       D.)KANAŁ2(LED2) załącza się poprzez PWM 0-240 przez czas 120sekund. <br />       E.)Jeśli LED2=240 to świeci ciągle przez czas 90 sekund.<br />       F.)LED2 wyłącza się płynnie 240-0 przez czas 120 sekund.<br />       G.)KANAŁ3(LED3) załącza się poprzez PWM 0-240 przez czas 120sekund. <br />       H.)Jeśli LED3=240 to świeci ciągle przez czas 90 sekund.<br />       I.)LED3 wyłącza się płynnie 240-0 przez czas 120sekund i startuje program od pkt.&quot;A&quot;<br /><br /><br />[syntax=c]/*<br />&#93; * main.c<br /> *<br /> *  Created on: 10 cze 2017<br /> *      Author: Marcin<br /> */<br />    // jeden,dwa lub trzy kolory. Wybór poprzez kombinacje ZM1 oraz ZM2 procesor &quot;U2A&quot;<br />    // opcja pierwsza. Jeden kolor. 120s rozjasnianie oraz 160s ciagle swiecenie.<br />    // opcja druga.    Dwa kolory.  120s rozjasnianie oraz 120s ciagle swiecenie.<br />    // opcja trzecia.  Trzy kolory. 120s rozjasnianie oraz 90s  ciagle swiecenie.<br />    #include &lt;avr/io.h&gt;<br />    #include &lt;util/delay.h&gt;<br />    #define ZMI  (1&lt;&lt;PB3)<br />    #define ZMII (1&lt;&lt;PB4)<br />    uint16_t i = 0;<br />    int main( void ) {<br />        DDRB = (1&lt;&lt;PB0)|(1&lt;&lt;PB1)|(1&lt;&lt;PB2);  // ustawiamy PB0 (KANAŁ1) PB1(KANAŁ2) PB2(KANAŁ3) jako wyjście<br />        TCCR0A = (1&lt;&lt;COM0A1)|(1&lt;&lt;COM0B1)|(1&lt;&lt;WGM02)|(0&lt;&lt;WGM01)|(1&lt;&lt;WGM00); // wyjście PB0,PB1,PB2 pracują w trybie normalnym<br />           // PWM poprawny fazowo Tryb nr.5<br />        PORTB |= ZMI;   // podciągamy linie klawiszy do VCC<br />        PORTB |= ZMII;  // podciągamy linie klawiszy do VCC<br />        // Ustawiamy rejestry porównań<br />        OCR0A = 0;                       // Wygaszenie  LED1<br />        TCCR0B = ( 1 &lt;&lt; CS01 );          // presccaler 8 (czestotliwosc 4,69kHz)<br /><br />     while (1) {<br />            //OPCJA 1<br />        if  ( (!PINB &amp; (1&lt;&lt;ZMI) ) &amp;&amp; (PINB &amp; (1&lt;&lt;ZMII) ))  {     // ZMI stan niski oraz ZMII stan wysoki.<br /><br />        for(i=0; i&lt;240; i++)<br />                                {<br />                                OCR0A=i;<br />                                _delay_ms(480);  //(120s) rozjasnianie  (480)<br />                                PORTB |= (1&lt;&lt;PB0);<br />                                }<br />                                _delay_ms(160000);        //(160s) swiecenie ciagle  (160000)<br />                                for (i=240; i; i--)<br />                                {<br />                                OCR0A=i;<br />                                _delay_ms(480);  //(120s) gaszenie  (480)<br />                                PORTB &amp;= ~(1&lt;&lt;PB0);<br />                                }<br />                                OCR0A=0;<br />             }<br />            //OPCJA 2<br />        if  ( (PINB &amp; (1&lt;&lt;ZMI)  ) &amp;&amp; (PINB &amp; (1&lt;&lt;ZMII) ))  {     // ZMI stan wysoki oraz ZMII stan wysoki.<br /><br />        for(i=0; i&lt;240; i++)<br />                            {<br />                            OCR0A=i;<br />                            _delay_ms(1);  //(120s) rozjasnianie  (480) KANAŁ1<br />                            PORTB |= (1&lt;&lt;PB0);<br />                            }<br />                            _delay_ms(1);        //(120s) swiecenie ciagle  (120000) KANAŁ1<br />                            for (i=240; i; i--)<br />                            {<br />                            OCR0A=i;<br />                            _delay_ms(1);  //(120s) gaszenie  (480) KANAŁ1<br />                            PORTB &amp;= ~(1&lt;&lt;PB0);<br />                            }<br />                            OCR0A=0;<br />                            {<br />                            OCR0A=i;<br />                            _delay_ms(1);  //(120s) rozjasnianie  (480) KANAŁ2<br />                            PORTB |= (1&lt;&lt;PB1);<br />                            }<br />                            _delay_ms(1);        //(120s) swiecenie ciagle  (120000)  KANAŁ2<br />                            for (i=240; i; i--)<br />                            {<br />                            OCR0A=i;<br />                            _delay_ms(1);  //(120s) gaszenie  (480)  KANAŁ2<br />                            PORTB &amp;= ~(1&lt;&lt;PB1);<br />                            }<br />                            OCR0A=0;<br />             }<br />            //OPCJA 3<br />        if  ( (PINB &amp; (1&lt;&lt;ZMI) ) &amp;&amp; (!PINB &amp; (1&lt;&lt;ZMII) ))  {     // ZMI stan wysoki oraz ZMII stan niski.<br /><br />        for(i=0; i&lt;240; i++)<br />                            {<br />                            OCR0A=i;<br />                            _delay_ms(1);  //(120s) rozjasnianie  (480) KANAŁ1<br />                            PORTB |= (1&lt;&lt;PB0);<br />                            }<br />                            _delay_ms(1);        //(90s) swiecenie ciagle  (90000) KANAŁ1<br />                            for (i=240; i; i--)<br />                            {<br />                            OCR0A=i;<br />                            _delay_ms(1);  //(120s) gaszenie  (480) KANAŁ1<br />                            PORTB &amp;= ~(1&lt;&lt;PB0);<br />                            }<br />                            OCR0A=0;<br />                            {<br />                            OCR0A=i;<br />                            _delay_ms(1);  //(120s) rozjasnianie  (480) KANAŁ2<br />                            PORTB |= (1&lt;&lt;PB1);<br />                            }<br />                            _delay_ms(1);        //(90s) swiecenie ciagle  (90000) KANAŁ2<br />                            for (i=240; i; i--)<br />                            {<br />                            OCR0A=i;<br />                            _delay_ms(1);  //(120s) gaszenie  (480) KANAŁ2<br />                            PORTB &amp;= ~(1&lt;&lt;PB1);<br />                            }<br />                            OCR0A=0;<br />                            {<br />                            OCR0A=i;<br />                            _delay_ms(1);  //(120s) rozjasnianie  (480) KANAŁ3<br />                            PORTB |= (1&lt;&lt;PB2);<br />                            }<br />                            _delay_ms(1);        //(90s) swiecenie ciagle  (90000)  KANAŁ3<br />                            for (i=240; i; i--)<br />                            {<br />                            OCR0A=i;<br />                            _delay_ms(1);  //(120s) gaszenie  (480)  KANAŁ3<br />                            PORTB &amp;= ~(1&lt;&lt;PB2);<br />                            }<br />                            OCR0A=0;<br />                                    }<br />               }<br /><br />                        }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17191">bobuss88</a> — 25 wrz 2018, o 20:56</p><hr />
]]></content>
</entry>
</feed>