Skocz do zawartości

atlantis86

Użytkownicy
  • Zawartość

    127
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    10

Wszystko napisane przez atlantis86

  1. Ok, już chyba wiem w czym rzecz. Spojrzałem na dokumentację i faktycznie masz rację - Arduino Core dla ESP8266 nadal korzysta z SDK NONOS. Rzuciłem też okiem na port libmad dla ESP8266. Kod wykorzystuje low-level API, w które nawet jeszcze nie zacząłem się wgryzać. Wygląda na to, że za jego pomocą faktycznie można stworzyć kod sekwencyjny, ale kosztem napisania od podstaw swoich własnych funkcji odpowiedzialnych za pobieranie i zwracanie danych. Najwyraźniej właśnie to zrobili twórcy biblioteki Arduino, która poza oryginalnymi plikami libmad posiada też sporo nowego kodu. Może faktyc
  2. O tym też myślałem, ale na razie szukam bardziej uniwersalnego rozwiązania. Zakładam, że w przyszłości będę chciał wykorzystać tę samą bibliotekę także na innych układach, z jednym rdzeniem (PIC32, STM32). Właśnie nie bardzo mogę. To znaczy mogę, ale kosztem użycia bardzo brzydkiego kodu. W swoich dotychczasowych projektach stosuję rozwiązanie, które wygląda następująco: int main (void) { while(1) { uart_rx_hndle(); network_handle(); log_data_to_file(); } return 0; } Każda z takich funkcji wygląda następująco: void func_handle (void) { static uint32_
  3. Szukałem ostatnio jakiegoś sposobu programowego dekodowania MP3 na mikrokontrolerze (w tym przypadku konkretnie Raspberry Pi Pico). Parę dni temu na forum polecono mi bibliotekę libmad. Udało mi się ją bez większego programu skompilować i przystąpiłem do jej uruchamiania. Działanie biblioteki opiera się na callbackach - przystępując do dekodowania audio trzeba zdefiniować kilka funkcji, które będą wywoływane w określonych sytuacjach (odczyt porcji danych, zgłoszenie błędu, zapis zdekodowanych danych do bufora DAC ). Każda funkcja zwraca wartość determinującą dalsze postępowanie - najważni
  4. Hmm... W sumie racja. Nie wiem czemu nie pomyślałem o najprostszej opcji.
  5. Libmad. Moja pomyłka. Czyli po prostu powinienem np. użyć funkcji map() celem przepisania wartości 24bitowych na zakres 0-255? Też jestem ciekaw. Na razie jeszcze nie bawiłem się z PIO, w obecnie powstającym projekcie nie potrzebuję wysokiej jakości audio.
  6. Ok, na razie udało mi się uruchomić na Pico odtwarzanie dźwięku PCM z plików WAV (PWM i timer) oraz skompilować LibMAN. W wolnej chwili zabiorę się za próbę uruchomienia odtwarzania MP3. W międzyczasie chciałem zapytać, czy ktoś się orientuje jak wygląda kwestia formatu wyjściowego LibMAN. Z opisu biblioteki wygląda, że produkuje ona dane PCM 24bit. Ponieważ u mnie pracuje bardzo prosty 8 bitowy "DAC" na PWM, dałoby się ją jakoś skonfigurować, żeby na wyjściu produkowała takie dane? Czy muszę je ręcznie konwertować?
  7. Ok, po wlutowaniu VS1003 okazało się, że wszystko działa. Czyli najwyraźniej winę ponosiła przyczyna opisana powyżej.
  8. To może jeszcze przy okazji zapytam: istnieje jakaś prosta w implementacji biblioteka do dekodowania MP3, którą też mógłbym przetestować na RPi Pico?
  9. Jeśli byłaby taka możliwość, to tak. AVI to format kontenera do przechowywania strumieni multimedialnych, MJPEG to format bardzo lekkiego kodeka wideo w którym każda klatka jest obrazkiem JPEG. Gdyby udało mi się dobrać do tych danych z poziomu mikrokontrolera, ułatwiłoby mi to bardzo mocno przygotowywanie treści, bo są to formaty obsługiwane przez popularne programy do kompresji wideo.
  10. Ok, pierwsze testy biblioteki PicoJPEG są bardzo obiecujące. Na RaspberryPi Pico pojedynczy plik 64x32 w skali szarości dekoduje się w jakieś 8-9 ms. W rzeczywistości będzie trochę więcej, bo kod nie uwzględnia jeszcze przepisywania zdekodowanych danych do bufora na bitmapę, ale tutaj różnica będzie minimalna. Ponieważ zadowoli mnie kilkanaście klatek na sekundę, pozostaje naprawdę sporo czasu na pozostałe zadania - nawet jeśli uwzględni się wyłuskiwanie ramek JPEG z pliku AVI zakodowanego MJPEG czy jakieś dekodowanie audio. A mam przecież jeszcze drugi rdzeń i PIO do pomocy. Swoją dro
  11. Ok, na razie udało mi się znaleźć coś takiego. Kompiluje się bez problemu pod RPi Pico, bez konieczności wprowadzania żadnych zmian do kodu. Zobaczymy czy i jak działa. https://github.com/richgel999/picojpeg
  12. Na te biblioteki już trafiłem przeglądając wyniki wyrzucone przez Google'a. Tę pierwszą można też chyba wyklikać w STM32CubeMX. Czy są gdzieś dostępne materiały wyjaśniające jak dodać bibliotekę do projektu pod mikrokontroler? Bo z tego co widzę, to paczki do ściągnięcia ze stron projektu są przystosowane raczej do kompilacji na PC. Jest może coś "embedded friendly", podobnego np. do "FatFS-a"? Raspberry PI Pico chyba wcale aż tak bardzo nie wyprzedza innych układów, które biorę pod uwagę: PIC32MX795F512L to jednak ciągle całkiem wydajny układ MIPS, taktowany 80 MHz.
  13. Szukam jakiejś biblioteki, która pozwoliłaby na w miarę szybkie dekodowanie plików JPEG, a jednocześnie była prosta w implementacji. Preferuję coś napisanego w czystym C, w oderwaniu od warstwy sprzętowej (a więc bez wstawek asemblerowych czy odwołań do rejestrów konkretnego układu), dzięki czemu mógłbym taki kod w miarę prosto przenosić np. pomiędzy PIC32, STM32, ESP32 czy RPi Pico. Na chwilę obecną dekodowane pliki będą bardzo lekkie - kilkadziesiąt na kilkadziesiąt pikseli, w skali szarości. Ponieważ jednak planuję eksperymentować z odtwarzaniem wideo skompresowanego MJPEG byłoby dobrz
  14. Niewykluczone, że znalazłem możliwą przyczynę, chociaż ciągle nie wiem co mogło za nią odpowiadać... Ponieważ podczas prób delikatnie uszkodziłem płytkę, postanowiłem wytrawić i złożyć ją ponownie. Przy tej okazji przeniosłem na nowe PCB wszystkie elementy za wyjątkiem VS1003. Efekt uruchomienia układu był taki, że tym razem rejestry zostały odczytane jako 0xFFFF, bo nie miało ich co ściągnąć do masy (jak widać na obrazku wrzuconym wcześniej, po ustawieniu pinu CS na stan nisku, VS1003 sprowadzał linię MISO do masy). Na tym etapie postanowiłem upewnić się co do działania linii CS, DC
  15. Ok, nie miałem dzisiaj za bardzo czasu na podpinanie analizatora logicznego, ale na szybko zrobiłem dwa inne testy - zastosowałem zaproponowaną przez Ciebie konfigurację SPI w poprzednich wersjach płytki, z mikrokontrolerami PIC24 i PIC32. Efekty wyglądają następująco: Płytka z PIC32. Było CPOL=0, CPHA=1 (w mikrokontrolerach PIC te bity mają nieco inne nazwy, ale wolę stosować jednolite nazewnictwo, żeby nie robić zamieszania). W takiej konfiguracji układ działał w 100%, to znaczy mogłem zarówno odczytać zawartość rejestrów, jak i odtwarzać muzykę. Teraz ustawiłem CPOL=0 i CPHA=0. Nic
  16. To też sprawdzę, tylko podczas testów uszkodziłem ścieżkę i wolę już tego nie lutować o tej porze. Poza tym jak mówiłem - testowałem działanie programu przy "1 Edge" i zachowuje się od dokładnie tak samo - również wszystkie rejestry mają 0x00, więc nie widzę powodu, dla którego przebieg na analizatorze wyglądać inaczej. Sprawdziłem też jak właściwie wygląda konfiguracja SPI w działającym układzie na PIC32: SPI1CON = (_SPI1CON_ON_MASK | _SPI1CON_CKE_MASK | _SPI1CON_MSTEN_MASK); //8 bit master mode, CKE=1, CKP=0 Zgodnie z dokumentacją: W moim kodzie na PIC32 CKP jest
  17. W tej chwili dysponuję niestety tylko przykładem z błędnie ustalonym CPOL. To gotowa płytka i podpięcie się analizatorem wymaga lutowania kynaru do dość cienkich ścieżek. Dzisiaj zdążyłem już odłączyć te kable, podłączę je ponownie dopiero jutro, żeby zobaczyć jak zachowuje się układ przy nowej konfiguracji SPI. Na obrazku przykład odczytu rejestru o adresie 0x00 (MODE), który na działającym układzie z PIC32 ma wartość 0x800. EDIT: Jednak podpiąłem ponownie analizator. Poniżej przebiegi podczas próby odczytu tego samego rejestru, z CPOL: Low i CPHA: 2 Edge.
  18. Ok. Ustawiłem "Polarity: Low" (CPOL=0), a potem próbowałem zarówno Phase 1 jak i Phase 2. Ciągle rejestry są odczytywane jako 0x00... Gdzieś jeszcze znajdować się problem? Zastanawia mnie jeszcze konstrukcja, w której próbuję zmieniać prescaler: MODIFY_REG(hspi1.Instance->CR1, SPI_BAUDRATEPRESCALER_256, SPI_BAUDRATEPRESCALER_32); //2.5 MHz To nie tutaj gdzieś coś się miesza?
  19. Który parametr za to odpowiada? Jak to zmienić? Jakby coś,to wrzucam załącznik z wyeksportowanym kompletem danych z analizatora. Swoją drogą zauważyłem, że jedna ze starszych wersji płytki (ta na PIC24) również ma do czynienia z podobnym błędem. Tam odtwarzanie co prawda działa, ale przy starcie zawartość wszystkich rejestrów również wyświetla się jako 0x00. Na płytce z PIC32 mam działający odtwarzacz oraz prawidłowe wartości rejestrów. Na STM32 jak na razie ani nie udało mi się uruchomić odtwarzania, ani wyświetlić zawartości rejestrów przy starcie. STMVS1003.zip
  20. Próbuję właśnie uruchomić odtwarzacz MP3 VS1003 na jednej z moich płytek z STM32F107RCT6. Używam do tego biblioteki Andy'ego Karpova, którą kiedyś przeportowałem i przetestowałem na PIC32, a teraz próbuję ją przetestować na STM32. Kof wygląda następująco: vs1003.c /* Copyright (C) 2012 Andy Karpov <andy.karpov@gmail.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. */ #include <stdio.h> #include <stdlib.h> #include <stdint.h&g
  21. W swoich projektach na PIC32 często korzystałem z kilku "napędów" jednocześnie. Często był to m.in. PenDrive, karta USB (przez SPI) oraz niewielka pamięć FLASH (również na SPI). Wtedy ręcznie pisałem funkcje w diskio.c, informując bibliotekę w jaki sposób dostać się do sektorów na poszczególnych urządzeniach. Każdemu urządzeniu ręcznie nadawało się jakiś numer, a potem w funkcji odwoływało się do konkretnego urządzenia w zależności od tego, jaki numer został przekazany przez parametr prdv. Przykładowo: /* Definitions of physical drive number for each drive */ #define SPI_FLASH 0 /* E
  22. Ok. Wygląda na to, że mam coś nie tak z taktowaniem... Obok instrukcji wysyłającej dane przez UART dodałem też funkcję zmieniającą stan konkretnego pinu. Podpiąłem do niego analizator stanów logicznych i zmierzyłem długość impulsu - stan zmienia się co dwie sekundy, zamiast co jedną. Następnie podłączyłem analizator do do wyjścia UARTa - faktycznie widać na nim impulsy składające się na transmisję. Program rozpoznaje w nim sekwencję składającą się na słowo "Test" jednak wykrywa baudrate na poziomie 57971 - czyli z grubsza mniej więcej połowa 115200 (algorytm nie jest zbyt dokładny). Termi
  23. Trafiłem na kolejny problem. Postanowiłem uruchomić UART, żeby mieć wygodne narzędzie do debugowania w dalszych etapach uruchamiania płytki. Uruchomiłem UART1 (próbowałem także z UART3 w trybie half-duplex/transmit only) w STM32CubeMX, dodałem funkcję _write() odpowiedzialną za działanie funkcji printf(), a następnie w pętli głównej napisałem instrukcję, która powinna co 10 sekund wysyłać komunikat za pomocą printf(). Do pinu TX podłączony konwerter UART-USB, w roli terminala używam linuksowego screena, ustawionego na właściwą prędkość 115200 bps. Czyli innymi słowy coś, co robiłem wiele
  24. Ok, chyba moja poprzednia hipoteza okazała się być prawidłowa. Sam mikrokontroler działa. Dodałem sterownik Ethernet i lwIP. Urządzenie się nie zawiesza, ale po podłączeniu go do sieci lokalnej nie znajduję go też na liście w routerze. Stąd kolejne pytanie - kod wygenerowany przez STM32CubeMX wystarczy do uruchomienia stosu TCP/IP z DHCP na urządzeniu, czy trzeba jeszcze coś ręcznie dopisać?
  25. Ok, źle zinterpretowałem twój komentarz. Tak, to ma być radio Internetowe z wykorzystaniem DP83848 i dekodera VS1003. Projekt zacząłem rozwijać jakiś czas temu, początkowo na na PIC24 z ENC28J60, potem przeniosłem się na PIC32 wykorzystując wbudowany interfejs RMII, aż w końcu postanowiłem zrobić (mam nadzieję) ostateczną wersję płytki z STM32, na której dokończę projekt. Wcześniejsze wersje mają uruchomiony sprzęt, więc w sumie jeśli już napiszę warstwę aplikacji, to będzie ją można w miarę łatwo przenieść na tamte płytki. W sumie przyszła mi do głowy jeszcze jedna możliwość. W STM32Cu
×
×
  • 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.