Skocz do zawartości

Tablica liderów


Popularna zawartość

Pokazuje zawartość z najwyższą reputacją 15.03.2016 we wszystkich miejscach

  1. 1 punkt
    Mnie też wydaje się dziwne, że nie masz oscyloskopu.. Nie wiem jakie robiłeś eksperymenty wcześniej ani do czego doszedłeś z timerem 1. Patrzę na program, który ostatnio wrzuciłeś i nie widzę w nim żadnych przerwań od timera więc WTF? Widzę prosty algorytm. Może są jakieś pozaziemskie przyczyny dla których on nie działa, ale dopóki nie przejdziesz całego procesu uruchamiania (wypunktowanego wyżej) nie masz prawa o nich nawet wspomnieć. Stwierdzenie "Na timerze 1 działało" mniej więcej znaczy tyle co standardowe "Dziwne, u mnie działa". Znajdź błąd w swoim kodzie (lub sprzęcie) albo udowodnij sobie i nam, że wszystko jest OK. Jeśli nie potrafisz, to jak chcesz dalej się w to bawić? Czy swoje dalsze hobby lub co gorsza rozwój zawodowy chcesz oprzeć na wrzucaniu coraz bardziej skomplikowanych programów na różne fora? Nie, oczywiście że nie - nawet Cię o to nie podejrzewam. Wręcz szacun, że bez sprzętu pomiarowego porywasz się na tak ciekawe zadania. A nic tak nie uczy praktyki programowania jak uruchamianie własnego kodu w ciężkich warunkach. No, może lepsze jest jedynie uruchamianie cudzego... Napisałem Ci wyżej "jak się zabrać do tego". Nie bój się, to nie gryzie. Zrób pierwszy krok - to nie przepaść. Widzisz punkt 1a? Zrozumiałeś go? Gdzie zatrzymujesz timer? Niekoniecznie? Rozumiesz dlaczego niekoniecznie i jakie to pociąga za sobą konsekwencje. Każdej linii w kodzie musisz być pewien. Nie jesteś? To pytaj. Ale nie każ komuś wślepiać się w program w poszukiwaniu Twoich błędów. Programowanie nie polega na rozkładaniu rąk za każdym razem gdy program nie działa jak chcesz. Jeżeli po tygodniu siedzenia nie widzisz błędu, zmień strategię testów. Nic na oślep. Plan i do roboty. Różnice między tymi timerami nie polegają jedynie na długości licznika. Różnią się też bity sterujące i tryby. Jeżeli chcesz pokryć tu i tu pomiar czasu maks. np. 50ms, to jest chyba oczywistym, że 8-bitowy musi pracować 256 razy wolniej niż 16-bitowy. Znając maksymalną długość mierzonego impulsu (jaka ona jest?), częstotliwość głównego zegara i długość timera chyba jesteś w stanie wymyślić podzielnik jaki powinieneś ustawić by pokryć zakres pomiaru. Zacznij od prostych i oczywistych rzeczy. Dość dziwnym jest wysyłanie dwóch impulsów sondujących jednocześnie. Nawet jeśli czujniki patrzą w dwie różne strony, każdy z nich może usłyszeć echo od przedmiotów sąsiada. Już choćby z tego powodu powinieneś zmienić algorytm na pracę naprzemienną, ale to jest uwaga ogólna. Uruchom jeden pomiar na timerze 2. Krok po kroku. Program testów dostałeś na tacy. Możesz tu wrzucać kolejne wersje kodów z wbudowanymi wstawkami uruchomieniowymi. Zacznijmy od przygotowania procesora do pomiaru, wygenerowania jednego impulsu sondującego i sprawdzenia czy odpowiedni sygnał powraca z czujnika. Nie musisz używać do tego go przerwania. Niech pętla główna poczeka na impuls i wypisze to na porcie szeregowym, dopiero potem możesz zająć się przerwaniem zewnętrznym z tego samego pinu itd itd.. Co więcej, cały ten kod możesz uruchomić kompletnie bez przerwań. Rób rzeczy tak prosto jak się da.
  2. 1 punkt
    Procek, ale tak strasznie, że aż palce parzy. Oddaję płytkę na reklamację, zobaczymy czy producent to uzna. Ale pojawił się w tym momencie inny problem. Na innej płytce, I aby nie zakładać nowego tematu napiszę to tutaj. Mianowicie mam problem z ustanowieniem komunikacji po UARTcie. Płytka to Nucleo STM32F303K8. Niby wydaje się, że wszystko dobrze poustawiane no ale współpracować nie chce. Nic nie wysyła. Parametry w terminalu takie same jak w programie (Baud 115200), port COM taki jak ma płytka. Jakby ktoś zerknął to byłbym wdzięczny. Mi kończą się pomysły co może być nie tak. Kod: #include "stm32f30x.h" #include "delay.h" void send_char(char c){ while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); USART_SendData(USART2, c); } void send_string(const char* s){ while (*s) send_char(*s++); } int main(void) { GPIO_InitTypeDef gpio; USART_InitTypeDef usart; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); GPIO_StructInit(&gpio); USART_StructInit(&usart); //LED gpio.GPIO_Pin = GPIO_Pin_3; gpio.GPIO_Mode = GPIO_Mode_OUT; GPIO_Init(GPIOB, &gpio); //USART //Tx gpio.GPIO_Pin=GPIO_Pin_2; gpio.GPIO_Mode=GPIO_Mode_AF; GPIO_Init(GPIOA,&gpio); //Rx gpio.GPIO_Pin=GPIO_Pin_15; gpio.GPIO_Mode=GPIO_Mode_IN; GPIO_Init(GPIOA,&gpio); //USART Config usart.USART_BaudRate = 115200; USART_Init(USART2,&usart); USART_Cmd(USART2,ENABLE); SysTick_Config(SystemCoreClock / 1000); while(1){ GPIO_SetBits(GPIOB, GPIO_Pin_3); delay_ms(100); GPIO_ResetBits(GPIOB, GPIO_Pin_3); delay_ms(100); send_string("Hello"); } } [ Dodano: 15-03-2016, 22:10 ] Jest ktoś w stanie pomóc ? [ Dodano: 15-03-2016, 22:26 ] Problem rozwiązany. Jakby ktoś potrzebował to trzeba zadeklarować funkcje alternatywne dla pinów (GPIO_PinAFConfig).
  3. 1 punkt
    Znalazłem niszę na naszym rynku. W takim razie czas to naprawić i stać się światowym potentatem w dziedzinie robotyki
Tablica liderów jest ustawiona na Warszawa/GMT+01:00
×
×
  • Utwórz nowe...