Skocz do zawartości

Emerid

Użytkownicy
  • Zawartość

    21
  • Rejestracja

  • Ostatnio

Reputacja

3 Neutralna

O Emerid

  • Ranga
    2/10

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. @Elvis - Przepraszam za zwłokę z odpowiedzią. Kiedy wgrywam poniższych kod do płytki, zmiana jasności diody nie działa poprawnie. Zmienienie typu zmiennej duty jak w linijce poniżej rozwiązuje natomiast problem i zmiana jasności diody przebiega poprawnie. Nie rozumiem dlaczego. uint8_t duty = 0 na uint16_t duty = 0 Poniżej zdjęcie z inicjalizacji i kod źródłowy. /*main.c*/ #include "main.h" uint8_t duty = 0; TIM_HandleTypeDef htim4; DMA_HandleTypeDef hdma_tim4_ch3; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_DMA_In
  2. Mam pytanie odnośnie "Generowanie sygnału PWM z wykorzystaniem DMA". Jak już wcześniej kilka osób zdążyło napisać funkcja HAL_TIM_PWM_Start_DMA() jako *pData oczekuje typu uint32_t, natomiast przy podaniu uint16_t funkcja nadal działa nawet bez rzutowania. Teoretycznie da się zapisać 100 w zmiennej typu uint8_t jako 1100100 i tak początkowo próbowałem, jednak DMA nie pracuje wtedy poprawnie - rzutowanie (uint32_t*) &duty nie pomaga. Czy mógłbym ktoś spróbować wytłumaczyć mi dlaczego tak się dzieje? Pozdrawiam. Podsyłam jeszcze ewentualne poprawki do kursu: "Znamy naszą cz
  3. Dlaczego przy wprowadzaniu TIM10 pojawia się też komenda inicjalizacji zegara portu H? __HAL_RCC_GPIOH_CLK_ENABLE(); Chciałbym też zauważyć, iż w rozwiązaniu zadania domowego nie zrealizowano 2s przerwy między cyklem zapalania i gaszenia LED.
  4. Mógłby mi ktoś jeszcze wytłumaczyć różnicę między GPIO a OLAT?
  5. Moje przemyślenia, którymi podzielę się dla potomnych początkujących: A1, A2 - bity adresu MCP ustawiane napięciowo przy układzie scalonym (w naszym przypadku wiszą w powietrzu, czyli bardziej 0 niż 1, czyli adres : 00) SPI Control byte (device Opcode), czyli nawiązanie komunikacji z urządzeniem to: 0100 0(A1)(A2)(R/W) - W bicie kontrolnym na dwóch bitach ustawiamy adres A1,A2 urządzenia / R=1 w przypadku odczytu z MCP, W=0 w przypadku wysyłania informacji do MCP) Chcąc skomunikować się z MCP wysyłam (Control bit - adres urządzenia oraz kierunek transmisji , adres rejestru
  6. @Gieneq Na stronach 28-33 faktycznie jest opis pinów, ale nie widzę informacji, jak powiązać to z rozmieszczeniem na płytce Nucleo. Chodzi mi o coś podobnego do poniższego rysunku, ale z oficjalnych dokumentów.
  7. W którym pliku mogę znaleźć rozpiskę pinów przypisanych do danych modułów (SPI1, ADC1, GPIOA, itp.)? Do tej pory korzystałem z obrazka znalezionego na internecie, ale jednak chciałbym jakieś bardziej wiarygodnie źródło.
  8. Pytania do zadania 8.1. 1. Jest jakaś gotowa funkcja w C do porównywania tablic? 2. Da się to zrobić szybciej niż porównywanie kolejnych pozycji? (patrz kod) char compare_buffer( uint8_t a[], uint8_t b[], int size) { int i; for (i=0; i<size; i++) { if( a[i] != b[i] ) return 0; } return 1; }
  9. TIM_OC_InitTypeDef oc; oc.OCMode = TIM_OCMODE_PWM2; oc.Pulse = 100; oc.OCPolarity = TIM_OCPOLARITY_HIGH; oc.OCNPolarity = TIM_OCNPOLARITY_LOW; oc.OCFastMode = TIM_OCFAST_ENABLE; oc.OCIdleState = TIM_OCIDLESTATE_SET; oc.OCNIdleState = TIM_OCNIDLESTATE_RESET; HAL_TIM_PWM_ConfigChannel(&tim4, &oc, TIM_CHANNEL_1); HAL_TIM_PWM_ConfigChannel(&tim4, &oc, TIM_CHANNEL_2); HAL_TIM_PWM_ConfigChannel(&tim4, &oc, TIM_CHANNEL_3); -------------------------------------------------------- __HAL_TIM_SET_COMPARE(&tim4, TIM_CHANNEL_1, calc_pwm(b)); __HAL_TIM_SET_COMPARE(
  10. Mam pytanie do zadania 7.4. Co autor miał na myśli? Czy to co zapisałem poniżej jest celem, czy może coś jeszcze innego? 1000 -> 0100 -> 0010 -> 0001 -> 1000 -> ... (1 - dioda zapalona, 0 - dioda zgaszona) Jeśli zadanie jest jak powyżej, to mam w głowie jak to zrobić przy pomocy przerwań. Jeśli okres będzie T=1s, to przy 4 przerwaniach 4*7.7us / 1 s = 0.00308 % okresu, więc całkiem ok. Jeśli miałbym zrobić powyższe zadanie przy pomocy PWM, to niestety nie potrafię sobie tego wyobrazić. PWM ma swoje wypełnienie mierzone od punktu 0, do określonego punktu (PWM1), lub alterna
  11. Moje środowisko nie rozpoznaje stałej ADC_SAMPLETIME_1CYCLES_5, ale chyba podziałało podstawienie wartości 000 zgodnie ze stroną 244 w reference manual - reszta (np. ADC_SAMPLETIME_239CYCLES_5) jest ok. Jeśli mam być szczery to nie zauważyłem żadnej znaczącej różnicy w dokładności pomiarów.
  12. Dla wartości R1 = 10k, R2 = 1k, C3 = 1000u układ działa poprawnie. Problem zaczyna się, kiedy dam R1 = 100R - poniżej zachowanie układu. 1. Kondensator ładuje się normalnie od wartości 0V do 4V (Stan Q = 1, świeci się dioda czerwona) 2. Kondensator rozładowuje się od 4V do 2.08V i zatrzymuje się (Stan Q = 0, świeci się dioda zielona) Trochę pomierzyłem i okazuje się, iż przy zastosowaniu rezystora R1 = 100R napięcie na pinie 7 (discharge) w momencie zwarcia tranzystora rozładowującego nie jest równe 0V (GND), tylko 2.08V. Jakiś pomysł dlaczego tak się dzieje? Edit: Kolejne
  13. Jeśli dobrze rozumiem, w momencie kiedy odbierany jest sygnał, na pinie OUT występuje logiczne zero, czyli masa (GND), zatem dioda nie powinna świecić, bo nie ma zasilania. Czy nie jest odwrotnie? Dioda świeci właśnie w momencie odebrania sygnału. Mógłbym prosić o sprawdzenie, ewentualne wyjaśnienie mi czego nie rozumiem? Edit: Ok, już rozumiem, ale zostawię post. Przy generowanym stanie niskim tworzy się różnica potencjałów, która właśnie pozwala na przepływ prądu. (Dioda jest zasilana z baterii, a nie z układu scalonego i potrzebuje jedynie masy do zamknięcia obwodu)
  14. @Gieneq Dziękuję. Nie wiedziałem nawet, iż istnieje taka funkcja single. Trigger też poprawiłem Widzę piękne drgania Dla ciekawych, czas opadania zbocza 160ns, zatem minimalne pasmo przewodzenia= 0.34/160ns = 2.125 MHz lub dla dokładniejszych pomiarów (kolejne harmoniczne) 3*2.125 MHz = 6.375 MHz. Proszę jeszcze o potwierdzenie czy dobrze rozumiem. Pasmo przewodzenia jest po to, żeby sygnał nie był tłumiony, natomiast próbkowanie zbiera próbki sygnału bez względu na to, czy sygnał został stłumiony, czy nie. Tak to działa?
  15. #include "stm32f1xx.h" void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); } int main(void){ SystemCoreClock = 8000000; HAL_Init(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); GPIO_InitTypeDef gpio; gpio.Pin = GPIO_PIN_5; gpio.Mode = GPIO_MODE_OUTPUT_PP; gpio.Pull = GPIO_NOPULL; gpio.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &gpio); gpio.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3; gpio.Mode = GPIO_MODE_OUTPUT_PP; gpio.Pull = GPIO_NOPULL; gpio.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOC, &gpio);
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.