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



Teraz jest 29 mar 2024, o 07:25


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 19 ] 
Autor Wiadomość
PostNapisane: 7 kwi 2017, o 12:09 
Offline
Nowy

Dołączył(a): 13 lut 2014
Posty: 19
Pomógł: 0

Witam, mam pytanie do kolegów. Co może być przyczyną pulsowania cyfr w wyświetlaczu 7 segmentowym, które sterowane są Timer0 czyli multipleksowaniem.
Multipleksowanie działa bez problemu ale gdy wstawiłem regulacje jasności wyświetlanie za pomocą PWM Timer2 z portu D do wejścia bazy tranzystora PNP widocznego na schemacie poglądowym regulacja nie działa prawidłowo. W maksymalnej jasności delikatnie widać pulsowanie ANODA1-ANODA4 natomiast, gdy ściemniam pwm im mniej światła tym pulsowanie jest coraz bardziej widoczne. W konsekwencji, gdy maksymalnie przyciemniam diody świecą mniejszą mocą, ale CYFRY pulsują od 1 do 4 i to bardzo widocznie. Czyli tak w trakcie sekundy zapałają sie wyświetlacze od 1 do 4
To wychodzi tak, że gdy przyciemniam pwm to przy okazji wpływam na multipleksowanie.
Podłączając stałe napięcie do tranzystorów ANOD wyświetlacza multipleksowanie działa super. Nic nie pulsuje i jest stałe wyświetlanie cyfr. A jak do PWM podłęcze zwykła diodę ona sie ściemnia i nie widać na niej pulsowania. Czyli jakby osobno jest OK

Dodam, że jest to układ zegara i działa od roku bez problemu jednak dodanie ściemniania było konieczne i wykorzystałem tranzystor jak na schemacie, ponieważ wykonałem juz płytkę i dodanie tranzystora było możliwością, jaka mi przyszła do głowy.
Procesor to atmega128 zegar kwarc 16Mhz
Wolny tylko jeden PIN z Portu D więc PWM jest programowy z książki BB tylko na jeden PIN.
Timer0 - multipleksowanie
Timer2 - PWM
Timer1 - sterowanie odbiorem IR

Co może być przyczyną?
Dziękuję za udzieloną pomoc. Pozdrawiam

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2017, o 12:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

Musisz mieć synchronizację między PWM a multipleksowaniem. Czyli jeśli częstotliwość PWM to 100Hz, to multipleksować musisz o wielokrotność, np. 400Hz - czyli PWM i multipleksacja musi być synchroniczna, w rytm wspólnego zegara.
Może powiedz jakie masz częstotliwości PWM i multipleksacji.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2017, o 12:35 
Offline
Nowy

Dołączył(a): 13 lut 2014
Posty: 19
Pomógł: 0

Witam, ustawienia Timerów mam tak:

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2017, o 13:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 gru 2011
Posty: 450
Pomógł: 4

Musisz jeszcze podać, z jaką częstotliwością napędzany jest mikrokontroler, bo bez tego nie da się obliczyć podziału i ostatecznej końcowej częstotliwości przerwań.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2017, o 13:34 
Offline
Nowy

Dołączył(a): 13 lut 2014
Posty: 19
Pomógł: 0

Witam, dziękuję za odpowiedź.
Mam 16Mhz jest jeszcze przerwanie INT3 z układu zegara. To raczej nie koliduję.
Zmieniłem tak na szybko OCR0 w TIMER0 i pulsowanie jest znikome czyli można to dopracować po wyliczeniu jak pisał kolega ZOOM.
Jednak im szybciej ustawiam multipleksowanie to pojawił się nowy problem z segmentami wyświetlacza. Te segmenty które nie powinny świecić, świecą się delikatnie tak z 30% jasności. Czyli jak mam pełną jasność CYFR to delikatnie świeca się segmenty które powinny być zgaszone.
Czyli taki efekt duchów z innych cyfr. Zmniejszając multipleksowanie w OCR0 TIMER0 tego efektu nie ma.
Jak to wyeliminować?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2017, o 15:19 
Offline
Użytkownik

Dołączył(a): 10 sty 2017
Posty: 50
Pomógł: 5

Rozdziel gaszenie i zapalanie kolejnego wyświetlacza. W procedurze multipleksowania zamiast gasić jeden wyświetlacz i od razu zapalać kolejny, zrób tylko gaszenie. Zapalanie zrób w kolejnych wywołaniach przerwania. Prawdopodobnie trzeba będzie zwiększyć częstotliwość wywołania przerwania ale w ten sposób możesz wysterować wypełnienie bez zaprzęgania kolejnego timera. Jest to nieco proteza ale da się uzyskać kilka stopni jasności. Można też zapalanie i gaszenie wyświetlaczy przenieść do pętli głównej a w przerwaniu stawiać tylko odpowiednie flagi ale jak wiadomo pętla główna może mieć różne czasy poszczególnych obiegów a co za tym idzie może świecić nierówno. Obsługa w przerwaniu chyba będzie lepsza.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2017, o 15:25 
Offline
Użytkownik

Dołączył(a): 08 mar 2014
Posty: 390
Lokalizacja: Głogów
Pomógł: 11

Ja w swoim zegarku zwiększyłem częstotliwość multipleksowania dwukrotnie beż żadnej synchronizacji i nie da się zauważyć pulsowania



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2017, o 20:17 
Offline
Nowy

Dołączył(a): 13 lut 2014
Posty: 19
Pomógł: 0

Witam,
na początku miałem tak:

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


Nic się nie zmienia dalej mam duchy. Chyba że nie zrozumiałem co kolega riddik miał na myśli.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2017, o 21:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Duszki powstają wtedy, gdy na forum króluje kod widmo - może kolega pokaże przynajmniej obsługę przerwań bo teraz to raczej do egzorcysty... ;)

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2017, o 23:07 
Offline
Nowy

Dołączył(a): 13 lut 2014
Posty: 19
Pomógł: 0

Witam, 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.



Ostatnio edytowano 7 kwi 2017, o 23:32 przez ATuser, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 kwi 2017, o 15:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Masz troszkę nietypowe sterowanie wyświetlaczem - po pierwsze dlaczego osiem liczb dla czterech wyświetlaczy?
riddik napisał(a):
Rozdziel gaszenie i zapalanie kolejnego wyświetlacza.

Koledze chodziło o to, że sterowanie powinno wyglądać tak:
1.ANODY zgaszone
2.ustaw liczbę na dany wyświetlacz
3."zapal" anodę danego wyśw.
1. ...
To wygaszenie pozwala na uniknięcie duszków.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 kwi 2017, o 22:00 
Offline
Nowy

Dołączył(a): 13 lut 2014
Posty: 19
Pomógł: 0

Witam, dziękuję za odpowiedź. Niestety to nie pomogło.
Zrobiłem jak kolega opisał dodałem kroki do licznika przerwania i jest delikatna poprawa. Ale to samo uzyskałem 2 krokach na wyświetlacz
1. Zgaś anodę i zgaś cyfrę
2. Zapal cyfrę i anodę.
Więc czy trzy kroki czy dwa jest podobnie. W akcie desperacji rozbudowałem sekcje licznika przerwania do nawet 16 kroków gdzie 4 kroki były od 1 wyświetlacza cyfry.
Próbowałem tez z tranzystorami na wyjściu (npn) BC817 , Darlington oraz BC547 na wszystkich jest to samo. Mało tego mam 5 identycznych płytek i na wszystkich jest to samo a wszędzie są różne diody wyświetlacza.
Segmenty, które nie powinny się świecić, świeca teraz z mocą tak 7-9% ale to widać jeszcze.
Myślałem, że może jakieś rezystory do bazy tranzystorów, aby trochę wytłumić te przebicia cyfr. W sumie to może nic nie dać.
Jak zmienię w multipleksowaniu OCR0=40 to świecenie jest już dużo mniejsze tak może z 1-2% i to już tak nie widać i trzeba się przyjrzeć uważnie i jest to do zaakceptowania.
Może jeszcze jakieś inne rozwiązanie?
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2017, o 06:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

kicajek napisał(a):
Masz troszkę nietypowe sterowanie wyświetlaczem - po pierwsze dlaczego osiem liczb dla czterech wyświetlaczy?

ew. rozbudowa?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2017, o 11:11 
Offline
Nowy

Dołączył(a): 13 lut 2014
Posty: 19
Pomógł: 0

Witam,
Tak jest osiem liczb dla kolejnych 4 wyświetlaczy które nie są podłączone. Tak żeby np. wyświetlać osobno temperaturę czy inne dane.
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2017, o 12:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
To w takim razie "nie każ" tym 5 do 8 dublować 1-4; wykasuj tamte wyświetlania.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2017, o 16:32 
Offline
Nowy

Dołączył(a): 13 lut 2014
Posty: 19
Pomógł: 0

Witam, na 4 krokach pogorszyło się. Jest gorzej niestety. Nie mam oscyloskopu żeby zobaczyć co się dzieje w danych miejscach że im szybciej multipleksuje tym pojawiają się duszki.
Zastanawiam się czy jakieś Drivery ULN 2803 czy UDN mogły by to wyeliminować. Albo wysłanie przez SPI i to właśnie też przetestuję bo nie poddam się dopóki dopóty nie rozwiąże tego problemu choćby z czystej ciekawości. Więc drodzy Panowie będę tutaj próbował swoich sił możliwości.
Jeżeli ktoś będzie miał jakiś pomysł to chętnie wysłucham i przetestuję.

Na dniach postaram się wrzucić cały schemat układu jak i więcej kodu może ktoś gdzieś coś zauważy.
Dziękuję za pomoc.
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2017, o 16:53 
Offline
Użytkownik

Dołączył(a): 08 mar 2014
Posty: 390
Lokalizacja: Głogów
Pomógł: 11

zwolnij częstotliwość multipleksowania tak aby przerwanie odbywało się np. co 500 ms, możesz też powstawiać dodatkowe opóźnienia, wtedy gołym okiem zobaczysz co może być nie tak, że np. kolejne się zapalają zanim poprzednie się wygaszą.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2017, o 17:35 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

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

O ile się nie mylę to dla ATmega128 (takiego mikrokontrolera zdaje się używasz) to raczej będzie preskaler 128. Przy OCR0=5 przerwanie masz co 640 taktów, czyli częstotliwość ponad 20kHz. Moim zdaniem 1kHz powinien w zupełności wystarczyć.

EDIT: Z pośpiechu pomyliłem się w obliczeniach. 128 należy pomnożyć przez 6, a nie przez 5, więc przerwanie będzie oczywiście co 768 taktów :)

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

Przełączasz anodę bezpośrednio w momencie, kiedy na PORTB masz jeszcze poprzednią cyfrę, a odstęp pomiędzy instrukcjami to 62,5ns. Tranzystor sterujący anodami ma swoją pojemność i raczej nie zdąży wejść w tym czasie w stan wysokiej impedancji.
Zrób porządnie to, o czym pisał kolega kicajek, czyli coś w stylu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Zmniejsz też częstotliwość multipleksowania do ok. 1kHz i powinno być OK.

ATuser napisał(a):
Jak zmienię w multipleksowaniu OCR0=40 to świecenie jest już dużo mniejsze tak może z 1-2% i to już tak nie widać i trzeba się przyjrzeć uważnie i jest to do zaakceptowania.

To naturalne. Przy mniejszej częstotliwości multipleksowania stosunek czasu "prześwitywania" do czasu poprawnego świecenia będzie coraz mniejszy, czyli efekt będzie mniej widoczny.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 gru 2017, o 18:28 
Offline
Nowy

Dołączył(a): 29 lis 2015
Posty: 12
Lokalizacja: Lublin
Pomógł: 0

Co prawda dyskusja w temacie już się dość dawno skończyła, ale mimo to postanowiłem zabrać głos. Może mój pomysł komuś się przyda.
Otóż robię zegar, w którym potrzebny jest duży wyświetlacz. Ponieważ każdy segment tego wyświetlacza zawiera 3 szeregowo połączone diody, do zasilania niezbędne jest napięcie większe od 5 V. Z tego powodu segmenty sterowane są przez układ ULN2803, a anody przez parę tranzystorów npn i pnp. Stąd biorą się z pozoru "dziwne" sygnały włączające anody i segmenty. W obu przypadkach są to stany wysokie H. Przy próbach, podobnie jak u Kolegi, wystąpił problem migania cyfr przy regulacji jasności. Oczywiste jest, że niezbędna jest synchronizacja PWM i przełączania cyfr. Zrobiłem tak, ale to niewiele dało, gdy PWM był tylko czterokrotnie szybszy od przełączania. W związku z tym wpadłem na pomysł, który widać w załączonym kodzie.
Każda cyfra załączona jest przez 4 kolejne cykle przerwania i w zależności od wartości zmiennej bright jest odpowiednio wcześniej wyłączana. W ten sposób uzyskałem 4 poziomy jasności wyświetlacza. Próbowałem zrobić w ten sam sposób 8 poziomów jasności, lecz wymagałoby to jeszcze dwukrotnego zwiększenia częstotliwości występowania przerwania. Działo mi to dobrze, ale nieco obawiałem się, że nie pozostawię już prockowi czasu na wykonanie innych zadań i pozostałem przy 4 poziomach.


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


Obecnie zmieniłem jeszcze sposób sterowania wyświetlacza. Zastosowałem dekoder BCD na 7 segment CD4511 i w związku z tym oszczędziłem 3 piny procka. Do wyświetlacza muszę przesłać teraz tylko 4 bity cyfry, a nie wszystkie 7 segmentów i, oczywiście, sterowanie anodami.



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: 19 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 14 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