poniedziałek, 28 marca 2011

Konkurs weekendowy - zadania Deucaliona i Tomasza Francuza


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:
  1. 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.
  2. 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 :-)
  3. 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.
  4. 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.

Drugi konkurs dla osób, które nie mają (albo mają) odpowiedni sprzęt.

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?:
  1. Oczywiście to, czy program ma szansę wygenerować poprawne impulsy synchronizacji.
  2. Pomysłowość.
  3. Maksymalne wykorzystanie zasobów sprzętowych mikrokontrolera.
  4. Prostota.
  5. 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