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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-11-06T14:14:42+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=5340&amp;mode</id>
<entry>
<author><name><![CDATA[Gibki]]></name></author>
<updated>2013-12-30T22:22:01+01:00</updated>
<published>2013-12-30T22:22:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5340&amp;p=63014#p63014</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5340&amp;p=63014#p63014"/>
<title type="html"><![CDATA[Re: Sterowanie autkiem problem..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5340&amp;p=63014#p63014"><![CDATA[
[syntax=c]/**<br /> * Funkcje do sterowania silnikiem prądu stałego<br /> */<br /><br />#include &quot;sumolib.h&quot;<br /><br />// definicje stalych<br />#define MOTOR_FORWARD 1<br />#define MOTOR_BACKWARD 2<br />#define MOTOR_STOP 0<br /><br />// stan silnika 1<br />unsigned char motor1_state =  MOTOR_STOP;<br />// stan silnika 2<br />unsigned char motor2_state =  MOTOR_STOP;<br />// moc silnika 1<br />unsigned int motor1_power_config = MOTOR1_DEFAULT_POWER * 10;<br />// moc silnika 2<br />unsigned int motor2_power_config = MOTOR2_DEFAULT_POWER * 10;<br /><br />/**<br /> * Inicjalizacja prostej obsługi silników<br /> */<br />void motor_init() {<br />setb(MOTOR1_PWM_DDR, MOTOR1_PWM_PIN);<br />setb(MOTOR2_PWM_DDR, MOTOR2_PWM_PIN);<br />setb(MOTOR1_DIR_DDR, MOTOR1_DIR_PIN);<br />setb(MOTOR2_DIR_DDR, MOTOR2_DIR_PIN);<br /><br />// ustawienie rejestrów<br />TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM11) | _BV(WGM10);<br />if (MOTOR1_PWM_NEGATE) {<br />TCCR1A |= _BV(COM1A0);<br />}<br />if (MOTOR2_PWM_NEGATE) {<br />TCCR1A |= _BV(COM1B0);<br />}<br />OCR1A = 0;<br />OCR1B = 0;<br />TCCR1B = 0x00; <br />TCCR1B |= PWM_PRESCALLER_CONFIG;<br /><br />// ustawienie stanów początkowych wyjść DIR<br />if (!MOTOR1_DIR_NEGATE)<br />clr(MOTOR1_DIR_PORT, MOTOR1_DIR_PIN);<br />else<br />setb(MOTOR1_DIR_PORT, MOTOR1_DIR_PIN);<br /><br />if (!MOTOR2_DIR_NEGATE)<br />clr(MOTOR2_DIR_PORT, MOTOR2_DIR_PIN);<br />else<br />setb(MOTOR2_DIR_PORT, MOTOR2_DIR_PIN);<br /><br />motor1_state =  MOTOR_STOP;<br />motor2_state =  MOTOR_STOP;<br />// ustawianie mocy<br />//motor1_set_power(MOTOR1_DEFAULT_POWER);<br />//motor2_set_power(MOTOR2_DEFAULT_POWER);<br /><br /><br /><br />}<br /><br />/**<br /> * Ustawia moc silnika 1 wyrażoną w %<br /> */<br />void motor1_set_power(unsigned char power) {<br />if (power &lt; MOTOR1_MAX_POWER) {<br />motor1_power_config = power * 10;<br />} else {<br />motor1_power_config = MOTOR1_MAX_POWER * 10;<br />}<br />// ewentualna zmiana wypelnienia<br />if (motor1_state == MOTOR_FORWARD || motor1_state == MOTOR_BACKWARD)<br />OCR1B = motor1_power_config;<br />}<br /><br />/**<br /> * Ustawia moc silnika 2 wyrażoną w %<br /> */<br />void motor2_set_power(unsigned char power) {<br />if (power &lt; MOTOR2_MAX_POWER) {<br />motor2_power_config = power * 10;<br />} else {<br />motor2_power_config = MOTOR2_MAX_POWER * 10;<br />}<br />// ewentualna zmiana wypelnienia<br />if (motor2_state == MOTOR_FORWARD || motor1_state == MOTOR_BACKWARD)<br />OCR1A = motor1_power_config;<br />}<br /><br />/**<br /> * Zatrzymanie silnika 1<br /> */<br />void motor1_stop() {<br />OCR1B = 0;<br />motor1_state = MOTOR_STOP;<br />}<br /><br />/**<br /> * Zatrzymanie silnika 2<br /> */<br />void motor2_stop() {<br />OCR1A = 0;<br />motor2_state = MOTOR_STOP;<br />}<br /><br />/**<br /> * Uruchomienie silnika 1<br /> * obroty w przód<br /> */<br />void motor1_forward() {<br />// jesli jest zmiana stanu<br />if (motor1_state != MOTOR_FORWARD) {<br />// zatrzymanie silnika<br />motor1_stop();<br /><br />// opóźnienie<br />if (MOTOR1_DELAY &gt; 0) {<br />wait_ms(MOTOR1_DELAY);<br />} else {<br />wait_ms(1);<br />}<br /><br />// ustawienie kierunku<br />if (!MOTOR1_DIR_NEGATE)<br />clr(MOTOR1_DIR_PORT, MOTOR1_DIR_PIN);<br />else<br />setb(MOTOR1_DIR_PORT, MOTOR1_DIR_PIN);<br /><br />// opóźnienie<br />if (MOTOR1_DELAY &gt; 0) {<br />wait_ms(MOTOR1_DELAY);<br />} else {<br />wait_ms(1);<br />}<br /><br />// uruchomienie silnika<br />OCR1B = motor1_power_config;<br /><br />motor1_state = MOTOR_FORWARD;<br />}<br />}<br /><br />/**<br /> * Uruchomienie silnika 2<br /> * obroty w przód<br /> */<br />void motor2_forward() {<br />// jesli jest zmiana stanu<br />if (motor2_state != MOTOR_FORWARD) {<br />// zatrzymanie silnika<br />motor2_stop();<br /><br />// opóźnienie<br />if (MOTOR2_DELAY &gt; 0) {<br />wait_ms(MOTOR2_DELAY);<br />} else {<br />wait_ms(1);<br />}<br /><br />// ustawienie kierunku<br />if (!MOTOR2_DIR_NEGATE)<br />clr(MOTOR2_DIR_PORT, MOTOR2_DIR_PIN);<br />else<br />setb(MOTOR2_DIR_PORT, MOTOR2_DIR_PIN);<br /><br />// opóźnienie<br />if (MOTOR2_DELAY &gt; 0) {<br />wait_ms(MOTOR2_DELAY);<br />} else {<br />wait_ms(1);<br />}<br /><br />// uruchomienie silnika<br />OCR1A = motor2_power_config;<br />motor2_state = MOTOR_FORWARD;<br />}<br />}<br /><br /><br />/**<br /> * Uruchomienie silnika 1<br /> * obroty w tył<br /> */<br />void motor1_backward() {<br />// jesli jest zmiana stanu<br />if (motor1_state != MOTOR_BACKWARD) {<br />// zatrzymanie silnika<br />motor1_stop();<br /><br />// opóźnienie<br />if (MOTOR1_DELAY &gt; 0) {<br />wait_ms(MOTOR1_DELAY);<br />} else {<br />wait_ms(1);<br />}<br /><br />// ustawienie kierunku<br />if (!MOTOR1_DIR_NEGATE)<br />setb(MOTOR1_DIR_PORT, MOTOR1_DIR_PIN);<br />else<br />clr(MOTOR1_DIR_PORT, MOTOR1_DIR_PIN);<br /><br />// opóźnienie<br />if (MOTOR1_DELAY &gt; 0) {<br />wait_ms(MOTOR1_DELAY);<br />} else {<br />wait_ms(1);<br />}<br /><br />// uruchomienie silnika<br />OCR1B = motor1_power_config;<br /><br />motor1_state = MOTOR_BACKWARD;<br />}<br />}<br /><br />/**<br /> * Uruchomienie silnika 2<br /> * obroty w tył<br /> */<br />void motor2_backward() {<br />// jesli jest zmiana stanu<br />if (motor2_state != MOTOR_BACKWARD) {<br />// zatrzymanie silnika<br />motor2_stop();<br /><br />// opóźnienie<br />if (MOTOR2_DELAY &gt; 0) {<br />wait_ms(MOTOR2_DELAY);<br />} else {<br />wait_ms(1);<br />}<br /><br />// ustawienie kierunku<br />if (!MOTOR2_DIR_NEGATE)<br />setb(MOTOR2_DIR_PORT, MOTOR2_DIR_PIN);<br />else<br />clr(MOTOR2_DIR_PORT, MOTOR2_DIR_PIN);<br /><br />// opóźnienie<br />if (MOTOR2_DELAY &gt; 0) {<br />wait_ms(MOTOR2_DELAY);<br />} else {<br />wait_ms(1);<br />}<br /><br />// uruchomienie silnika<br />OCR1A = motor2_power_config;<br /><br />motor2_state = MOTOR_BACKWARD;<br />}<br />}[/syntax]<br /><br />To jest biblioteka od motoru.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2315">Gibki</a> — 30 gru 2013, o 22:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xor]]></name></author>
<updated>2015-11-06T14:14:42+01:00</updated>
<published>2013-12-30T15:07:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5340&amp;p=62927#p62927</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5340&amp;p=62927#p62927"/>
<title type="html"><![CDATA[Re: Sterowanie autkiem problem..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5340&amp;p=62927#p62927"><![CDATA[
<span style="color: #BFFFBF">.</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1774">xor</a> — 30 gru 2013, o 15:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Gibki]]></name></author>
<updated>2013-12-30T14:38:50+01:00</updated>
<published>2013-12-30T14:38:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5340&amp;p=62918#p62918</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5340&amp;p=62918#p62918"/>
<title type="html"><![CDATA[Sterowanie autkiem problem..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5340&amp;p=62918#p62918"><![CDATA[
Witam! <br />Mam pewien problem. Robię projekt autka sterowanego po bluetooth z androida na atmega 32. Układ jest od konkursów miniSUMO. Niby mam wszystkie biblioteki do tego itp., ale jest w nich problem.<br />Program na androida wysyła znaki 1,2,3,4,5. każdy znak ma sterować w którą stronę ma autko jechać (przód tył lewo prawo i stop). Diody które są na płytce użyłem jako informacyjne czy sygnał przyszedł dobry działają jak powinny w sensie, że jak nacisnę przycisk na telefonie to odpowiednia dioda się zapali, ale silniki już nie pracują tak dobrze :/ Owszem skręca i jedzie prosto, ale w dziwaczny sposób: <br />powiedzmy, że opowiem na przykładzie podpiętego jednego silnika który odpowiada za jazdę przód i tył. <br />Odpalam aplikację wszystko się łączy i jest ok. Klikam jazda do przodu i silnik rusza. Klikam jazda do tyłu on dalej jedzie do przodu, ale jeżeli zaczynam naciskać prawo i lewo to po naciśnięciu lewo jedzie w przód a w prawo to jedzie do tyłu obojętnie czy wcisnę później przód czy tył. <br />Analogicznie dzieje się z drugim silnikiem od skrętu.<br />Wiem jest to zamotane, ale ciężko to inaczej wytłumaczyć.<br /><br />Wszystko pisałem w języku C. Czy ktoś już się z czymś takim spotkał?<br /><br />Tak wygląda kod głównego programu:<br />[syntax=c]#include &quot;sumolib/sumolib.h&quot;;<br />// definicja progu widzenia<br />#define PROG_WIDZENIA 40<br />int main() {<br />usart_init();<br />// inicjalizacja silników<br />motor_init();<br />// ustaw moc silnika 1 na 20%<br />motor1_set_power(50);<br />// ustaw moc silnika 2 na 30%<br />motor2_set_power(50);<br />sled_init();<br /><br />// inicjalizacja czujników odległości<br />dist_init();<br /><br />// zapalenie diody LED1<br />sled1_on();<br />unsigned char sign;<br /><br />// petla nieskończona<br />for(;;) {<br /> sign= usart_read_byte(); //pobierz wartość z RS232 i przypisz odebrany znak do zmiennej sign<br /> if(sign!=0) //jeśli odebrano znak wykonaj następujące instrukcje:<br />{<br /> <br /> switch(sign){<br /> case '5':<br /> motor1_stop();<br /> motor2_stop();<br /> sled2_off();<br /> sled3_off();<br /> sled4_off();<br /> sled5_off();<br /> wait_ms(300);<br /> break;<br /> case '1':<br /> motor1_forward();<br /> motor2_stop();<br /> sled2_on();<br /> wait_ms(300);<br /> break;<br /> case '2':<br /> motor1_backward();<br /> motor2_stop();<br /> sled3_on();<br /> wait_ms(300);<br /> <br /> break;<br /> case '3':<br /> motor1_stop();<br /> motor2_backward();<br /> sled4_on();<br /> wait_ms(300);<br /> break;<br /> case '4':<br /> motor1_stop();<br /> motor2_forward();<br /> sled5_on();<br /> wait_ms(300);<br /> break;<br /> }<br /> }<br /> <br /><br /><br /><br />}<br />}[/syntax]<br /><br />Kod może jest trochę dziwny, dlatego że wciąż próbuję się z tym uporać i zmieniam, a to opóźnienia dodaję zwiększam zmniejszam jeszcze próbuję zatrzymywać jakoś drugi silnik itp. i nic nie pomaga. :/ Dziwne, że jednak diody świecą dobrze i nawet jak silniki uzależniłem od diod to działały tak samo :/<br /><br />Może ktoś coś już miał podobnego i zna odpowiedź?<br />POZDRAWIAM!!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2315">Gibki</a> — 30 gru 2013, o 14:38</p><hr />
]]></content>
</entry>
</feed>