Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 27 lis 2024, o 17:18


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 44 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 2 sty 2013, o 11:23 
Offline
Użytkownik

Dołączył(a): 26 lis 2012
Posty: 54
Pomógł: 2

Przeglądam sobie właśnie ten przykład i zastanawiam się nad Twoją intencją Mirku, mianowicie chodzi mi o to czy przykład ten ma być "biblioteką" do wyświetlaczy 7-segmentowych czy raczej tak sobie luźno napisanym kodem.
Już wyjaśniam o co mi chodzi. Pomyślałem przejrzyście napisany kod, może zmierzę sobie napięcie i wyświetlę po przecinku jego wartość... no i problem, bo w prosty sposób (przynajmniej po dłuższej chwili) nie wiem jak zapalić jeszcze kropkę dodatkowo do liczby.

Według mnie najprostszym rozwiązaniem byłoby użycie '&' na po sprawie... ale no właśnie ale. żeby wyświetlić w ogóle kropkę to trzeba co najmniej zanegować stałą SEG_DP: ~SEG_DP. Żeby w ogóle kompilator to przetrawił bez warning'ów to trzeba pamiętać o promocji do int (czy jak kto woli do obliczeń 16 bitowych (port jest 8 bitowy :) ). Więc co się stanie jak się zaneguje SEG_DP (czyli 1<<7, czyli 0x80)? no stanie się 0xff7f... mam rację?
Proponuję wziąć na warsztat ten projekt z wyświetlaczem i zdefiniować po prostu kropkę tak jak poprzednie cyfry czyli ~(SEG_DP) i skompilować - to wyjaśni moje może mój nieudolny wywód.

Zmierzając do sedna: dlaczego Mirku negujesz wartości w definicjach, zamiast później port? można by łatwo dorzucić kropkę do liczby.
Chyba że jest prosty sposób również w tej chwili na bazie tego projektu ale ja ślepy jestem (albo za krótko myślałem nad tym).
Pozdrawiam

Zapomniałem powiedzieć że wiem jak się pozbyć warning'a przy negacji SEG_DP i nie o to mi chodzi żeby to się kompilowało bezbłędnie, chodzi mi tylko czy w tym konkretnym projekcie da się łatwo dodać kropkę do wybranej liczby (zmiennej cy1 w przykładzie).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sty 2013, o 13:06 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27314
Lokalizacja: Szczecin
Pomógł: 1041

rayden napisał(a):
Przeglądam sobie właśnie ten przykład i zastanawiam się nad Twoją intencją Mirku, mianowicie chodzi mi o to czy przykład ten ma być "biblioteką" do wyświetlaczy 7-segmentowych czy raczej tak sobie luźno napisanym kodem.


Książa niebieska to głównie DYDAKTYKA a niestety wiele osób o tym zapomina i próbuje traktować kody z tej książki jako gotowe zoptymalizowane biblioteki. Przecież ten rozdział jest jednym z ważniejszych ponieważ na PRAKTYCZNYM przykładzie omawiam nie tylko o co chodzi w multipleksowaniu ale także jak działają timery sprzętowe od strony praktycznej, jak się je konfiguruje, jak oblicza częstotliwości przerwań czy w końcu jak uzyskać dostęp do pamięci FLASH. Nie wspomnę o ćwiczeniach z przesunięciami i innymi operacjami bitowymi jak negacje. Więc co to ma wspólnego z jakąś biblioteką uniwersalną dla wyświetlaczy 7 segmentowych ???? ;) NIC ... tzn może przejaskrawiam ale chciałbym żebyś zobaczył że inny był i jest główny cel jaki chcę osiągnąć poprzez przekazywanie wiedzy w tej książce od tego co jest już w drugiej, gdzie rzeczywiście - jest droższa ale zawiera też już sporo GOTOWYCH rzeczywiście porządnych bibliotek a nie wersji dydaktycznych

W ogóle nie omawiałem więc tutaj jak sobie wyświetlać kropki a mówienie o tym że rzekomo negacje w tym przeszkadzają jest o tyle nieporozumieniem albo w ogóle próba może hmm nie zarzutu żebyś mnie źle nie zrozumiał bo nie traktuję twojej wypowiedzi jako jakiejś napaści na mnie - ale kropkę można wyświetlać sobie na co najmniej TRZY MILIONY sposobów i dobrze jest samemu to próbować dalej okiełznać i wręcz po to to zostawiłem w takim stanie .... na kursach języka C które prowadzę naziemnie stosuję te same metody nauczania co w książce a zatem i częste pułapki i zadania do wykonania - tyle że wiadomo na takim kursie jest o tyle łatwiej że prowadzący jest obok kursanta i pod jego okiem może takie rzeczy robić - a ja jestem w stanie od razu na bieżąco pomagać i korygować.

Ale pewnie nie zauważyłeś też jednego z WAŻNYCH celów tego rozdziału - otóż PRZEDE WSZYSTKIM pokazuję w nim po raz pierwszy w praktyce co to znaczy pisać projekt złożony z wielu plików, co to znaczy pracować zespołowo - co to znaczy pisać kod źródłowy zgodnie z dobrymi zasadami tworzenia kodu w C ...... to jest istota tego rozdziału a nie kropki czy gotowa biblioteka. Dodam że temat kropek był już kilkakrotnie poruszany na naszym forum ale nie w ten sposób, tylko ktoś zaczął próbować robić kropki - pokazał swój kod i jak czegoś nie wiedział czy coś mu nie wychodziło to dopytywał o konkrety - i to jest z kolei istotą tego forum pomocy technicznej do książek i zapraszam do takiego podejścia - czyli spróbuj coś zrobić , pokaż a nie tylko już ja ale wiele innych przyjaźnie tu nastawionych osób od razu pomoże ;)

Dodam, że pewnie też nie oglądałeś moich ostatnich poradników VIDEO a szkoda - to szczególnie w przedostatnim poradniku staram się (być może troszkę humorystycznie ale pokazać JAK BARDZO ZALEŻY MI NA PRZEKAZANIU informacji na temat tego jak podchodzić do podziału projektu na pliki - co to znaczy gdy ja zwykle powtarzam swoje powiedzienie:

"NAWET JEŚLI PISZESZ PROGRAM SAM I TYLKO DLA SIEBIE TO PISZ GO TAK JAKBYŚ PISAŁ W ZESPOLE PROGRAMISTÓW"

obejrzyj sobie chociaż 50 sekund fragmentu tego poradnika od tego momentu (piniżej link do filmu od konkretnego czasu)

http://www.youtube.com/watch?feature=pl ... MVo#t=691s

ale później może na spokojnie obejrzyj cały oraz inne moje poradniki z tej serii ok ?



rayden napisał(a):
Według mnie najprostszym rozwiązaniem byłoby użycie '&' na po sprawie... ale no właśnie ale.

Dlatego chyba znasz to powiedzenie z kolei: "rozwiązań danego problemu programistycznego jest TYLE ilu jest programistów na świecie" ;) Zatem to co dla ciebie w danej chwili jest najprostsze wcale nie musi być dla innych i vice-versa


rayden napisał(a):
żeby wyświetlić w ogóle kropkę to trzeba co najmniej zanegować stałą SEG_DP: ~SEG_DP. Żeby w ogóle kompilator to przetrawił bez warning'ów to trzeba pamiętać o promocji do int (czy jak kto woli do obliczeń 16 bitowych (port jest 8 bitowy :) ). Więc co się stanie jak się zaneguje SEG_DP (czyli 1<<7, czyli 0x80)? no stanie się 0xff7f... mam rację?
Proponuję wziąć na warsztat ten projekt z wyświetlaczem i zdefiniować po prostu kropkę tak jak poprzednie cyfry czyli ~(SEG_DP) i skompilować - to wyjaśni moje może mój nieudolny wywód.


Warningi skąd się biorą - i jak je usuwać w takich przypadkach dowiedziałbyś się gdybyś przeczytał z kolei to:

http://atnel.pl/domyslna-promocja-do-typu-int.html

zapraszam bo to ważne ....

rayden napisał(a):
Zmierzając do sedna: dlaczego Mirku negujesz wartości w definicjach, zamiast później port? można by łatwo dorzucić kropkę do liczby.

Bez tego tak samo RÓWNIE łatwo dorobić kropkę ;) tylko na razie pewnie jeszcze nie kojarzysz tego co napisałem wyżej że rozwiązań jest tyle co ...... itd

rayden napisał(a):
Chyba że jest prosty sposób również w tej chwili na bazie tego projektu ale ja ślepy jestem (albo za krótko myślałem nad tym).


Ślepy na pewno nie - ale być może potrzeba jeszcze troszkę praktyki a różne sposoby same zaczną ci się pojawiać w głowie....



rayden napisał(a):
Zapomniałem powiedzieć że wiem jak się pozbyć warning'a przy negacji SEG_DP i nie o to mi chodzi żeby to się kompilowało bezbłędnie,

trzeba zrobić jawne rzutowanie - poradnik wyżej o promocji domyślnej

rayden napisał(a):
chodzi mi tylko czy w tym konkretnym projekcie da się łatwo dodać kropkę do wybranej liczby (zmiennej cy1 w przykładzie).


da się bardzo łatwo dorobić - ale ja ci tego nie pokażę - spróbuj sam to pomogę chętnie - albo przeszukaj forum albo skorzystaj też z naszego sławnego "DZIAŁU RYBNEGO" chyba wiesz do czego on jest ? ;)

ale myślę że jak sam zaczniesz pisać kod i wymęczyć tą kropkę to szybciej właśnie nabierzesz tej praktyki, a pisząc oczywiście dziel się tym co tworzysz tu np w tym wątku albo w nowym i pytaj o to po kolei czego nie rozumiesz ok ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sty 2013, o 13:14 

Pomógł: 0

Przeszukaj moje tematy, pisałem program obsługujący wyświetlacz 6cyfr 7segment po RS232, zobacz sobie jak rozwiązałem "prosto" wyświetlanie kropki.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sty 2013, o 13:15 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27314
Lokalizacja: Szczecin
Pomógł: 1041

rezasurmar napisał(a):
Przeszukaj moje tematy, pisałem program obsługujący wyświetlacz 6cyfr 7segment po RS232, zobacz sobie jak rozwiązałem "prosto" wyświetlanie kropki.


O! krótko zwięźle i na temat - a ja się TYLE rozgadałem ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sty 2013, o 13:20 

Pomógł: 0

Dokładniej tu -> topic1264.html oraz w topiku na początku tematu.

Dzięki temu, możesz dokładniej zobaczyć jak działa świetnie pomoc na tym forum...... od w zasadzie kompletnie złego podejścia na początku do tematu, po działający program :).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sty 2013, o 13:34 
Offline
Użytkownik

Dołączył(a): 26 lis 2012
Posty: 54
Pomógł: 2

:)
Nie spodziewałem się odpowiedzi aż tak elokwentnej. Chciałem się tylko dowiedzieć co autor miał na myśli i to wszystko.
Nie chodzi o to czy jestem początkujący czy nie akurat to pomijam.
Nie oczekiwałem gotowego rozwiązania bo to jest zbyt proste żeby się nad tym zastanawiać. Ja po prostu do tego inaczej podszedłem (z 15 lat temu? może wcześniej), nieistotne.

Raczej nie chodziło mi o pomoc gdzie jak się czego dowiedzieć bo jak aż tak zielony z programowania nie jestem żeby nie wiedzieć rzeczy oczywistych (czy podstawowych) czy jak zwał tak zwał. Mimo wszystko dziękuję za wyczerpującą odpowiedź. Raczej chodziło mi tylko o ten jeden i jedyny przykład i to wszystko. Nie rozdmuchujcie tego do rangi: nie umiem daj kod jak kropkę na wyświetlaczu wyświetlić.

Kupiłem książkę żeby raczej zobaczyć podejście Mirka do dydaktyki i stąd moje pytanie. Teraz dla mnie jest jasne, że w książce tej nacisk położony jest na podstawy elementarne i na poprawny styl programowania. Może wcześniej się niejasno wyraziłem stąd ten szczegółowy post Mirka :) .

Pozdrawiam.

------------------------ [ Dodano po: 2 minutach ]

Faktycznie teraz po linku przedstawionym przez kolegę rezasurmar już dla mnie wszystko jest jasne jak działa "System". :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sty 2013, o 14:36 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27314
Lokalizacja: Szczecin
Pomógł: 1041

rayden --> dokładnie kolego, nie odbieraj moich wypowiedzi jako uszczypliwych czy oceniających twoje umiejętności, czasem z zadanego pytania nie jestem w stanie tego wywnioskować - a jeśli coś powiem za dużo czy zbyt mocno wytłumaczę to chyba mi wybaczysz ;)

z drugiej strony takie wyjaśnienie na pewno przyda się też innym bardziej początkującym osobom niż np ty. Ale pewnie też dowiedziałeś się dogłębnie o co mi chodziło w książce - to myślę też jest ważne ;) I wcale nie traktowałem cię jakbyś żądał gotowca ?

No a fajnie że dostrzegłeś jak działa "System" ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sty 2013, o 14:41 
Offline
Użytkownik

Dołączył(a): 26 lis 2012
Posty: 54
Pomógł: 2

Dopiero jak się dowiedziałem jak działałem jak działa "System" to wiem z jakim podejściem pisać posty na forum :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2013, o 19:10 
Offline
Nowy

Dołączył(a): 09 sty 2013
Posty: 3
Pomógł: 0

Jako że, dopiero się zarejestrowałem i jest to mój pierwszy post, Witam wszystkich forumowiczów.
Mam drobny problem, który nie daje mi spokoju i nie pozwala "pójść dalej" (dopiero zaczynam swoja przygodę z C i mikrokontrolerami). Swoja naukę opieram o książkę "niebieską" i w zadaniu 5.4 Multipleksowanie LED nie działa mi procedura obsługi przerwania - Compare Match. Zadanie przepisałem (ze zrozumieniem) z książki z drobnymi zmianami, ponieważ na mojej płytce jest Atmega 644PA. Kompilacja przebiega prawidłowo, wgrywam do mikrokontrolera wsad i nie wykonują się polecenia z funkcji ISR(TIMER0_COMPA_vect). W funkcji d_led_init wyłączyłem wygaszanie wszystkich anod a katody ustawiłem np. LED_DATA = 0x0F i wyświetlacz zapalił belki E, F, G i kropkę (czyli prawidłowo). Stad wniosek że Timer i przerwania działaj prawidłowo, tylko nie działa procedura obsługi przerwań.
Trochę kombinowałem z kodem, ale nic nie pomogło. Może ktoś życzliwy „rzuci” jakąś dobrą radą?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2013, o 19:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 gru 2012
Posty: 530
Lokalizacja: Bydgoszcz
Pomógł: 8

Witaj na 4rum!

To może ja "rzucę" dobrą radą.

Wklej kod, nikt nie jest jasnowidzem. Próbowałem wywróżyć coś z fusów, nawet walnąłem tarocika, ale nic nie wyszło :) Niestety, szklaną kulę gdzieś zgubiłem :D

Pamiętaj, żeby wklejając kod używać znaczników

Kod:
[syntax=c][/syntax]

_________________
sig off ;(



Ostatnio edytowano 9 sty 2013, o 19:20 przez kila, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2013, o 19:19 
Offline
Użytkownik

Dołączył(a): 26 lis 2012
Posty: 54
Pomógł: 2

Dokładnie bez kodu trudno cokolwiek wyrokować. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2013, o 19:58 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27314
Lokalizacja: Szczecin
Pomógł: 1041

A ja dodam, że jak się już w naszej szukacje forumowej wrzuci hasło

atmega644 multipleksowanie to się trafi do fajnych podpowiedzi w tym zakresie - dokładnie związanych z tym o co kolega pyta ;)

Oczywiście witamy na forum ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2013, o 19:31 
Offline
Nowy

Dołączył(a): 09 sty 2013
Posty: 3
Pomógł: 0

No tak nie każdy musi posiadać tą książkę, zwłaszcza że to pozycja przeznaczony dla "amatorki, mój błąd. Kod jest w 3 plikach.
Plik main.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

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


P.S. Chyba nie przemyślałem do końca sprawy kupując Atmega 644PA, mogłem wybrać 32



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2013, o 19:46 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

Przecież Mirek napisał Ci co masz zrobić. w razie czego wrzucam linka i zobacz:

http://forum.atnel.pl/topic19.html

P.S po co używasz takich długich i brzydkich ścieżek do plików nagłówkowych we własnym projekcie?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2013, o 20:02 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27314
Lokalizacja: Szczecin
Pomógł: 1041

pzajac82 napisał(a):
No tak nie każdy musi posiadać tą książkę, zwłaszcza że to pozycja przeznaczony dla "amatorki, mój błąd.


Tzn mógłbyś mi wyjaśnić o co tu chodzi ? bo nie rozumiem ? tzn masz tą książkę czy nie masz ? bo nie wiem czy się na nią powoływać czy nie ? I z ciekawości co to znaczy - że pozycja przeznaczyony dla amatorki ?


pzajac82 napisał(a):
P.S. Chyba nie przemyślałem do końca sprawy kupując Atmega 644PA, mogłem wybrać 32


Na 100% z ATmega644P też da radę to odpalić ale powiedz też może na czym to testujesz itp

przyłączam się też do pytania kolegi - dlaczego masz takie jakieś bezpośrednie i długaśne ścieżki do plików inkludowanych ???

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2013, o 20:09 
Offline
Nowy

Dołączył(a): 09 sty 2013
Posty: 3
Pomógł: 0

tak najpierw napisałem posta a potem spojrzałem do tego topiku, pospieszyłem się sorki. Ale i tak zmiana tej jednej literki nie zadziałała w "moim" kodzie, tylko tym skopiowanym z płytki, ale działa dzięki.
A ta ścieszka to był ostatni akt mojej pruby uruchomienia tego wyświetlacza hehe, także normalnie nie pisze całej ścieżki

------------------------ [ Dodano po: 25 minutach ]

Już wyjaśniam, mam tą książkę i to właśnie z niej się uczę. Pisząc „nie każdy musi mieć tą książkę” miałem na myśli kolegów którzy odpisali mi żebym podał kod bo nie są jasnowidzami, co znaczy że oni jej nie posiadają. Pisząc „dla amatorki” miałem na myśli osoby takie jak ja, które jeszcze miesiąc temu nie wiedziały że jest coś takiego jak język C i mikrokontroler. Uważam że książka jest bardzo dobrze napisana, przejrzyście i do tej pory nie natrafiłem na nic czego bym nie zrozumiał (tak dobrze są objaśnione wszystkie zagadnienia). Przez ręce przeszło mi wiele książek na różne tematy (techniczne), ale naprawdę nie wiele równie jasno opisywały temat. Dalej, książka na start jest naprawdę super, ale wydaje mi się że osoby bardziej zaawansowane nie korzystają z tej pozycji, ponieważ jest ona przeznaczona właśnie dla grupy początkującej (czyli „amatorki” – no takie mam żartobliwe podejście, nic złośliwego).
Wracając do tematu, sam bym no to nie wpadł, nawet jak bym trafił na ten topik z wyjaśnieniem wcześniej, ponieważ byłem święcie przekonany że problem leży gdzie indziej, także dzięki problem z głowy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2013, o 07:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 gru 2012
Posty: 530
Lokalizacja: Bydgoszcz
Pomógł: 8

No wlasnie ja niebieska ksiazeczke mam, ale nadal uwazam, ze jak ktos ma problem ze swoim programem to musi wkleic kod. Dlaczego? Uzywasz Atmegi644, w ktorej inicjalizacja przerwan moze byc inna, niz w Atmedze32, dla ktorrj opisany jest przyklad w ksiazce. Dlatego potrzebny jest kod, zeby upewnic sie, czy aby na pewno odpowiednio dobrze wszystko jest ustawione.

Ja osobiscie lubie takie problemy rozwiazywac sam. Dlaczego? Bo wtedy najwiecej sie naucze.

Pozdro

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2013, o 19:16 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

Jeszcze podłącze się pod temat bo chciałbym się upewnić. Robiąc mutipleksacje na Atmedze8 nie mogę użyć Timera0?
Z tego co znalazłem w nocie katalogowej timer 0 nie pracuje w trybie Compare match, także zmusza mnie to do użycia Timera 1?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2013, o 19:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 lis 2011
Posty: 302
Lokalizacja: Kraków
Pomógł: 6

Musisz w takim przypadku lekko zmodyfikować bibliotekę.
Da się na pewno zrobić, bo sam tak robię bo zestaw uruchomieniowy mam z ATMEGA8.

_________________
Zapraszam:
filiporlo.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2013, o 19:36 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

Rozumiem że muszę przerobić, ale przeróbka sprowadzi się tylko do zmiany TCCR, OCR no i innej procedury przerwań ISR



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2013, o 19:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 lis 2011
Posty: 302
Lokalizacja: Kraków
Pomógł: 6

Zmiana inicjalizacji timera, inna wartość do ładowania timera, inny wektor obsługi i co przerwanie ładowanie pewną wartością timera.
Tryb NORMAL.

_________________
Zapraszam:
filiporlo.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2013, o 21:00 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27314
Lokalizacja: Szczecin
Pomógł: 1041

Można też użyć Timer2 - bo Timera1 szkoda przecież jest 16-bitowy. A na przyszłość już kolega wie żeby nie kupować ATmegi8, która ma TAK biedny Timer0 , tylko np ATmega88 - która już ma wypasiony ten Timer0 ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2013, o 21:33 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

Niestety Atmegi 8 kupiłem jeszcze za nim trafiłem na to forum i filmiki Mirka :/ Także zostały mi takie 3 sztuki do nauki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2013, o 23:26 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27314
Lokalizacja: Szczecin
Pomógł: 1041

Jasne - zawsze można je zużyć do końca - przecież nie będziemy wyrzucać ;) więc albo użyj Timer2

albo Timer0 ale wtedy użyj go w trybie NORMAL, czyli będzie trzeba za każdym razem w przerwaniu przeładowywać programowo jego wartość aby odliczał wyliczoną przez ciebie ilość tyknięć

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2013, o 01:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 gru 2012
Posty: 161
Pomógł: 9

Też mam problem z tym przykładem z książki. A nawet z płytki (oraz ściągniętym ulepszonym kodem ze strony z erratami).
Otóż połączenie mam dokładnie takie samo jak na płytce testowej atnela. Specjalnie jeszcze do tych samych portów na procesorze podłączyłem aby zupełnie nic nie zmieniać w kodzie. Jedyne co to ustawiłem odpowiedni procesor i taktowanie w ustawieniach eclipse (mega16, 8mhz).

Kod z książki prawie zupełnie nie działa, cyfry są nieczytelne. Jeśli się dobrze przyjrzeć to jednak odlicza, tylko, że inne segmenty też są aktywne ale troszkę ciemniejsze przez co przyglądając się jednak widać odliczanie.

Aby wyeliminować błąd na płytce czy w połączeniu wgrałem swój kod, którym dawno temu się bawiłem, tylko przestawiłem na odpowiednie porty. Z moim kodem działa elegancko.

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


Filmik pokazujący co się dzieje na wyświetlaczu z kodem z płytki:

Chwile później przestawiłem OCR0 na 240 aby było widać migotanie (wtedy na filmiku można się dopatrzeć źle zapalających się segmentów).

A tutaj filmik pokazujący, że mój kod działa (wgrywam go chwile po uruchomieniu nagrywania):


Gdzie szukać błędu? Wertuję ten kod w te i we wte.. Proszę o wskazówki :)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2013, o 09:39 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27314
Lokalizacja: Szczecin
Pomógł: 1041

Domanoid --> ja proponuję skup się na jednym i spróbuj się nauczyć (jak piszę w książce) szukać problemów poprzez rozbieranie kodu na mniejsze kawałki. Przykro mi ale kod z książki (szczególnie ten z poprawek) nie ma prawa nie działać .... :( .... więc albo coś podłączyłeś źle albo jak kolega wyżej źle ustawiłeś fusebity.

Poza tym jak coś w kodzie nie wychodzi warto go analizować po kawałku od początku stosując "debuger na jednej diodzie LED" ... ot chociażby po to aby sprawdzić czy np prawidłowo ci przerwanie multipleksowania działa ... a to ci powie czy masz np poprawnie ustawione Fusebity.

Innym krokiem jest próba statycznego zapalania w kodzie po kolei każdego segmentu żeby np sprawdzić czy połączenia są poprawne ... itd itd

Takie podejście że "złożyłem wszystko i nie działa - więc chyba kod z książki jest do niczego" ..... raczej nie pomoże ci w nauce programowania ... Ja bym się np zastanowił tak - jeśli rzeczywiście kod miałby być zły - to pewnie w internecie będzie pełno informacji na ten temat - tymczasem pokaż mi chociaż jeden wątek z tego forum, z którego wynikałby ten fakt. A zatem jeśli wszystkim działa a mnie nie - to znaczy że ja coś jeszcze źle robię - więc hmm muszę szukać ....

dlatego , reasumując - wróć do tego kodu z DVD (a jeśli książkę masz od niedawana to na pewno na DVD jest kod poprawiony) .... i po kolei jak pisałem wyżej zacznij sprawdzać - i ew wtedy zadawaj pytania, jeśli czegoś nie rozumiesz po drodze w kodzie.

Nawiasem mówiąc wykonywanie skoków do innych funkcji z poziomu przerwania, u ciebie

SevenSegment(digits[i], 0);

to niezbyt szczęśliwy pomysł tym bardziej, że jak widzisz w kodzie z książki - można to załatwić kilkoma linijkami dosłownie.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2013, o 09:51 

Pomógł: 0

Dokładnie j/w
Dla mnie kody z płyty DVD, są wyrocznią, jeżeli one nie działają to szukam błędów w połączeniach, konfiguracji FUSÓW ;).

Ostatni przykład projektowanego ;) termostatu. Nie chciała mi działać regulacja mocy na MOC3021. W moim programie, przykład wzięty z lekcji o regulacji mocy 230V z książki Mirka. No ale oczywiście mnóstwo rzeczy przy okazji trzeba było pozamieniać, bo po pierwsze inny procesor, po drugie sporo rzeczy było wcześniej dorzuconych, jak obsługa LCD, klawiatury, pomiaru temperatury na ADC i na DS18x20. Regulację wrzucałem na końcu. No i nie działała hmmmmm.
Wywaliłem wszystko tj. wgrałem tylko lekcję Mirka dotyczącą regulacji mocy, oczywiście z nagłówkach .h zmieniłem tylko ustawienia portów pod które miałem podpięte moje bambetle.
No i się okazało, że pięknie działa.
By było śmieszniej, po podłączeniu oscyloskopu na moim programie sterowanie było, ale nie takie napięcia jak powinno być. Najpierw myślałem jak typowy "początkujący" procesor uwalony, no to bach procesor nowy prosto z sklepu :) tj. szuflady. Dalej to samo. sterowanie jest poziom napięć nie ten. Po odłączeniu diody MOC3021 jak za dotknięciem różdżki bach napięcie prawidłowe, pod obciążeniem siadało hmmmmm, ciekawostka. Na czystym przykładzie z ksiażki Mirka działa pięknie u mnie nie chce. No to po koleji.................. no i co się okazało, zapomniałem o jednym ustawieniu nogi procesora ;)
DDRB |= (1<<PB2); // Wyjście na triak MOC302x
tj, było ale na PB1 ustawione :). stracone 8godzin szukania analizy, wgrywania innego programu.

Nie twierdzę, że Mirek jest nieomylny, bo sam się przyznaje, że jest. Zresztą są erraty kodów na jego stronie do ściągnięcia.
Ale na początku zawsze zaczynaj od sprawdzenia połączeń przykładem z książki tj. z płyty DVD dokładnie + ewentualna errata. Chociaż 99.99% bez erraty też będzie działać, błędy są naprawdę niewielkie.
Sorry za tak długi wywód, ale chciałem tylko unaocznić, że nie tylko całkowicie początkujący popełniają podstawowe błędy.
Dlatego zawsze w zanadrzu mam albo diodę, albo jeżeli jest LCD, program Mirka, czy to obsługa RS232, czy to nawet wrzucenie wyświetlania jakiejś zmiennej obok moich komunikatów.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2013, o 11:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 gru 2012
Posty: 161
Pomógł: 9

Rozdrabnianie kodu i analiza linijka po linijce - robię tak zawsze, napisałem ten post z racji późnej godziny i mojej frustracji faktem że działać nie chce a jednak wszystko wydawało się dobrze zrobione. Specjalnie kilka razy przepinałem kable połączeniowe aby wykluczyć błąd połączenia. Sprawdzałem programowo każdy segment takim kodem:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Światełko latało po wszystkich segmentach wszystkich liczb w oczekiwanej kolejności. Czyli połączenie dobre.

Ten kod który podałem wcześniej pisałem w marcu 2012, także to moje początki jakiekolwiek z C, także mam świadomość, że tam jest dużo baboli.. ale działał co dało mi otuchę i zajmuję się tym dalej.

Dzisiaj od rana sprawdzałem kod, nie linijka po linijce ale znak po znaku. I dopiero teraz jak już się z tym naszarpałem doszedłem do tego co jest nie tak :)
Kod jest w 100% sprawny. Mogłem od razu wkleić schemat urządzenia. Wzorowałem się PRAWIE w 100% na ATB 1.04... PRAWIE bo zamiast PNP mam u siebie NPN... :roll:
I wystarczyło w przerwaniu zmienić linijkę:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

przed "licznik" wywalić negację, która odwrotnie sterowała tranzystorami...

Dzięki wielkie za odpowiedzi / podpowiedzi. Błąd był tak samo "śmieszny" jak u forumowicza rezasurmar.

I rzeczywiście widzę teraz, że źle zacząłem opis problemu. Na tych kodach się opieram, nie napisałem że jest zły, tylko że w moim przypadku nie działa ;P :lol: :roll: Jeśli zabrzmiało to jak napaść na autora - przepraszam, na pewno tak nie miało zabrzmieć, nic nie zarzucam.

Na koniec dam schemat mojej płytki testowej jeśli ktoś byłby zainteresowany:
https://dl.dropbox.com/u/412268/Elektronika/atnel_forum/testowa.png

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2013, o 12:15 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27314
Lokalizacja: Szczecin
Pomógł: 1041

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


i tu w tej zmianie jest twój błąd ;) .... niestety

jakbyś dobrze przeanalizował operacje logiczne które wychodzą przy takiej (niewinnej jak wspomniałeś zamianie linijek) to byś zobaczył - że coś jest nieteges

inaczej - gdybyś podłączył na początek NPN'y i by ci to zadziałało - to też byś inaczej kombinował .... a tak? a tak to wydaje ci się że w kodzie z książki jest coś nie tak.....

Spokojnie - nie traktuję tego jak napaść i też przepraszam cię - jeśli źle zrozumiałeś moją wypowiedź. Raczej chodzi mi o to - że jak coś nie wychodzi - to jednak warto najpierw zrobić dokładnie jak w książce (DVD) i te tranzystorki dać NPN ....

spróbuj sobie rozpisać dokładnie operacje logiczne w tej linijce i zaobserwować co się dzieje ..... no chyba że zmieniałeś jeszcze coś w kodzie tego przerwania ;) ale jeśli nie to będzie ZONK

a jeśli zmieniałeś to pokaż te zmiany ;) żeby można było przeanalizować to co robisz .... bo sam widzisz - że to tak zwykle bwa "zrobiłem wszystko jak w książce i nie działa" ... a później po pytaniach okazuje się że ...."no nie zrobiłem prawie jak w książce ale moje zmiany nie powinny mieć wpływu" .... a jednak na końcu zwykle okazuje się że mają ;) ...

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2013, o 16:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 gru 2012
Posty: 161
Pomógł: 9

Chyba już rozumiem ideę przesunięć bitowych. CHYBA :)

Zacznę od kodu który teraz działa, a który jest już trochę przeze mnie zmieniony:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


I teraz tak:
- anody są przyporządkowane do pinów 7,6,5,4 portu C. Katody do całego portu A od 0 do 7, połączenie jest dobre.
- tranzystory są typu NPN czyli trzeba podać stan wysoki na nóżkę odpowiadającą za cyfrę, reszta masa.

Jako, że anody są 4 wyższymi bajtami portu to równe są 128 dla PC7, 64 dla PC6, 32 dla PC5 i 16 dla PC4.
-> Stąd mój licznik na początku równa się 128.
- Robię maskowanie portu C wygaszając wszystkie piny odpowiedzialne za anody. ANODY_PORT & 0x0F tutaj mi się zgadza, maskuję to co potrzeba.
- Teraz zabieram się za włączenie odpowiedniego pinu, czyli PC7 (128).
Rozkładam na czynniki pierwsze linijkę: ( ANODY_PORT & 0x0F ) | ( licznik & 0xF0 )


|>>>>>7654 3210
PORTC 0000 0000
& 0x0F 0000 1111
--------------------
-------- 0000 0000

licznik 1000 0000
& 0xF0 1111 0000
-------------------
------- 1000 0000


. 0000 0000
| 1000 0000
1000 0000

przy czym 4 młodsze mogą przybierać 1 albo 0 i się nie zmienią.

To samo mi wychodzi po przesunięciu o >>1 ==>> 0100 0000 - zapala się kolejna anoda (stan wysoki).

Tym sposobem dochodzę do 0001 0000 i jeśli tutaj nastąpi kolejne przesunięcie o >>1 to licznik ustawi się z powrotem na 128 czyli PC7.

Dobrze myślę? Czy gdzieś popełniam błąd? Operacje bitowe średnio mi zawsze wychodziły dlatego ostro się wziąłem za tą lekcję :)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 44 ]  Przejdź na stronę 1, 2  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO