ATNEL tech-forum
https://forum.atnel.pl/

Multipleksowanie LED - przerwania - BŁĄD w kodzie na płycie
https://forum.atnel.pl/topic129.html
Strona 1 z 1

Autor:  20rafalo [ 8 sty 2012, o 15:17 ]
Tytuł:  Multipleksowanie LED - przerwania - BŁĄD w kodzie na płycie

Witam
Ma PAN błędy w programie Multipleksowanie LED - przerwania - w kodzie zawartym na DVD oraz na forum- przez co nikt go nie uruchomi z takim układem wyprowadzeń jak jest w książce.

Z początku nie doszukiwałem się takowych błędów, gdyż w książce przypisywanie do portów się zgadzało. Ściągnąłem gotowy program z Pana strony (errata), gdyż w książce były tylko fragmenty, a tam błędy myślowe:

#define LED_DATA PORTC // port z podłączonymi segmentami
#define LED_DATA_DIR DDRC // rejestr kierunku portu katod wyświetlaczy
#define ANODY_PORT PORTD // port z podłączonymi anodami- 4 bity najmłodsze
#define ANODY_DIR DDRD // rejestr kierunku portu anod wyświetlaczy


#define CA1 (1<<PD0) // CA1 oznacza bit nr.0 portu D
#define CA2 (1<<PD1) // CA2 oznacza bit nr.1 portu D
#define CA3 (1<<PD2) // CA3 oznacza bit nr.2 portu D
#define CA4 (1<<PD3) // CA4 oznacza bit nr.3 portu D

W książce Pan tłumaczy aby podpiąć wyświetlacz do portów "C"oraz "A"; a kod napisany jest dla portów "C" port z podłączonymi segmentami oraz "D"rejestr kierunku portu katod wyświetlaczy !!
Wow - 2 dni doszukiwania się - zobaczymy dalej...
Nie myślałem, że będzie to tak prosty błąd- a ja czepiałem się przerwania oraz AVRStudio, że nie ładuje do pamięci czy coś ;-P

W końcu wziąłem miernik w ręce i mierzyłem napięcia na każdym porcie - "myślę coś jest"- tylko nie na tych pinach co powinno ;P.

Oczywiście każdy ma prawo do pomyłki, jednak warto po kompilacji połączyć układ zgodnie z instrukcjami w książce - czy działa. Gdyż mniej wytrwałych to zniechęca
Myślę, że ta informacja pomoże początkującym

Teraz zajmuję się kolejnym problemem- gdyż połączyłem układ bez tranzystorów - zganiając winę nawet na nie. Muszę zmienić kod - jeśli Pan mógłby szybko wskazać linie to zmian byłbym wdzięczny. Już nie mam siły ;P
Atmega prądowo udźwignie wyświetlacz, wystarczy dodać rezystory ograniczające.
- pozdrawiam

Autor:  DidekxD [ 8 sty 2012, o 16:07 ]
Tytuł:  Re: Multipleksowanie LED - przerwania - BŁĄD w kodzie na pły

Hmm... Ja sobie przepisałem kod w ogóle pod inne porty bo lubię po swojemu robić żeby zrozumieć pewne aspekty i jako początkujący nie miałem jakichś dużych problemów z multipleksowaniem.

Z LCD był problem tylko ze zrozumieniem definicji upraszczających i ze znalezieniem gdzie się załącza podświetlenie wyświetlacza. Z drugim można sobie poradzić analizując kod.

Sądzę że nie powinien kolega na ślepo przepisywać, kopiować gotowce. co by było jak byś miał procesor Attiny czy jakiś inny prócz tego który był użyty w przykładach w książce ?(Atmega32)
Wykonanie różnych innych przykładów spełzła by na niczym bo różnią się nazwy chociażby rejestrów.

Pozdrawiam


P.S Atmega nie musi dźwigać wyświetlacza ponieważ na płytce jest umieszczony tranzystor którym się je załącza.

Autor:  20rafalo [ 8 sty 2012, o 16:48 ]
Tytuł:  Re: Multipleksowanie LED - przerwania - BŁĄD w kodzie na pły

Masz rację, że nie ma co przepisywać bezmyślnie- jednak ja miałem problemy ze środowiskiem ( dodatkowo nie używałem atmegi32).
Podszedłem do problemu od innej strony.
W końcu skopiowałem cały kod, żeby wyeliminować, że coś źle napisałem- a tu .. błąd
A błąd jest błędem i już.

Autor:  DidekxD [ 8 sty 2012, o 17:18 ]
Tytuł:  Re: Multipleksowanie LED - przerwania - BŁĄD w kodzie na pły

Może uznaj to za swego rodzaju test, próbę.

Skoro udało Ci się do tego dojść samemu oznacza że próbę przeszedłeś pomyślnie i potrafisz samemu myśleć więc nadajesz się by posiąść tą całą wiedzę : D
Żeby nikogo nie obrażać powiem że po nie przebrnięciu pomyślnie przez ów test (jak że prosty) być może po prostu ktoś się nie nadaje do tego, ot co. Albo miał chwile słabości bo i tak się zdarza :)


Tak czy siak winieneś poinformować o tym bez pośrednio autora, jeśli rzeczywiście odnalazłeś błąd a nie wyrzucać takie coś przed wszystkich. A co jeśli nie masz racji ? Wstyd : D

Autor:  20rafalo [ 8 sty 2012, o 18:35 ]
Tytuł:  Re: Multipleksowanie LED - przerwania - BŁĄD w kodzie na pły

DidekxD napisał(a):
Tak czy siak winieneś poinformować o tym bez pośrednio autora, jeśli rzeczywiście odnalazłeś błąd a nie wyrzucać takie coś przed wszystkich. A co jeśli nie masz racji ? Wstyd : D


Trochę inaczej interpretujesz pewne sprawy.
Jestem użytkownikiem wielu forum i takie rzeczy się ogłasza - nie jest to żadem wstyd ani dla mnie ani dla autora- tym bardziej, że autor wykonał kawał dobrej roboty (jak na razie ;P).

Jeśli bym się mylił - cóż - każdy się myli. Ważne, że coś się próbuje osiągnąć.
"NIE MYLI SIĘ TEN CO NIC NIE ROBI".

Ale w tym przypadku jest czarne na białym- jest to błąd łatwy do popełnienia (czasem szybciej się myśli niż pisze ;P) - i bezdyskusyjny.

Pzdr

Autor:  mirekk36 [ 8 sty 2012, o 19:16 ]
Tytuł:  Re: Multipleksowanie LED - przerwania - BŁĄD w kodzie na pły

Panie 20rafalo --> te drobne (bo tak można to nazwać) błędy logiczne w opisach pinów, czy portów w książce podczas opisu multipleksowania już dawno zostały opisane w erracie, którą można pobrać z naszej strony:

www.atnel.pl/wydawnictwo

to po pierwsze, po drugie - ja pisząc książkę, przyjąłem założenie że skupiam się w niej na wyjaśnieniu wielu merytorycznych zagadnień, żeby każdy zrozumiał jak coś tam działa od środka, od podstaw. Z tego powodu, bardzo często kody opisywane w książce różnią się mocno od tych na dołączonej płycie DVD. Dlaczego ?

ano dlatego panie kochany, że dołożyłem mnóstwo starań aby kody źródłowe z mojej książki:

raz - żeby w 100% DZIAŁAŁY
dwa - zaopatrzone były w dużo komentarzy
trzy - aby każdy mógł się dalej na ich właśnie przykładzie uczyć

wszystkie je osobiście kompilowałem i testowałem. Co i tak nie uchroniło mnie przed kilkoma błędami, które zamieściłem w aktualizacjach.

Poza tym czasem w książce opisuję ćwiczenie np na PORTA a na płycie DVD jest coś podłączone do PORTD. Często ludzie pisali do mnie maile, że to jakiś błąd ponieważ zrobili sobie układ zgodnie z tym co było napisane w książce, czyli podłączyli coś tam do PORTA - tymczasem kod z DVD wcale nie działał. I dopiero gdy zajrzeli do pliku konfiguracyjnego *.h to zorientowali się, że w tym kodzie musi być inne połączenie albo trzeba sobie je przedefiniować znowu na PORTA!!!

Nie mówię, że zawsze - ale często świadomie tak robiłem - takie mini pułapki. Tak samo robię często na swoich kursach naziemnych języka C. I wie kolega co to daje ?

Tak jak wielu czytelników mi napisało zresztą - że po takim czymś gdy sami doszli na podstawie plików konfiguracyjnych że trzeba jednak nieco inaczej podłączyć, że teraz przynajmniej o wiele lepiej rozumieją np potrzebę podziału na pliki, co to są w ogóle pliki nagłówkowe i do czego mogą służyć. Poza tym daje to większe doświadczenie.

Wiem, że u niektórych niecierpliwych może to budzić konsternację i nie do każdego trafi taki sposób podejścia. Trudno nic na to nie poradzę, ja jednak go nie zmienię - ponieważ po pierwsze na moich kursach się sprawdza i kursanci nie mają czasu na nudę - bo ciągle coś się dzieje i uczymy się na własnych błędach, a po drugie podobnie dużo opinii tego typu dostałem mailem na temat książki. Dlatego uważam, że metoda się sprawdza. A osoby, którym to strasznie przeszkadza, co najwyżej już drugi raz nie sięgną po moje książki i opracowania. Zdaję sobie sprawę , że nie uda mi się do wszystkich dotrzeć. Mam nawet jednego czytelnika, który co rusz (za co mu dziękuję oczywiście) wynajduje jeszcze różne tzw literówki i drobne błędy. Ale podobnie jak kolega optował za tym abym zrezygnował z tych moich jak to nazwałem "pułapek" bo nie do każdego to dotrze. Niestety pewnych rzeczy nie poprawiłem i nie poprawię. (nie mówię tu o jakichś oczywistych błędach - bo pewnie, że jestem tylko człowiekiem i mogę się pomylić)

Poza tym zdaje się, że kolega pisał do mnie na maila, ale nie miałem czasu dzisiaj w ciągu dnia odpowiedzieć. A co ciekawe pisał kolega o jakichś rzekomych błędach z zapisem do pamięci EEPROM w lekcji o multipleksowaniu !!! A przecież tam nie ma nic a nic kod wspólnego z pamięcią EEPROM.

Teraz z kolei pisze kolega o innym problemie - aby kod działał bez tranzystorów - i żebym wskazał linie do poprawy. To niemożliwe, i nie dlatego że nie chcę pomóc, ale po pierwsze to wypadałoby pokazać swój schemat a po drugie może jeszcze raz poczytać o zasadzie definiowania stałych - jeśli chodzi o wzorce zapalanych segmentów itd

ale co najważniejsze ...... NAWAŻNIEJSZE, bo sam kolega pisał i w mailu i tutaj, że nie korzysta ani z polecanego przeze mnie Eclipse a co gorsze przepisuje kolega kody na żywca z książki. Tymczasem nie po to się trudziłem aby na DVD podać jak na tacy - sprawdzone i gotowe kody do każdej lekcji. Powiem szczerze, że głównie dlatego pisałem tę książkę - bo kiedyś gdy sam próbowałem się uczyć C dla AVR - to sam marzyłem, żeby właśnie wpadła mi w ręce taka książka która będzie miała w końcu sprawdzone przykłady, które działają - gdy człowiek jeszcze nic nie wie i się uczy tego. (bo jak wiadomo ciężko o takie książki)

Dlatego w dalszych etapach nauki, polecam jednak się przełamać i zabrać się za Eclipse i odpalenie tych kodów z książki pod Eclipsem. (uwzględniając tych kilka opublikowanych poprawek). Wtedy będzie mniej niewiadomych - a tak? A tak to kolega na własne życzenie tworzy sobie schody pod górkę.

Tak więc nie wiem czy mam analizować te kody już nadesłane mailem czy to nieaktualne bo problem leży już w inny miejscu. Proszę dać znać.

Autor:  20rafalo [ 8 sty 2012, o 21:53 ]
Tytuł:  Re: Multipleksowanie LED - przerwania - BŁĄD w kodzie na pły

mirekk36 napisał(a):
a co gorsze przepisuje kolega kody na żywca z książki.

Zrobiłem to w ostateczności, gdy mój nie działał, chciałem być pewny co jest nie tak..
Początkowo robiłem swój program w oparciu o Pana książkę, ale zaczęły się rodzić problemy.

Co do EEPROM - mój błąd- za dużo źródeł na raz....

Przeanalizuję jeszcze raz ten rozdział- i pomyślę o ECLIPSE, gdyż AVRStudio miał czasami różne "fazy"

Autor:  20rafalo [ 8 sty 2012, o 21:56 ]
Tytuł:  Re: Multipleksowanie LED - przerwania - BŁĄD w kodzie na pły

Mam jeszcze jedno pytanie... Fakt, że nie przeczytałem jeszcze całej książki, ale patrzyłem pobieżnie i nie widziałem obsługi przerwania zewnętrznego od np przełącznika.
Po wciśnięciu przełącznika program jest przerywany i wykonuje się procedura obsługi przerwania....
Czy taka procedura jest trudna do wykonania?

Tak na marginesie fajnym projektem był by również program odczytujący częstotliwość sygnału zewnętrznego (np z mikrofonu) oraz możliwość reagowania na konkretny zakres częstotliwości - może w 2 części ;)

Autor:  DidekxD [ 8 sty 2012, o 22:05 ]
Tytuł:  Re: Multipleksowanie LED - przerwania - BŁĄD w kodzie na pły

Jest prosta i znajduje się przykład przy komunikacji na szynie I2C z układem czasu rzeczywistego RTC

Autor:  20rafalo [ 8 sty 2012, o 22:16 ]
Tytuł:  Re: Multipleksowanie LED - przerwania - BŁĄD w kodzie na pły

wow.. na schemacie nigdzie nie widzę takowego switcha..
Nie czytałem dalej książki - jak się nazywa ta procedura?

Autor:  mirekk36 [ 8 sty 2012, o 22:30 ]
Tytuł:  Re: Multipleksowanie LED - przerwania - BŁĄD w kodzie na pły

20rafalo napisał(a):
wow.. na schemacie nigdzie nie widzę takowego switcha..
Nie czytałem dalej książki - jak się nazywa ta procedura?


W lekcji z I2C oraz RTC w postaci PCF8583 - ja zawsze właśnie wykorzystuję wyjście INT tego scalaczka, które podłączam do jakiegoś z kolei wejścia INTx w procku. W książce zdaje się że użyłem INT0, a w lekcji na DVD jest wszystko .... włącznie z inicjalizacją procedury obsługi tegoż przerwania i samym przerwaniem - bardzo zresztą krótkim, bo ustawiana tam jest tylko flaga:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


zatem miłej lektury - a jak coś to proszę śmiało pytać.

Autor:  20rafalo [ 8 sty 2012, o 23:07 ]
Tytuł:  Re: Multipleksowanie LED - przerwania - BŁĄD w kodzie na pły

W końcu zadziałał multiplekser - po przeróbkach z racji innego wyswietlacza, brak tranzystorów itp itd, oraz o zgrozo wymiany scalaka- tamtemu padla część wyprowadzeń.
I nie dziwne, że było tyle problemów...

Teraz kolejne pytanie- moje cyfry strasznie migotają - czyli nie ma tych 200hz - dodatkowo ja ma 3 cyfrowy wysw- w takim razie powinno byc tylko lepiej,, a nie jest.
Czy atmega16 posiada identycznie ustawiane timerów itp
W nocie pdf patrzyłem i wydaje mi sie ze tak...

Autor:  20rafalo [ 8 sty 2012, o 23:11 ]
Tytuł:  Re: Multipleksowanie LED - przerwania - BŁĄD w kodzie na pły

Przy OCR0 = 10; jeszcze migały, dopiero przy OCR0= 5 przestały, coś jest nie tak, gdyż nie zgadza się to z obliczeniami w książce

PS W tablicy "uint8_t cyfry[15]" chcąc dodać kilka znaków - 12, już trzeba stosować typ uint16_t
Taka mała poprawka

Autor:  mirekk36 [ 8 sty 2012, o 23:28 ]
Tytuł:  Re: Multipleksowanie LED - przerwania - BŁĄD w kodzie na pły

No tylko mam nadzieję, że kolega nie chce przez to powiedzieć, że coś nie tak jest w książce w tym zakresie? Ten temat jest wyjaśniony na tip-top. A skoro masz takie problemy - to tak tylko czuję pismo nosem, że chodzi o ustawienia fusebitów. Sam widzisz jak zwykle wychodzi to że nie działasz w Eclipse na gotowych przykładach - tzn że do nich nie zaglądasz, bo ładnie byś zobaczył przy jakiej częstotliwości taktowania robione były te obliczenia, zresztą i w książce piszę o konkretnych wartościach. A twój procek ? Jakie ma taktowanie ustawione za pomocą fusebitów ?

Więc ustawianie za pomocą OCRx gdy nie dobierzesz do tych obliczeń właściwego taktowania - mija się z celem. Podejrzewam, że nie ruszałeś fusków w procku i ślimaczy się on na 1MHz. Ale i na 1MHz dałoby radę to spokojnie zrobić - tylko trzeba sobie od nowa poprzeliczać - kurczę przecież taką całą tabelkę po kolei z obliczeniami dla różnych preskalerów przedstawiłem. Weź jeszcze raz tam zajrzyj i doczytaj tak na 100% uważanie ... bo wbrew pozorom - to są jedne z NAJWAŻNIEJSZYCH zagadnień. Ta lekcja o multipleksowaniu rozpoczyna skok na głęboką wodę i omawiam przy jej okazji aż kilka bardzo ważnych zagadnień. Nie tylko timery , ich obliczenia ale i przerwania, ich inicjalizację itp itd

Autor:  20rafalo [ 8 sty 2012, o 23:40 ]
Tytuł:  Re: Multipleksowanie LED - przerwania - BŁĄD w kodzie na pły

mirekk36 napisał(a):
A skoro masz takie problemy - to tak tylko czuję pismo nosem, że chodzi o ustawienia fusebitów.....
bo ładnie byś zobaczył przy jakiej częstotliwości taktowania robione były te obliczenia, zresztą i w książce piszę o konkretnych wartościach. A twój procek ? Jakie ma taktowanie ustawione za pomocą fusebitów ?

Podejrzewam, że nie ruszałeś fusków w procku i ślimaczy się on na 1MHz. Ale i na 1MHz dałoby radę to spokojnie zrobić - tylko trzeba sobie od nowa poprzeliczać - kurczę przecież taką całą tabelkę po kolei z obliczeniami dla różnych preskalerów przedstawiłem. Weź jeszcze raz tam zajrzyj i doczytaj tak na 100% uważanie ...


Nie wiem, czy odczuwać to jako obrazę w stosunku do mnie, czy przymrużyć oko....
Częstotliwość ustawiłem w opcjach projektu. Gdyż niestety nie jest to pokazane w książce przynajmniej do strony z multipleksowaniem tym przykładzie jak to zrobić... jest tylko wspomniane na str 54 że takowe są i do czego służą...
Jest taki temat ma str 356, ale robię wszystko po kolei....

Oto dowód, że układ pracuje z częstotliwością 8Mhz - przynajmniej tak twierdzi AVRStudio

Obrazek

Liczyć umiem i nie mam z tym problemów- dlatego nie wiem skąd taka aluzja.

Autor:  mirekk36 [ 9 sty 2012, o 00:14 ]
Tytuł:  Re: Multipleksowanie LED - przerwania - BŁĄD w kodzie na pły

Prędzej ja mógłbym albo miałbym powód do obrażania się. niech kolega sam na spokojnie poczyta swoje posty tutaj i sam tytuł wątku. ja nie mam zamiaru nikogo obrażać na tym forum a jeśli to tak odebrałeś to przepraszam. Nie mniej jednak proszę się zdecydować czy kolega wchodzi tu aby o coś zapytać czy też może mi coś doradzić albo wciąż zarzuty robić. Czy to jest grzechem że staram się zwrócić uwagę na pewne rzeczy z którymi kolega ma jeszcze problemy? Czy to taka wielka ujma gdy odsyłam do książki? A to co pokazał kolega jako dowód z avr studio że procek jest prawidłowo taktowany pokazuje tylko, że kolega jeszcze nic nie wie o fusebitach. Tylko proszę się zaraz nie obrażać że to mówię. To normalne że na początku można czegoś nie wiedzieć a ja staram się pomóc. Tylko proszę zmienić ton na trochę mniej zaczepny jeśli to mają być pytania o poradę ok?

A co do fusebitów to fabrycznie każdy procek avr jest taktowany 1MHz a z kolei to że zdeklarowałeś w ustawieniach projektu 8MHz to tylko informacja dla kompilatora jak poprzeliczać różne zależności czasowe. Nie ma toNIC WSPÓLNEGO z fizycznym taktowaniem bo ono zależy od fusebitów i trzeba je przestawić niestety panie kolego na te 8MHz. i bez obrazy ale o tym też pisałem w książce. z kolei to że ktoś to przeoczy to się zdarza.

Autor:  20rafalo [ 10 sty 2012, o 14:51 ]
Tytuł:  Re: Multipleksowanie LED - przerwania - BŁĄD w kodzie na pły

Powiedzmy, że się nie zrozumieliśmy...

mirekk36 napisał(a):
Nie ma toNIC WSPÓLNEGO z fizycznym taktowaniem bo ono zależy od fusebitów i trzeba je przestawić niestety panie kolego na te 8MHz. i bez obrazy ale o tym też pisałem w książce. z kolei to że ktoś to przeoczy to się zdarza.


Ps Tego nie wiedziałem. W takim razie ustawienia częstotliwość w projekcie AVRStudio jest mylne dla początkujących. Czytałem o fusebitach - jednak wyszedłem z takiego założenia, że zakładając w ustawieniach 8Mhz program sam zmodyfikuje fusebity.
Już wszystko działa jak powinno.

Przy wyborze częstotliwości jest kilka wariantów start up time: 6ck +64ms; 4ms, 0ms - co to zmienia?

Autor:  SunRiver [ 10 sty 2012, o 15:32 ]
Tytuł:  Re: Multipleksowanie LED - przerwania - BŁĄD w kodzie na pły

zakładam ze chodzi ci o bity SUT1 i SUT0 określają one czas sygnału reset czyli można powiedzieć opóźnienie startu programu po resecie

Autor:  mirekk36 [ 10 sty 2012, o 15:42 ]
Tytuł:  Re: Multipleksowanie LED - przerwania - BŁĄD w kodzie na pły

Tak jak napisał wyżej kolega, a ja dodam, że jeśli się nie jest pewnym to zawsze warto wybierać najdłuższy czas startu.

Autor:  20rafalo [ 11 sty 2012, o 22:00 ]
Tytuł:  Re: Multipleksowanie LED - przerwania - BŁĄD w kodzie na pły

Dzięki za info ;)

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/