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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2020-05-01T22:45:52+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=23079&amp;mode</id>
<entry>
<author><name><![CDATA[43kuku]]></name></author>
<updated>2020-05-01T22:45:52+01:00</updated>
<published>2020-05-01T22:45:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23079&amp;p=226825#p226825</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23079&amp;p=226825#p226825"/>
<title type="html"><![CDATA[Re: Atmega i mostek L298]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23079&amp;p=226825#p226825"><![CDATA[
Może konstrukcja switch  . . .  Case<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3190">43kuku</a> — 1 maja 2020, o 22:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kaz K]]></name></author>
<updated>2020-05-01T12:27:09+01:00</updated>
<published>2020-05-01T12:27:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23079&amp;p=226809#p226809</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23079&amp;p=226809#p226809"/>
<title type="html"><![CDATA[Re: Atmega i mostek L298]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23079&amp;p=226809#p226809"><![CDATA[
Najprościej pod timer programowy podpiąć zmienną zliczającą sekundy i porównywać z zadaną warotścią.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20460">Kaz K</a> — 1 maja 2020, o 12:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[peter81j]]></name></author>
<updated>2020-04-30T21:35:51+01:00</updated>
<published>2020-04-30T21:35:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23079&amp;p=226797#p226797</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23079&amp;p=226797#p226797"/>
<title type="html"><![CDATA[Atmega i mostek L298]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23079&amp;p=226797#p226797"><![CDATA[
Witam,<br /><br />Po dlugiej nieobecosci wrocilem do programowania i napisalem sobie taki oto programik do obslugi mostka L298 .<br /><br />Kod dziala tylko moze mi ktos podpowie jak wykorzystac timer programowy zeby o zadanych sekundach wykonywala sie inna funcja .<br /><br />narazie uzywam delay,one blokuja procka i chialbym sie ich pozbyc <br /><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 />/* przydatne definicje pinów sterujących */<br />#define WE_A PB0<br />#define WE_B PB1<br /><br />volatile uint16_t pwm1;<br /><br />volatile uint8_t s1_flag;// flaga tyknicia Timera co 1 sekunde<br />volatile uint8_t s2_flag;<br />volatile uint8_t sekundy;// licznik sekund 0-59<br />volatile uint8_t minuty;<br />volatile uint8_t godziny;<br /><br /><br />/* definicje poleceń sterujących pracą silnika */<br />#define PRZOD PORTB  |= (1&lt;&lt;WE_B); PORTB &amp;= ~(1&lt;&lt;WE_A)<br />#define TYL PORTB  &amp;= ~(1&lt;&lt;WE_B); PORTB |= (1&lt;&lt;WE_A)<br />#define STOP PORTB  &amp;= ~(1&lt;&lt;WE_B); PORTB &amp;= ~(1&lt;&lt;WE_A)<br /><br />//led debug<br /><br />#define LED_PIN (1&lt;&lt;PC0)<br />#define LED_ON PORTC |= LED_PIN;// makrodefinicja wlaczenia LED - logiczne 1<br />#define LED_OFF PORTC &amp;= ~LED_PIN;<br /><br /><br />#define KEY1_PIN (1&lt;&lt;PD5)// definicja pinu KEY1<br />#define KEY2_PIN (1&lt;&lt;PD6)// definicja pinu KEY2<br />#define KEY3_PIN (1&lt;&lt;PD7)// definicja Pinu KEY3<br /><br />#define Sensor1 (1&lt;&lt;PD2)// definicja Pinu Czujnika 1<br />#define Sensor2 (1&lt;&lt;PD3)// definicja Pinu Czujnika 2<br /><br />uint8_t przycisk_wcisniety(uint8_t przycisk);// deklaracja funkcji<br /><br />uint8_t czujnik(uint8_t in);// deklaracja funkcji<br /><br /><br /><br /><br /><br /><br />int main(void) {<br /><br />DDRC |= LED_PIN;// kierunek pinu - wyjscie<br />PORTC &amp;= ~LED_PIN;<br /><br />        /* ustawiamy piny sterujące L293D jako wyjścia */<br />        DDRB |= (1&lt;&lt;WE_A) | (1&lt;&lt;WE_B);<br /><br />        // piny przyciskow - WEJSCIE<br />        DDRD &amp;= ~( KEY1_PIN | KEY2_PIN | KEY3_PIN | Sensor1 );<br /><br />        // podciagniecie pinow do VCC<br />        PORTD |= KEY1_PIN | KEY2_PIN | KEY3_PIN;<br /><br />        ////ustawien Timer1 dla F_CPU=16000000<br />        TCCR1B |= (1&lt;&lt;WGM12);// tyrb CTC<br />        TCCR1B |= (1&lt;&lt;CS12);// prescaler 256<br />        OCR1A = 625;// dodatkowy podzial przez 625<br />        TIMSK1 |= (1&lt;&lt;OCIE1A);// zezwolnie na przerwanie CompareMatch<br />        //// przerwanie wykonywanie z czestotliwoscia 100 razy na sekunde<br /><br /><br /><br /><br />        // ******* programowe PWM - 3 kanaly *******<br />        // Ustawiewnie pinow kanalow programowy PWM jako Wyjscia<br /><br />        DDRC |= (1&lt;&lt;PC3) | (1&lt;&lt;PC0);<br /><br />        // Ustawienie diod LEd podlaczonymi anodami do wyjsc<br /><br />//        PORTC &amp;= ~(1&lt;&lt;PC0)<br /><br />        // ustawienia Timera2 w tryb CTC<br /><br />        TCCR2A |= (1&lt;&lt;WGM21);// tryb CTC<br />        TCCR2B |= (1&lt;&lt;CS20);// preskaler = 1<br />        OCR2A = 200;// dodatkowy podzial czestotliwosci przez 200<br />        TIMSK2 |= (1&lt;&lt;OCIE2A);// zezwolenia na przerwanie ComparMatch<br /><br />        sei();// odblokowanie globalne przerwan<br />        uint16_t i;// definicja zmiennej i na potrzeby petli for()<br /><br />        while(1) {<br /><br /><br />        if(s2_flag){// spawdzenie flagi tyknieca Timer programowe co 1s<br /><br />        if ( 0 == (sekundy%2) ) LED_ON;<br />        if ( 1 == (sekundy%2) ) LED_OFF;<br /><br /><br /><br />        s2_flag = 0;// zerowanie flagi<br />        }<br /><br /><br />        if( przycisk_wcisniety( KEY1_PIN ) ){<br />        if((czujnik(Sensor1))&lt;1){<br /><br />        PRZOD;<br />        for (i=0;i&lt;511;i++)// rozjasnienie<br />            {<br />            //OCR0A=i;<br />            pwm1=i;<br />             _delay_ms(2);<br />            }<br />           // OCR0A=255;<br />            pwm1=511;<br /><br /><br />        _delay_ms(2500);<br /><br />         for(i=511;i;i--)// sciemnienie<br />            {<br />            //OCR0A=i;<br />            pwm1=i;<br />            _delay_ms(2);<br />            }<br />          //  OCR0A=0;<br />           pwm1=0;<br />         STOP;<br /><br />            }<br /><br /><br />        }<br /><br />        if((czujnik(Sensor2))&lt;1){<br />        if( przycisk_wcisniety( KEY2_PIN ) ) {<br /><br />        TYL;<br />        for (i=0;i&lt;511;i++)// rozjasnienie<br />          {<br />             //OCR0A=i;<br />             pwm1=i;<br />             _delay_ms(2);<br />           }<br />            // OCR0A=255;<br />              pwm1=511;<br /><br />              _delay_ms(2500);<br /><br />         for(i=511;i;i--)// sciemnienie<br />           {<br />            //OCR0A=i;<br />              pwm1=i;<br />              _delay_ms(2);<br />           }<br />            //  OCR0A=0;<br />              pwm1=0;<br /><br />        // _delay_ms(100);<br />         STOP;<br /><br />        }<br /><br />        }<br />        }<br />}<br /><br />//                TYL;<br />//                _delay_ms(5000);<br />//                STOP;<br />//                _delay_ms(1000);<br />//                PRZOD;<br />//_delay_ms(5000);<br /><br /><br /><br /><br /><br />// definicja funkcji<br />// funkcje posiada argument, zwraca 0 lub 1<br /><br />uint8_t przycisk_wcisniety(uint8_t przycisk)<br />{<br />if( !(PIND &amp; przycisk) )// przycisk wcisniety?<br />{<br />_delay_ms(80);// drganie stykow<br /><br />if ( !(PIND &amp; przycisk) ) return 1;<br />}<br /><br />return 0;<br /><br />}<br /><br />uint8_t czujnik(uint8_t in)<br />{<br />if ( !(PIND &amp; in) ) return 1;<br /><br />return 0;<br />}<br /><br />ISR(TIMER2_COMPA_vect)<br />{<br />static uint8_t cnt;// definicja naszego licznika<br /><br />// bezposrednie sterowanie wyjsciami PWM<br /><br />if(cnt&gt;=pwm1) PORTC &amp;= ~(1&lt;&lt;PC3); else PORTC |= (1&lt;&lt;PC3);<br /><br />cnt++;<br /><br />}<br /><br />//// procedura obslugi przewania czasu<br />ISR(TIMER1_COMPA_vect){<br /><br />static uint8_t cnt=0;// statyczna zmienna cnt do odlicznia setnych ms<br /><br />if(++cnt&gt;99){// gdy licznik ms &gt; 99 ( minela sekunda)<br />s1_flag=1;// ustaw flage tykniecia sekundy<br />s2_flag=1;<br />sekundy++;// zwiekszenie licznika sekund<br />if(sekundy&gt;59){<br />sekundy=0;// jesli sekundy &gt; 59 - wyzeruj<br />minuty++;<br />}<br />if(minuty&gt;59){// jesli minuty &gt; 59 - wyzeruj<br />minuty=0;<br />godziny++;<br />}<br />if(godziny&gt;23){// jesli godziny &gt; 23 - wyzeruj<br />godziny=0;<br />}<br />cnt=0;// zerowanie liczniki cnt<br />}<br />}[/syntax]<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1673">peter81j</a> — 30 kwi 2020, o 21:35</p><hr />
]]></content>
</entry>
</feed>