Witam, próbuje przerobić lekko program analizatora widma, autorstwa Hunterhouse (temat pierwotny https://www.elektroda.pl/rtvforum/topic465823.html).
Chodzi o to że zamiast na diodach LED, widmo ma się wyświetlać na wyświetlaczu LCD 2x16. Było 10 słupków każdy po 16 poziomów, więc na LCD podobnie, 10 podwójnych słupków po 16 poziomów (dolny 8 i górny 8 co daje razem 16).
Tak z grubsza rozumiem działanie tego programu (nie wnikałem w sposób obliczania kątów i poziomu słupków, tego nie zamierzam ruszać), usunąłem troche nie potrzebnych rzeczy, dopisałem obsługę wyświetlacza LCD na warunkach, biorąc już wyliczony poziom słupka ze zmiennej "wynik_o" która wynosi od 1 do 16 (16 poziomów). Dopisałem więc 16 warunków, i w ciągu jednej pętli tylko jeden jest prawdziwy, i obsługuje dany słupek, zmieniany za pomocą zmiennej "K" która co pętle zmienia się od 1 do 10 (10 słupków). Zmienna "K" jest wykorzystywana w obliczaniu wysokości słupka, więc się pod nią podpiąłem, i od razu wyświetlam dany słupek na wyświetlaczu, wszystko w jednym podprogramie "save".
Problem polega na tym, że wszystkie słupki pokazują ten sam poziom. Przy częstotliwości 8MHz działało to zbyt wolno. Więc jak zrobił to Autor, tak i ja zrobiłem, i dałem 16MHz. Odświerzanie było znośne, ale LCD zaczął się krzaczyć, i wyświetlać jakieś nie porządane znaki. Tylko chwilami pracuje dobrze, ale nadal pozostaje problem wyświetlania tej samej wartości dla każdego słupka.
uC jaki użyłem to ATMega8, przestawiłem tylko porty. Załączam schemat(pierwotny), i przerobiony przeze mnie kod, widać które komentarze zostały dodane przeze mnie
. Dołączam także krótki filmik obrazujący działanie LCD. Kod pierwotny znajduje się pod linkiem podanym wyżej, wraz z dodatkowymi schematami, i dokładnym opisem.
Nie mam pojęcia już co może być nie tak, specem w programowaniu to ja nie jestem, jak dotąd napisałem samodzielnie tylko program cyfrowego zegarka/stopera z budzikiem i jakimiś tam wodotryskami. Byłbym wdzięczny jeżeli ktos zechciał by rzucić okiem i ew. coś poprawić/poradzić/zoptymalizować, moge rozdać swoje skromne 40 punktów
Pozdrawiam.
filmik - http://www.mediafire.com/?5j4zi13rooe
Chodzi o to że zamiast na diodach LED, widmo ma się wyświetlać na wyświetlaczu LCD 2x16. Było 10 słupków każdy po 16 poziomów, więc na LCD podobnie, 10 podwójnych słupków po 16 poziomów (dolny 8 i górny 8 co daje razem 16).
Tak z grubsza rozumiem działanie tego programu (nie wnikałem w sposób obliczania kątów i poziomu słupków, tego nie zamierzam ruszać), usunąłem troche nie potrzebnych rzeczy, dopisałem obsługę wyświetlacza LCD na warunkach, biorąc już wyliczony poziom słupka ze zmiennej "wynik_o" która wynosi od 1 do 16 (16 poziomów). Dopisałem więc 16 warunków, i w ciągu jednej pętli tylko jeden jest prawdziwy, i obsługuje dany słupek, zmieniany za pomocą zmiennej "K" która co pętle zmienia się od 1 do 10 (10 słupków). Zmienna "K" jest wykorzystywana w obliczaniu wysokości słupka, więc się pod nią podpiąłem, i od razu wyświetlam dany słupek na wyświetlaczu, wszystko w jednym podprogramie "save".
Problem polega na tym, że wszystkie słupki pokazują ten sam poziom. Przy częstotliwości 8MHz działało to zbyt wolno. Więc jak zrobił to Autor, tak i ja zrobiłem, i dałem 16MHz. Odświerzanie było znośne, ale LCD zaczął się krzaczyć, i wyświetlać jakieś nie porządane znaki. Tylko chwilami pracuje dobrze, ale nadal pozostaje problem wyświetlania tej samej wartości dla każdego słupka.
uC jaki użyłem to ATMega8, przestawiłem tylko porty. Załączam schemat(pierwotny), i przerobiony przeze mnie kod, widać które komentarze zostały dodane przeze mnie
Nie mam pojęcia już co może być nie tak, specem w programowaniu to ja nie jestem, jak dotąd napisałem samodzielnie tylko program cyfrowego zegarka/stopera z budzikiem i jakimiś tam wodotryskami. Byłbym wdzięczny jeżeli ktos zechciał by rzucić okiem i ew. coś poprawić/poradzić/zoptymalizować, moge rozdać swoje skromne 40 punktów
Pozdrawiam.
filmik - http://www.mediafire.com/?5j4zi13rooe