Autor: Dondu
Mały konkurs programistyczny, a właściwie dwa :-)
Generujemy dźwięki
... zadanie Deucaliona.
Jednym z efektownych zastosowań mikrokontrolerów jest odgrywanie za ich pomocą dźwięków i melodyjek. Spróbujmy więc zrobić mały konkurs na program, który realizuje to zadanie.
Co możemy wykorzystać? Prawie wszystko, czyli:
- dźwięk możemy odtwarzać przy pomocy DAC, PWM, drabinki rezystorowej lub zewnętrznych układów,
- do sterowania tym wszystkim możesz użyć dowolny mikrokontroler, a jeśli obejdziesz się bez mikrokontrolera to tym lepiej,
- program powinien odgrywać wybrany przez autora dźwięk, muzykę, głos, cokolwiek.
Ale żeby nie było zbyt łatwo, oceniamy:
- oryginalność konstrukcji,
- powinieneś pokazać i krótko skomentować wykorzystane kluczowe funkcje do generowania dźwięku,
- oczywiście im lepszej jakości dźwięk uzyskasz tym lepiej,
- jeśli stosujesz jakieś nietypowe rozwiązania elektryczne dobrze by było, gdybyś je pokazał.
Inne uwagi:
- Do realizacji projektu możesz użyć gotowe minimoduły (to nie konkurs na lutowanie), możesz użyć płytki stykowej, możesz wszystko polutować pająkiem. Im to wszystko dziwniej będzie wyglądało tym lepiej.
- Pamiętaj, preferujemy własne (nawet jeśli nie doskonałe) rozwiązania. Projekty typu copy&paste z Internetu będą dyskwalifikowane, a znamy sporo sieciowych projektów :-)
- W celu końcowej oceny prześlij nam zdjęcia projektu oraz nagrany plik dźwiękowy odtworzony przy pomocy Twojego urządzenia. Ponieważ nagrywać może każdy PCet nie powinno być z tym problemu.
- Projekt musi być zrealizowany w języku C/C++. Nie dopuszczamy innych języków, typu Bascom, asembler itd.
Odświeżanie + synchronizacja + ramka = ...?
... zadanie Tomasza Francuza.
Ponieważ nie każdy chce lutować (lub ma na to czas i odpowiedni sprzęt), proponuję drugi konkurs. Można go zrealizować w oparciu o sprzęt (dowolny minimoduł, procesor, pająk itd.), lub też bez sprzętu – w tym celu wystarczy symulator wybranego procesora, np. dostępny w pakiecie Atmel Studio.
Jeśli nie wiesz jak się posługiwać symulatorem, lub natrafiłeś na jakiś problem w czasie symulacji to daj nam znać – pomożemy. Ale tylko w kwestiach technicznych, nie pomagamy rozwiązać samego zadania. Rozwiązanie podamy po konkursie.
Co jest naszym celem w tej części?
Drugim efektownym zastosowaniem mikrokontrolera jest generowanie obrazu TV/VGA. Projektów tego typu można znaleźć sporo w Internecie, w tym konkursie dla uproszczenia zrealizujemy tylko część zadania – wygenerujemy właściwe impulsy synchronizacji dla monitora VGA.
Dlaczego dla VGA? Ano dlatego, że tak jest prościej – impulsy synchronizacji poziomej i pionowej są transmitowane osobnymi przewodami. Tak więc program powinien generować właściwe impulsy synchronizacji dla monitora VGA w trybie 640 na 400 pikseli zgodnie ze specyfikacją:
- odświeżanie 70 Hz,
- linia:
- - czas trwania linii 31,777 µs,
- - front porch – 0,635 µs,
- - synchronizacja pozioma 3,8133 µs,
- - czas trwania widocznej części linii 25,422 µs,
- - back porch 1,906 µs
- ramka:
- - cała ramka 449 linii,
- - front porch 12 linii (0,38133 ms),
- - synchronizacja pionowa 2 linie (0,06355 ms),
- - back porch 35 linii (1,11221 ms),
- - część widoczna obrazu 400 linii (12,711 ms).
Czyli ma to wyglądać mniej więcej tak jak na rysunku poniżej:
My ograniczamy się wyłącznie do generowania impulsów synchronizacji (pozycje wytłuszczone), pamiętając, że muszą one wystąpić w odpowiednim momencie. Program można przetestować w symulatorze, można też wyjście mikrokontrolera podłączyć do monitora w celu sprawdzenia poprawności działania, np. tak:
Łączymy wyłącznie sygnały horizontal sync i vertical sync.
Uwaga! Większość monitorów wymaga, aby w czasie synchronizacji sygnały koloru (Red, Green i Blue) miały wartość 0V, stąd też jeśli chcesz sprawdzić swój program, możesz je na stałe podłączyć do masy układu.
Ocena nadesłanych rozwiązań
Jednak nie zniechęcaj się – miało być bez lutowania więc będzie. W tym konkursie chodzi o najlepszą koncepcję, a nie o uzyskanie konkretnych efektów.
Co będzie oceniane?:
- Oczywiście to, czy program ma szansę wygenerować poprawne impulsy synchronizacji.
- Pomysłowość.
- Maksymalne wykorzystanie zasobów sprzętowych mikrokontrolera.
- Prostota.
- Obciążenie CPU – im mniej czasu spędzi na generowaniu impulsów tym lepiej.
Pamiętaj, że podobnie jak monitory, my też dopuszczamy pewną tolerancję podanych wcześniej czasów synchronizacji – powiedzmy, że 5% jest dopuszczalne.
Co należy pokazać?
- kod realizujący zadanie, abyśmy mogli go ocenić,
- w przypadku mniej oczywistych i nietypowych rozwiązań schemat blokowy,
- krótki opis jak to wszystko działa.
Jeśli uważasz, że nie dasz sobie z tym rady, lub nie znasz języka C, dopuszczamy rozwiązania typu sam opis i czytelny rysunek jak to ma działać. W takim przypadku abyśmy mogli ocenić koncepcję opis i rysunek muszą być bardziej szczegółowe, tak aby było wiadomo jak to ma działać.
Jeżeli realizujesz projekt, musi być zrealizowany w języku C/C++ (lub przedstawiona tylko koncepcja działania programu). Nie dopuszczamy innych języków, typu Bascom, asembler itd.
Brak komentarzy:
Prześlij komentarz