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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-12-10T18:28:28+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=18090&amp;mode</id>
<entry>
<author><name><![CDATA[Tomek1955]]></name></author>
<updated>2017-12-10T18:28:28+01:00</updated>
<published>2017-12-10T18:28:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=200312#p200312</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=200312#p200312"/>
<title type="html"><![CDATA[Re: PWM i multipleksowanie problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=200312#p200312"><![CDATA[
Co prawda dyskusja w temacie już się dość dawno skończyła, ale mimo to postanowiłem zabrać głos. Może mój pomysł komuś się przyda.<br />Otóż robię zegar, w którym potrzebny jest duży wyświetlacz. Ponieważ każdy segment tego wyświetlacza zawiera 3 szeregowo połączone diody, do zasilania niezbędne jest napięcie większe od 5 V. Z tego powodu segmenty sterowane są przez układ ULN2803, a anody przez parę tranzystorów npn i pnp. Stąd biorą się z pozoru &quot;dziwne&quot; sygnały włączające anody i segmenty. W obu przypadkach są to stany wysokie H. Przy próbach, podobnie jak u Kolegi, wystąpił problem migania cyfr przy regulacji jasności. Oczywiste jest, że niezbędna jest synchronizacja PWM i przełączania cyfr. Zrobiłem tak, ale to niewiele dało, gdy PWM był tylko czterokrotnie szybszy od przełączania. W związku z tym wpadłem na pomysł, który widać w załączonym kodzie. <br />Każda cyfra załączona jest przez 4 kolejne cykle przerwania i w zależności od wartości zmiennej bright jest odpowiednio wcześniej wyłączana. W ten sposób uzyskałem 4 poziomy jasności wyświetlacza. Próbowałem zrobić w ten sam sposób 8 poziomów jasności, lecz wymagałoby to jeszcze dwukrotnego zwiększenia częstotliwości występowania przerwania. Działo mi to dobrze, ale nieco obawiałem się, że nie pozostawię już prockowi czasu na wykonanie innych zadań i pozostałem przy 4 poziomach.<br /><br /><br />[syntax=c]const char digit&#91;&#93; PROGMEM = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};  //zamiana cyfry na kod 7 segmentowy<br />volatile uint8_t h10,h1,m10,m1;       // odpowiednio dziesiątki, jednostki godzin,dziesiątki, jednostki minut<br />volatile uint8_t bright;   //jasność świecenia wyświetlacza, może zmieniać się od 0 do3<br /><br />//konfiguracja timera multipleksowania<br />//taktowanie 8MHz, preskaler 1024, OCR0A=10, co daje częstotliwość występowania przerwania 781Hz<br />TCCR0A |= ( 1 &lt;&lt; WGM01 );<br />    TCCR0B |= ( 1 &lt;&lt; CS00 ) | ( 1 &lt;&lt; CS02 );<br />    OCR0A = 10;<br />    TIMSK0 |= ( 1 &lt;&lt; OCIE0A );<br /><br />//wyświetlacz ze wspólną anodą, anody włączane stanem H na na 4 młodszych pinach PORTC<br />//segmenty włączane stanem H na 7 młodszych pinach PORTD<br /><br />ISR( TIMER0_COMPA_vect ) {                           //wyświetlanie na LED czasu<br />    static uint8_t cnt = 0;<br /><br />    if ( cnt &gt;= 0 &amp;&amp; cnt &lt; 4 ) {<br />        PORTC = ( PORTC &amp; 0xF0 ) | (( 0x01 ) );<br />        dig_cnt = m1;<br />        if ( cnt &gt; bright ) PORTC = ( PORTC &amp; 0xF0 ) &amp; ~0x01;<br />    }<br /><br />    if ( cnt &gt;= 4 &amp;&amp; cnt &lt; 8 ) {<br />        PORTC = ( PORTC &amp; 0xF0 ) | (( 0x2 ) );<br />        dig_cnt = m10;<br />        if ( cnt &gt; ( bright + 4 ) )    PORTC = ( PORTC &amp; 0xF0 ) &amp; ~0x02;<br />    }<br /><br />    if ( cnt &gt;= 8 &amp;&amp; cnt &lt; 12 ) {<br />        PORTC = ( PORTC &amp; 0xF0 ) | (( 0x4 ) );<br />        dig_cnt = h1;<br />        if ( cnt &gt; ( bright + 8 ) )    PORTC = ( PORTC &amp; 0xF0 ) &amp; ~0x04;<br />    }<br /><br />    if ( cnt &gt;= 12 &amp;&amp; cnt &lt; 16 ) {<br />        PORTC = ( PORTC &amp; 0xF0 ) | (( 0x8 ) );<br />        dig_cnt = h10;<br />        if ( cnt &gt; ( bright + 12 ) )    PORTC = ( PORTC &amp; 0xF0 ) &amp; ~0x08;<br />    }<br /><br />    PORTD = ( PORTD &amp; 0x80 ) | ( pgm_read_byte( &amp;digit&#91;dig_cnt&#93; ) );<br /><br />    cnt++;<br />    if ( cnt &gt; 15 ) cnt = 0;<br />}[/syntax]<br /><br />Obecnie zmieniłem jeszcze sposób sterowania wyświetlacza. Zastosowałem dekoder BCD na 7 segment CD4511 i w związku z tym oszczędziłem 3 piny procka. Do wyświetlacza muszę przesłać teraz tylko 4 bity cyfry, a nie wszystkie 7 segmentów i, oczywiście, sterowanie anodami.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11980">Tomek1955</a> — 10 gru 2017, o 18:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2017-04-11T17:35:46+01:00</updated>
<published>2017-04-11T17:35:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186907#p186907</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186907#p186907"/>
<title type="html"><![CDATA[Re: PWM i multipleksowanie problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186907#p186907"><![CDATA[
<div class="quotetitle">ATuser napisał(a):</div><div class="quotecontent"><br />[syntax=c]TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);           // preskaler = 1024[/syntax]<br /></div><br />O ile się nie mylę to dla ATmega128 (takiego mikrokontrolera zdaje się używasz) to raczej będzie preskaler 128. Przy OCR0=5 przerwanie masz co 640 taktów, czyli częstotliwość ponad 20kHz. Moim zdaniem 1kHz powinien w zupełności wystarczyć.<br /><br />EDIT: Z pośpiechu pomyliłem się w obliczeniach. 128 należy pomnożyć przez 6, a nie przez 5, więc przerwanie będzie oczywiście co 768 taktów <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><div class="quotetitle">ATuser napisał(a):</div><div class="quotecontent"><br />[syntax=c]if(licznik==1)         PORTA = 0b11111110, PORTB = ~liczba_LED&#91;a&#93;;[/syntax]<br /></div><br />Przełączasz anodę bezpośrednio w momencie, kiedy na PORTB masz jeszcze poprzednią cyfrę, a odstęp pomiędzy instrukcjami to 62,5ns. Tranzystor sterujący anodami ma swoją pojemność i raczej nie zdąży wejść w tym czasie w stan wysokiej impedancji.<br />Zrób porządnie to, o czym pisał kolega <strong>kicajek</strong>, czyli coś w stylu:[syntax=c]if(licznik==1) {<br />    PORTA = 0b11111111;<br />    // tutaj dobrze dać opóźnienie dobrane doświadczalnie,<br />    // zależne od zastosowanego tranzystora (może nawet rzędu 1us)<br />    PORTB = ~liczba_LED&#91;a&#93;;<br />    PORTA = 0b11111110;<br />}[/syntax]<br />Zmniejsz też częstotliwość multipleksowania do ok. 1kHz i powinno być OK.<br /><br /><div class="quotetitle">ATuser napisał(a):</div><div class="quotecontent"><br />Jak zmienię w multipleksowaniu OCR0=40 to świecenie jest już dużo mniejsze tak może z 1-2% i to już tak nie widać i trzeba się przyjrzeć uważnie i jest to do zaakceptowania.<br /></div><br />To naturalne. Przy mniejszej częstotliwości multipleksowania stosunek czasu &quot;prześwitywania&quot; do czasu poprawnego świecenia będzie coraz mniejszy, czyli efekt będzie mniej widoczny.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 11 kwi 2017, o 17:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Arek1111111111]]></name></author>
<updated>2017-04-11T16:53:15+01:00</updated>
<published>2017-04-11T16:53:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186904#p186904</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186904#p186904"/>
<title type="html"><![CDATA[Re: PWM i multipleksowanie problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186904#p186904"><![CDATA[
zwolnij częstotliwość multipleksowania tak aby przerwanie odbywało się np. co 500 ms, możesz też powstawiać dodatkowe opóźnienia, wtedy gołym okiem zobaczysz co może być nie tak, że np. kolejne się zapalają zanim poprzednie się wygaszą.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3349">Arek1111111111</a> — 11 kwi 2017, o 16:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ATuser]]></name></author>
<updated>2017-04-11T16:32:24+01:00</updated>
<published>2017-04-11T16:32:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186900#p186900</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186900#p186900"/>
<title type="html"><![CDATA[Re: PWM i multipleksowanie problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186900#p186900"><![CDATA[
Witam, na 4 krokach pogorszyło się. Jest gorzej niestety. Nie mam oscyloskopu żeby zobaczyć co się dzieje w danych miejscach że im szybciej multipleksuje tym pojawiają się duszki. <br />Zastanawiam się czy jakieś Drivery ULN 2803 czy UDN mogły by to wyeliminować. Albo wysłanie przez SPI i to właśnie też przetestuję bo nie poddam się dopóki dopóty nie rozwiąże tego problemu choćby z czystej ciekawości. Więc drodzy Panowie będę tutaj próbował swoich sił możliwości.<br />Jeżeli ktoś będzie miał jakiś pomysł to chętnie wysłucham i przetestuję. <br /><br />Na dniach postaram się wrzucić cały schemat układu jak i więcej kodu może ktoś gdzieś coś zauważy.<br />Dziękuję za pomoc.<br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2900">ATuser</a> — 11 kwi 2017, o 16:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2017-04-11T12:14:00+01:00</updated>
<published>2017-04-11T12:14:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186872#p186872</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186872#p186872"/>
<title type="html"><![CDATA[Re: PWM i multipleksowanie problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186872#p186872"><![CDATA[
Witam<br />To w takim razie &quot;nie każ&quot; tym 5 do 8 dublować 1-4; wykasuj tamte wyświetlania.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 11 kwi 2017, o 12:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ATuser]]></name></author>
<updated>2017-04-11T11:11:28+01:00</updated>
<published>2017-04-11T11:11:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186867#p186867</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186867#p186867"/>
<title type="html"><![CDATA[Re: PWM i multipleksowanie problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186867#p186867"><![CDATA[
Witam,<br />Tak jest osiem liczb dla kolejnych 4 wyświetlaczy które nie są podłączone. Tak żeby np. wyświetlać osobno temperaturę czy inne dane. <br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2900">ATuser</a> — 11 kwi 2017, o 11:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2017-04-11T06:42:32+01:00</updated>
<published>2017-04-11T06:42:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186852#p186852</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186852#p186852"/>
<title type="html"><![CDATA[Re: PWM i multipleksowanie problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186852#p186852"><![CDATA[
<div class="quotetitle">kicajek napisał(a):</div><div class="quotecontent"><br />Masz troszkę nietypowe sterowanie wyświetlaczem - po pierwsze dlaczego osiem liczb dla czterech wyświetlaczy?<br /></div><br />ew. rozbudowa?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 11 kwi 2017, o 06:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ATuser]]></name></author>
<updated>2017-04-10T22:00:20+01:00</updated>
<published>2017-04-10T22:00:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186845#p186845</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186845#p186845"/>
<title type="html"><![CDATA[Re: PWM i multipleksowanie problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186845#p186845"><![CDATA[
Witam, dziękuję za odpowiedź. Niestety to nie pomogło.<br />Zrobiłem jak kolega opisał dodałem kroki do licznika przerwania i jest delikatna poprawa. Ale to samo uzyskałem 2 krokach na wyświetlacz<br />1. Zgaś anodę i zgaś cyfrę<br />2. Zapal cyfrę i anodę.<br />Więc czy trzy kroki czy dwa jest podobnie. W akcie desperacji rozbudowałem sekcje licznika przerwania do nawet 16 kroków gdzie 4 kroki były od 1 wyświetlacza cyfry.<br />Próbowałem tez z tranzystorami na wyjściu (npn) BC817 , Darlington oraz BC547 na wszystkich jest to samo. Mało tego mam 5 identycznych płytek i na wszystkich jest to samo a wszędzie są różne diody wyświetlacza. <br />Segmenty, które nie powinny się świecić, świeca teraz z mocą tak 7-9% ale to widać jeszcze. <br />Myślałem, że może jakieś rezystory do bazy tranzystorów, aby trochę wytłumić te przebicia cyfr. W sumie to może nic nie dać.<br />Jak zmienię w multipleksowaniu OCR0=40 to świecenie jest już dużo mniejsze tak może z 1-2% i to już tak nie widać i trzeba się przyjrzeć uważnie i jest to do zaakceptowania.<br />Może jeszcze jakieś inne rozwiązanie?<br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2900">ATuser</a> — 10 kwi 2017, o 22:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2017-04-08T15:20:33+01:00</updated>
<published>2017-04-08T15:20:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186630#p186630</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186630#p186630"/>
<title type="html"><![CDATA[Re: PWM i multipleksowanie problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186630#p186630"><![CDATA[
Witam<br />Masz troszkę nietypowe sterowanie wyświetlaczem - po pierwsze dlaczego osiem liczb dla czterech wyświetlaczy?<br /><div class="quotetitle">riddik napisał(a):</div><div class="quotecontent"><br />Rozdziel gaszenie i zapalanie kolejnego wyświetlacza.<br /></div><br />Koledze chodziło o to, że sterowanie powinno wyglądać tak:<br />1.ANODY zgaszone<br />2.ustaw liczbę na dany wyświetlacz<br />3.&quot;zapal&quot; anodę danego wyśw.<br />1. ...<br />To wygaszenie pozwala na uniknięcie duszków.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 8 kwi 2017, o 15:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ATuser]]></name></author>
<updated>2017-04-07T23:32:00+01:00</updated>
<published>2017-04-07T23:07:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186590#p186590</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186590#p186590"/>
<title type="html"><![CDATA[Re: PWM i multipleksowanie problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186590#p186590"><![CDATA[
Witam, proszę bardzo.<br /><br />[syntax=c]//Tablica<br />volatile unsigned char liczba_LED&#91;12&#93; = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0xFF, 0x1e}; // zmienna znaków wyświetlacza LED<br />//012345     6     7     8     9     off   stopnia<br /><br />//USTAWIENIA TIMERÓW<br />// ustawienie TIMER0 - do wyświetlaczy LED <br />TCCR0 |= (1&lt;&lt;WGM01);// tryb CTC<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);// preskaler = 1024<br />OCR0 = 5;// dodatkowy podział przez 39 (rej. przepełnienia)<br />TIMSK |= (1&lt;&lt;OCIE0);// zezwolenie na przerwanie CompareMatch<br /><br /><br />// ustawienia TIMER2 w tryb CTC  PWM<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb  CTC<br />TCCR2 |= (1&lt;&lt;CS20);// preskaler = 1<br />OCR2 = 199;// dodatkowy podział częstotliwości przez 200<br />TIMSK |= (1&lt;&lt;OCIE2);// zezwolenie na przerwanie CompareMatch<br /><br /><br />// PRZERWANIE MATRIX WYŚWIETLACZA<br />ISR(TIMER0_COMP_vect) {<br /><br /><br /> static uint16_t licznik=1;// zmienna do przełączania kolejno anod i danych<br /><br />if(licznik==1)        PORTA = 0b11111110, PORTB = ~liczba_LED&#91;a&#93;; <br />else if(licznik==2)     PORTA = 0b11111101, PORTB = ~liczba_LED&#91;b&#93;; <br />else if(licznik==4)     PORTA = 0b11111011, PORTB = ~liczba_LED&#91;c&#93;; <br />else if(licznik==8)     PORTA = 0b11110111, PORTB = ~liczba_LED&#91;d&#93;; <br />else if(licznik==16)   PORTA = 0b11111110, PORTB = ~liczba_LED&#91;a&#93;; <br />else if(licznik==32)   PORTA = 0b11111101, PORTB = ~liczba_LED&#91;b&#93;; <br />else if(licznik==64)   PORTA = 0b11111011, PORTB = ~liczba_LED&#91;c&#93;;<br />else if(licznik==128) PORTA = 0b11110111, PORTB = ~liczba_LED&#91;d&#93;; <br /><br />//operacje cyklicznego przesuwania bitu zapalającego anody w zmiennej licznik<br /><br />licznik &lt;&lt;= 1;// przesunięcie zawartości bitów licznika o 1 w lewo<br />if(licznik&gt;128) licznik = 1;// jeśli licznik większy niż 8 to ustaw na 1<br />} // koniec przerwania<br /><br />// Procedura obsługi przerwania Compare Match Timera2<br />ISR( TIMER2_COMP_vect )<br />{<br />static uint8_t cnt1; // definicja naszego licznika PWM<br /><br />// bezpośrednie sterowanie wyjściami kanałów PWM<br />if(cnt1&gt;=pwm1) PORTD |= (1&lt;&lt;PD7); else PORTD &amp;= ~(1&lt;&lt;PD7);<br />cnt1++;// zwiększanie licznika o 1<br />}//koniec przerwania[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2900">ATuser</a> — 7 kwi 2017, o 23:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2017-04-07T21:29:22+01:00</updated>
<published>2017-04-07T21:29:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186583#p186583</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186583#p186583"/>
<title type="html"><![CDATA[Re: PWM i multipleksowanie problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186583#p186583"><![CDATA[
Witam<br />Duszki powstają wtedy, gdy na forum króluje kod widmo - może kolega pokaże przynajmniej obsługę przerwań bo teraz to raczej do egzorcysty... <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 7 kwi 2017, o 21:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ATuser]]></name></author>
<updated>2017-04-07T20:17:49+01:00</updated>
<published>2017-04-07T20:17:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186564#p186564</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186564#p186564"/>
<title type="html"><![CDATA[Re: PWM i multipleksowanie problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186564#p186564"><![CDATA[
Witam,<br />na początku miałem tak:<br /><br />[syntax=jezyk c]<br />Porta:<br />11111110<br />11111101<br />11111011<br />11110111<br />11111110<br />11111101<br />11111011<br />11110111<br /><br />// propozycja rozdzielenia od kolegi Riddik czyli zgaś potem zapal<br /><br />11111111<br />11111110<br />11111111<br />11111101<br />11111111<br />11111011<br />11111111<br />11110111<br /><br />// Zrobiłem też tak: <br /><br />11111111<br />11111111<br />11111111<br />11111111<br />11111110<br />11111101<br />11111011<br />11110111<br /><br />[/syntax]<br /><br />Nic się nie zmienia dalej mam duchy. Chyba że nie zrozumiałem co kolega riddik miał na myśli.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2900">ATuser</a> — 7 kwi 2017, o 20:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Arek1111111111]]></name></author>
<updated>2017-04-07T15:25:59+01:00</updated>
<published>2017-04-07T15:25:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186546#p186546</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186546#p186546"/>
<title type="html"><![CDATA[Re: PWM i multipleksowanie problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186546#p186546"><![CDATA[
Ja w swoim zegarku zwiększyłem częstotliwość multipleksowania dwukrotnie beż żadnej synchronizacji i nie da się zauważyć pulsowania<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3349">Arek1111111111</a> — 7 kwi 2017, o 15:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[riddik]]></name></author>
<updated>2017-04-07T15:19:36+01:00</updated>
<published>2017-04-07T15:19:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186545#p186545</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186545#p186545"/>
<title type="html"><![CDATA[Re: PWM i multipleksowanie problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186545#p186545"><![CDATA[
Rozdziel gaszenie i zapalanie kolejnego wyświetlacza. W procedurze multipleksowania zamiast gasić jeden wyświetlacz i od razu zapalać kolejny, zrób tylko gaszenie. Zapalanie zrób w kolejnych wywołaniach przerwania. Prawdopodobnie trzeba będzie zwiększyć częstotliwość wywołania przerwania ale w ten sposób możesz wysterować wypełnienie bez zaprzęgania kolejnego timera. Jest to nieco proteza ale da się uzyskać kilka stopni jasności. Można też zapalanie i gaszenie wyświetlaczy przenieść do pętli głównej a w przerwaniu stawiać tylko odpowiednie flagi ale jak wiadomo pętla główna może mieć różne czasy poszczególnych obiegów a co za tym idzie może świecić nierówno. Obsługa w przerwaniu chyba będzie lepsza.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16099">riddik</a> — 7 kwi 2017, o 15:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ATuser]]></name></author>
<updated>2017-04-07T13:34:21+01:00</updated>
<published>2017-04-07T13:34:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186532#p186532</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186532#p186532"/>
<title type="html"><![CDATA[Re: PWM i multipleksowanie problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186532#p186532"><![CDATA[
Witam, dziękuję za odpowiedź.<br />Mam 16Mhz jest jeszcze przerwanie INT3 z układu zegara. To raczej nie koliduję.<br />Zmieniłem tak na szybko OCR0 w TIMER0 i pulsowanie jest znikome czyli można to dopracować po wyliczeniu jak pisał kolega ZOOM.<br />Jednak im szybciej ustawiam multipleksowanie to pojawił się nowy problem z segmentami wyświetlacza. Te segmenty które nie powinny świecić, świecą się delikatnie tak z 30% jasności. Czyli jak mam pełną jasność CYFR to delikatnie świeca się segmenty które powinny być zgaszone. <br />Czyli taki efekt duchów z innych cyfr. Zmniejszając multipleksowanie w OCR0 TIMER0 tego efektu nie ma. <br />Jak to wyeliminować?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2900">ATuser</a> — 7 kwi 2017, o 13:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[worner]]></name></author>
<updated>2017-04-07T13:17:49+01:00</updated>
<published>2017-04-07T13:17:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186530#p186530</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186530#p186530"/>
<title type="html"><![CDATA[Re: PWM i multipleksowanie problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186530#p186530"><![CDATA[
Musisz jeszcze podać, z jaką częstotliwością napędzany jest mikrokontroler, bo bez tego nie da się obliczyć podziału i ostatecznej końcowej częstotliwości przerwań.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=150">worner</a> — 7 kwi 2017, o 13:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ATuser]]></name></author>
<updated>2017-04-07T12:35:39+01:00</updated>
<published>2017-04-07T12:35:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186521#p186521</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186521#p186521"/>
<title type="html"><![CDATA[Re: PWM i multipleksowanie problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186521#p186521"><![CDATA[
Witam, ustawienia Timerów mam tak:<br /><br />[syntax=c]// ustawienie TIMER0 - multipleksowanie<br />TCCR0 |= (1&lt;&lt;WGM01);// tryb CTC<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);// preskaler = 1024<br />OCR0 = 100;// podział przez 39 (rej. przepełnienia)<br />TIMSK |= (1&lt;&lt;OCIE0);// zezwolenie na przerwanie CompareMatch<br /><br />// ustawienia TIMER2 w tryb CTC  PWM do regulacji jasności.<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb  CTC<br />TCCR2 |= (1&lt;&lt;CS20);// preskaler = 1<br />OCR2 = 199;// dodatkowy podział częstotliwości przez 200<br />TIMSK |= (1&lt;&lt;OCIE2);// zezwolenie na przerwanie CompareMatch&#91;/code&#93;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2900">ATuser</a> — 7 kwi 2017, o 12:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zoom]]></name></author>
<updated>2017-04-07T12:25:39+01:00</updated>
<published>2017-04-07T12:25:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186518#p186518</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186518#p186518"/>
<title type="html"><![CDATA[Re: PWM i multipleksowanie problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186518#p186518"><![CDATA[
Musisz mieć synchronizację między PWM a multipleksowaniem. Czyli jeśli częstotliwość PWM to 100Hz, to multipleksować musisz o wielokrotność, np. 400Hz - czyli PWM i multipleksacja musi być synchroniczna, w rytm wspólnego zegara.<br />Może powiedz jakie masz częstotliwości PWM i multipleksacji.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=685">zoom</a> — 7 kwi 2017, o 12:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ATuser]]></name></author>
<updated>2017-04-07T12:09:07+01:00</updated>
<published>2017-04-07T12:09:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186516#p186516</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186516#p186516"/>
<title type="html"><![CDATA[PWM i multipleksowanie problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18090&amp;p=186516#p186516"><![CDATA[
Witam, mam pytanie do kolegów. Co może być przyczyną pulsowania cyfr w wyświetlaczu 7 segmentowym, które sterowane są Timer0 czyli multipleksowaniem. <br />Multipleksowanie działa bez problemu ale gdy wstawiłem regulacje jasności wyświetlanie za pomocą PWM  Timer2 z portu D do wejścia bazy tranzystora PNP widocznego na schemacie poglądowym regulacja nie działa prawidłowo. W maksymalnej jasności delikatnie widać pulsowanie ANODA1-ANODA4 natomiast, gdy ściemniam pwm im mniej światła tym pulsowanie jest coraz bardziej widoczne. W konsekwencji, gdy maksymalnie przyciemniam diody świecą mniejszą mocą, ale CYFRY pulsują od 1 do 4 i to bardzo widocznie. Czyli tak w trakcie sekundy zapałają sie wyświetlacze od 1 do 4<br />To wychodzi tak, że gdy przyciemniam pwm to przy okazji wpływam na multipleksowanie.<br />Podłączając stałe napięcie do tranzystorów ANOD wyświetlacza multipleksowanie działa super. Nic nie pulsuje i jest stałe wyświetlanie cyfr.  A jak do PWM podłęcze zwykła diodę ona sie ściemnia i nie widać na niej pulsowania. Czyli jakby osobno jest OK<br /><br />Dodam, że jest to układ zegara i działa od roku bez problemu jednak dodanie ściemniania było konieczne i wykorzystałem tranzystor jak na schemacie, ponieważ wykonałem juz płytkę i dodanie tranzystora było możliwością, jaka mi przyszła do głowy.<br />Procesor to atmega128 zegar kwarc 16Mhz<br />Wolny tylko jeden PIN z Portu D więc PWM jest programowy z książki BB tylko na jeden PIN.<br />Timer0 - multipleksowanie <br />Timer2 - PWM<br />Timer1 - sterowanie odbiorem IR<br /><br />Co może być przyczyną?<br />Dziękuję za udzieloną pomoc. Pozdrawiam<br /><br /><a href="https://obrazkiforum.atnel.pl/2900/fc9ef7948fd8f5b619fab77df0b7fb03.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/2900/fc9ef7948fd8f5b619fab77df0b7fb03.png" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2900">ATuser</a> — 7 kwi 2017, o 12:09</p><hr />
]]></content>
</entry>
</feed>