Elektroda.pl
Elektroda.pl
X
TermopastyTermopasty
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Mały radiomagnetofon internetowy na STM32F407VGT6

Tytus Kosiarski 14 Maj 2017 16:37 12285 36
  • #31
    miszczo997
    Poziom 28  
    Z oryginalnego projektu kompilacja odbywa się poprzez skrypt make.sh dostępny w katalogu mp3 z projektem. Jeżeli masz dodane zmienne path dla gcc w systemie, projekt powinien się skompilować.
    Program później wgrywasz przez skrypt pythona z katalogu C:\Espressif\utils\ESP8266 lub dowolnego innego programu, który potrafi wgrać obraz pod konkretny adres. Adresy są wypisane na stronie w opisie projektu. Powalczyłem trochę u siebie z kompilacją, ale mam zainstalowane zbyt dużo różnych wersji kompilatorów w systemie przez co zrobił się straszny nieład z plikami. Jak znajdę czas na tygodniu to powalczę w wirtualce z kompilacją. Zamówiłem też kilka tda na aliexpress, także jak dojdą będę próbował je uruchomić. Znacie może jakiś tańszy zamiennik pamięci ram 23LC1024?
  • TermopastyTermopasty
  • #32
    Tytus Kosiarski
    Poziom 15  
    A musi być tak pojemna? Może starczy 2 szt 23K256 (najstarszy bit adresowy w programie będzie odpowiednio sterować CS-ami tych pamięci) i już jest 64kB.
    Pozdrawiam
  • TermopastyTermopasty
  • #33
    Duch__
    Poziom 31  
    Znalazłem na jednej stronie 23LC1024 po 12,10zł/szt brutto + dostawa ale czas realizacji to 2-3 tygodnie. To chyba będę wolał dołożyć parę złotych i kupić dekoder VS1053 za 70zł. Przede wszystkim wszystko łatwiej się kompiluje w Arduino niż w tym Eclipse. Niestety nie mam doświadczenia z tym kompilatorem to tak dosyć błądzę cały czas. Dodatkowo szkoda że nie ma możliwości zmiany stacji. Wtedy projekt byłby uniwersalniejszy.

    Dodano po 9 [godziny] 56 [minuty]:

    Namierzyłem pamięć 23LVC512 dostępną od ręki. Nada się czy nie warto bo za mała?
  • #34
    Tytus Kosiarski
    Poziom 15  
    Z tym VS-em to będziesz mógł już słuchać stacji radiowych nadających w AAC np. na polskastacja.pl. Natomiast zmiana stacji radiowych u mnie polega na wyborze odpowiedniego żądania HTTP wysyłanego następnie przez moduł WiFi do Internetu. Te żądania HTTP (są to ciągi znaków ASCII) mogą być w jakiejś tablicy. Każde żądanie, to dana stacja radiowa. Jakiś przycisk mógłby wybierać z tej tablicy, odpowiednio ją indeksując, potrzebne żądanie. Toteż wydaje mi się, że w tym programie kolegi miszcza997 trzeba poszukać zdefiniowanego żądania HTTP i odpowiednio przerobić tak, by jakimś przyciskiem mieć możliwość wyboru jednego spośród kilku/nastu żądań, zamiast tego jednego zdefiniowanego.
    Natomiast, jeśli chodzi o Eclipse, to niestety nie pomogę...
    Pozdrawiam

    Acha, tak dla informacji, gdzie Duch__u znalazłeś tą pamięć (23LVC512)?
  • #35
    Duch__
    Poziom 31  
    Znalazłem na bns.com.pl, ale aktualnie nie mają na stanie ani 1024 ani 512 :-( Zastanawiam sie czy 23k256 by nie staczyła?
  • #36
    Tytus Kosiarski
    Poziom 15  
    Witam

    OK, zamieszczam nowy kod źródłowy i wsad do mikrokontrolera programu radiomagnetofonu, w którym usunąłem błąd powodujący wyciek pamięci podczas grania radia oraz dodałem dwa usprawnienia poza tym.
    Błąd wycieku pamięci polegał na zgłoszeniu faktu braku pamięci przez dekoder AAC podczas kolejnej próby nawiązania połączenia z serwerem wybranej stacji radiowej, gdy wcześniej nastąpiło zerwanie tego połączenia podczas grania radia. Ponieważ program radiomagnetofonu jest tak napisany, że w przypadku zrywania połączenia z Internetem następuje ponowna próba połączenia i wówczas ciąg takich prób kończy się jedynie wtedy, gdy wystąpi błąd timeoutu lub zanik sieci WiFi. Po kilkunastu takich próbach (podczas każdej takiej próby ubywał 2kB blok pamięci) nie starczało już pamięci dla dekodera AAC. W ogólności przyczyną takiego stanu rzeczy był brak zwalniania takiego właśnie obszaru pamięci przez bibliotekę FAT16/32 File IO po odczytaniu z pamięci Flash SPI danych potrzebnych do połączenia się z serwerem radiowym. Wykryłem ten fakt i sprawdziłem skuteczność poprawki poprzez alokację pamięci dla próbnej tablicy w wierszu 1641 w pliku main.c. Po poprawce malloc() zwracał ten sam adres dla próbnej tablicy.
    Pierwsze usprawnienie zaś polega na wyświetlaniu fclk mikrokontrolera podczas grania plików oraz radia wtedy, gdy długość nazwy granego pliku lub granego strumienia radiowego pozwala na wyświetlenie tej informacji (pozostaje pusty wiersz na LCD). W przeciwnym razie informacja ta jest pomijana, i ten wiersz LCD służy do wyświetlenia dalszego ciągu nazwy granego pliku lub strumienia radiowego.
    Drugie, poważniejsze usprawnienie polega na dorobieniu możliwości kalibracji panelu dotykowego. To usprawnienie jest wprowadzone po konieczności wymiany wyświetlacza po upadku radia na podłogę, co spowodowało uszkodzenie wyświetlacza LCD. Obecnie współczynniki kalibracyjne są ładowane z pliku cal_data.dat w pamięci Flash SPI do zmiennych coef_x i coef_y na początku wykonywania programu radiomagnetofonu po włączeniu zasilania. W przypadku braku tego pliku wyświetlany jest stosowny komunikat wraz z prośbą o wykonanie kalibracji dotyku. W głównym menu pojawił się przycisk "Calibr.touch". Naciśnięcie tego przycisku powoduje wyświetlenie pytania. Po twierdzącej odpowiedzi następuje wyświetlenie czterech prostokątów, których środki trzeba dotknąć we właściwej kolejności. Brak reakcji (brak dotyku) przez 10 sekund powoduje wyjście do głównego menu. Błędy w dotyku (zła kolejność, dotyk niewłaściwych obszarów ekranu) powoduje wyświetlenie stosownego komunikatu i wyjście do głównego menu bez modyfikacji pliku kalibracyjnego. Po poprawnym dotknięciu tych czterech prostokątów następuje obliczenie współczynników korekcyjnych i zapis wyników obliczeń do pliku cal_data.dat we Flash SPI. By móc zapisywać do pamięci Flash SPI, musiałem również dorobić obsługę FAT12 w plikach biblioteki FAT16/32 File IO. Sam ogólny algorytm kalibracji został przedstawiony przez kolegę Czajnik w tym wątku: http://forum.ep.com.pl/viewtopic.php?t=20201
    Ja natomiast dostosowałem ten algorytm do funkcji odczytujących współrzędne dotyku w moim programie. Na filmiku prezentuję sposób działania kalibracji dotyku, w wersji z błędami kalibracji i w drugiej, poprawnej wersji kalibracji.
    Obecna wersja programu radiomagnetofonu nie wymaga zmiany firmware w module WF121. Pozostawiłem również reset mikrokontrolera w przypadku wyjątku HardFault.

    Pozdrawiam

  • #37
    Tytus Kosiarski
    Poziom 15  
    Witam wszystkich,

    OK, kolejna wersja programu radiomagnetofonu, w której usunąłem pierwszy błąd, polegający na zawieszaniu się podczas grania jakiejś mptrójki pod jej koniec. Przyczyną było błędne rozpoznawanie ciągu bajtów w strumieniu jako kolejnego nagłówka ramki MP3. Po sprawdzeniu poprawnego odtwarzania tego pliku na wcześniejszej wersji odtwarzacza na AT91SAM7S256 okazało się, że brakło w funkcji MP3FindSyncWord w pliku mp3dec.c dodatkowych warunków sprawdzających poprawność znalezionego nagłówka MP3. Po uzupełnieniu tychże, problematyczny plik MP3 był już odtwarzany poprawnie.
    Następnym błędem, usuniętym w obecnej wersji programu, był brak rozpoznawania karty SD o pojemności 2GB z aparatu fotograficznego przez komputer po podłączeniu radiomagnetofonu do komputera przez USB. Owszem, pokazywał się napęd wymienny, ale próba przejrzenia jego zawartości powodowała wyświetlenie przez system Windows info o niesformatowanym nośniku. Po odłączeniu USB karta była normalnie widziana przez program radiomagnetofonu - można było poruszać się po podkatalogach i plikach na niej. Przyczyną takiego zachowania był brak zwracania odpowiednich danych dla tej karty komputerowi przez USB. Trzeba było odpowiednio zmodyfikować funkcję STORAGE_GetCapacity w pliku usbd_storage_msd.c oraz funkcję SD_GetCardInfo z pliku SD_card_functions.c. Po wprowadzeniu tych zmian, karta ta była już normalnie widziana przez system Windows.

    Pozdrawiam, KT