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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-07-27T16:36:36+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=3659&amp;mode</id>
<entry>
<author><name><![CDATA[LogTeam]]></name></author>
<updated>2013-07-27T16:36:36+01:00</updated>
<published>2013-07-27T16:36:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43587#p43587</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43587#p43587"/>
<title type="html"><![CDATA[Re: Sterowanie mostkiem L298]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43587#p43587"><![CDATA[
Dzięki GwynBelidD. Wgrałem kod i wygląda o wiele lepiej.<br /><br />Przyjechał do mnie użytkownik klonyyy. Wraz z nim i odrobiną pomocy Antego udaliśmy ruszyć silniki na pwm. Podłaczyliśmy OCR1 do Enable i było dobrze.<br />Teraz po powrocie z wakacji czeka mnie kolejna płytka bo posiadam złą bibliotekę od czujników KTIR. Wtedy już normalnie dam OCR1 do Enable (ścieżką)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=738">LogTeam</a> — 27 lip 2013, o 16:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[LogTeam]]></name></author>
<updated>2013-07-26T21:26:08+01:00</updated>
<published>2013-07-26T21:26:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43480#p43480</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43480#p43480"/>
<title type="html"><![CDATA[Re: Sterowanie mostkiem L298]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43480#p43480"><![CDATA[
Niestety nie mam jak wylutować scalaka.<br /><br />Co do zmiennych to już wszystkie wwaliłem do minisumo.c<br />Teraz w main.c wywala błędy przy ciele procedury obsługi timera.<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Multiple markers at this line<br />- each undeclared identifier is reported only once for each function it <br /> appears in<br />- 'pwmA' undeclared (first use in this function)<br /></div><br />Zmienne pwmA i pwmB dałem na samym początku minisumo.c<br />Dałem te zmienne do minisumo.h wraz ze słowem extern. Wtedy błędy znikły ale nie wiem czy to dlatego że dodałem słówo czy może dlatego że jest to w minisumo.h.<br />W pracy silników nic to nie zmieniło.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=738">LogTeam</a> — 26 lip 2013, o 21:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[LogTeam]]></name></author>
<updated>2013-07-26T19:57:28+01:00</updated>
<published>2013-07-26T19:57:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43461#p43461</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43461#p43461"/>
<title type="html"><![CDATA[Re: Sterowanie mostkiem L298]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43461#p43461"><![CDATA[
Poprawiłem kod i wkleiłem to co było w książce Mirka. <br />wygląda to teraz tak.<br /><br />[syntax=c]/*<br /> * minisumo.c<br /> *<br /> *  Created on: 25-07-2013<br /> *      Author: Kuba<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;minisumo.h&quot;<br /><br /><br />uint16_t pomiar( uint8_t kanal ) {<br /><br />ADMUX = (ADMUX &amp; 0b11111000) | kanal;<br /><br />ADCSRA |= (1&lt;&lt;ADSC);  // start konwersji<br /><br />while( ADCSRA &amp; (1&lt;&lt;ADSC) );<br /><br />return ADCH;<br />}<br /><br />uint8_t i=0;<br />uint8_t tab&#91;4&#93; = { 6, 5, 3, 0};<br />uint8_t a=0;<br />uint8_t b=0;<br />void zrob_pomiar (void)<br />{<br />    for(i=0; i&lt;4; i++)<br />    {<br />       wynik&#91;i&#93; = pomiar(tab&#91;i&#93;);<br />       _delay_ms (3);               //10ms zamienić na 13 cykli zegara<br />    }<br /><br />    for(i=4; i&lt;0; i--);<br />    {<br />    wynik&#91;i&#93; = pomiar(tab&#91;i&#93;);<br />        _delay_ms (3);              //10ms zamienić na 13 cykli zegara<br />    }<br />}<br /><br /><br /><br /><br />///////////////Funkcje sterujące silnikami///////////////////////////<br />void stop (void)<br />{<br />DCS_STOP;<br />}<br /><br />void obrot_linia (void)<br />{<br /><br />DCS_TYL;             //wycofanie się z lini<br />_delay_ms (100);<br /><br />DCS_OBROT;           //obracanie sie. Trzeba dobrać czas aby robot obracał się o około 180 stopni. Gdy po obróceniu się czunjiki nic nie wykryją robot zaczyna się krećić w poszukiwaniu przeciwnika.<br />    _delay_ms (500);     //Tryb agresywny nie zawiera obrot (); ale od razu atakuje &quot;na slepo&quot;<br />}<br /><br />void obrot (void)<br />{<br />    DCS_OBROT;<br />}<br /><br />void atakuj_lewo (void)<br />{<br />OCR0=a;<br />pwmA=a;<br />        pwmA=150;<br />DCS_PRZOOD;<br />}<br /><br />void atakuj_prawo (void)<br />{<br />    DCS_PRZOOD;<br />    //OCR0=b;<br />    //pwmB=b;<br />    //pwmB++;<br />}<br /><br />void atakuj (void)<br />{<br />    DCS_PRZOD;<br />}[/syntax]<br /><br /><br />[syntax=c]/*<br /> * minisumo.h<br /> *<br /> *  Created on: 25-07-2013<br /> *      Author: Kuba<br /> */<br /><br /><br /><br />#ifndef MINISUMO_H_<br />#define MINISUMO_H_<br /><br />#define REF_VCC (1&lt;&lt;REFS0)       //napięcie odniesienia ADC VCC<br /><br />volatile uint8_t pwmA, pwmB;                    //pwm od OCR1A<br /><br />uint8_t wynik&#91;4&#93;;<br /><br />/////////////Makra do czujników lini//////////////////<br /><br />#define White_line1 wynik&#91;1&#93;&gt;750<br />#define Black_line1 wynik&#91;1&#93;&lt;511<br /><br />#define White_line2 wynik&#91;2&#93;&gt;750<br />#define Black_line2 wynik&#91;2&#93;&lt;511<br /><br />#define White_line3 wynik&#91;3&#93;&gt;750<br />#define Black_line3 wynik&#91;3&#93;&lt;511<br /><br />#define White_line4 wynik&#91;4&#93;&gt;750<br />#define Black_line4 wynik&#91;4&#93;&lt;511<br /><br />////////////Makra do czujnikow podczerwieni Tsop//////////////////////////////<br />#define CZUJNIK1_PIN (1&lt;&lt;PC7)<br />#define CZUJNIK1 !(PINC &amp; CZUJNIK1_PIN)<br />#define CZUJNIK11 (PINC &amp; CZUJNIK1_PIN)<br /><br />#define CZUJNIK2_PIN (1&lt;&lt;PD3)<br />#define CZUJNIK2 !(PIND &amp; CZUJNIK2_PIN)<br />#define CZUJNIK22 (PIND &amp; CZUJNIK2_PIN)<br /><br />#define CZUJNIK3_PIN (1&lt;&lt;PD2)<br />#define CZUJNIK3 !(PIND &amp; CZUJNIK3_PIN)<br />#define CZUJNIK33 (PIND &amp; CZUJNIK3_PIN)<br /><br />#define CZUJNIK4_PIN (1&lt;&lt;PA2)<br />#define CZUJNIK4 !(PINA &amp; CZUJNIK4_PIN)<br />#define CZUJNIK44 (PINA &amp; CZUJNIK4_PIN)<br /><br />#define CZUJNIK5_PIN (1&lt;&lt;PA1)<br />#define CZUJNIK5 !(PINA &amp; CZUJNIK5_PIN)<br />#define CZUJNIK55 (PINA &amp; CZUJNIK5_PIN)<br /><br />#define CZUJNIK6_PIN (1&lt;&lt;PB4)<br />#define CZUJNIK6 !(PINB &amp; CZUJNIK6_PIN)<br />#define CZUJNIK66 (PINB &amp; CZUJNIK6_PIN)<br /><br /><br />// przydatne definicje pinów sterujących<br /><br />#define WE_A PC1<br />#define WE_B PC3<br />#define Enable PC2<br /><br />#define We_A PC6<br />#define We_B PC4<br />#define Enable1 PC5<br />/////////// definicje poleceń sterujących pracą silnika //////////////<br /><br />#define DCS_PRZOD DC_PRZOD1; DC_PRZOD<br />#define DCS_TYL DC_TYL; DC_TYL1<br />#define DCS_PRZOOD DC_PRZOOD; DC_PRZOOD1<br /><br />#define DCS_STOP DC_STOP; DC_STOP1<br />#define DCS_OBROT DC_PRZOD,DC_TYL1<br /><br />#define DC_PRZOD PORTC |= (1&lt;&lt;WE_A); PORTC &amp;= ~(1&lt;&lt;WE_B); PORTC |= (1&lt;&lt;Enable)<br />#define DC_TYL PORTC |= (1&lt;&lt;WE_B); PORTC &amp;= ~(1&lt;&lt;WE_A); PORTC |= (1&lt;&lt;Enable)<br />#define DC_PRZOOD PORTC |= (1&lt;&lt;WE_A); PORTC &amp;= ~(1&lt;&lt;WE_B)<br /><br /><br />#define DC_PRZOD1 PORTC |= (1&lt;&lt;We_A); PORTC &amp;= ~(1&lt;&lt;We_B); PORTC |= (1&lt;&lt;Enable1)<br />#define DC_TYL1 PORTC |= (1&lt;&lt;We_B); PORTC &amp;= ~(1&lt;&lt;We_A); PORTC |= (1&lt;&lt;Enable1)<br />#define DC_PRZOOD1 PORTC |= (1&lt;&lt;We_A); PORTC &amp;= ~(1&lt;&lt;We_B)<br /><br />#define DC_STOP PORTC &amp;= ~(1&lt;&lt;WE_A); PORTC &amp;= ~(1&lt;&lt;WE_B)<br />#define DC_STOP1 PORTC &amp;= ~(1&lt;&lt;We_A); PORTC &amp;= ~(1&lt;&lt;We_B)<br /><br />//////////////////////////////////////////////////////////////////////<br /><br />////////////////Funkcje do odpowiedniego sterowania silnikami/////////////////////<br />void zrob_pomiar (void);<br /><br />void obrot (void);<br />void obrot_linia (void);<br />void stop (void);<br />void odjedz (void);<br />void atakuj (void);<br />void atakuj_lewo (void);<br />void atakuj_prawo (void);<br /><br /><br />#endif /* MINISUMO_H_ */[/syntax]<br /><br />[syntax=c]//*<br /> //* main.c<br /> //*<br /> //*  Created on: 25-07-2013<br /> //*      Author: Kuba<br /> // 1////1/2/3////2<br />       /////////<br />      /////////<br />      /////////<br /> //  3///4/5/6////4<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;Minisumo/minisumo.h&quot;<br /><br /><br /><br />int main (void)<br />{<br />// Inicjalizacja pinów do odbierania napięcia z czujników Tsop<br />DDRA &amp;= ~(1&lt;&lt;PA2) &amp; ~(1&lt;&lt;PA1);<br />DDRC &amp;= ~(1&lt;&lt;PC7);<br />DDRD &amp;= ~(1&lt;&lt;PD3) &amp; ~(1&lt;&lt;PD2);<br />DDRB &amp;= ~(1&lt;&lt;PB4);<br /><br />PORTA |= (1&lt;&lt;PA2) |  (1&lt;&lt;PA1);<br />PORTC |= (1&lt;&lt;PC7);<br />PORTD |= (1&lt;&lt;PD3) | (1&lt;&lt;PD2);<br />PORTB |= (1&lt;&lt;PB4);<br /><br />// Inicjalizacja pinów do sterowania silnkami<br />DDRC |=  (1&lt;&lt;We_A) | (1&lt;&lt;We_B) | (1&lt;&lt;WE_A) | (1&lt;&lt;WE_B);<br /><br />// Inicjalizacja pinów do timera<br />    DDRC |= (1&lt;&lt;PC5) | (1&lt;&lt;PC2);<br />    PORTC &amp;= ~(1&lt;&lt;PC5) &amp; ~(1&lt;&lt;PC2);<br /><br /><br />//Inicjalizajca ADC do pomiaru napięcia z czujników linii<br />ADCSRA |= (1&lt;&lt;ADEN);             // włącz ADC<br />ADCSRA |= (1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS0); // preskaler = 128<br />ADMUX  |= REF_VCC;             // ustawiamy wewn. źr odn. 5V<br /><br /><br />//***** SPRZĘTOWY PWM - 1 KANAŁ OC0 (PB3) *******<br />// ustawienie końcówki OC0 (PB3) sprzętowy PWM jako WYJŚCIE<br />    DDRB |= (1&lt;&lt;PB3);<br /><br />    TCCR0 |= (1&lt;&lt;WGM01) | (1&lt;&lt;WGM00);<br />TCCR0 |= (1&lt;&lt;COM01);<br />TCCR0 |= (1&lt;&lt;CS00);<br />OCR0=150;<br /><br />TCCR2 |= (1&lt;&lt;WGM21);<br />TCCR2 |= (1&lt;&lt;CS20);<br />OCR2 = 200;<br />sei();<br /><br />TIMSK |= (1&lt;&lt;OCIE2);<br /><br /><br />uint8_t i=0;<br />while(1)<br />{<br />atakuj_lewo();<br />    zrob_pomiar ();<br />    if(CZUJNIK1 &amp;&amp; !CZUJNIK3)<br />      {<br />    atakuj_lewo();<br />        i=0;<br />      }<br />        else if(CZUJNIK3 &amp;&amp; !CZUJNIK1)<br />        {<br />            atakuj_prawo();<br />            i=0;<br />        }<br />        else if((CZUJNIK1 &amp;&amp; CZUJNIK3) || CZUJNIK2)<br />        {<br />            atakuj();<br />            i=0;<br />        }<br />        else if(i==1) obrot();<br />        else<br />            stop();<br />         if(CZUJNIK4 &amp; CZUJNIK5 &amp; CZUJNIK6) i=1;<br /><br /><br />            //if (CZUJNIK11 &amp; CZUJNIK22 &amp; CZUJNIK33 &amp; CZUJNIK44 &amp; CZUJNIK55 &amp; CZUJNIK66) obrot();   //Jesli czujniki nie widza robot sie obraca dopoki ktorys warunek zostanie spelniony<br /><br />            //if (White_line1 || White_line2) atakuj();<br />            //if (White_line3 || White_line4) obrot_linia();<br /><br />}<br />}<br /><br />// ciało procedury obsługi PWM<br />ISR( TIMER2_COMP_vect )<br />{<br />static uint8_t cnt; // definicja naszego licznika PWM<br /><br />// bezpośrednie sterowanie wyjściami kanałów PWM<br />if(cnt&gt;=pwmA) PORTC |= (1&lt;&lt;PC2); else PORTC &amp;= ~(1&lt;&lt;PC2);<br />if(cnt&gt;=pwmB) PORTC |= (1&lt;&lt;PC5); else PORTC &amp;= ~(1&lt;&lt;PC5);<br />cnt++;// zwiększanie licznika o 1<br />}[/syntax]<br />Problemem jest to że silniki kręcą się z całą mocą...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=738">LogTeam</a> — 26 lip 2013, o 19:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-07-26T18:18:41+01:00</updated>
<published>2013-07-26T18:18:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43445#p43445</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43445#p43445"/>
<title type="html"><![CDATA[Re: Sterowanie mostkiem L298]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43445#p43445"><![CDATA[
Nie widzę odblokowania przerwania od przepełnienia timera 0 ani globalnego zezwolenia na przerwania, a bo właśnie takie powinno być przerwanie jak chcesz użyć tylko jednego timera. <br />Chodzi o to, że:<br />- Timer 1 zlicza od 0 do 255 i znowu od 0 do 255 - wystarczy mu włączyć odpowiednie taktowanie. Jak szybko będzie to robił zależy od wartości preskalera.<br />- Ustawienie fast PWM i wybranie wartości OC0 powoduje, że w przedziale czasowym od 0 do OC0 impulsów timera jest jeden stan, a w przedziale od OC0 do 255 stan przeciwny i tak działa sprzętowy PWM. Nie wymaga przerwań działa sam sobie zupełnie odrębnie od programu.<br />- Odblokowanie przerwania OVF czyli od przepełnienia/przekręcenia i globalne odblokowanie przerwań powoduje, że w momencie zmiany z 255 na 0 następuje skok do funkcji co się musi nazywać ISR(TIMER0_OVF_vect), gdzie zwiększasz sobie jakąś zmienną (np. od 0 do 255 i znowu od 0) i porównujesz ją z liczbą która jest odpowiednikiem OC0 i w zależności od tego czy zmienna licznikowa jest mniejsza czy większa decydujesz czy ustawić 1 czy 0 na wybranym pinie procesora.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 26 lip 2013, o 18:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[LogTeam]]></name></author>
<updated>2013-07-26T17:39:36+01:00</updated>
<published>2013-07-26T17:39:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43436#p43436</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43436#p43436"/>
<title type="html"><![CDATA[Re: Sterowanie mostkiem L298]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43436#p43436"><![CDATA[
Steruję tak samo. Daję makro DCS_PRZOOD i pwmA=255 lub pwmA=100. Nie działa mimo to. W kodzie mam pwmA=0. Już to poprawiłem ale nadal bez zmian. Wywołałem również funkcje atakuj_lewo()<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=738">LogTeam</a> — 26 lip 2013, o 17:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2013-07-26T16:42:34+01:00</updated>
<published>2013-07-26T16:42:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43430#p43430</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43430#p43430"/>
<title type="html"><![CDATA[Re: Sterowanie mostkiem L298]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43430#p43430"><![CDATA[
log , ale zobacz jak to wygląda opisałem na stronce co prawda dałem soft na DUINO <br />ale łatwo zrozumiesz jak działa ...   <br /><br />POLOLU działąją bez problemu na 5V zasilania i to dosyć żwawo coo widać na filmikach jak pomykają , nawet na 3,7V<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 26 lip 2013, o 16:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[LogTeam]]></name></author>
<updated>2013-07-26T15:42:10+01:00</updated>
<published>2013-07-26T15:42:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43427#p43427</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43427#p43427"/>
<title type="html"><![CDATA[Re: Sterowanie mostkiem L298]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43427#p43427"><![CDATA[
Nic to nie zmienia. Już wcześniej próbowałem<br />Napiasłem w pierwszym poście że używam pololków<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=738">LogTeam</a> — 26 lip 2013, o 15:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MrMeriones]]></name></author>
<updated>2013-07-26T13:31:49+01:00</updated>
<published>2013-07-26T13:31:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43419#p43419</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43419#p43419"/>
<title type="html"><![CDATA[Re: Sterowanie mostkiem L298]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43419#p43419"><![CDATA[
Jakim napięciem to wszystko jest zasilane? <br />Jeśli timer jest 8 bitowy i mostki masz do 5V podpięte to napięcie na silnikach wynosi ~1V, nie wiem jakich silników używasz, ale wydaje mi się, że to bardzo mało, spróbuj dać większe wypełnienie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1048">MrMeriones</a> — 26 lip 2013, o 13:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[LogTeam]]></name></author>
<updated>2013-07-26T01:41:18+01:00</updated>
<published>2013-07-26T01:41:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43398#p43398</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43398#p43398"/>
<title type="html"><![CDATA[Re: Sterowanie mostkiem L298]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43398#p43398"><![CDATA[
Krauser, a jak jest w przypadku sterowania pwm? Ustawiłem sobie programowy pwm, na pin enable dałem pwm1=60 jednak wtedy znów silniki stały w miejscu. Teraz się zastanawiam czy to wina inicjalizacji timera czy może ponownie złego sterowania mostkiem.<br /><br />Jest 3.00 więc pewnie babol w kodzie jest...<br /><br />[syntax=c]//*<br /> //* main.c<br /> //*<br /> //*  Created on: 25-07-2013<br /> //*      Author: Kuba<br /> // 1////1/2/3////2<br />       /////////<br />      /////////<br />      /////////<br /> //  3///4/5/6////4<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;Minisumo/minisumo.h&quot;<br /><br /><br /><br />int main (void)<br />{<br />// Inicjalizacja pinów do odbierania napięcia z czujników Tsop<br />DDRA &amp;= ~(1&lt;&lt;PA2) &amp; ~(1&lt;&lt;PA1);<br />DDRC &amp;= ~(1&lt;&lt;PC7);<br />DDRD &amp;= ~(1&lt;&lt;PD3) &amp; ~(1&lt;&lt;PD2);<br />DDRB &amp;= ~(1&lt;&lt;PB4);<br /><br />PORTA |= (1&lt;&lt;PA2) |  (1&lt;&lt;PA1);<br />PORTC |= (1&lt;&lt;PC7);<br />PORTD |= (1&lt;&lt;PD3) | (1&lt;&lt;PD2);<br />PORTB |= (1&lt;&lt;PB4);<br /><br />// Inicjalizacja pinów do sterowania silnkami<br />DDRC |=  (1&lt;&lt;We_A) | (1&lt;&lt;We_B) | (1&lt;&lt;WE_A) | (1&lt;&lt;WE_B);<br /><br />// Inicjalizacja pinów do timera<br />    DDRC |= (1&lt;&lt;PC5) | (1&lt;&lt;PC2);<br />    PORTC &amp;= ~(1&lt;&lt;PC5) &amp; ~(1&lt;&lt;PC2);<br /><br /><br />//Inicjalizajca ADC do pomiaru napięcia z czujników linii<br />ADCSRA |= (1&lt;&lt;ADEN);             // włącz ADC<br />ADCSRA |= (1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS0); // preskaler = 128<br />ADMUX  |= REF_VCC;             // ustawiamy wewn. źr odn. 5V<br /><br /><br />    // ustawienie końcówki OC0 (PB3) sprzętowy PWM jako WYJŚCIE<br />DDRB |= (1&lt;&lt;PB3);<br />// ustawienia TIMER0 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=0;<br /><br /><br /><br />uint8_t i=0;<br />while(1)<br />{<br />    zrob_pomiar ();<br />    if(CZUJNIK1 &amp;&amp; !CZUJNIK3)<br />      {<br />    atakuj_lewo();<br />        i=0;<br />      }<br />        else if(CZUJNIK3 &amp;&amp; !CZUJNIK1)<br />        {<br />            atakuj_prawo();<br />            i=0;<br />        }<br />        else if((CZUJNIK1 &amp;&amp; CZUJNIK3) || CZUJNIK2)<br />        {<br />            atakuj();<br />            i=0;<br />        }<br />        else if(i==1) obrot();<br />        else<br />            stop();<br />         if(CZUJNIK4 &amp; CZUJNIK5 &amp; CZUJNIK6) i=1;<br /><br /><br />            //if (CZUJNIK11 &amp; CZUJNIK22 &amp; CZUJNIK33 &amp; CZUJNIK44 &amp; CZUJNIK55 &amp; CZUJNIK66) obrot();   //Jesli czujniki nie widza robot sie obraca dopoki ktorys warunek zostanie spelniony<br /><br />            //if (White_line1 || White_line2) atakuj();<br />            //if (White_line3 || White_line4) obrot_linia();<br /><br />}<br />}<br /><br />// ciało procedury obsługi PWM<br />ISR( TIMER0_COMP_vect )<br />{<br />static uint8_t cnt; // definicja naszego licznika PWM<br /><br />// bezpośrednie sterowanie wyjściami kanałów PWM<br />if(cnt&gt;=pwmA) PORTC |= (1&lt;&lt;PC2); else PORTC &amp;= ~(1&lt;&lt;PC2);<br />if(cnt&gt;=pwmB) PORTC |= (1&lt;&lt;PC5); else PORTC &amp;= ~(1&lt;&lt;PC5);<br /><br /><br />cnt++;// zwiększanie licznika o 1<br />}[/syntax]<br />[syntax=c]/*<br /> * minisumo.c<br /> *<br /> *  Created on: 25-07-2013<br /> *      Author: Kuba<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;minisumo.h&quot;<br /><br /><br />uint16_t pomiar( uint8_t kanal ) {<br /><br />ADMUX = (ADMUX &amp; 0b11111000) | kanal;<br /><br />ADCSRA |= (1&lt;&lt;ADSC);  // start konwersji<br /><br />while( ADCSRA &amp; (1&lt;&lt;ADSC) );<br /><br />return ADCH;<br />}<br /><br />uint8_t i=0;<br />uint8_t tab&#91;4&#93; = { 6, 5, 3, 0};<br /><br />void zrob_pomiar (void)<br />{<br />    for(i=0; i&lt;4; i++)<br />    {<br />       wynik&#91;i&#93; = pomiar(tab&#91;i&#93;);<br />       _delay_ms (3);               //10ms zamienić na 13 cykli zegara<br />    }<br /><br />    for(i=5; i&lt;0; i--);<br />    {<br />    wynik&#91;i&#93; = pomiar(tab&#91;i&#93;);<br />        _delay_ms (3);              //10ms zamienić na 13 cykli zegara<br />    }<br />}<br /><br /><br /><br /><br />///////////////Funkcje sterujące silnikami///////////////////////////<br />void stop (void)<br />{<br />DCS_STOP;<br />}<br /><br />void obrot_linia (void)<br />{<br /><br />DCS_TYL;             //wycofanie się z lini<br />_delay_ms (100);<br /><br />DCS_OBROT;           //obracanie sie. Trzeba dobrać czas aby robot obracał się o około 180 stopni. Gdy po obróceniu się czunjiki nic nie wykryją robot zaczyna się krećić w poszukiwaniu przeciwnika.<br />    _delay_ms (500);     //Tryb agresywny nie zawiera obrot (); ale od razu atakuje &quot;na slepo&quot;<br />}<br /><br />void obrot (void)<br />{<br />    DCS_OBROT;<br />}<br /><br />void atakuj_lewo (void)<br />{<br />    pwmA=0;<br />    DCS_PRZOOD;<br />}<br /><br />void atakuj_prawo (void)<br />{<br />    pwmB=0;<br />    DCS_PRZOOD;<br />}<br /><br />void atakuj (void)<br />{<br />    DCS_PRZOD;<br />}[/syntax]<br /><br />[syntax=c]/*<br /> * minisumo.h<br /> *<br /> *  Created on: 25-07-2013<br /> *      Author: Kuba<br /> */<br /><br /><br /><br />#ifndef MINISUMO_H_<br />#define MINISUMO_H_<br /><br />#define REF_VCC (1&lt;&lt;REFS0)       //napięcie odniesienia ADC VCC<br /><br />volatile uint8_t pwmA, pwmB;                    //pwm od OCR1A<br />                   //pwm od OCR1B<br />uint8_t wynik&#91;4&#93;;<br /><br />/////////////Makra do czujników lini//////////////////<br /><br />#define White_line1 wynik&#91;1&#93;&gt;750<br />#define Black_line1 wynik&#91;1&#93;&lt;511<br /><br />#define White_line2 wynik&#91;2&#93;&gt;750<br />#define Black_line2 wynik&#91;2&#93;&lt;511<br /><br />#define White_line3 wynik&#91;3&#93;&gt;750<br />#define Black_line3 wynik&#91;3&#93;&lt;511<br /><br />#define White_line4 wynik&#91;4&#93;&gt;750<br />#define Black_line4 wynik&#91;4&#93;&lt;511<br /><br />////////////Makra do czujnikow podczerwieni Tsop//////////////////////////////<br />#define CZUJNIK1_PIN (1&lt;&lt;PC7)<br />#define CZUJNIK1 !(PINC &amp; CZUJNIK1_PIN)<br />#define CZUJNIK11 (PINC &amp; CZUJNIK1_PIN)<br /><br />#define CZUJNIK2_PIN (1&lt;&lt;PD3)<br />#define CZUJNIK2 !(PIND &amp; CZUJNIK2_PIN)<br />#define CZUJNIK22 (PIND &amp; CZUJNIK2_PIN)<br /><br />#define CZUJNIK3_PIN (1&lt;&lt;PD2)<br />#define CZUJNIK3 !(PIND &amp; CZUJNIK3_PIN)<br />#define CZUJNIK33 (PIND &amp; CZUJNIK3_PIN)<br /><br />#define CZUJNIK4_PIN (1&lt;&lt;PA2)<br />#define CZUJNIK4 !(PINA &amp; CZUJNIK4_PIN)<br />#define CZUJNIK44 (PINA &amp; CZUJNIK4_PIN)<br /><br />#define CZUJNIK5_PIN (1&lt;&lt;PA1)<br />#define CZUJNIK5 !(PINA &amp; CZUJNIK5_PIN)<br />#define CZUJNIK55 (PINA &amp; CZUJNIK5_PIN)<br /><br />#define CZUJNIK6_PIN (1&lt;&lt;PB4)<br />#define CZUJNIK6 !(PINB &amp; CZUJNIK6_PIN)<br />#define CZUJNIK66 (PINB &amp; CZUJNIK6_PIN)<br /><br /><br />// przydatne definicje pinów sterujących<br /><br />#define WE_A PC1<br />#define WE_B PC3<br />#define Enable PC2<br /><br />#define We_A PC6<br />#define We_B PC4<br />#define Enable1 PC5<br />/////////// definicje poleceń sterujących pracą silnika //////////////<br /><br />#define DCS_PRZOD DC_PRZOD1; DC_PRZOD<br />#define DCS_TYL DC_TYL; DC_TYL1<br />#define DCS_PRZOOD DC_PRZOOD; DC_PRZOOD1<br /><br />#define DCS_STOP DC_STOP; DC_STOP1<br />#define DCS_OBROT DC_PRZOD,DC_TYL1<br /><br />#define DC_PRZOD PORTC |= (1&lt;&lt;WE_A); PORTC &amp;= ~(1&lt;&lt;WE_B); PORTC |= (1&lt;&lt;Enable)<br />#define DC_TYL PORTC |= (1&lt;&lt;WE_A); PORTC &amp;= ~(1&lt;&lt;WE_B); PORTC |= (1&lt;&lt;Enable)<br />#define DC_PRZOOD PORTC |= (1&lt;&lt;WE_A); PORTC &amp;= ~(1&lt;&lt;WE_B)<br /><br /><br />#define DC_PRZOD1 PORTC |= (1&lt;&lt;We_A); PORTC &amp;= ~(1&lt;&lt;We_B); PORTC |= (1&lt;&lt;Enable1)<br />#define DC_TYL1 PORTC |= (1&lt;&lt;We_B); PORTC &amp;= ~(1&lt;&lt;We_A); PORTC |= (1&lt;&lt;Enable1)<br />#define DC_PRZOOD1 PORTC |= (1&lt;&lt;We_A); PORTC &amp;= ~(1&lt;&lt;We_B)<br /><br />#define DC_STOP PORTC &amp;= ~(1&lt;&lt;WE_A); PORTC &amp;= ~(1&lt;&lt;WE_B)<br />#define DC_STOP1 PORTC &amp;= ~(1&lt;&lt;We_A); PORTC &amp;= ~(1&lt;&lt;We_B)<br /><br />//////////////////////////////////////////////////////////////////////<br /><br />////////////////Funkcje do odpowiedniego sterowania silnikami/////////////////////<br />void zrob_pomiar (void);<br /><br />void obrot (void);<br />void obrot_linia (void);<br />void stop (void);<br />void odjedz (void);<br />void atakuj (void);<br />void atakuj_lewo (void);<br />void atakuj_prawo (void);<br /><br /><br />#endif /* MINISUMO_H_ */[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=738">LogTeam</a> — 26 lip 2013, o 01:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[LogTeam]]></name></author>
<updated>2013-07-25T18:29:57+01:00</updated>
<published>2013-07-25T18:29:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43341#p43341</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43341#p43341"/>
<title type="html"><![CDATA[Re: Sterowanie mostkiem L298]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43341#p43341"><![CDATA[
No i działa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Dzięki wielkie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=738">LogTeam</a> — 25 lip 2013, o 18:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-07-25T18:16:57+01:00</updated>
<published>2013-07-25T18:16:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43335#p43335</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43335#p43335"/>
<title type="html"><![CDATA[Re: Sterowanie mostkiem L298]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43335#p43335"><![CDATA[
Dodatkowo na wejście Enable musisz podać stan wysoki, aby włączyć sterowanie silnikiem. Jak podasz stan niski to odłączysz silnik i zatrzyma się powoli. Ustawienie przeciwnych  stanów na WE_A i WE_B spowoduje obroty w jedną lub drugą stronę, a takich samych szybkie hamowanie silnika.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 25 lip 2013, o 18:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[LogTeam]]></name></author>
<updated>2013-07-25T15:42:25+01:00</updated>
<published>2013-07-25T15:42:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43318#p43318</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43318#p43318"/>
<title type="html"><![CDATA[Sterowanie mostkiem L298]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3659&amp;p=43318#p43318"><![CDATA[
Witam.<br /><br />Zabrałem się za sterowanie silnikami pololu przez mostek L298. Sterowałem już kiedyś mostkiem L293D i myślałem że L298 steruje się tak samo. Wygląda na to że nie.<br /><br />Wrzuciłem kod Mirka do sterowania silnikami i próbowałem ruszyć choć jednym silnikiem. Nic się nie udawało. Gdy włączyłem Jtag silniki zaczęły wariować, ale to oznacza że połączenia są dobre.<br />Mam nadzieje że mogę wstawić ten kod z książki.<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />/* przydatne definicje pinów sterujących */<br />#define WE_A PC6<br />#define WE_B PC4<br /><br /><br />/* definicje poleceń sterujących pracą silnika */<br />#define DC_LEWO PORTC  |= (1&lt;&lt;WE_B); PORTC &amp;= ~(1&lt;&lt;WE_A)<br /><br /><br /><br />int main(void) {<br /><br />/* ustawiamy piny sterujące L293D jako wyjścia */<br />DDRC |= (1&lt;&lt;WE_A) | (1&lt;&lt;WE_B);<br /><br />while(1) {<br /><br />DC_LEWO;<br />}<br />}[/syntax]<br /><br />A oto schemat. Sory że taki nie dokończony.<br /><a href="http://forum.atnel.pl/_obrazki/o/738/9f8180e764019d861b5a8418ef3e5114.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/738/9f8180e764019d861b5a8418ef3e5114.png" alt="Obrazek" /></a><br />Patrzyłem do noty ale za dużo nie pokazała<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />1.2. INPUT STAGE<br />Eachbridge is driven by meansof fourgatesthe input of which are In1 ; In2 ; EnA and In3 ; In4 ; EnB.<br />TheIninputsset thebridgestate whenThe En input<br />ishigh; a lowstateoftheEninputinhibitsthe bridge.<br />All the inputs are TTL compatible.<br /></div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=738">LogTeam</a> — 25 lip 2013, o 15:42</p><hr />
]]></content>
</entry>
</feed>