Skocz do zawartości

Elvis

Użytkownicy
  • Zawartość

    2422
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    167

Wszystko napisane przez Elvis

  1. Chyba wiem dlaczego nie działa. Trzeba zdefiniować stałą STARTUP_FROM_RESET. W oknie "Project Explorer" kliknij prawym klawiszem na projekcie i wybierz Properties. Następnie poszukaj "Preprocessor Options"->"Preprocessor Definitions" i dodaj STARTUP_FROM_RESET. [ Dodano: 18 Mar 10 09:47 ] Dwa słowa wyjaśnienia. Przed uruchomieniem funkcji głównej programu, czyli main() dzieje się całkiem sporo. Warto otworzyć plik "Philips_LPC210X_Startup.s" - jest tworzony przez CrossStudio podczas zakładania projektu. W tym pliku zdefiniowany jest wektor przerwań oraz procedura obsługi reset-u (czyli prawdziwy początek programu). Linia 150 i kolejne definiuje od czego nasz program się rozpoczyna: reset_handler_address: #ifdef STARTUP_FROM_RESET .word reset_handler #else .word reset_wait #endif Czyli jeśli nie ma zdefiniowanej stałej STARTUP_FROM_RESET po resecie procesor przechodzi do fragmentu reset_wait gdzie znajduje się nieskończona pętla. Dopiero jeśli zdefiniujemy STARTUP_FROM_RESET po resecie następuje skok do reset_handler i program rozpoczyna się normalnie (reset_handler m.in. konfiguruje PLL, dostęp do pamięci Flash). Takie działanie może wydawać się nieco dziwne, ale jest bardzo przydatne podczas pracy z JTAG-iem. W procesorach ARM (nie wiem czy wszystkich, LPC na pewno) JTAG nawiązuje połączenie z procesorem gdy ten już pracuje. Czyli przez JTAG wykonywany jest reset, procesor wykonuje kawałek programu i dopiero wtedy JTAG zatrzymuje jego działanie (oraz uruchamia program ponownie, tym razem z debuggerem). Oznacza to, że początek programu wykonywany jest 2 razy, a co gorsze jeśli na początku programu jest coś co wyłączy JTAG nie będzie możliwości pracy z JTAG-iem, nie będzie można nawet wgrać innego programu (pozostaje możliwość przez RS232). Aby temu zapobiec CrossStudio domyślnie tworzy nieskończoną pętlę na początku programu. Gdy nasz program jest już przetestowany i gotowy, można zdefiniować stałą STARTUP_FROM_RESET i pozbyć się pętli przed programem.
  2. Pamiętaj, żeby odłączyć przewód programujący - inaczej procesor będzie w trybie bootloadera. Czyli spróbuj tak: odłącz wszystkie przewody od płytki, następnie podłącz tylko zasilanie. [ Dodano: 17 Mar 10 10:53 ] Szkoda, że nie uruchomiłeś JTAG-a. Łatwiej jest diagnozować błędy. Na początek można uruchomić program w trybie debug i sprawdzić czy w ogóle działa. Przy okazji - na pewno masz LED podpięty tam gdzie był w module olimex-a?
  3. Prawdopodobnie najwięcej zajmuje biblioteka liczb zmiennopozycyjnych. Lepszym rozwiązaniem jest stablicowanie wyników, a następnie interpolowanie. Dokładność jest oczywiście mniejsza, ale powinna wystarczyć. Najprościej jest zrobić tak: 1) wybierasz liczbę punktów (czyli dokładność), np. 32 2) dzielisz przedział wyników na 32 równe (tak jest najłatwiej) części 3) w excelu wyliczasz ile wynosi wynik dla każdego przedziału 4) wyniki wstawiasz do programu jako tablicę liczb unsigned int Następnie odczytujesz dane z czujnika (dana[1]) i na jej podstawie wybierasz gotowy wynik z tablicy. Lepszą dokładność uzyskasz dodając interpolację wyników.
  4. Jakby co to mam program w C. W bascomie nie programuję, ale pewnie jest jeszcze łatwiej - wystarczy w module podłączonym do HM-T868S wysłać dane na uart, a w podłączonym do HM-R868S odczytać. HM_FSK.zip
  5. Dużo zależy od środowiska w którym zamierzasz programować. KT-LINK współpracuje z CrossStudio oraz OpenOCD. CrossStudio to całkiem rozsądny wybór, jeśli chodzi o relację jakość/cena. OpenOCD to jeszcze tańsze wyjście - współpracuje z darmowymi narzędziami (GNU). Natomiast narzędzia Keil-a są, delikatnie mówiąc, dość drogie. Kompilator to koszt rzędu 3000 euro.
  6. Logon, tutaj masz opis liczb binarnych http://pl.wikipedia.org/wiki/Dw%C3%B3jkowy_system_liczbowy Bit to cyfra w zapisie binarnym, może mieć wartość 0 lub 1. Najlepiej poproś nauczyciela matematyki, żeby ci wytłumaczył na czym to wszystko polega.
  7. Decado, do poukładania nazwisk zawodników użyj tabeli. Jeśli nie chcesz jej mieć na stronie to ustaw szerokość ramki na zero (border="0").
  8. Dżony, przeczytaj dokładnie instrukcję modułów mobota. $crystal = 8000000 $baud = 9600 Moduły pracują z prędkością 57600 nie 9600.
  9. 1wire na pewno da radę, ale jest dość skomplikowana. UART jest raczej do komunikacji 2 układów, przy większej liczbie trzeba się trochę nagimnastykować. Polecam I2C (inaczej nazywane TWI). Pozwala na łatwą współpracę do 32 układów i wymaga tylko 2 linii. Poza tym jest sprzętowo wspierana przez układy atmega. SPI jest najłatwiej zrealizować, ale wymaga więcej linii.
  10. Nie używałem tych modułów. O ile widzę zalecane jest użycie dodatkowego enkodera/dekodera. Inaczej działanie może wymagać programowego kodowania i dekodowania danych.
  11. Zobacz tutaj: https://www.forbot.pl/forum/topics20/radiowa-transmisja-danych-czyli-robot-zdalnie-sterowany-vt2207.htm?highlight=radiowa Najprościej podłączyć HM-T868S do nadajnika, HM-R868S do odbiornika. Będzie działać, chociaż lepiej w programie dodać kontrolę błędów - inaczej sporo zakłóceń może przechodzić. [ Dodano: 18 Lut 10 07:47 ] Jeśli koniecznie chcesz 433MHz zamiast 868MHz to musisz poszukać nieco innych modułów.
  12. Spróbuj zamienić kolejność instrukcji: WYSW_PORT&=akt_wysw[0]; LED_PORT=wysw_znak(sekundy%10); Ewentualnie dodaj małe opóźnienie
  13. Już sobie poradziłem. Przy podanych na schemacie elementach nie chciało mi za nic ruszyć. Zmieniłem wg. układu w AVT-2822 i poszło. Na pewno masz filtry dobrze policzone?
  14. regrom, miał rację. Pomogło wygaszanie przed przełączeniem do kolejnej cyfry. Nie jest prawdą, że: W programie najpierw przełączasz na kolejny segment: WYSW_PORT&=akt_wysw[5]; co powoduje, że na bardzo krótko, ale zawsze zapalasz na nim cyfrę z poprzedniego. Dopiero później wykonujesz: LED_PORT=wysw_znak(godziny/10); co ustawia poprawną wartość. Takie przełączanie jest krótkie, ale jak sam zaobserwowałeś widoczne. Pomysł 3) wcale nie jest zły - efekt byłby o wiele mniej widoczny, gdyby tranzystor przełączał się szybciej.
  15. A co program wyświetla? [ Dodano: 14 Lut 10 10:34 ] Próbowałeś w case 2: wyświetlać inne cyfry? [ Dodano: 14 Lut 10 10:34 ] Możesz jeszcze dodać volatile do deklaracji zmiennych, czyli volatile unsigned int godziny, minuty, sekundy,dziesiatki,jednosci;
  16. nes86, mam małą prośbę. Wykonałem układ wg. Twojego schematu, niestety mam problemy z uruchomieniem. Oscylogram mam daleki od tego co podałeś. Użyłem czujnika BPU-1640TOAH12, na pinach sygnał nadawania jest jak powinien. Nie bardzo natomiast mogę zobaczyć odpowiedź. Chyba tylko dzwonienie widzę na oscyloskopie. Mam taką prośbę, mógłbyś podać dokładniejszy opis, gdzie i jaki sygnał powinien się pojawić?
  17. Wydaje mi się, że tc4424 nie służy do sterowania silnikami. To sterownik mosfet-ów, więc dopiero do niego trzeba podłączyć tranzystory sterujące silnikiem. Te 3A to tylko parametr dla peak, czyli bardzo krótkiego impulsu. Chodzi o znaczne prądy przy przełączaniu tranzystora MOSFET.
  18. Tak jak na schemacie to próbuj. Uszkodzisz akumulator, a możesz nawet spowodować pożar lub eksplozję. Poszukaj na youtube jak wyglądają przeładowane akumulatory. Akumulatory NiMH oraz Li-Pol wymagają ładowarki - kontroli temperatury i prądu ładowania. Jedyne co można łatwo ładować to zabytkowe już dzisiaj Ni-Cd - wystarczy rezystor ograniczający prąd i dioda, ale też nie wolno bezpośrednio podłączać do 5V. Tak czy inaczej nie polecam takiego rozwiązania. LTC3553 to tylko przykład, możesz otworzyć datasheeta, i na podstawie opisu układu poszukać innego. Teraz jest tego pełno bo dużo urządzeń ładuje akumulatory przez USB. Co do ceny, to znalazłem LTC3559 w farnel-u. Cena 5.58 euro. Jakiego typu są akumulatory, masz w tym padzie? [ Dodano: 11 Lut 10 08:57 ] Co do MAX1811, który zaproponował GruX, to jest dostępny w TME i chyba ma wszystko co potrzeba. Pod warunkiem użycia 1 ogniwa li-pol.
  19. Są do tego gotowe układy. Na szybko znalazłem coś takiego LTC3553 (http://cds.linear.com/docs/Datasheet/3553f.pdf). Ma w sobie wszystko co potrzeba, stabilizator i jeszcze ładowarkę dla akumulatora.
  20. Ja stosuję nieco łatwiejszą opcję niż precyzyjne ustawianie potencjometru. Dla ruchu w jedną i drugą stronę generuję impulsy z dużym zapasem (daleko od obszaru zatrzymania) - wtedy dokładność rezystorów/ustawienia potencjometru nie ma dużego znaczenia. Aby zatrzymać serwo przestaję generować impulsy - jest to dużo pewniejsze niż ustalenie szerokości impulsu przy którym serwo jest zatrzymane.
  21. Zgadzam się z sobal44, najprościej użyć układów z mobot-u. Po stronie sterowania podłączyć laptopa i moduł po usb. Do sterowania silnikiem wykorzystać gotowy moduł. Takie moduły najczęściej wymagają tylko dwóch sygnałów: kierunku i impulsu generującego ruch. Wystarcz wiec jakikolwiek mały procesorek, np. atmega8. Uart spiąć z modułem mobota, sterownik silnika krokowego podpiąć pod dowolne piny IO i napisać program.
  22. Nie wiem jak to wygląda w bascomie, ale w C można używać tylko wybranych pinów do odczytu ADC. Więc prawdopodobnie bascom ma taką samą możliwość. Ogólnie nikt nie każe używać wszystkich portów przypisanych do ADC. Spokojnie można używać np. tylko jednego pinu. Pozostałe mogą być wejściami, a nawet wyjściami.
  23. Spróbuj hyperterminalem spod windowsa. Jeśli nie pomoże to jeszcze wykonaj kabel null-modem: http://pl.wikipedia.org/wiki/Nullmodem Chodzi o połączenie RTS+CTS (po stronie PC). Czasem to pomaga.
  24. Coś tu nie tak, wg. datasheet-a PIC16F84A ma 1K pamięci Flash, naświetlać nie ma czego.
  25. To dziwne. U mnie działa nawet bez podłączonego uC. Jakie masz parametry portu COM? Wybrałeś brak sterowania przepływem?
×
×
  • Utwórz nowe...