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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-06-05T23:42:06+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=15515&amp;mode</id>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-06-05T23:42:06+01:00</updated>
<published>2016-06-05T23:42:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161743#p161743</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161743#p161743"/>
<title type="html"><![CDATA[Re: Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161743#p161743"><![CDATA[
Witam<br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />Tzn może inaczej - jeśli akurat np już procek i nasz program główny nie ma nic więcej do roboty a działa - no to co stoi na przeszkodzie żeby działało<br /></div><br />Odezwałem się w temacie, bo sam w ten sposób przyciemniam wyświetlacze ale:<br />PWM robię 32 taktowy i dziesięciostopniową skalę jasności (gamma =2) - Termostat na ATmega8 więc roboty nie za wiele.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 5 cze 2016, o 23:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-06-05T22:56:09+01:00</updated>
<published>2016-06-05T22:56:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161742#p161742</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161742#p161742"/>
<title type="html"><![CDATA[Re: Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161742#p161742"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />chciałem się pobawić, no i coś tam z tej zabawy wyszło.<br /></div><br />Tzn może inaczej - jeśli akurat np już procek i nasz program główny nie ma nic więcej do roboty a działa - no to co stoi na przeszkodzie żeby działało <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=54">mirekk36</a> — 5 cze 2016, o 22:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-06-05T22:39:00+01:00</updated>
<published>2016-06-05T22:39:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161739#p161739</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161739#p161739"/>
<title type="html"><![CDATA[Re: Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161739#p161739"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />warto zobaczyć ile to zasobów czasu zabiera dla programu głównego<br /></div><br />A no zabiera i to sporo! <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Tak jak pisałem wcześniej, chciałem się pobawić, no i coś tam z tej zabawy wyszło.<br />Wniosek: <br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />sprzętowe PWM'y leżą odłogiem<br /></div>  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 5 cze 2016, o 22:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-06-05T22:33:50+01:00</updated>
<published>2016-06-05T22:33:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161736#p161736</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161736#p161736"/>
<title type="html"><![CDATA[Re: Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161736#p161736"><![CDATA[
No z oddzielnym timerem programowym na PWM będzie to śmigać jakoś ale ... warto zobaczyć ile to zasobów czasu zabiera dla programu głównego nie wspominając już o cennych timerach gdy sprzętowe PWM'y leżą odłogiem <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=54">mirekk36</a> — 5 cze 2016, o 22:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-06-05T22:13:21+01:00</updated>
<published>2016-06-05T22:13:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161733#p161733</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161733#p161733"/>
<title type="html"><![CDATA[Re: Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161733#p161733"><![CDATA[
Tak dla zabawy napisałem kod z wykorzystaniem programowego pwm'a dla dwóch wyświetlaczy 7 segmentowych.<br />Tak jak pisał wcześniej p. Mirek jest to bez sensu, ale o dziwo działa. Testuję na Atmega32 z rezonatorem kwarcowym 11 059 200Hz.<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 ANODY_DIR DDRA//anody<br />#define ANODY_PORT PORTA<br />#define AN1 (1&lt;&lt;PA7)//anoda wyświetlacza nr1<br />#define AN2 (1&lt;&lt;PA6)//anoda wyświetlacza nr2<br /><br />#define KATODY_DIR DDRC//katody<br />#define KATODY_PORT PORTC<br /><br />volatile uint8_t wysw = 1;//przełączanie wyświetlacza<br />volatile uint8_t pwm1;//pwm programowy<br /><br />uint8_t i;// definicja zmiennej i na potrzeby pętli for()<br />uint8_t cyfra&#91;2&#93;={0b11110010,0b00100101 };// 1. oraz 2<br /><br /><br />int main(void)<br />{<br />ANODY_DIR |= AN1 | AN2;//ustawienie wyjść dla anod AN1 i AN2<br />KATODY_DIR = 0xff;//cały port jako wyjścia dla katod<br />KATODY_PORT = 0xff;//zgaszenie wyświetlaczy<br /><br />// ustawienie TIMER0<br />TCCR0 |= (1&lt;&lt;WGM01);// tryb CTC<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);// preskaler = 1024<br />OCR0 = (F_CPU / 1024UL / 100UL) - 1;// dodatkowy podział częsttotliwości przez 100<br />TIMSK |= (1&lt;&lt;OCIE0);// zezwolenie na przerwanie CompareMatch<br /><br />// ustawienia TIMER2 w tryb CTC<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb  CTC<br />TCCR2 |= (1&lt;&lt;CS22)  | (1&lt;&lt;CS20);// preskaler = 128<br />OCR0 = (F_CPU / 128UL / 600UL) - 1;// dodatkowy podział częsttotliwości przez 600<br />TIMSK |= (1&lt;&lt;OCIE2);// zezwolenie na przerwanie CompareMatch<br /><br />sei();<br /><br />while(1)<br />{<br />for(i=0;i&lt;255;i++)//programowe rozjaśnianie wyświetlaczy<br />{<br />pwm1=i;<br />if(i&gt;40) _delay_ms(3);<br />else _delay_ms(30);<br />}<br /><br />pwm1=255;<br />_delay_ms(500);<br /><br />for(i=255;i;i--)//programowe ściemnianie wyświetlaczy<br />{<br />pwm1=i;<br />if(i&gt;40) _delay_ms(3);<br />else _delay_ms(30);<br />}<br /><br />pwm1=0;<br />_delay_ms(500);<br />}<br />}<br /><br />ISR(TIMER0_COMP_vect)//multipleksowanie<br />{<br />if( 1 == wysw )<br />{<br />KATODY_PORT = cyfra&#91;0&#93;;<br />ANODY_PORT |= AN2;//wyłączenie wyświetlacza 2<br />ANODY_PORT &amp;= ~AN1;//włączenie wyświetlacza 1<br />wysw = 2;<br />}<br />else if( 2 == wysw )<br />{<br />KATODY_PORT = cyfra&#91;1&#93;;<br />ANODY_PORT |= AN1;//wyłączenie wyświetlacza 1<br />ANODY_PORT &amp;= ~AN2;//włączenie wyświetlacza 2<br />wysw = 1;<br />}<br />}<br /><br />ISR(TIMER2_COMP_vect)//programowy PWM<br />{<br />static uint8_t cnt; // definicja licznika PWM<br /><br />if (cnt &lt;= pwm1){<br />if ( 2 == wysw ) {<br />ANODY_PORT &amp;= ~AN1;//włączenie wyświetlacza 1 dla PWM programowego<br />}<br />else if ( 1 == wysw ) {<br />ANODY_PORT &amp;= ~AN2;//włączenie wyświetlacza 2 dla PWM programowego<br />}<br />}<br />else {<br />ANODY_PORT |= AN1 | AN2;//wyłączenie wyświetlaczy dla PWM programowego<br />}<br /><br />cnt++;// inkrementacja licznika PWM<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 5 cze 2016, o 22:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jokerpik]]></name></author>
<updated>2016-06-04T18:20:54+01:00</updated>
<published>2016-06-04T18:20:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161654#p161654</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161654#p161654"/>
<title type="html"><![CDATA[Re: Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161654#p161654"><![CDATA[
W takim razie jak powinien wygladać listing programu  ?<br /><br />Bardzo prosze o poprawienie i wstawienie bo nie mam juz pojecia.<br /><br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14139">jokerpik</a> — 4 cze 2016, o 18:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-06-04T18:05:00+01:00</updated>
<published>2016-06-04T18:05:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161653#p161653</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161653#p161653"/>
<title type="html"><![CDATA[Re: Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161653#p161653"><![CDATA[
użyj sprzętowego PWM'a to co teraz zrobiłeś to nie za bardzo wiadomo co to jest ? Po co przerwania włączasz dla sprzętowego PWM ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 cze 2016, o 18:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jokerpik]]></name></author>
<updated>2016-06-04T16:16:55+01:00</updated>
<published>2016-06-04T16:16:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161651#p161651</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161651#p161651"/>
<title type="html"><![CDATA[Re: Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161651#p161651"><![CDATA[
Wow , dzięki wielkie za wyjaśnienie. To dużo mi ułatwi. Wiec wracam do stanu początkowego . Teraz portami sterującymi będą nużki OC0 oraz OC2. Napisałem kod , sugerując się tym aby zostawic sprzetowy PWM , ale niestety nie swiecą sie wyswietlacze. <br /><br />Proszę o pomoc i pozdrawiam !<br /><br />[syntax=c]/* Projekt.c<br /> *<br /> * Created: 2016-05-31 18:50:07<br /> *  Author: joker_000<br /> */<br /> <br /> <br /> <br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /> <br />volatile uint8_t pwm_zadan;<br />uint8_t cyfra&#91;2&#93;={0b11110010,0b00100101 }; // 1. oraz 2<br />uint8_t i,wysw;<br /> <br /><br />uint8_t A;<br /><br />int main(void)<br />{<br /> <br /> <br />        DDRD=0xFF;<br />        DDRB=0xFF;<br />DDRC=0xFF;<br /> <br />  TCCR0 |= (1&lt;&lt;CS00)|(1&lt;&lt;CS02);//podzial przez 1024<br />  TCCR0 |= (1&lt;&lt;WGM01)|(1&lt;&lt;WGM00);   // tryb PWM FAST , <br />          TIMSK|=(1&lt;&lt;TOIE0);<br />  <br /> TCCR2 |= (1&lt;&lt;CS00)|(1&lt;&lt;CS02);//podzial przez 1024<br /> TCCR2 |= (1&lt;&lt;WGM01)|(1&lt;&lt;WGM00);   // tryb PWM FAST ,<br /> TIMSK|=(TOIE2);               <br />  <br /><br />   TCCR1A |= (1&lt;&lt;WGM12);   // tryb CTC<br />   TCCR1A |= (1&lt;&lt;CS11)|(1&lt;&lt;CS10);    // prescaler = 64<br />    OCR1A = 10;                    // dodatkowy podział częstotliwości<br />TIMSK |= (1&lt;&lt;OCIE1A);<br />        <br />  <br />         sei();<br />              <br /> <br />               ADMUX  =  (1&lt;&lt;REFS1) | (1&lt;&lt;REFS0)|(1&lt;&lt;MUX2) | (1&lt;&lt;MUX0);        //REFS1:0: Reference Selection Bits<br />                //Internal 2.56V Voltage Reference with external capacitor at AREF pin<br />                //Input Channel Selections ADC5<br /> <br />                ADCSRA = (1&lt;&lt;ADEN) |(1&lt;&lt;ADPS0)|(1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS2);   //ADEN=1 włączenie przetwornika ADC)<br />                //ustawienie preskalera na 128<br /> <br />                DDRA &amp;=~ (1&lt;&lt;PA5); //Ustawienie Wejścia ADC<br />              <br />                for (;;)<br /> <br />                {<br />                        ADCSRA |= (1 &lt;&lt; ADSC);//ADSC: Uruchomienie pojedynczej konwersji   //<br />                        while (ADCSRA &amp; (1 &lt;&lt; ADSC)); //czeka na zakończenie konwersji<br />                        A = ADC; // odczytujemy wynik <br />pwm_zadan =A/4 ;           <br />}<br /><br />}<br /> <br /> <br /> ISR(TIMER0_OVF_vect)<br /> {<br /> OCR0=pwm_zadan;<br /> }<br /> <br /> ISR(TIMER2_OVF_vect)<br /> {<br />OCR2=pwm_zadan; <br /> }<br />     <br /> ISR(TIMER1_COMPA_vect)<br /> {<br /><br /><br />                          if(wysw==1)<br />                         {<br />                             PORTD=0b01111111;   //wł pierwszy wyświetlacz nuzka OC2<br />                             PORTC=cyfra&#91;0&#93;;<br />                            wysw++;<br />                          }<br />                           else<br />                          {<br />                             PORTB=0b11110111;   //wł drugi wyświetlacz nuzka OC0<br />                             PORTC=cyfra&#91;1&#93;;<br />                             wysw=1;<br />                           }<br />                             <br />  }[/syntax]<br /><br />Pozdrawiam !<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14139">jokerpik</a> — 4 cze 2016, o 16:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-06-04T15:44:45+01:00</updated>
<published>2016-06-04T15:44:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161649#p161649</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161649#p161649"/>
<title type="html"><![CDATA[Re: Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161649#p161649"><![CDATA[
Próba zrobienia programowego PWM gdzie licznik PWM ma działać w przerwaniu multipleksowania to kompletne i absolutne nieporozumienie. Wyświetlacze będą mrugać i wariować i to jest normalne jak amen w pacierzu ...<br /><br />Po pierwsze częstotliwość dla programowego PWM jest za mała w procedurze obsługi przerwania multipleksowania<br />Po drugie nawet jakby ustawić częstotliwość multipleksowania na jakiś mega max (zupełnie niepotrzebnie bo zabierze się KUPĘ czasu pracy procesora dla pętli głównej) to z kolei i tak jeśli będzie ta sama częstotliwość PWM i multipleksowania to będą się nakładać na siebie obie częstotliwości i będą się działy podobne cyrki - raz jeden może świecić po chwili inny albo będą mrugać na zmianę itp itd<br /><br />Do tego trzeba zrobić oddzielny i to sprzętowy PWM, tym bardziej że masz taki duży procek i wolne piny i timery na sprzętowy PWM. Najlepiej to jeszcze z dzielnikiem = 1 żeby częstotliwość PWM była DUUUUŻO większa niż częstotliwość multipleksowania żeby nie było interferencji pomiędzy nimi. Chociaż i tak może być nawet wtedy lekkie pływanie. Ale żeby to wyeliminować wystarczy zróżniczkować już sprzętowo wyjście PWM sprzętowego z procka na bazę tranzystora obwodem RC czyli - za rezystorem TUŻ przy bazie tranzystora dać np kondek 1uF do gnd ... być może punkt rozjaśniania nie będzie już od ZERA pwm. Co z tego od ok 10% wartości zacznie już ładnie działać - ważne że będzie działać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Podsumowując pomysł kiepski na programowy pwm w procedurze obsługi multipleksowania jakkolwiek by na to nie patrzeć<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 cze 2016, o 15:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jokerpik]]></name></author>
<updated>2016-06-04T15:27:17+01:00</updated>
<published>2016-06-04T15:27:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161648#p161648</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161648#p161648"/>
<title type="html"><![CDATA[Re: Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161648#p161648"><![CDATA[
Dzięki za odpowiedź oraz pomoc. Napiecie jest na pewno. Po skompilowaniu i wgrania programu , wyświetlacze wariują i nie przestają mrugać(przełączają się na zmianę) , i wyświetla się znowu suma czyli odwrócone 6 . , na obu wyświetlaczach .Jeśli zmienie OCR0 np na 100 to przeskakuja na zmiane 2 na 1 , na wyswietlaczu i tak w kółko.  Zmiana położenia potencjometru nic nie daje. Ale potencjometr działa , bo sprawdzałem na nóżce OC0 i diode ładnie rozjasnia i ściemnia. <br /><br />Usunąłęm tak jak pisałeś to pwm_zadane++ z przerwania,<br />Aktualny kod<br />[syntax=c]/* Projekt.c<br /> *<br /> * Created: 2016-05-31 18:50:07<br /> *  Author: joker_000<br /> */<br /> <br /> <br /> <br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /> <br />volatile uint8_t pwm_zadan;<br />uint8_t cyfra&#91;2&#93;={0b11110010,0b00100101 }; // 1. oraz 2<br />uint8_t i,wysw;<br /> <br /><br />uint8_t A;<br /><br />int main(void)<br />{<br /> <br /> <br />        DDRD=0xFF;<br />        DDRB=0xFF;<br />DDRC=0xFF;<br /> <br />  TCCR0 |= (1&lt;&lt;CS00)|(1&lt;&lt;CS01);//podzial przez 64<br />  TCCR0 |= (1&lt;&lt;WGM01);   // tryb CTC , <br />          OCR0=10;                <br />  <br />          TIMSK|=(1 &lt;&lt; OCIE0);<br /> <br />        <br />  <br />         sei();<br />              <br /> <br />               ADMUX  =  (1&lt;&lt;REFS1) | (1&lt;&lt;REFS0)|(1&lt;&lt;MUX2) | (1&lt;&lt;MUX0);        //REFS1:0: Reference Selection Bits<br />                //Internal 2.56V Voltage Reference with external capacitor at AREF pin<br />                //Input Channel Selections ADC5<br /> <br />                ADCSRA = (1&lt;&lt;ADEN) |(1&lt;&lt;ADPS0)|(1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS2);   //ADEN=1 włączenie przetwornika ADC)<br />                //ustawienie preskalera na 128<br /> <br />                DDRA &amp;=~ (1&lt;&lt;PA5); //Ustawienie Wejścia ADC<br />              <br />                for (;;)<br /> <br />                {<br />                        ADCSRA |= (1 &lt;&lt; ADSC);//ADSC: Uruchomienie pojedynczej konwersji   //<br />                        while (ADCSRA &amp; (1 &lt;&lt; ADSC)); //czeka na zakończenie konwersji<br />                        A = ADC; // odczytujemy wynik <br />pwm_zadan =A/4 ;           <br />}<br /><br />}<br /> <br /> <br />     <br />        ISR(TIMER0_COMP_vect)<br />        {<br />                             <br />  static uint8_t pwm_LED = 0;<br /> <br />                               if(pwm_LED &gt; pwm_zadan){ PORTB |= (1&lt;&lt;PB0)|(1&lt;&lt;PB1);} // wył. wyswietlacz<br /> <br />                               else{<br />                                   PORTC = 0xFF; // zeruj segmenty<br />                         if(1==wysw){<br /> <br />                               PORTB=0b11111110;   //wł pierwszy wyświetlacz<br />                               PORTC=cyfra&#91;0&#93;;<br />                               wysw ++;<br />                          }<br /> <br />                         else{<br /> <br />                               PORTB=0b11111101;   //wł drugi wyświetlacz<br />                               PORTC=cyfra&#91;1&#93;;<br />                               wysw=1;<br />                         }<br />                               }<br />                               pwm_LED ++;<br />                              <br /> <br />       }[/syntax]<br /><br /><br />Mam nadzieje, że w końcu uda się dojść to tego aby to zadziałało <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br />I oczywiście proszę o dalszą pomoc !!!!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14139">jokerpik</a> — 4 cze 2016, o 15:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-06-04T14:14:04+01:00</updated>
<published>2016-06-04T14:14:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161647#p161647</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161647#p161647"/>
<title type="html"><![CDATA[Re: Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161647#p161647"><![CDATA[
Witam<br />Już śpieszę z odpowiedzią:<br /><div class="quotetitle">kicajek napisał(a):</div><div class="quotecontent"><br />wyświetlacz sterowany przez TIMER1 bo grzebnąłem na AT8 a tam TIMER0 &quot;inaczej&quot; działa<br /></div><br />inaczej mówiąc sprawdzałem to na ATmega8, a ponieważ Ty masz kod na ATmega32 i tam TIMER0 można wykorzystać w trybie CTC więc uznałem że zapoznasz się z zasadą pwm_programowym, rejestry sobie znajdziesz i skonfigurujesz.<br /><div class="quotetitle">jokerpik napisał(a):</div><div class="quotecontent"><br />gdzie mam przypisac zmienna A/4<br /></div><br />[syntax=c]for (;;)<br /> <br />                {<br />                        ADCSRA |= (1 &lt;&lt; ADSC);//ADSC: Uruchomienie pojedynczej konwersji   //<br />                        while (ADCSRA &amp; (1 &lt;&lt; ADSC)); //czeka na zakończenie konwersji<br />                        A = ADC; // odczytujemy wynik<br />                        pwm_zadane = A/4; // wyświetlamy wynik<br />                }[/syntax]<br />tamto pwm_zadane++ z przerwania oczywiście usuwasz.<br /><br />Jeśli świeci Ci wyświetlacz 2 a jedynka milczy(?) to znaczy że brak Ci połączenia na linii uC-baza PNP - anody wyświetlacza. Testowo zamiast wyświetlacza podłącz do tranzystora jakiegoś LED'a z rezystorem 330R do GND i sprawdź.<br />Wyjaśnić kod - nie wiem jak Ci to zrobić - no jest to programowy PWM z tym że zamiast poj. <br />odbiornika mamy wyświetlacz.<br />A wiesz, że AT32 na PORTC fabrycznie ma włączony JTAG?<br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 4 cze 2016, o 14:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jokerpik]]></name></author>
<updated>2016-06-04T12:17:58+01:00</updated>
<published>2016-06-04T12:17:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161645#p161645</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161645#p161645"/>
<title type="html"><![CDATA[Re: Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161645#p161645"><![CDATA[
Nie za bardzo rozumiem o co Ci chodzi. Analizując kod który od Ciebie dostałem , timer0 jest mi nie potrzebny , wiec ustawianie 0CR0 oraz preskelera jest nie potrzebne . Czy mogł byś mi to jakoś wyjaśnić. I jeszcze jedno pytanie . Jesli ustawie pwm_zadane =1 to swieci sie tylko i wylacznie jeden wyswietlacz i nie zmienia on swojej jasnosci. Po za tym chce moc sterowac jasnoscią wiec gdzie mam przypisac zmienna A/4 (wartosc od 0-255) aby sterowac ?<br /><br />Schemat  <!-- m --><a class="postlink" href="https://obrazkiforum.atnel.pl/14139/17e257912aa22a1335a87efc165c8614.png" >https://obrazkiforum.atnel.pl/14139/17e2 ... 5c8614.png</a><!-- m --><br /><br /><br />Aktualny kod w ktorym swieci sie tylko cyfra 2 <br /><br />[syntax=c]/* Projekt.c<br /> *<br /> * Created: 2016-05-31 18:50:07<br /> *  Author: joker_000<br /> */<br /> <br /> <br /> <br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /> <br /> <br />uint8_t cyfra&#91;2&#93;={0b11110010,0b00100101 }; // 1. oraz 2<br />uint8_t i,wysw;<br /> <br /><br />volatile uint8_t A;<br /><br />int main(void)<br />{<br /> <br /> <br />        <br />        DDRB=0xFF;<br />DDRC=0xFF;<br /> <br /> <br />        <br /> <br />        /*TCCR2=(1&lt;&lt;WGM20)|(1&lt;&lt;WGM21) // Tryb szybki PWM<br />        |(1&lt;&lt;CS22)|(1&lt;&lt;CS00)  /// flck/1024<br />        |(1&lt;&lt;COM20)|(1&lt;&lt;COM21);// Ustaw stan OCn przy zgodności OCRn i TCNTn*/<br /> <br /> <br />         /* TCCR0 |= (1&lt;&lt;CS00)|(1&lt;&lt;CS01);//podzial przez 64<br />  TCCR0 |= (1&lt;&lt;WGM01);   // tryb CTC , <br />          OCR0=10;                <br />  <br />          TIMSK=(1 &lt;&lt; OCIE0)|(1&lt;&lt;TOIE2)|(1&lt;&lt;TOIE0);<br />*/<br />        <br />        TCCR1B |= (1&lt;&lt;WGM12);  //tryb CTC<br />        TCCR1B |= (1&lt;&lt;CS11)|(1&lt;&lt;CS10); // preskaler 64<br />        OCR1A = 10;<br />        TIMSK |= (1&lt;&lt;OCIE1A);<br /> <br />         sei();<br />              <br /> <br />               ADMUX  =  (1&lt;&lt;REFS1) | (1&lt;&lt;REFS0)|(1&lt;&lt;MUX2) | (1&lt;&lt;MUX0);        //REFS1:0: Reference Selection Bits<br />                //Internal 2.56V Voltage Reference with external capacitor at AREF pin<br />                //Input Channel Selections ADC5<br /> <br />                ADCSRA = (1&lt;&lt;ADEN) |(1&lt;&lt;ADPS0)|(1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS2);   //ADEN=1 włączenie przetwornika ADC)<br />                //ustawienie preskalera na 128<br /> <br />                DDRA &amp;=~ (1&lt;&lt;PA5); //Ustawienie Wejścia ADC<br />              <br />                for (;;)<br /> <br />                {<br />                        ADCSRA |= (1 &lt;&lt; ADSC);//ADSC: Uruchomienie pojedynczej konwersji   //<br />                        while (ADCSRA &amp; (1 &lt;&lt; ADSC)); //czeka na zakończenie konwersji<br />                        A = ADC; // odczytujemy wynik <br />                }<br /><br />}<br /> <br /> <br />       /*ISR(TIMER2_OVF_vect)<br />       {<br /> <br />                        OCR2=A/4;<br /> <br /> <br />       }<br /> <br />*/<br />        ISR(TIMER1_COMPA_vect)<br />        {<br />                             volatile uint8_t pwm_zadane = 1;  //regulacja PWM LED_7<br />   static uint8_t pwm_LED = 0;<br /> <br />                               if(pwm_LED &gt; pwm_zadane){ PORTB |= (1&lt;&lt;PB0)|(1&lt;&lt;PB1);} // wył. wyswietlacz<br /> <br />                               else{<br />                                   PORTC = 0xFF; // zeruj segmenty<br />                         if(1==wysw){<br /> <br />                               PORTB=0b11111110;   //wł pierwszy wyświetlacz<br />                               PORTC=cyfra&#91;0&#93;;<br />                               wysw ++;<br />                          }<br /> <br />                         else{<br /> <br />                               PORTB=0b11111101;   //wł drugi wyświetlacz<br />                               PORTC=cyfra&#91;1&#93;;<br />                               wysw=1;<br />                         }<br />                               }<br />                               pwm_LED ++;<br />                               if(0 ==pwm_LED){ pwm_zadane ++;} // prawie płynne rozjaśnianie<br /> <br />       }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14139">jokerpik</a> — 4 cze 2016, o 12:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-06-04T10:21:30+01:00</updated>
<published>2016-06-04T10:21:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161637#p161637</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161637#p161637"/>
<title type="html"><![CDATA[Re: Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161637#p161637"><![CDATA[
Witam<br />zmień to nieszczęsne<br />[syntax=c]unsigned int i,wysw,A;[/syntax]<br />na coś normalnego, a &quot;A&quot; musi być <strong>volatile</strong> bo dłubiesz nią w przerwaniu.<br />OCR0 i preskaler daj taki jak w moim przykładzie.<br /><div class="quotetitle">jokerpik napisał(a):</div><div class="quotecontent"><br />ale w pewnym momencie na 2 wyswietlaczach<br /></div>  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />- jakaś zależność tego &quot;pewnego momentu&quot;?<br /><div class="quotetitle">jokerpik napisał(a):</div><div class="quotecontent"><br />Dalej zmienia sie tylko czestotliwość miedzy tranzystorami<br /></div><br />Za pomocą OCRx jest tak jak piszesz, bo PWM załatwiany jest programowo dlatego sugerowałem przyśpieszenie przerwania ponieważ musi obsłużyć załączanie w inny sposób - poczytaj o programowym PWM'ie. <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 4 cze 2016, o 10:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jokerpik]]></name></author>
<updated>2016-06-04T09:29:38+01:00</updated>
<published>2016-06-04T09:29:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161632#p161632</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161632#p161632"/>
<title type="html"><![CDATA[Re: Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161632#p161632"><![CDATA[
Fakt, nie zauważyłem. Teraz jesli zmienie pw_zadane to jasnosc sie nie zmienia , ale w pewnym momencie na 2 wyswietlaczach pojawiaja sie sumowane cyfry . Odwrócone 6 z kropką .  <br /><br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /><br />unsigned int cyfra&#91;2&#93;={0b11110010,0b00100101 }; // 1. oraz 2<br />unsigned int i,wysw,A;<br /><br /><br />int main(void)<br />{<br /><br />DDRD=0xFF;<br />DDRB=0xFF;<br />DDRC=0xFF;<br /><br /><br /><br /><br /><br />//TCCR2=(1&lt;&lt;WGM20)|(1&lt;&lt;WGM21) // Tryb szybki PWM<br />//1&lt;&lt;CS22)|(1&lt;&lt;CS00)  /// flck/1024<br />//|(1&lt;&lt;COM20)|(1&lt;&lt;COM21);// Ustaw stan OCn przy zgodności OCRn i TCNTn<br /><br />TCCR0 = 0x0d;   // tryb CTC , podzial przez 1024<br />OCR0=0;                <br />//zezwolenie na przerwania dla CTC<br /><br />TIMSK=(1 &lt;&lt; OCIE0)|(1&lt;&lt;TOIE2)|(1&lt;&lt;TOIE0);<br /><br />sei();<br /><br />ADMUX  =  (1&lt;&lt;REFS1) | (1&lt;&lt;REFS0)|(1&lt;&lt;MUX2) | (1&lt;&lt;MUX0);        //REFS1:0: Reference Selection Bits<br />//Internal 2.56V Voltage Reference with external capacitor at AREF pin<br />//Input Channel Selections ADC5<br /><br />ADCSRA = (1&lt;&lt;ADEN) |(1&lt;&lt;ADPS0)|(1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS2);   //ADEN=1 włączenie przetwornika ADC)<br />//ustawienie preskalera na 128<br /><br />DDRA &amp;=~ (1&lt;&lt;PA5); //Ustawienie Wejścia ADC<br /><br />for (;;)<br /><br />{<br />ADCSRA |= (1 &lt;&lt; ADSC);//ADSC: Uruchomienie pojedynczej konwersji   //<br />while (ADCSRA &amp; (1 &lt;&lt; ADSC)); //czeka na zakończenie konwersji<br />A = ADC; // odczytujemy wynik<br />}<br /><br />}<br /><br /><br />//ISR(TIMER2_OVF_vect)<br />//{<br /><br />//OCR2=A/4;<br /><br /><br />//}<br /><br /><br />ISR(TIMER0_COMP_vect)<br />{<br />volatile uint8_t pwm_zadane = A/4;<br />static uint8_t pwm_LED = 0;<br /><br />if(pwm_LED &gt; pwm_zadane){ PORTB |= (1&lt;&lt;PB0)|(1&lt;&lt;PB1);}<br /><br />else{<br />if(1==wysw){<br /><br />PORTB=0b11111110;   //wł pierwszy wyświetlacz<br />PORTC=cyfra&#91;0&#93;;<br />wysw++;<br />}<br /><br />else{<br /><br />PORTB=0b11111101;   //wł drugi wyświetlacz<br />PORTC=cyfra&#91;1&#93;;<br />wysw=1;<br />}<br />}<br />pwm_LED ++;<br /><br />}[/syntax]<br /><br /><br />Dalej zmienia sie tylko czestotliwość miedzy tranzystorami(która powina byc stala) ,a nie wypelnienie ich sygnalu. <br /><br />W takim razie proszę o dalszą pomoc , i dziękuje z góry !!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14139">jokerpik</a> — 4 cze 2016, o 09:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-06-04T10:17:30+01:00</updated>
<published>2016-06-04T09:04:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161631#p161631</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161631#p161631"/>
<title type="html"><![CDATA[Re: Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161631#p161631"><![CDATA[
Witam<br /><div class="quotetitle">jokerpik napisał(a):</div><div class="quotecontent"><br />Niestety program nie działa.<br /></div><br />To zdanie powinno kończyć Twój ( nieistniejący ) początek wpisu:<br />&quot;Poprawiłem kod, który teraz wygląda tak:<br />...<br />...  ''  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Niestety ...itd.<br />Kol.Mirek dał Ci wskazówkę, ja coś tam bąknąłem i tylko wszechmocny elektron wie co z tego wyprodukowałeś.<br />A zwiększając OCRx spowalniasz przerwanie - skokowo robi się to preskalerem, a płynnie OCRx'em ale w drugą stronę; sam masz w kodzie podane jak sobie obliczyłeś częstotliwość.<br />Fakt, błędnie napisałem 255 co mogło Cię zmylić - odpowiedniej było napisać 256. <br />Wyrżnąłem to co ja nie używałem, wyświetlacz sterowany przez TIMER1 bo grzebnąłem na AT8 a tam TIMER0 &quot;inaczej&quot; działa, segmenty pod PORTD - pozmieniaj sobie na swoje i sprawdź.<br />Nawiasem mówiąc masz skopany &quot;TIMSK&quot;<br />[syntax=c]/* Projekt.c<br /> *<br /> * Created: 2016-05-31 18:50:07<br /> *  Author: joker_000<br /> */<br /><br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /><br />uint8_t cyfra&#91;2&#93;={0b11110010,0b00100101 }; // 1. oraz 2<br />uint8_t i,wysw,A;<br /><br />volatile uint8_t pwm_zadane = 1;  //regulacja PWM LED_7<br /><br /><br />int main(void)<br />{<br /><br /><br />DDRD=0xFF;<br />DDRB=0xFF;<br />    DDRC=0xFF;<br /><br /><br />        /*<br /><br />        TCCR2=(1&lt;&lt;WGM20)|(1&lt;&lt;WGM21) // Tryb szybki PWM<br />        |(1&lt;&lt;CS22)|(1&lt;&lt;CS00)  /// flck/1024<br />        |(1&lt;&lt;COM20)|(1&lt;&lt;COM21);// Ustaw stan OCn przy zgodności OCRn i TCNTn<br /><br /><br />          TCCR0 = 0x0d;   // tryb CTC , podzial przez 1024<br />          OCR0=90;                // okres ok. 5ms przy 16MHz/1024<br />                                        //zezwolenie na przerwania dla CTC<br /><br />          TIMSK=(1 &lt;&lt; OCIE0)|(1&lt;&lt;TOIE2)|(1&lt;&lt;TOIE0);<br /><br />        */<br /><br />        TCCR1B |= (1&lt;&lt;WGM12);  //tryb CTC<br />        TCCR1B |= (1&lt;&lt;CS11)|(1&lt;&lt;CS10); // preskaler 64<br />        OCR1A = 10;<br />        TIMSK |= (1&lt;&lt;OCIE1A);<br /><br />         sei();<br />              /*<br /><br />               ADMUX  =  (1&lt;&lt;REFS1) | (1&lt;&lt;REFS0)|(1&lt;&lt;MUX2) | (1&lt;&lt;MUX0);        //REFS1:0: Reference Selection Bits<br />                //Internal 2.56V Voltage Reference with external capacitor at AREF pin<br />                //Input Channel Selections ADC5<br /><br />                ADCSRA = (1&lt;&lt;ADEN) |(1&lt;&lt;ADPS0)|(1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS2);   //ADEN=1 włączenie przetwornika ADC)<br />                //ustawienie preskalera na 128<br /><br />                DDRA &amp;=~ (1&lt;&lt;PA5); //Ustawienie Wejścia ADC<br />              */<br />                for (;;)<br /><br />                {<br />                       /* ADCSRA |= (1 &lt;&lt; ADSC);//ADSC: Uruchomienie pojedynczej konwersji   //<br />                        while (ADCSRA &amp; (1 &lt;&lt; ADSC)); //czeka na zakończenie konwersji<br />                        A = ADC; // odczytujemy wynik */<br />                }<br /><br />}<br /><br /><br />        ISR(TIMER2_OVF_vect)<br />        {<br /><br />                        OCR2=A/4;<br /><br /><br />        }<br /><br /><br />        ISR(TIMER1_COMPA_vect)<br />        {<br />                               static uint8_t pwm_LED = 0;<br /><br />                               if(pwm_LED &gt; pwm_zadane){ PORTB |= (1&lt;&lt;PB0)|(1&lt;&lt;PB1);} // wył. wyswietlacz<br /><br />                               else{<br />                               PORTD = 0xFF; // zeruj segmenty<br />                         if(1==wysw){<br /><br />                               PORTB=0b11111110;   //wł pierwszy wyświetlacz<br />                               PORTD=cyfra&#91;0&#93;;<br />                               wysw ++;<br />                          }<br /><br />                         else{<br /><br />                               PORTB=0b11111101;   //wł drugi wyświetlacz<br />                               PORTD=cyfra&#91;1&#93;;<br />                               wysw=1;<br />                         }<br />                               }<br />                               pwm_LED ++;<br />                               if(0 ==pwm_LED){ pwm_zadane ++;} // prawie płynne rozjaśnianie<br /><br />       }[/syntax]<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 4 cze 2016, o 09:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jokerpik]]></name></author>
<updated>2016-06-04T08:38:47+01:00</updated>
<published>2016-06-04T08:38:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161629#p161629</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161629#p161629"/>
<title type="html"><![CDATA[Re: Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161629#p161629"><![CDATA[
Dziękuje bardzo za odpowiedź . Niestety program nie działa. Wyświetla się tylko liczba 2 na drugim wyświetlaczu, której zakres świecenia nie da się zmienić (oczywiście wpisywałem różne zakresy regulacji)  ;/Nie zrozumiałem tylko jak mam przyspieszyć przerwanie x255. Ustawiłem OCR0 =255 i tez nic nie zmieniło.  Bardzo proszę o dalszą pomoc !! <br /><br />Pozdrawiam !<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14139">jokerpik</a> — 4 cze 2016, o 08:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-06-03T19:44:33+01:00</updated>
<published>2016-06-03T19:44:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161619#p161619</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161619#p161619"/>
<title type="html"><![CDATA[Re: Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161619#p161619"><![CDATA[
[syntax=c]ISR(TIMER0_COMP_vect)<br />        {<br />static uint8_t pwm_LED = 0;<br /><br />if(pwm_LED &gt; pwm_zadane){ PORTB |= (1&lt;&lt;PB0)|(1&lt;&lt;PB1);}<br /><br />else{<br />                  if(1==wysw){<br />                   <br />                        PORTB=0b11111110;   //wł pierwszy wyświetlacz<br />                        PORTC=cyfra&#91;0&#93;;<br />                        wysw++;<br />                   }<br />   <br />                  else{<br />                  <br />                        PORTB=0b11111101;   //wł drugi wyświetlacz<br />                        PORTC=cyfra&#91;1&#93;;<br />                        wysw=1;<br />                  }<br />}<br />pwm_LED ++;<br />       <br />}[/syntax]<br />tylko na początku zdefiniuj <br />[syntax=c]volatile uint8_t pwm_zadane = //ileś_tam - zakres regulacji świecenia( od zera do 255 )[/syntax]<br />no i przyśpiesz przerwanie x255 ( a może nie trzeba ).<br />Nie udzielam gwarancji - masz czas to przetestuj  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 3 cze 2016, o 19:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jokerpik]]></name></author>
<updated>2016-06-03T16:41:49+01:00</updated>
<published>2016-06-03T16:41:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161598#p161598</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161598#p161598"/>
<title type="html"><![CDATA[Re: Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161598#p161598"><![CDATA[
No dobrze to do poprawy mam ten warunek i dzielenie przez wartość zmiennoprzecinkową . Ale czy jest ktos w stanie dopisać to co trzeba aby program zadziałał tak jak o to prosiłem, na pewno dla specjalistów to zaden problem , a ja borykam się od dawna.<br /><br />Z góry bardzo dziękuje!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14139">jokerpik</a> — 3 cze 2016, o 16:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-06-03T16:13:21+01:00</updated>
<published>2016-06-03T16:13:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161594#p161594</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161594#p161594"/>
<title type="html"><![CDATA[Re: Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161594#p161594"><![CDATA[
kilka uwag:<br /><br />1. paskudnie definiujesz pracę timerów, wszystko w jednej linii - nie wiadomo co robisz , brak komentarzy (napisz ładnie dla każdego timera oddzielnie konfigurację i każdą linię opisz kometarzem<br /><br />2. spróbuj wyjaśnić co to jest?<br /><br />[syntax=c]if (1) {<br />      OCR2=A/4.02;<br />}[/syntax]<br /><br />nie dość że warunek ZAWSZE spełniony to po co on ? to jeszcze dzielisz liczbę całkowitą przez ? ... przez zmiennoprzecinkową stałą dosłowną 4.02 ??? i czego się spodziewasz po tym obliczeniu ?<br /><br />3. po jaki gwincik korzystasz z typów unsigned int zamiast jak należy się w AVR GCC uint16_t ?<br /><br />wszystko to razem wzięte powoduje , że program nie tylko przestaje być czytelny dla innych ale ciężko w ogóle szukać w nim błędu albo domyślać się o co chodziło autorowi<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 cze 2016, o 16:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jokerpik]]></name></author>
<updated>2016-06-03T17:50:31+01:00</updated>
<published>2016-06-03T15:43:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161588#p161588</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161588#p161588"/>
<title type="html"><![CDATA[Problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15515&amp;p=161588#p161588"><![CDATA[
Witam. <br />Mam następujący problem. Zmultipleksowalem dwa 7-segmentowe wyświetlacze led , którymi steruje za pomocą tranzystorów i wyswietlam dwie inne cyfry. Dotychczas sterowałem wypełnieniem pwm na bazę trzeciego tranzystora za pomocą portu OC2 , który dawał napięcie dwóm pozostałym .<br />Chciał bym sterować jasnością tak aby korzystać tylko z 2 tranzystorów, a nie jak w moim przypadku z 3. <br />Korzystam z Atmega32.<br /><br />Poniżej znajduje się mój aktualny listing programu. <br />Bardzo bym prosił o przerobienie kodu, zgodnie z tym co chciał bym osiągnąć<br /><br />[syntax=c]* Projekt.c<br /> *<br /> * Created: 2016-05-31 18:50:07<br /> *  Author: joker_000<br /> */ <br /><br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /><br />unsigned int cyfra&#91;2&#93;={0b11110010,0b00100101 }; // 1. oraz 2<br />unsigned int i,wysw,A;<br /><br /><br />int main(void)<br />{<br /><br />DDRD=0xFF;<br />DDRB=0xFF;   <br />DDRC=0xFF;   <br /><br /><br /><br /><br />TCCR2=(1&lt;&lt;WGM20)|(1&lt;&lt;WGM21) // Tryb szybki PWM<br />        |(1&lt;&lt;CS22)|(1&lt;&lt;CS00)  /// flck/1024<br />        |(1&lt;&lt;COM20)|(1&lt;&lt;COM21);// Ustaw stan OCn przy zgodności OCRn i TCNTn<br /><br />TCCR0 = 0x0d;   // tryb CTC , podzial przez 1024<br />OCR0=90;// okres ok. 5ms przy 16MHz/1024<br />//zezwolenie na przerwania dla CTC<br /><br />TIMSK=(1 &lt;&lt; OCIE0)|(1&lt;&lt;TOIE2)|(1&lt;&lt;TOIE0);<br /><br /> sei();<br /><br />ADMUX  =  (1&lt;&lt;REFS1) | (1&lt;&lt;REFS0)|(1&lt;&lt;MUX2) | (1&lt;&lt;MUX0); //REFS1:0: Reference Selection Bits<br />//Internal 2.56V Voltage Reference with external capacitor at AREF pin<br />//Input Channel Selections ADC5<br /><br />ADCSRA = (1&lt;&lt;ADEN) |(1&lt;&lt;ADPS0)|(1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS2);//ADEN=1 włączenie przetwornika ADC)<br />//ustawienie preskalera na 128<br /><br />DDRA &amp;=~ (1&lt;&lt;PA5); //Ustawienie Wejścia ADC<br /><br />for (;;)<br /><br />{<br />ADCSRA |= (1 &lt;&lt; ADSC);//ADSC: Uruchomienie pojedynczej konwersji   // <br />while (ADCSRA &amp; (1 &lt;&lt; ADSC)); //czeka na zakończenie konwersji<br />A = ADC; // odczytujemy wynik<br />}<br /><br />}<br /><br /><br />ISR(TIMER2_OVF_vect)<br />{<br /><br />OCR2=A/4;<br /><br /><br />}<br /><br /><br />ISR(TIMER0_COMP_vect)<br />{<br />if(wysw==1)<br />{<br />PORTB=0b11111110;   //wł pierwszy wyświetlacz<br />PORTC=cyfra&#91;0&#93;;<br />wysw++;<br />}<br />else<br />{<br />PORTB=0b11111101;   //wł drugi wyświetlacz<br />PORTC=cyfra&#91;1&#93;;<br />wysw=1;<br />}<br /><br />}[/syntax]<br /><br />Piszę tutaj po raz pierwszy, więc proszę o wyrozumiałość. <br />Z góry dziękuje !!!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14139">jokerpik</a> — 3 cze 2016, o 15:43</p><hr />
]]></content>
</entry>
</feed>