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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-10-12T08:35:38+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=21317&amp;mode</id>
<entry>
<author><name><![CDATA[paul_K]]></name></author>
<updated>2018-10-12T08:35:38+01:00</updated>
<published>2018-10-12T08:35:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21317&amp;p=212546#p212546</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21317&amp;p=212546#p212546"/>
<title type="html"><![CDATA[Re: PWM led przyciski]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21317&amp;p=212546#p212546"><![CDATA[
[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2010-04-05<br /> *       Autor: Mirosław Kardaś<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /><br />// definicje zmiennych do sterowania 6 kanałami programowych PWM<br />// zmienne typu uint8_t, rozdzielczość 8-bitowa<br />volatile uint8_t pwm1, pwm2, pwm3, pwm4, pwm5, pwm6;<br />#define KEY1(1&lt;&lt;PC3)<br />#define KEY2(1&lt;&lt;PC4)<br />static uint8_t cnt; // definicja naszego licznika PWM<br />// główna funkcja programu main()<br />int main(void)<br />{<br />//***** SPRZĘTOWY PWM - 1 KANAŁ OC0 (PB3) *******<br />// ustawienie końcówki OC0 (PB3) sprzętowy PWM jako WYJŚCIE<br /><br />// ustawienia TIMER2 w Fast PWM<br />TCCR0 |= (1&lt;&lt;WGM01)|(1&lt;&lt;WGM00);// tryb Fast PWM<br />TCCR0 |= (1&lt;&lt;COM01);// clear at TOP<br />TCCR0 |= (1&lt;&lt;CS00);// preskaler = 1<br />OCR0=255;// wygaszenie diody w kanale PWM<br /><br /><br />//***** PROGRAMOWY PWM - 6 KANAŁÓW *******<br />// ustawienie pinów kanałów programowych PWM jako WYJŚCIA<br />DDRC |= (1&lt;&lt;PC5)|(1&lt;&lt;PC6)|(1&lt;&lt;PC7);<br />//DDRD |= (1&lt;&lt;PD7)|(1&lt;&lt;PD6)|(1&lt;&lt;PD2);<br />// wyłączenie diod LED podłączonych katodami do wyjść<br />PORTC |= (1&lt;&lt;PC5)|(1&lt;&lt;PC6)|(1&lt;&lt;PC7);<br />//PORTD |= (1&lt;&lt;PD7)|(1&lt;&lt;PD6)|(1&lt;&lt;PD2);<br /><br />       <br />PORTC |= KEY1 | KEY2;<br /><br />// ustawienia TIMER2 w tryb CTC<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb  CTC<br />TCCR2 |= (1&lt;&lt;CS20);// preskaler = 1<br />OCR2 = 199;// dodatkowy podział częsttotliwości przez 200<br />TIMSK |= (1&lt;&lt;OCIE2);// zezwolenie na przerwanie CompareMatch<br /><br />sei();// odblokowanie globalne przerwań<br />uint8_t i;// definicja zmiennej i na potrzeby pętli for()<br /><br /><br />while(1)<br />{<br />if (!(PINC &amp; KEY1)){ // obsługa przycisku z drganiem styków<br />            _delay_ms(20);<br />            if (!(PINC &amp; KEY1))<br />            cnt++;<br />            }// koniec obsługi przycisku<br /><br />if (!(PINC &amp; KEY2)){ // obsługa przycisku z drganiem styków<br />            _delay_ms(20);<br />                if (!(PINC &amp; KEY2))<br />                cnt--;<br />            }// koniec obsługi przycisku<br /><br />}<br /><br />}<br /><br /><br />// ciało procedury obsługi przerwania Compare Match Timera2<br />ISR( TIMER2_COMP_vect )<br />{<br /><br /><br />// bezpośrednie sterowanie wyjściami kanałów PWM<br />if(cnt&gt;=pwm1) PORTC |= (1&lt;&lt;PC5); else PORTC &amp;= ~(1&lt;&lt;PC5);<br />if(cnt&gt;=pwm2) PORTC |= (1&lt;&lt;PC6); else PORTC &amp;= ~(1&lt;&lt;PC6);<br />if(cnt&gt;=pwm3) PORTC |= (1&lt;&lt;PC7); else PORTC &amp;= ~(1&lt;&lt;PC7);<br /><br /><br />// zwiększanie licznika o 1<br />}[/syntax]<br /><br />Tak na szybko przerobiony program z BB<br />Pozdrawim<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10166">paul_K</a> — 12 paź 2018, o 08:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2018-09-23T22:04:23+01:00</updated>
<published>2018-09-23T22:04:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21317&amp;p=211932#p211932</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21317&amp;p=211932#p211932"/>
<title type="html"><![CDATA[PWM led przyciski]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21317&amp;p=211932#p211932"><![CDATA[
Próbuje napisać program w ramach ćwiczeń do rozjaśniania i gaszenia led przyciskami tylko nie działa <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" />  proszę o wskazanie błędów i czy w ogóle idę w dobrą stronę<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /><br />#define KEY_JASNIEJ (1&lt;&lt;PB0)                    // przycisk PWM jaśniej<br />#define KEY_CIEMNIEJ (1&lt;&lt;PB1)                   // przycisk PWM ciemniej<br /><br />volatile uint8_t pwm1, pwm2, pwm3 ;<br /><br />uint8_t klawisz_wcisniety( uint8_t );<br /><br />int main( void ) {<br /><br />    // ---------|Ustawienia TIMER/COUNTER 2 (8 Bit)  - TRYB CTC   |--------------<br /><br />    TCCR2 |= ( 1 &lt;&lt; WGM21 );        // Timer/Counter 2 - tryb CTC<br />    TCCR2 |= ( 1 &lt;&lt; CS20 );         // Preskaler = 1<br />    TIMSK |= ( 1 &lt;&lt; OCIE2 );        // Zezwolenie na przerwanie Compare Match<br />    OCR2 = 0;<br />    // ----------------------------- KONIEC USTAWIEŃ TIMERA ----------------------------------------<br /><br />    DDRC |= ( 1 &lt;&lt; PC0 ) | ( 1 &lt;&lt; PC1 ) | ( 1 &lt;&lt; PC2 ) ; // ustawienie pinów portu c jako WYjscia<br />    PORTC |= ( 1 &lt;&lt; PC0 ) | ( 1 &lt;&lt; PC1 ) | ( 1 &lt;&lt; PC2 ) ;      // zgaś wszystkie diody<br /><br />    DDRB &amp;= ~(( 1 &lt;&lt; KEY_JASNIEJ ) | ( 1 &lt;&lt; KEY_CIEMNIEJ ) );      // micro-switch'e jako WEjścia<br />    PORTB |= ( 1 &lt;&lt; KEY_JASNIEJ ) | ( 1 &lt;&lt; KEY_CIEMNIEJ );         // podciągnięcie do VCC<br /><br />    sei();                                    //odblokowanie globalne przerwań<br />    uint8_t i = 0;                            //definicja zmiennej, która odpowiada za wartość pwm<br /><br />    while ( 1 ) {<br /><br /><br />        if ( klawisz_wcisniety( KEY_JASNIEJ ) ) {<br /><br />            pwm1 = i;<br />            pwm2 = i;<br />            pwm3 = i;<br /><br /><br />            if ( klawisz_wcisniety( KEY_JASNIEJ ) ) i++;<br />            _delay_ms( 1 );<br /><br />        }<br /><br />        if ( klawisz_wcisniety( KEY_CIEMNIEJ ) ) {<br /><br />            pwm1 = i;<br />            pwm2 = i;<br />            pwm3 = i;<br /><br /><br />            if ( klawisz_wcisniety( KEY_CIEMNIEJ ) )   i--;<br />            _delay_ms( 1 );<br />            <br />        }<br />    }<br /><br />}<br /><br />uint8_t klawisz_wcisniety( uint8_t klawisz ) {<br />    if ( !( PINB &amp; klawisz ) ) {<br />        _delay_ms( 80 );<br />        if ( !( PINB &amp; klawisz ) ) {<br />            return 1;<br />        }<br />    }<br /><br />    return 0;<br />}<br /><br />// ciało procedury przerwania ISR() Compare Match Timera2<br />ISR( TIMER2_COMP_vect ) {<br />    static uint8_t cnt; // zmienna cnt będzie zliczała od 0 do 255 (tak jak OCRx w sprzętowym Fast-PWM)<br /><br />    //bezpośrednie sterowanie wyjściami kanałów PWM<br />    if ( cnt &gt;= pwm1 ) PORTC |= ( 1 &lt;&lt; PC0 );<br />    else PORTC &amp;= ~( 1 &lt;&lt; PC0 );<br />    if ( cnt &gt;= pwm2 ) PORTC |= ( 1 &lt;&lt; PC1 );<br />    else PORTC &amp;= ~( 1 &lt;&lt; PC1 );<br />    if ( cnt &gt;= pwm3 ) PORTC |= ( 1 &lt;&lt; PC2 );<br />    else PORTC &amp;= ~( 1 &lt;&lt; PC2 );<br /><br />    cnt++;                                   //zwiększanie wartości cnt (0...255)<br />}[/syntax] <br />Poz.Darek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 23 wrz 2018, o 22:04</p><hr />
]]></content>
</entry>
</feed>