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

Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń
https://forum.atnel.pl/topic23024.html
Strona 1 z 1

Autor:  dikens [ 14 kwi 2020, o 08:33 ]
Tytuł:  Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

Witam Wszystkich. Jestem tu nowy, więc przepraszam jeśli taki temat był a go nie znalazłem.
Rozpocząłem zabawę i naukę z mikrokontrolerami AVR i stanąłem na multipleksowaniu.
Uruchomiłem kod z książki i teoretycznie działa, lecz ja zawsze muszę "po swojemu".
Podłączając wyświetlacze pozamieniałem wyprowadzenia wyświetlacz - mikrokontroler i moje pytanie:
1. nie mogę zmienić w programie sterowania anodami z PD0-PD3 na PD2-PD5 -pomimo zmian świecą tylko 2 cyfry.
Czy kontroler ma jakoś "odgórnie" przypisanie do 0-3
2. w katodach zamieniłem miejsca i segment G mam na PB7 a DP na PB5. Kiedy w kodzie zamieniam te wyprowadzenia program sygnalizuje jakiś błąd przepełnienia.
Czy wyświetlacz zawsze musi być podłączony jak w przykładach katody A-0 .... DP-7 ???

Autor:  Jarecki [ 14 kwi 2020, o 08:42 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

dikens napisał(a):
Witam Wszystkich. Jestem tu nowy, więc przepraszam jeśli taki temat był a go nie znalazłem.
Rozpocząłem zabawę i naukę z mikrokontrolerami AVR i stanąłem na multipleksowaniu.
Uruchomiłem kod z książki i teoretycznie działa, lecz ja zawsze muszę "po swojemu".
Podłączając wyświetlacze pozamieniałem wyprowadzenia wyświetlacz - mikrokontroler i moje pytanie:
1. nie mogę zmienić w programie sterowania anodami z PD0-PD3 na PD2-PD5 -pomimo zmian świecą tylko 2 cyfry.
Czy kontroler ma jakoś "odgórnie" przypisanie do 0-3
2. w katodach zamieniłem miejsca i segment G mam na PB7 a DP na PB5. Kiedy w kodzie zamieniam te wyprowadzenia program sygnalizuje jakiś błąd przepełnienia.
Czy wyświetlacz zawsze musi być podłączony jak w przykładach katody A-0 .... DP-7 ???


Cześć,
pokaż fragmenty kodów, gdzie dokonałeś swoich zmian to coś poradzimy. Ten wyświetlacz może być podłączony na różne piny i musi dzialać :)

Autor:  mirekk36 [ 14 kwi 2020, o 09:40 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

To bardzo dobrze, że kolega chce po swojemu i temu ma służyć książka, aby rozwijać przykłady w niej zawarte - "po swojemu" - wtedy można się uczyć

dikens napisał(a):
Czy wyświetlacz zawsze musi być podłączony jak w przykładach katody A-0 .... DP-7 ???

No to już niestety pomysł z kosmosu i gdy coś tobie nie wychodzi to porzuć myśli tego typu jak to niektórzy mają, że albo mikrokontroler zepsuty, albo że może być tak i tylko tak .... to bez sensu ;) ZAMIAST tego szukaj błędów w tym co sam robisz - bo inaczej dalej nigdy nie pójdziesz....

a teraz uwaga! jeśli masz bluebooka to powiedz mi ale tak z ręką na sercu ? Przeczytałeś ty ten rozdział krok po kroku? Próbując zrozumieć o czym w nim mowa ? Bo po twoim opisie problemu wydaje mi się (ale może się tylko wydaje), że książka poszła w kąt a ty dorwałeś się do kodu którego nie rozumiesz kompletnie jak działa i próbujesz na oślep wprowadzać zmiany ...

W książce dokładnie opisuję - i to MEGA ale to MEGA dokładnie co i jak - jak można sobie dobierać porty, piny (dowolne prawie) .... jedynie na sterowanie wspólnych anod proponuję czwórkę bitów w ramach jednego portu ... pokazuję jak maskować te bity itp itd ....

Więc zacznij proszę od książki ... bo tam znajdziesz odpowiedzi na swoje pytania - a jak czegoś nie zrozumiesz z książki - to ŚMIAŁO wpadaj na forum i zadawaj pytanie konkretne - a jeśli coś podmieniasz to pokazuj fragmenty kodu - bo inaczej to są pytania do jasnowidzów - a tu takich nie ma.

Autor:  dikens [ 14 kwi 2020, o 12:14 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

Przeczytałem i jakąś tam część zrozumiałem ;-). W załączeniu kawałki kodu.
To co mam problem:
1 . gdy zamieniam część wyświetlacza G z BD (teraz jest DB (1<<5) a G (1<<7) w MKCLIPE wyświetla mi błąd:
"C:\Users\Robert_2\Documents\MkClipse\AVR Toolchain\bin\avr-gcc" -Wall -Os -Wstrict-aliasing=1 -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega8515 -DF_CPU=1000000UL -MMD -MP -MF"Release/d_led.d" -MT"Release/d_led.o" -c -o "Release/d_led.o" "d_led.c""
d_led.c:28:9: warning: large integer implicitly truncated to unsigned type [-Woverflow]
~(A|B|D|E|DB), // 2

2. gdy zmianiam kolejność CA1-CA4 z PA0->PA3 na PA3->PA0 cyfry nie zmieniają kolejności położenia. (opisany wcześniej przypadek dotyczył innego podłączenia, ale jeśli zmienię kolejność cyfr tu, to i uda mi się zrobić to tam)-tak myślę. ---proszę nie sugerować się opisem że to port C a ja mam PA. Podłączone jast na PA.

ObrazekObrazek

https://youtu.be/_7PLz0DVD0s

Autor:  Jarecki [ 14 kwi 2020, o 13:06 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

Co to jest DB? Dlaczego znajduje się w tablicy cyfr? Po co zmieniać G z DB? Poza tym raz piszesz DB a raz BD

Autor:  dikens [ 14 kwi 2020, o 13:25 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

Jarecki napisał(a):
Co to jest DB? Dlaczego znajduje się w tablicy cyfr? Po co zmieniać G z DB? Poza tym raz piszesz DB a raz BD


Mój błąd. to DB to miało być DP-kropka.
Chodzi o to że wyświetlacz działa jak na filmiku. ma zamienione te dwa segmenty, środek-G i kropkę. Kropka jest pod 5 a G pod 7. Jak je zamienię port 5 na 7 i 7 na 5 (czyli odwrotnie) to wywala mi błąd. nie ma znaczenia czy zrobię to w definicji bitów G na DB, czy 5 na 7, czy w tablicy znaków. Jeśli w tablicy jest określony bit 7 to jest błąd.

Autor:  auers [ 14 kwi 2020, o 14:04 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

Zamiast:
~(A|B|D|E|DB), // 2
Wstaw:
(~(A|B|D|E|DB)) & 0xff ,
Aczkolwiek przypadek ciekawy. Pewnie chodzi o domyślną promocję do int.

Autor:  mirekk36 [ 14 kwi 2020, o 14:19 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

auers napisał(a):
Aczkolwiek przypadek ciekawy. Pewnie chodzi o domyślną promocję do int.

Tak dokładnie o to chodzi w jakimś poradniku a także na forum już to nie raz opisywałem ;) bo stałe dosłowne domyślnie też są traktowane jako uint16_t

inne rozwiązanie to jawne rzutowanie

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

Autor:  dikens [ 14 kwi 2020, o 14:45 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

Działa, dzięki. Wypróbowałem i jeden i drugi przykład.

A co z zamianą portów na anodach wyświetlacza?

Autor:  mirekk36 [ 14 kwi 2020, o 16:25 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

Cytuj:
A co z zamianą portów na anodach wyświetlacza?

Możesz działać dla czwórkami - żeby ci było łatwiej maskować, a później jak poćwiczysz maskowanie i dokładnie zrozumiesz - zresztą tu masz poradnik:



to możesz sobie je dać na DOWOLNE bity portu a nawet na różne porty, czemu nie ;) tylko poza maskowaniem będziesz musiał jeszcze inaczej skonstuować przełączanie wspólnych anod a nie tak jak jest teraz w BB

Autor:  dikens [ 14 kwi 2020, o 19:40 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

Obejrzałem, przeczytałem.....i chyba do tego nie dorosłem :oops:

Wg mojego rozumowania port anody jest określony w d_led.c i maskowany MASKA_ANODY.
MASKA_ANODY zdefiniowane jest w d_led.h jako CA1,CA2,CA3,CA4. a CA zdefiniowane jako porty PD0-PD3. czyli dla CA1 to PD0 a ja potrzebuję PD5. Niestety zmieniając port nic się nie zmienia.

Ale widać jestem w błędzie, albo coś przeoczyłem (czyt.nie rozumiem) :(

ObrazekObrazek

Autor:  mirekk36 [ 14 kwi 2020, o 19:46 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

Masz może Bluebooka ?

https://atnel.pl/mikrokontrolery-avr-jezyk-c.html

Autor:  dikens [ 14 kwi 2020, o 19:50 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

mam w wersji papierowej....gdzieś się pogubiłem, i ruszyć z miejsca nie mogę.

Autor:  mirekk36 [ 14 kwi 2020, o 20:01 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

No to na spokojnie - spróbuj zadawać po kolei pytania odnośnie tego - czego nie rozumiesz - bo jak się zatniesz gdzieś w środku to później ciężko iść dalej

Autor:  dikens [ 14 kwi 2020, o 20:26 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

W książce jako przykład mamy maskę anody 0xF0 co w połączeniu z licznikiem daje porty 0-3 domyślam się że zmieniając 0xF0 zmieniam wynik operacji licznika. Ale w programie mamy MASKA_ANODY ale to jesz zdefiniowane jako #define MASKA_ANODY (CA1|CA2|CA3|CA4) a CA zdefiniowane jako porty PD1-PD3. teoretycznie odpowiadać to powinno 0xF0, ale zmiana tego portu PD nie daje żadnych efektów i tu mam problem. Skąd kontroler bierze numer portu

Autor:  auers [ 14 kwi 2020, o 20:50 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

dikens napisał(a):
Skąd kontroler bierze numer portu

Obrazek

Autor:  dikens [ 14 kwi 2020, o 20:59 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

auers napisał(a):
dikens napisał(a):
Skąd kontroler bierze numer portu

Obrazek


To wiem. Nie chodzi mi o definicje całego portu a poszczególnych bitów. W tej chwili działa 4 cyfry na PD0-PD3, a muszę mieć PD5-PD2

Autor:  auers [ 14 kwi 2020, o 21:00 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

Chyba trochę źle przeliczasz.
Skoro MASKA_ANODY (CA1|CA2|CA3|CA4) gdzie Ca to PD0-PD3 to otrzymasz 0x0F a nie 0xF0

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

Dla PD2- PD5 otrzymasz 0b00111100 = 0x3C
tylko nie ma potrzeby tego przeliczać, po to stosujesz maski w postaci : MASKA_ANODY (CA1|CA2|CA3|CA4)

Autor:  dikens [ 14 kwi 2020, o 21:10 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

0F to cytat z książki. u mnie jest faktycznie F0.
Gdy zamiast (CA1|CA2|CA3|CA4) wstawię (0xF0) to jest to samo.
Nie potrafię tego zmienić żeby zapaliły mi się 4 cyfry. 3cia i 4ta to 0x04 i 0x08. Gdy wpiszę 0x0C to mam to samo jak przy 0xF0 Brakuje mi sterowania 1 i 2 cyfrą które sa podłączone pod PD5 i PD4

------------------------ [ Dodano po: 3 minutach ]

tylko nie ma potrzeby tego przeliczać, po to stosujesz maski w postaci : MASKA_ANODY (CA1|CA2|CA3|CA4)[/quote]

I w tym problem że tego nie mogę zmienić, a (CA1|CA2|CA3|CA4) było by najlepsze.
Nie mogę dojść z definiowaniem CA.... bo jakoś nic się nie zmienia

Autor:  auers [ 14 kwi 2020, o 21:17 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

Chyba sam sobie tworzysz problem.
Skoro masz definicje typu CA1 (1<<PD0).
To zamień je na te piny z których korzystasz, bo jak na sztywno wpisujesz 0xF0 to nie dziw się, że nie działa skoro 0xF0 odpowiada pinom PD4-PD7.A ty chcesz z PD2 i PD3.

Autor:  dikens [ 14 kwi 2020, o 21:21 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

W tym właśnie problem że jakiekolwiek zmiany w tych ustawieniach nic nie dają. I to jest zagadka dla mnie

Autor:  auers [ 14 kwi 2020, o 21:23 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

Pokaż jak to zmieniłeś. A jak chcesz na sztywno to wpisz tak jak wcześniej Ci policzyłem 0x3C a nie 0x0C,

Autor:  dikens [ 14 kwi 2020, o 21:29 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

Obrazek

mógł bym wziąć lutownicę, kawałek przewodu i po problemie, ale chyba nie o to chodzi. Muszę to zrobić programowo.

Autor:  auers [ 14 kwi 2020, o 21:38 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

A sprawdziłeś połączenia. Tu nie ma filozofii jak nic więcej nie namieszałeś to powinno działać.
W programie nie ustawiłeś jakiś innych funkcji które przypadkiem korzystają z tych PINów.

Autor:  dikens [ 14 kwi 2020, o 21:45 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

Nie. Dla testów mam czysty plik przykład z ksiązki. Wyprowadzenia sprawdzone programowo jako led, element po elemencie.

W rozbudowanym kodzie mam 2 wyświetlacze 4 cyfrowe. drugi jest fizycznie podłączony pod PA0-PA3. tak jak powinno być, i jest ok. ALE!! gdy w tych ustawieniach zmienię kolejności PA0-PA3 w różne kombinacje, to też nic się nie zmienia pracuje cały czas tak samo.

Autor:  auers [ 14 kwi 2020, o 21:53 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

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

Mogłem się rąbnąć piszę z głowy bez możliwości sprawdzenia.

Autor:  dikens [ 14 kwi 2020, o 21:56 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

ANODY_PORT = (ANODY_PORT & ~MASKA_ANODY) | (~licznik & MASKA_ANODY);

U mnie jest tak. Zaraz zobaczę Twoje.

------------------------ [ Dodano po: 7 minutach ]

Prawie działa...tylko jest na odwrót i zamienić nie mogę kolejności

https://youtu.be/eJdjed0pulQ

powinny liczyć tak samo.

Autor:  auers [ 14 kwi 2020, o 22:13 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

No to daj lusterko (taki żarcik).
Tam gdzie masz if'y z licznikiem w tablicach musisz się odwołać do cyfr w odwrotnej kolejności.
Pokombinuj, dasz sobie z tym radę.

Autor:  dikens [ 14 kwi 2020, o 22:20 ]
Tytuł:  Re: Multipleksowanie LED - ćwiczenie - zmiana wyprowadzeń

Obrazek

Dałem radę. zamieniłem cyfry w procedurze przerwań, choć nie do końca o to mi chodziło. Ale zadziałało, więc bawię się dalej.

Dziękuję za pomoc.

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