logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega8 - Silnik krokowy kręci się zbyt długo po komendzie z RS232

Lukines 11 Lut 2013 10:34 2607 16
REKLAMA
  • #1 11918473
    Lukines
    Poziom 9  
    Napisałem program do sterowania silnikami krokowymi. Który pobiera dane z RS232 przez MAX232 . Wysyłam mu w terminalu liczbę Obrotów jaka ma wykonać lecz silnik kręci się bardzo długo zamiast wykonać np 2 obroty . Silnikiem steruje przez uln2003. Poniżej wklejam kod jeśli ktoś ma pomysł lub może mnie nakierować na błąd jaki zrobiłem bardzo był bym wdzięczny.


    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 11918575
    McMonster
    Poziom 32  
    Popraw najpierw kod, bo coś się bardzo źle wkleiło. ;)
  • #3 11918770
    Lukines
    Poziom 9  
    ok już poprawione ;)
  • #4 11918790
    BlueDraco
    Specjalista - Mikrokontrolery
    Co ty nadajesz z tego terminala?
  • REKLAMA
  • #5 11918818
    Lukines
    Poziom 9  
    Wpisuje liczbę i daje wyślij jako liczba lub jako ASCII i jest to samo. Używam RealTerm jako terminala
  • #6 11918830
    BlueDraco
    Specjalista - Mikrokontrolery
    Jeśli wysyłasz cyfrę 2 jako znak ASCII, to powinieneś wykonać 50*50, czyli 2500 sekwencji kroków. Czy coś się nie zgadza?
  • #7 11918840
    Lukines
    Poziom 9  
    Czyli jeśli wyśle mu 2 jako znak ASCII to będzie 50 obrotów bo jeden obrót ustawiłem jako 50 kroków . Czyli jesli wyśle mu np "!" to będzie 32 obroty tak ? . Aby wszystko działało muszę my wysłać liczbę w systemie liczbowym DEC . Sprawdzę wszystko jak będę w domu . Jeśli coś źle zrozumiałem to mnie poprawcie :)
  • REKLAMA
  • #8 11918909
    BlueDraco
    Specjalista - Mikrokontrolery
    Chyba JEST dobrze, nie?
  • #9 11924873
    Lukines
    Poziom 9  
    Mam problem wysyłam mu znak zmieniłem program na Hyper Terminal dużo lepszy niż poprzedni. Zrobiłem funkcje która wysyła tablice ASCII i jest ok dochodzi ładnie. Lecz gdy zrobiłem Wyslij_Znak(Odbierz()); to podaje mu znak a on zwraca co innego co zrobiłem źle ?
  • #10 11924924
    BlueDraco
    Specjalista - Mikrokontrolery
    Póki co nie wiemy nawet, dlaczego uważasz, że Twój program działa nieprawidłowo.
    Terminal wysyła znak, czyli 8 bitów. Twój program odbiera ten znak i interpretuje go jako liczbę 8-bitową, wykonując 50 * x sekwencji kroków, gdzie x - to wartość odebranego bajtu. Co wg. Ciebie jest tu źle?
  • REKLAMA
  • #11 11925029
    Lukines
    Poziom 9  
    W HyperTerminalu wysyłam mu #001 opcja Transmit macros. on zwraca :ááńÁÁůÁń . Jak mu wyślę prosto z klawiatury w tym okienku jego np kilkakrotnie literę 'A' to raz zwróci a raz nie . Głównie zamiast 'A' wyskakuje :ááńÁÁůÁń . Chodzi o to że wysyłam mu to samo a w tabelce gdzie sa Hex, Dec , Bin są różne wartości a nie jedna i ta sama.
  • #12 11925116
    BlueDraco
    Specjalista - Mikrokontrolery
    Jakiej tabelce? Wysyłasz bajt, odbierasz bajt. To, co wyśle mikrokontroler - to wyświetli terminal.

    Jaką masz częstotliwość procesora? żeby uzyskać szybkość transmisji 19200 musi być całkiem spora.
  • #13 11925210
    2rs232
    Poziom 18  
    Przyjrzyj się linią, które oznaczyłem <-XXX.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    edit.
    (1<<RXCIE) bit włącza przerwania rx, nie widzę w kodzie jego obsługi.
  • #14 11925318
    Lukines
    Poziom 9  
    Częstotliwość to : 12Mhz
  • #15 11925379
    2rs232
    Poziom 18  
    Podaj jeszcze jakie parametry transmisji chcesz uzyskać, mam na myśli długość słowa w ramce, bit parzystości i ilość bitów stopu.
  • #16 11925682
    Lukines
    Poziom 9  
    Chce przesyłać w końcowej fazie programu tak : L_300_50 Nie wiem jakie maja być do tego ustawienia . Gdzie L to jest kierunek , 300 to szybkośc max 2500 , 50 to liczba obrotów silnika nie wiem ile jeszcze maxymalnie
  • #17 11925756
    2rs232
    Poziom 18  
    Ważne jest ustawienie takiego samego formatu transmisji w procesorze jak i w terminalu.
    Skorzystaj z ustawień 8N1, czyli 8 bitów danych, bez bitu parzystości, 1 bit stopu.
    Sprawdź w dokumentacji atmegi jakie wartości wpisać do rejestrów UCSRB UCSRC aby uzyskać dany format transmisji.
REKLAMA