Skocz do zawartości
Demolka

programator do UTP Bydgoszcz

Pomocna odpowiedź

dwie pierwsze konstrukcje były budowane po to by zweryfikować założenia konstrukcyjne.

zdawaliśmy sobie sprawę, że nic nie wygramy. przy demolce 1 skakaliśmy ze szczęścia, że takie coś stawia jakikolwiek opór. kto widział opis ten wie dla czego:)

nie wiem czy zauważyłeś ale właśnie usiłuję się nauczyć przeprogramowywać robota by coś osiągnąć, bo dopiero teraz ma to jakikolwiek sens. moim zdaniem specjalne uczenie się programowania gdy nie wie się dokładnie jak zbudować robota jest zbędne. bo bez sprawnej konstrukcji nawet najlepszy program nic nie zdziała... wiem że działa to też w drugą stronę ale program od UTP nie jest najgorszy i na początek wystarczy.

[ Dodano: 18 Wrz 10 03:31 ]

jeszcze małe pytanie

jeżeli dobrze rozumiem poniższy fragment kodu mówi że moc silników ustawiona jest na 10%

mam rację?

void motor1_set_power(unsigned char power) {
   if (power < MOTOR1_MAX_POWER) {
       motor1_power_config = power * 10;
   } else {
       motor1_power_config = MOTOR1_MAX_POWER * 10;
   }
}

Udostępnij ten post


Link to post
Share on other sites

Wrzuciłeś maleńki wycinek jakiejś kodu w C, jakiejś funkcji odwołującej się do zmiennych (a może #define'ów), o których nie wiemy, gdzie są potem wykorzystane. Jak dla mnie to ten kod tylko mnoży jakieś zmienne, na podstawie wartości zadanej. Pokaż cały kod albo coś, bo na podstawie tego to nic nie wiadomo.

Udostępnij ten post


Link to post
Share on other sites

Demolka, nie staraj się być mądrzejszy od wszystkich na tym forum, skoro się pytasz to każdy chce ci pomóc. Luko i Nawyk mają rację - weź się za jakiś kurs programowania. Jeżeli się przyłożysz, bo z tego co napisałeś to czasu na naukę nie tracisz, to w ciągu miesiąca opanujesz Bascoma, z kursu na diodzie bądź z książki Marcina Wiązani o długiej nazwie, którą możesz "kupić" na googlach za cenę prądu zużywanego przez komputer. Będziesz to musiał zrobić prędzej czy później, lepiej prędzej.

To jest taka różnica jak między nauką a wkuwaniem - ty wkuwasz robotykę, prawie nic nie rozumiesz i interesuje cię tylko efekt końcowy.

[ Dodano: 18 Wrz 10 05:16 ]

Co do kursu wprowadzania zmian do programu mini-sumo

to nie uważam żeby ktoś był zainteresowany.

Udostępnij ten post


Link to post
Share on other sites
/**
* Funkcje do sterowania silnikiem prądu stałego
*/

#include "sumolib.h"

// moc silnika 1
unsigned int motor1_power_config = 0;
// moc silnika 2
unsigned int motor2_power_config = 0;

/**
* Inicjalizacja prostej obsługi silników
*/
void motor_init() {
   setb(MOTOR1_PWM_DDR, MOTOR1_PWM_PIN);
   setb(MOTOR2_PWM_DDR, MOTOR2_PWM_PIN);
   setb(MOTOR1_DIR_DDR, MOTOR1_DIR_PIN);
   setb(MOTOR2_DIR_DDR, MOTOR2_DIR_PIN);

   // ustawienie rejestrów
   TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM11) | _BV(WGM10);
   if (MOTOR1_PWM_NEGATE) {
       TCCR1A |= _BV(COM1A0);
   }
   if (MOTOR2_PWM_NEGATE) {
       TCCR1A |= _BV(COM1B0);
   }
   OCR1A = 0;
   OCR1B = 0;
   TCCR1B = 0x00; 
   TCCR1B |= PWM_PRESCALLER_CONFIG;

   // ustawienie stanów początkowych wyjść DIR
   if (!MOTOR1_DIR_NEGATE)
       clr(MOTOR1_DIR_PORT, MOTOR1_DIR_PIN);
   else
       setb(MOTOR1_DIR_PORT, MOTOR1_DIR_PIN);

   if (!MOTOR2_DIR_NEGATE)
       clr(MOTOR2_DIR_PORT, MOTOR2_DIR_PIN);
   else
       setb(MOTOR2_DIR_PORT, MOTOR2_DIR_PIN);

   // ustawianie mocy
   motor1_set_power(MOTOR1_DEFAULT_POWER);
   motor2_set_power(MOTOR2_DEFAULT_POWER);

}

/**
* Ustawia moc silnika 1 wyrażoną w %
*/
void motor1_set_power(unsigned char power) {
   if (power < MOTOR1_MAX_POWER) {
       motor1_power_config = power * 10;
   } else {
       motor1_power_config = MOTOR1_MAX_POWER * 10;
   }
}

/**
* Ustawia moc silnika 2 wyrażoną w %
*/
void motor2_set_power(unsigned char power) {
   if (power < MOTOR2_MAX_POWER) {
       motor2_power_config = power * 10;
   } else {
       motor2_power_config = MOTOR2_MAX_POWER * 10;
   }
}

/**
* Zatrzymanie silnika 1
*/
void motor1_stop() {
   OCR1B = 0;
}

/**
* Zatrzymanie silnika 2
*/
void motor2_stop() {
   OCR1A = 0;
}

/**
* Uruchomienie silnika 1
* obroty w przód
*/
void motor1_forward() {
   // zatrzymanie silnika
   motor1_stop();

   // opóźnienie    
   if (MOTOR1_DELAY > 0) {
       wait_ms(MOTOR1_DELAY);
   } else {
       wait_ms(1);
   }

   // ustawienie kierunku
   if (!MOTOR1_DIR_NEGATE)
       clr(MOTOR1_DIR_PORT, MOTOR1_DIR_PIN);
   else
       setb(MOTOR1_DIR_PORT, MOTOR1_DIR_PIN);

   // opóźnienie    
   if (MOTOR1_DELAY > 0) {
       wait_ms(MOTOR1_DELAY);
   } else {
       wait_ms(1);
   }

   // uruchomienie silnika
   OCR1B = motor1_power_config;
}

/**
* Uruchomienie silnika 2
* obroty w przód
*/
void motor2_forward() {
   // zatrzymanie silnika
   motor2_stop();

   // opóźnienie
   if (MOTOR2_DELAY > 0) {
       wait_ms(MOTOR2_DELAY);
   } else {
       wait_ms(1);
   }

   // ustawienie kierunku
   if (!MOTOR2_DIR_NEGATE)
       clr(MOTOR2_DIR_PORT, MOTOR2_DIR_PIN);
   else
       setb(MOTOR2_DIR_PORT, MOTOR2_DIR_PIN);

   // opóźnienie
   if (MOTOR2_DELAY > 0) {
       wait_ms(MOTOR2_DELAY);
   } else {
       wait_ms(1);
   }    

   // uruchomienie silnika
   OCR1A = motor2_power_config;
}


/**
* Uruchomienie silnika 1
* obroty w tył
*/
void motor1_backward() {
   // zatrzymanie silnika
   motor1_stop();

   // opóźnienie    
   if (MOTOR1_DELAY > 0) {
       wait_ms(MOTOR1_DELAY);
   } else {
       wait_ms(1);
   }

   // ustawienie kierunku
   if (!MOTOR1_DIR_NEGATE)
       setb(MOTOR1_DIR_PORT, MOTOR1_DIR_PIN);
   else
       clr(MOTOR1_DIR_PORT, MOTOR1_DIR_PIN);

   // opóźnienie    
   if (MOTOR1_DELAY > 0) {
       wait_ms(MOTOR1_DELAY);
   } else {
       wait_ms(1);
   }    

   // uruchomienie silnika
   OCR1B = motor1_power_config;
}

/**
* Uruchomienie silnika 2
* obroty w tył
*/
void motor2_backward() {
   // zatrzymanie silnika
   motor2_stop();

   // opóźnienie    
   if (MOTOR2_DELAY > 0) {
       wait_ms(MOTOR2_DELAY);
   } else {
       wait_ms(1);
   }

   // ustawienie kierunku
   if (!MOTOR2_DIR_NEGATE)
       setb(MOTOR2_DIR_PORT, MOTOR2_DIR_PIN);
   else
       clr(MOTOR2_DIR_PORT, MOTOR2_DIR_PIN);

   // opóźnienie
   if (MOTOR2_DELAY > 0) {
       wait_ms(MOTOR2_DELAY);
   } else {
       wait_ms(1);
   }    

   // uruchomienie silnika
   OCR1A = motor2_power_config;
}

to jest cały kod z pliku "motor"

ja mam tak od kiedy pamiętam zawsze uczyłem się od końca... najpierw składam zabawkę a na końcu sprawdzam jak miałem to zrobić...

Udostępnij ten post


Link to post
Share on other sites

Przyznam się, że nie przeczytałem całego tego kodu, bo nie czuję ku temu wewnętrznej potrzeby 🙂 Poza tym jak się pisze własne programy, to nie trzeba się domyślać, co artysta miał na myśli. W tym wypadku sądzę jednak, że jest to zwykła funkcja skalująca wartość zmiennej wyrażoną w procentach, czyli intuicyjną, na wartość potrzebną procesorowi, z zabezpieczeniem przed przekroczeniem wartości maksymalnej. Pewnym drobnym utrudnieniem jest to, że Luko właśnie pije herbatę, ale nie jest na diodzie, i jak ją wypije to bezmyślnie wyrzuci fusy, i w żaden sposób nie dowiemy się, co wyraża MOTOR1_MAX_POWER, jakie przyjmuje wartości, i jak to się ma do procntów w komentarzu przed funkcją. Można mieć tylko nadzieję, ze ta funkcja

/**
* Ustawia moc silnika 1 wyrażoną w %
*/ 

Więc moc silnika jest ustawiona na wartość zadaną parametrem funkcji, a nie 10%.

Udostępnij ten post


Link to post
Share on other sites

trochę mnie niebyło...

ale odpisuje we wtorek tak jak miałem 😋

program działa tylko nie zadziałała komenda pętli

czeka mnie trochę sprawdzania kodu...

Udostępnij ten post


Link to post
Share on other sites

Drogo... Wklep sobie na Allegro STK500v2 - uruchomisz go bez problemów nawet na Windows 7 64-bit. Niektóre (wszystkie?) mają tryb HID, czyli instaluje się bez żadnych sterowników. Do programowania polecam aplikację SinaProg - w artykułach jest tutorial krok po kroku jak z tego korzystać.

Poza tym - temat wałkowany na forum od zarania dziejów...

Udostępnij ten post


Link to post
Share on other sites

Wiem, że jest stosunkowo drogi. Szperałam, naczytałam się schematów własnych programatorów i chyba wystraszyłam się plejady krzaków na dzień dobry. Z założenia lepiej chyba wyposażyć się w miarę niezawodny osprzęt pomiarowy i programujący, by móc z całą radosną twórczością i ułańską fantazją krzaczyć, spalać i destroić samodzielnie 🙂) Pójdę za Twą radą. Wielkie dzięki Nawyk:)

Udostępnij ten post


Link to post
Share on other sites

Hej,

Postanowiłam posłuchać bardziej doświadczonego i teraz mam zagwózdkę.

Nabyłam http://allegro.pl/usb-avr-isp-ii-ft-stk500v2-stk500-ft232-gen-kable-i1259268719.html i tak się lamersko zastanawiam gdzie mam umieścić mój mikrokontroler.

Mam sobie teraz sama wytrawić nową płytkę, doprowadzić odpowiednie ścieżki do odpowiednich pinów, dopiąć zasilanie, podłączyć programator do uprzednio zamontowanego wejścia na ww ustrojstwo?

Jesli tak to kicha - normalnie jakbym lutownicę sobie z części składała.

Jak to najprościej uruchomić? Proszę serdecznie o odpowiedź, bo 1 robocik skończony i palę się do programowania:))

Pozdrawiam:)

Udostępnij ten post


Link to post
Share on other sites

Płytka stykowa tak będzie szybciej 😉

Ewentualnie płytka uniwersalna, ale mi (też zaczynam) strasznie długo się z nią schodzi.

Udostępnij ten post


Link to post
Share on other sites

Zapytałam o fizyczne podłączenie programatora, który polecałeś (nie kurs Bascoma lub odpowiedzi na często zadawane pytania). Pierwszy (do którego podesłałam link miał wbudowane podstawki na różne mikrokontrolery z różną ilością pinów. A ten polecany przez Ciebie jest zamknięty i wydaje mi się potrzebuje płytki dodatkowej, którą muszę sama przygotować, czy tak?

Udostępnij ten post


Link to post
Share on other sites
Hej,

Nabyłam ... i tak się lamersko zastanawiam gdzie mam umieścić mój mikrokontroler.

Mam sobie teraz sama wytrawić nową płytkę, doprowadzić odpowiednie ścieżki do odpowiednich pinów, dopiąć zasilanie, podłączyć programator do uprzednio zamontowanego wejścia na ww ustrojstwo?

Jesli tak to kicha - normalnie jakbym lutownicę sobie z części składała.

Ehh no cóż w sumie jeżeli nie chcesz robić płytki z prockiem by ją zaprogramować, to w takim razie po co Ci programator? Niestety tak to wygląda przeważnie, że jak się coś chce programować to sobie trzeba zrobić jakąś płytkę, bądź kupić jakiś zestaw ... w każdym bądź razie skoro chcesz coś budować to się zaprzyjaźnij z lutownicą, bo bez tego będzie licho 🙂

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...