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



Teraz jest 28 paź 2024, o 14:31


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 15 lut 2012, o 19:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2012
Posty: 193
Pomógł: 6

Witam, niedawno zacząłem naukę języka C bo z techniku elektronicznego nie udało mi się wynieść żadnego języka programowania...
Przy nauce pomocna jest mi książka Pana Mirka.
Zatrzymałem się na przerwaniach oraz multipleksowaniu 4 wyswietlaczy, jak w przykładzie z książki.
Jedynymi różnicami które są w moim przypadku to anody podłączone do PORTD (PD2...PD5)
oraz katody zajmujące cały PORTB.
Problem polega na tym że działają tylko 2 ostanie wyświetlacze ( 3, 4)
Próbowałem zmieniać kolejności w 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.


Z problemem walczę od wczoraj, proszę o pomoc jeśli trzeba jakiś dodatkowych informacji to proszę pisać.

//edit. Zapomniałem napisać że atmege napędzam kwarcem 8MHz (fusy dobrze ustawione) dzielnik przez 8 wyłączony.

Pozdrawiam
KoreX



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2012, o 21:03 
Offline
Nowy

Dołączył(a): 26 paź 2011
Posty: 12
Pomógł: 0

Proponowałbym sprawdzić problem w sposób czysto elektryczny.
Podłącz pod PD2 i PD3 zwykle diody LED poprzez R300 ohm i spróbuj to zrobic na samych wyprowadzeniach AVR-a.
W ten sposób wyeliminujesz brak przejścia na płytce stykowej ( tanie płytki często mają lekko skorodowane styki).
W przeciwnym wypadku masz błąd w kodzie - sygnał na segmenty jest podawany w innym momencie niż na anody.
Pozdrowionka.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2012, o 21:30 
Offline
Moderator
Avatar użytkownika

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

Zmiana kolejności anod nie ma tu znaczenia - ale czy wprowadziłeś odpowiednie poprawki do kodu w przerwaniu ? Tam jest klucz do sukcesu a coś mi się wydaje że ty tylko podmieniłeś piny w tych definicjach i teraz dziwisz się, że nie działa ? :(

_________________
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: 15 lut 2012, o 22:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2012
Posty: 193
Pomógł: 6

jesli chodzi o timer0 to sprawdzalem noty i rejestry sie zgadzaja. jesli chodzi o obsluge przerwania to probowalem wpisac na sztywno 0 na port anod i wtedy swiecily wszystkie segmenty.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2012, o 23:09 
Offline
Moderator
Avatar użytkownika

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

Eeee no na sztywno to można wiesz gdzie leżeć ;) .... a nie wpisywać na port anod ;)

Pokaż że Pan co tam wymodziłeś w tym przerwaniu - bo to pokaże czy w ogóle zrozumiałeś zasadę sterowania takim wyświetlaczem ..... i wtedy spróbujemy coś pomóc OK ? bo tak w ciemno to można sobie gdybać i gdybać na 20 stron a i tak nic to nikomu nie da..... chyba że wróżka się znajdzie. No trzeba się w takich przypadkach jakimś kodem podeprzeć zadając takie pytanie.

_________________
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: 15 lut 2012, o 23:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2012
Posty: 193
Pomógł: 6

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


zmienna licznik po kolei przyjmuje wartosc 1,2,4,8 (dzieki przesunięciom) i zapala nam kolejne wyswietlacze.
U mnie 2 pierwsze nie świecą a na 2ch ostatnich cyfry są odwrotnie ( na 3cim widać cy4 a na 4tym cy3)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2012, o 23:38 
Offline
Moderator
Avatar użytkownika

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

No i tak jak myślałem - pytanie teraz - czy rozumiesz zasadę jak to się dzieje, że zapalane są te kolejne anody wyświetlaczy ???? bo z tego widać że chyba w ogóle ?

Masz rację, że zmienna licznik przyjmuje wartości 1,2,4,8 .... a jak to się ma do pinów na których ty podłączyłeś swoje anody ???? No przecież ma się to NIJAK .... poza tym, że jest to prawidłowy efekt, że dwa pierwsze ci się nie świecą przy takim kodzie a w ostatnie wyświetlają nie to co trzeba

Niestety ale wygląda na to, że ty na razie dokonujesz zmian w kodzie na zasadzie takiej:

"hmmm może tą linijkę skasuję i może się uda pomimo to że podłączam anody inaczej"

nie mam racji ? ale tak szczerze

napisz mi np dlaczego jeśli anody byłyby podłączone tak jak to opisane w książce to by się zapalały ??? z czego to konkretnie wynika ? hmmm?

_________________
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: 15 lut 2012, o 23:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2012
Posty: 193
Pomógł: 6

Juz wiem, ale gafa... Anody w książce są na 4rech pierwszych kolejnych pinach portu...
Z tym przepisuje/kasuje bezmyślnie to nie ma Pan racji bo nie o to w tym chodzi, ale no widać że nie mam jeszcze nawyków i nie widzę błedów na pierwszy rzut oka które dostrzega wieloletni programista:)

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2012, o 23:49 
Offline
Moderator
Avatar użytkownika

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

Wcale nie miałem na myśli że coś tam przepisujesz czy kasujesz bezmyślnie, nie wiem co niektórzy się tak zaraz honorem unoszą. Przecież staram się naprowadzić na problem a nie go podać na talerzu i jak widać się udało chyba ? A to czasem lepiej niż wprost ręką pokazać - bo dzięki temu że sam znajdziesz babola - na drugi raz lepiej będziesz się w tym orientował - tak mi się przynajmniej wydaje.

A to że anody w książce są na 4 pierwszych pinach to wynika nawet nie z ustawień w pliku nagłówkowych tylko chociażby z wartości krążącego licznika. Przecież 1,2,4,8 - odpowiadają kolejno bitom: 0,1,2,3 zgadza się ? Warto nawet pod tym kątem czasem na kod patrzeć.

_________________
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: 15 lut 2012, o 23:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2012
Posty: 193
Pomógł: 6

Zgada się, nie unoszę się wcale honorem, jestem bardzo wdzięczny za naprowadzenie na rozwiązanie problemu który drugą noc nie dawał mi spać:]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2012, o 23:56 
Offline
Moderator
Avatar użytkownika

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

A no to ok ;) jak coś to śmiało pytaj dalej ....

_________________
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: 15 lut 2012, o 23:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2012
Posty: 193
Pomógł: 6

to pytam dalej, gdybym licznik startował od wartości 4 i wartość tą ustawiał na nim gdy licznik >32 a zamiast 1,2,4,8 ustawił w warunkach 4,8,16,32 to rozwiązanie zadziała w moim przypadku, dobrze kombinuję?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2012, o 00:23 
Offline
Moderator
Avatar użytkownika

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

Bardzo dobrze kombinujesz i teraz widzę że już zaskoczyłeś dobrze o co chodzi ale ...

ale jedno ważne ALE ..... bo widzę, że w kodzie przerwania zaremowałeś bardzo WAŻNĄ linię

Kod:
//ANODY_PORT = (ANODY_PORT & 0xF0) | (~licznik & 0x0F); 


A za to na początku przerwania zamiast wykasować wszystkie ANODY to ty tam sobie niefrasobliwie przypisujesz na cały port zanegowaną wartość licznika.

Przeczytaj sobie w książce z czym to się wiąże i jakie dwa babole popełniasz. Wprawdzie wyświetlanie niby ci działa ale:

1. będziesz miał zjawisko "duszków" na wyświetlaczu
2. niszczysz zawartości innych nie używanych pinów portu na którym są ANODY !!!! to już bardzo źle ...

a właśnie taki sposób jak w książce pokazałem - to nie na darmo - bo później ludzie piszą na różnych forach pytania typu:

"a od czego na moim wyświetlaczu w ciemności widać takie jakby duszki czy smużenie ???"

albo

"a dlaczego inne piny portu zmieniają swoje wartości - tam gdzie mam podłączone anody???"

jeszcze raz polecam - poczytaj o tym dokładnie - bo w tej linii gdzie ty sobie niefrasobliwie teraz przypisujesz licznik a nawet (o zgrozo komentarza nie zmieniłeś było tak)

Kod:
ANODY_PORT = (ANODY_PORT & 0xF0);   // wygaszenie wszystkich wyświetlaczy


zresztą zawsze oryginał kodu źródłowego znajdziesz na DVD

_________________
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: 16 lut 2012, o 10:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2012
Posty: 193
Pomógł: 6

Mam tego pełną świadomość, skracałem kod do jak najprostszej wersji(taka jak na początku w książce) i dlatego wygaszałem anody negacją całego portu z którego używam tylko 4rech pinów;)
Ale dziękuję za uwagę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2012, o 12:03 
Offline
Moderator
Avatar użytkownika

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

A no tak - jak coś nie wychodzi to się zawsze skraca tak byle by w podstawowy sposób działało ;) ....

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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