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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-06-13T21:37:19+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=15549&amp;mode</id>
<entry>
<author><name><![CDATA[mitol007]]></name></author>
<updated>2016-06-13T21:37:19+01:00</updated>
<published>2016-06-13T21:37:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15549&amp;p=162193#p162193</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15549&amp;p=162193#p162193"/>
<title type="html"><![CDATA[Re: ATmega8 i czujnik odległości HC SR-04]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15549&amp;p=162193#p162193"><![CDATA[
Tak, udało się uruchomić, dzięki bardzo za pomoc.<br /><br />Do tego, nie ustawiłem taktowania w ustawieniach projektu... i dlatego moje autko żyło swoim życiem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14159">mitol007</a> — 13 cze 2016, o 21:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[aaadamw]]></name></author>
<updated>2016-06-12T10:19:53+01:00</updated>
<published>2016-06-12T10:19:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15549&amp;p=162112#p162112</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15549&amp;p=162112#p162112"/>
<title type="html"><![CDATA[Re: ATmega8 i czujnik odległości HC SR-04]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15549&amp;p=162112#p162112"><![CDATA[
I jak tam? Udało się uruchomić pojazd?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=360">aaadamw</a> — 12 cze 2016, o 10:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[aaadamw]]></name></author>
<updated>2016-06-08T21:29:18+01:00</updated>
<published>2016-06-08T21:29:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15549&amp;p=161931#p161931</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15549&amp;p=161931#p161931"/>
<title type="html"><![CDATA[Re: ATmega8 i czujnik odległości HC SR-04]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15549&amp;p=161931#p161931"><![CDATA[
Też są dwa czujniki, m324.<br />trochę może chaotycznie napisane, bo pisane na szybko i aby działało... zostało sporo do uporządkowania.<br />czujniki podłączone do INT0 i INT1.<br /><br />[syntax=c]/*=================================================================================================<br />*================================================================================================== <br />*  AW_PR33_ROBOTv1<br />*  main.c<br /><br />*   Created on: 23-02-2016<br />* 19:47:59<br />*       Author: aaadamw<br />użyte biblioteki Mirosława Kardasia<br /> ***************************************************<br />* Płytka:<br />* Proc:<br />*<br />*<br />*==================================================================================================<br />*==================================================================================================<br />*==================================================================================================<br />*/<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;IR_UNI_AW/ir_config.h&quot;<br />#include &lt;util/atomic.h&gt;<br /><br />#define LED (1&lt;&lt;PB3)<br />#define LED_SET PORTB|=LED<br />#define LED_RES PORTB&amp;=~LED<br />#define LED_TOG PORTB^=LED<br /><br />#define TRIG_L (1&lt;&lt;PB4)<br />#define TRIG_R (1&lt;&lt;PB0)<br /><br /><br />#define SIL_L (1&lt;&lt;PC0)<br />#define SIL_R (1&lt;&lt;PC1)<br />#define START_LR PORTC|=SIL_L|SIL_R<br />#define START_L PORTC|=SIL_L<br />#define START_R PORTC|=SIL_R<br />#define STOP_LR PORTC&amp;=~(SIL_R|SIL_L)<br />#define STOP_L PORTC&amp;=~SIL_L<br />#define STOP_R PORTC&amp;=~SIL_R<br />#define SPEED 180<br /><br />volatile uint8_t PWM_cnt;<br />volatile uint8_t PWM_L, PWM_R;<br /><br />//volatile uint16_t pomiar = 0;<br />volatile uint8_t timer_cnt = 0;<br />volatile uint8_t wykonaj_pomiar_cnt = 0;<br /><br />struct pomiar_str{<br />uint16_t left;<br />uint16_t right;<br />}pomiar_str;<br /><br />typedef enum{<br />POMIAR_WYSWIETL,<br />POMIAR_WYSWIETLONO<br />}MS_POMIAR_t;<br /><br />typedef enum{<br />TRIGL,<br />TRIGR,<br />TRIG_IDDLE<br />}MS_TRIGGER_t;<br /><br /><br />typedef enum{<br />STOP,<br />JAZDA,<br />JADE,<br />CZYSTO,<br />PRZESZKODA_L,<br />PRZESZKODA_R<br />}MS_STATUS_t;<br /><br /><br />volatile MS_POMIAR_t ms_pomiar;<br />volatile MS_TRIGGER_t trigger=0;<br />MS_STATUS_t status=STOP;<br /><br />void obsluga_ir(uint8_t address, uint8_t command,<br />uint8_t key_time){<br /><br />//if( command == 1 &amp;&amp; !key_time )STOP_L,START_R ;<br />//else if(command == 2 &amp;&amp; !key_time) START_LR;<br />//else if(command == 3 &amp;&amp; !key_time) STOP_R,START_L;<br />//else if(command == 5 &amp;&amp; !key_time) STOP_LR;<br />if( command == 0 &amp;&amp; !key_time ) STOP_LR,PWM_L=0,PWM_R=0, status=STOP;<br />else if(command == 2 &amp;&amp; !key_time) PWM_L=80,PWM_R=80;<br />else if(command == 5 &amp;&amp; !key_time) PWM_L=150,PWM_R=150;<br />else if(command == 8 &amp;&amp; !key_time) PWM_L=250,PWM_R=250;<br />else if(command == 7 &amp;&amp; !key_time) PWM_L=100,PWM_R=180;<br />else if(command == 9 &amp;&amp; !key_time) PWM_L=180,PWM_R=100;<br />else if(command == 1 &amp;&amp; !key_time) PWM_L=0,PWM_R=150;<br />else if(command == 3 &amp;&amp; !key_time) PWM_L=150,PWM_R=0;<br />else if(command == 4 &amp;&amp; !key_time) PWM_L=0,PWM_R=200;<br />else if(command == 6 &amp;&amp; !key_time) PWM_L=200,PWM_R=0;<br />else if(command == 12 &amp;&amp; !key_time) status = JAZDA;<br />}<br /><br /><br /><br /><br />int main(void){<br />DDRB|=LED|TRIG_L|TRIG_R;<br />//PORTB|=TRIG_L|TRIG_R;<br />DDRC|=SIL_L|SIL_R;<br />ir_init();<br />register_ir_event_callback(obsluga_ir);<br />sei();<br />//****TIMER0 CTC 400Hz***************************************************************<br />//***************************************************<br />TCCR0A|=(1&lt;&lt;WGM01);<br />TCCR0B|=(1&lt;&lt;CS01);//|(1&lt;&lt;CS00);<br />OCR0A=(uint8_t)(F_CPU/(8.0*50000)-0.5);//400Hz<br />TIMSK0|=(1&lt;&lt;OCIE0A);<br />//-----------------------------------------------------------------------------<br /><br /><br /><br />//****TIMER2 CTC100Hz***********************************************************<br />//****TIMER SYSTEMOWY Z PRZERWANIEM CO 10MS*******************************************<br />TCCR2A|=(1&lt;&lt;WGM20)|(1&lt;&lt;WGM21);//CTC<br />TCCR2B|=(1&lt;&lt;CS20)|(1&lt;&lt;CS21)|(1&lt;&lt;CS22);//preskaler 1024<br />OCR2A=(uint8_t)(F_CPU/(1024.0*100)-0.5);<br />TIMSK2|=(1&lt;&lt;OCIE2A);<br />//---------------------------------------------------------------------------------------------<br /><br />// **** KONFIGURACJA PRZERWANIA INT0 **********************************************************<br />//  *******************************************************************************************<br />EICRA|=(1&lt;&lt;ISC00)|(1&lt;&lt;ISC01)|(1&lt;&lt;ISC10)|(1&lt;&lt;ISC11);//przerwanie od zbocza narastającego<br />EIMSK|=(1&lt;&lt;INT0)|(1&lt;&lt;INT1);<br /><br />//---------------------------------------------------------------------------------------------<br />while(1){<br />IR_EVENT();<br /><br />if(!wykonaj_pomiar_cnt){<br />wykonaj_pomiar_cnt = 5;<br />if(trigger == TRIGL){<br />//trigger = TRIGR;<br />ATOMIC_BLOCK(ATOMIC_FORCEON){<br />PORTB|=TRIG_L;<br />_delay_us(10);<br />PORTB&amp;=~TRIG_L;<br />}<br /><br />}else if(trigger == TRIGR){<br />//trigger = TRIGL;<br />ATOMIC_BLOCK(ATOMIC_FORCEON){<br />PORTB|=TRIG_R;<br />_delay_us(10);<br />PORTB&amp;=~TRIG_R;<br />}<br />}<br /><br /><br /><br />}<br /><br /><br /><br /><br />switch(status){<br />case JAZDA:<br />PWM_L=150;<br />PWM_R=150;<br />status = JADE;<br />break;<br />case PRZESZKODA_R:<br />PWM_L=0;<br />PWM_R = SPEED;<br />break;<br />case PRZESZKODA_L:<br />PWM_R=0;<br />PWM_L = SPEED;<br />break;<br />case CZYSTO:<br />PWM_L = SPEED;<br />PWM_R = SPEED;<br />status=JADE;<br />break;<br />case STOP:<br />STOP_LR,PWM_L=0,PWM_R=0;<br />break;<br />default:<br />status=JADE;<br /><br /><br />}<br /><br />if(status!=STOP){<br />if((pomiar_str.left/132)&lt;50) status = PRZESZKODA_L, LED_SET ;<br />else if ((pomiar_str.right/132)&lt;40) status = PRZESZKODA_R, LED_SET;<br />else status = CZYSTO, LED_RES;<br />}else {<br />if((pomiar_str.left/132)&lt;50) LED_SET ;<br />else if ((pomiar_str.right/132)&lt;40)LED_SET;<br />else LED_RES;<br />}<br /><br /><br /><br />}<br />}<br /><br /><br /><br /><br /><br /><br />ISR(TIMER0_COMPA_vect,ISR_NOBLOCK){<br />if(PWM_L&gt;PWM_cnt) START_L; else STOP_L;<br />if(PWM_R&gt;PWM_cnt) START_R; else STOP_R;<br />PWM_cnt++;<br />}<br /><br />ISR(INT0_vect,ISR_NOBLOCK){<br />static uint8_t echo = 0;<br />static uint16_t pomiar=0;<br />if(!echo){<br />pomiar=TCNT1;<br />//TCNT1=0;<br />EICRA&amp;=~(1&lt;&lt;ISC00);//reakcja na zbocze opadające<br />echo=1;<br />}else{<br />pomiar=TCNT1-pomiar;<br />echo=0;<br />EICRA|=(1&lt;&lt;ISC00);// reakcja na zbocze rosnące<br />//ms_pomiar = POMIAR_WYSWIETL;<br />if(trigger == TRIGL) pomiar_str.left = pomiar, trigger = TRIGR; else if(trigger == TRIGR) pomiar_str.right = pomiar,trigger = TRIGL;<br />}<br />//pomiar=pomiar/132;<br />}<br /><br />ISR(INT1_vect,ISR_NOBLOCK){<br />static uint8_t echo = 0;<br />static uint16_t pomiar=0;<br />if(!echo){<br />pomiar=TCNT1;<br />//TCNT1=0;<br />EICRA&amp;=~(1&lt;&lt;ISC10);//reakcja na zbocze opadające<br />echo=1;<br />}else{<br />pomiar=TCNT1-pomiar;<br />echo=0;<br />EICRA|=(1&lt;&lt;ISC10);// reakcja na zbocze rosnące<br />//ms_pomiar = POMIAR_WYSWIETL;<br />if(trigger == TRIGL) pomiar_str.left = pomiar, trigger = TRIGR; else if(trigger == TRIGR) pomiar_str.right = pomiar,trigger = TRIGL;<br />}<br />//pomiar=pomiar/132;<br />}<br />//=================================================================================================<br />//PROCEDURA OBSŁUGI TIMERA SYSTEMOWEGO; CO 10MS<br />//=================================================================================================<br />ISR(TIMER2_COMPA_vect){<br />uint16_t n;<br />n = timer_cnt;<br />if(n) timer_cnt = --n;<br />n = wykonaj_pomiar_cnt;<br />if(n) wykonaj_pomiar_cnt = --n;<br />}<br />//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=360">aaadamw</a> — 8 cze 2016, o 21:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mitol007]]></name></author>
<updated>2016-06-08T21:22:21+01:00</updated>
<published>2016-06-08T21:22:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15549&amp;p=161929#p161929</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15549&amp;p=161929#p161929"/>
<title type="html"><![CDATA[Re: ATmega8 i czujnik odległości HC SR-04]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15549&amp;p=161929#p161929"><![CDATA[
Tak, ma jeździć i omijać przeszkody. Na razie je przepycha <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> <br />Z przodu autka mam umieszczone dwa czujniki odległościowe HC SR-04, delikatnie skierowane w każdą ze stron. Zamysł jest taki, że jak lewy coś wykryje to ma skręcić w prawo, a jak prawy to w lewo. Niby proste, a siedzę na czujnikami od tygodnia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14159">mitol007</a> — 8 cze 2016, o 21:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[aaadamw]]></name></author>
<updated>2016-06-08T21:17:02+01:00</updated>
<published>2016-06-08T21:17:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15549&amp;p=161927#p161927</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15549&amp;p=161927#p161927"/>
<title type="html"><![CDATA[Re: ATmega8 i czujnik odległości HC SR-04]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15549&amp;p=161927#p161927"><![CDATA[
Takie coś robisz? <br /><!-- m --><a class="postlink" href="https://youtu.be/ugKyjxelB44" >https://youtu.be/ugKyjxelB44</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=360">aaadamw</a> — 8 cze 2016, o 21:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mitol007]]></name></author>
<updated>2016-06-08T19:04:41+01:00</updated>
<published>2016-06-08T19:04:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15549&amp;p=161915#p161915</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15549&amp;p=161915#p161915"/>
<title type="html"><![CDATA[ATmega8 i czujnik odległości HC SR-04]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15549&amp;p=161915#p161915"><![CDATA[
Witam,<br /><br />od razu mówię że jestem początkujący.. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> zachciało mi się samochodzika, który ma jeździć i omijać przeszkody. I mam problem z obsłużeniem czujnika HC SR-04.. możecie mnie oświecić co robię źle, nakierować, podpowiedzieć lub powiedzieć co poprawić?<br /><br />Ogólnie, dopóki nie wywołam funkcji SprawdzPrawo() to napęd działa bez zarzutu.. jakie zadam PWM, tak odpowiednio kręci. Natomiast po wywołaniu funkcji SprawdzPrawo, koła kręcą się z maksymalnym PWM, mimo że mam ustawiony 100. Oczywiście koła nie zatrzymują się, jeśli coś pojawi się przed czujnikiem.<br /><br />Mam dwa takie czujniki, podpięte:<br />PD1 - TRIG lewy<br />PD2 - ECHO lewe<br />PD4 - TRIG prawy<br />PD3 - ECHO prawe<br /><br />skupiam się na razie na obsłudze jednego, gdy się uda, to drugi<br /><br />Mogę prosić jakieś wskazówki?<br /><br />[syntax=c]#define F_CPU 8000000UL<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />// definicje prototypów, bo były warningi<br />void Jedz (int PWMLeft, int PWMRight);<br />void Zeruj (void);<br />void WyslijTriggerLewy (void);<br />uint16_t SprawdzPrawo (void);<br /><br />#define PWMLewy OCR1A<br />#define PWMPrawy OCR1B<br />#define TriggerLewy PORTD |= (1&lt;&lt;PD1)<br />#define TriggerPrawy PORTD |= (1&lt;&lt;PD4)<br />#define EchoLewe PORTD |= (1&lt;&lt;PD2)<br />#define EchoPrawe PORTD |= (1&lt;&lt;PD3)<br /><br />void Jedz (int PWMLeft, int PWMRight)// Jedz (0, 100) -&gt; skręca w prawo<br />{// Jedz (100, 0) -&gt; skręca w lewo<br />PWMLewy = PWMLeft;<br />PWMPrawy = PWMRight;<br />PORTD |= (1&lt;&lt;PD6);// STBY<br />}<br /><br />void Zeruj ()<br />{<br />PORTD &amp;= ~(1&lt;&lt;PD7);// AIN1 Lewy<br />PORTC &amp;= ~(1&lt;&lt;PC0);// AIN2 Lewy<br />PORTD &amp;= ~(1&lt;&lt;PD5);// BIN1 Prawy<br />PORTB &amp;= ~(1&lt;&lt;PB0);// BIN2 Prawy<br />}<br /><br />void WyslijTriggerLewy ()<br />{<br />PORTD |= (1&lt;&lt;PD1);// stan wysoki<br />_delay_us(15);<br />PORTD &amp;= ~(1&lt;&lt;PD1);// stan niski<br />}<br /><br />uint16_t SprawdzPrawo()<br />{<br />uint32_t i, ResultPrawy;<br /><br />for(i = 0; i&lt;600000; i++)// czekaj na zbocze narastajace<br />{<br />if (!(PIND &amp; (1&lt;&lt;PD2)))// echo<br />{<br />continue;// stan niski, czyli czekaj<br />} else<br />break;// stan wysoki, czyli stop<br />}<br /><br /><br />// Wykrycie zbocza narastajacego<br />// Ustawienie Timera1<br />TCCR1A = 0x00;<br />TCCR1B =(1&lt;&lt;CS11);// preskaler = FCPU / 8<br />TCNT1 = 0x00;// iniclalizacja licznika 1<br /><br />// Czekaj na zbocze opadajace<br />for(i=0; i&lt;600000; i++)<br />{<br />if(PIND &amp; (1&lt;&lt;PD2))// echo <br />{<br />if(TCNT1 &gt; 60000)<br />break;<br />else<br />continue;<br />}<br />else<br />break;<br />}<br /><br />// Wykryto zbocze opadajace<br />ResultPrawy = TCNT1;<br /><br />// Zatrzymanie timera<br />TCCR1B = 0x00;<br /><br />if (ResultPrawy &gt; 60000)<br />return -2;// No obstacle<br />else<br />return (ResultPrawy&gt;&gt;1);<br />}<br /><br /><br />int main (void)<br />{<br />uint16_t prawo;<br />int OdleglosPrawo;<br /><br />// konfiguracja PWM<br />TCCR1A |= (1&lt;&lt;WGM10);// licznik Timer1 16bit, tryb FastPWM (8bit), czyli od 0 do 255<br />TCCR1B |= (1&lt;&lt;WGM12);// str. 101 - tabelka jak ustawić<br />TCCR1A |= (1&lt;&lt;COM1A1) | (1&lt;&lt;COM1B1);// na starcie stan wysoki<br />TCCR1B |= (1&lt;&lt;CS10) | (1&lt;&lt;CS11);// preskaler, czyli częstotliwość pracy PWM, str. 102 | 8000000/64/256=488Hz<br /><br />// silniczki<br />DDRB = 0xff;// Wyjście PORTB<br />DDRD = 0xff;// Wyjście PORTD<br /><br />// ustawienia kierunku jazdy<br />PORTD |= ~(1&lt;&lt;PD7);// AIN1 Lewy<br />PORTC |= (1&lt;&lt;PC0);// AIN2 Lewy<br />PORTD |= (1&lt;&lt;PD5);// BIN1 Prawy<br />PORTB |= ~(1&lt;&lt;PB0);// BIN2 Prawy<br /><br />DDRD |= (1&lt;&lt;PD1);// inicjalizacja czujnika lewego  TRIG<br /><br /><br />while (1)<br />{<br />WyslijTriggerLewy();<br />prawo = SprawdzPrawo();<br />OdleglosPrawo = (prawo/58.0);<br />if (OdleglosPrawo &lt; 10)<br />{<br />Jedz(0, 0);<br />} else<br />{<br />Jedz(100, 100);<br />}<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14159">mitol007</a> — 8 cze 2016, o 19:04</p><hr />
]]></content>
</entry>
</feed>