Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Attiny2313 - Brak pełnej jasności świecenia

lukaszkny 17 Wrz 2013 13:19 3120 22
  • #1 17 Wrz 2013 13:19
    lukaszkny
    Poziom 11  

    Witam,

    Mam problem z tranzystorem w tym układzie. Z tego co zaobserwowałem, to zasada działania tego tranzystora jest taka.

    Im mniejsze napięcie na bazie, tym większe jest przepuszczane z emitera na kolektor. Dobrze rozumiem?

    Dioda LED na schemacie to jeden z elementów 7-segmentowego wyświetlacza. Wyświetlacze są 4.

    I teraz mam problem, jak idzie odświeżanie danych na wyświetlaczu, to napięcie na bazie nie zdąża spaść do 0. A co za tym idzie, z kolektora nie wychodzi pełne napięcie.

    Napięcie na emiterze wynosi 5 V, na bazie około 3,8 V, a na kolektorze 1,2-1,7 V. Jak wyświetlam statyczne dane bez odświeżania, to wyświetlacz świeci normalnie.

    Co mogę z tym fantem zrobić?

    Pozdrawiam,
    Łukasz

    Attiny2313 - Brak pełnej jasności świecenia

    0 22
  • #2 17 Wrz 2013 13:29
    perlon
    Poziom 19  

    Jak ty to mierzysz? Jeżeli zwykłym miernikiem to odczytujesz skuteczną wartość napięcia uwzględniającą naprzemienność stanów 0 i 1. Multipleksowanie 4 wyświetlaczy oznacza że tylko przez 25% czasu masz na bazie stan 0 a 75% czasu masz na bazie 1. Czyżby 5V * 0,75 = 3,75V, a 5V * 0,25 = 1,25V?

    0
  • #3 17 Wrz 2013 13:35
    Witek76
    Poziom 24  

    W tym schemacie brakuje jeszcze rezystora ograniczającego prąd diody LED (szeregowo z diodą). Błąd na schemacie, czy w rzeczywistości go nie ma?

    0
  • #5 17 Wrz 2013 13:53
    lukaszkny
    Poziom 11  

    Witek76 napisał:
    W tym schemacie brakuje jeszcze rezystora ograniczającego prąd diody LED (szeregowo z diodą). Błąd na schemacie, czy w rzeczywistości go nie ma?


    Faktycznie nie wrysowałem, rezystor 100Ω znajduje się za diodą.

    0
  • #6 17 Wrz 2013 14:12
    Witek76
    Poziom 24  

    Wynika z tego że chwilowy prąd maks. masz ok. 30mA ale jak pisał wcześniej kolega perlon tylko przez 25% czasu, co odpowiada jasności LED przy zasilaniu stałym prądem 7.5mA. Zastosuj mniejszy opornik - np. 33Ω

    0
  • #7 17 Wrz 2013 15:54
    lukaszkny
    Poziom 11  

    Zmieniłem z 4,7kΩ na 50Ω i się pogorszyło. Teraz prawie w ogóle nie widać że świeci.

    0
  • #8 17 Wrz 2013 18:22
    BlueDraco
    Specjalista - Mikrokontrolery

    Nie miałeś zmniejszać rezystora w bazie, a rezystor szeregowy diody. Z tym, że to i tak niewiele da. Podejrzewam, że problem leży w oprogramowaniu albo w tej części sprzętu, której nie pokazałeś. Pokaż pełny schemat i kod.

    0
  • #9 17 Wrz 2013 18:50
    lukaszkny
    Poziom 11  

    Schematu takiego pełnego to nie mam, ale zrobię. Jak na razie zamieszczam działający kod.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Attiny2313 - Brak pełnej jasności świecenia

    Schemat Link

    0
  • #10 17 Wrz 2013 23:39
    BlueDraco
    Specjalista - Mikrokontrolery

    No, to już wiadomo, dlaczego źle działa.

    Zrób wyświetlanie przyzwoicie w przerwaniu timera - temat wraca co kilka tygodni, więc jeśli poszukasz - znajdziesz sporo na ten temat.

    0
  • #11 18 Wrz 2013 21:14
    lukaszkny
    Poziom 11  

    Próbuję to uruchomić z timerem, tylko że niezbyt chce to ruszyć. Tak jakby, timer nie ruszał.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #12 18 Wrz 2013 21:40
    BlueDraco
    Specjalista - Mikrokontrolery

    Obsługuj wyświetlacz W PRZERWANIU TIMERA, a nie w pętli głównej. Kiedy już dobrze zadziała wyświetlacz - uruchom termometr.

    0
  • #13 18 Wrz 2013 21:52
    lukaszkny
    Poziom 11  

    Dobra poradziłem sobie jakoś. Mam lekkie pulsacje na wyświetlaczu, ale to jeszcze da radę usunąć.

    Ale problem braku pełnej jasności pozostał.


    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #14 19 Wrz 2013 08:44
    BlueDraco
    Specjalista - Mikrokontrolery

    Nie da się dobrze zrobić obsługi wyświetlacza jeśli podczas wyświetlania blokujesz przerwania, a robisz to w związku z obsługą DS18B20 - stąd to pulsowanie.

    Jaką masz częstotliwość przerwań timera? Jeśli większą od 1200 Hz, to właśnie na tym tracisz jasność.

    0
  • #15 19 Wrz 2013 11:27
    lukaszkny
    Poziom 11  

    BlueDraco napisał:
    Nie da się dobrze zrobić obsługi wyświetlacza jeśli podczas wyświetlania blokujesz przerwania, a robisz to w związku z obsługą DS18B20 - stąd to pulsowanie.


    Jak usunę blokadę przerwań z obsługi DS, to co i raz wyświetla błędną temperaturę. Więc jakieś przerwania w obsłudze DS-a muszą być.

    Tak było przy dzielniku ustawionym na 8.
    ------------------------------------

    Zmieniłem dzielnik na 64 i jak na razie żadnych błędów.



    A co do częstotliwości. To jeśli mam taktowanie mikroprocesora ustawione na 1 000 000 MHz, a dzielnik na 64. To częstotliwość przerwań wynosi 15 625Hz? Jeśli dobrze rozumiem to dzielnik powinien być ustawiony na 1024.


    P.S. Przerwania w obsłudze DS wzięły się z tego, że jak szukałem informacji to znalazłem takie rzeczy w innych kodach.


    ---------------------------

    Dzielnik 1024 - za wolno, widać jak po kolei zmieniają się wyświetlacze.
    Dzielnik 256 - Widać wyraźne migotanie, błędy pomiaru.

    ----------------------------

    Już chyba znalazłem swój błąd, w schemacie według którego robiłem swój użyty został tranzystor BC857 SMD, a ja użyłem BC327. Teraz jak czytam parametry to widzę, że BC857 jest opisany jako mało sygnałowy, a jego zamiennikiem może być BC556.

    0
  • Pomocny post
    #16 19 Wrz 2013 12:17
    BlueDraco
    Specjalista - Mikrokontrolery

    Typ tranzystora jest praktycznie bez znaczenia - dowolny nie za duży pnp.
    Mylisz częStotliwość przerwń z częstotliwością zegara timera. Zegar ma w tym przypadku częstotliwość 1000000 / 64, a ty dzielisz to timerem przez 254, co daje jakieś marne 64 Hz - sporo za mało, wyświetlacz wibruje jak wściekły. Powinno być ok. 1200 Hz, a minimum 600 Hz.

    Przy tak zorganizowanej obsłudze DS18B20 rzeczywiście nie da się tego zrobić dobrze, chociaż przy 8 MHz i dobrze napisanej obsłudze wyświetlacza (bez zbędnych rozejść if i switch, tylko z użyciem tablic) zapewne można byłoby nie blokować przerwań i wyświetlacz mógłby świecić równomiernie. Coś takiego np.:

    PORTB = 0xff;
    PORTD = display[i];
    PORTB = cyfra[i];
    i = (i + 1) & 3;

    Przy czym obrazy tego, co ma być na wyświetlaczu, powinny być przygotowywane w pętli głównej i tam ładowane do tablicy cyfra[].

    0
  • #17 19 Wrz 2013 13:01
    lukaszkny
    Poziom 11  

    Zwiększyłem taktowanie to 8MHz. Pomijając że obsługa DS się wysypała i jest do poprawy (poprawić czasy).

    To ustawiając częstość przerwań na 1 000Hz ((8 000 000/64)/125), wyświetlacz
    i tak świeci słabo, oraz cyfry tak jakby nie zdążały się wygasić i przechodzą na następną.

    Uprościłem do minimum wyświetlanie.

    Kod: c
    Zaloguj się, aby zobaczyć kod



    ---------------------

    Dla pewności zmieniłem jeszcze tranzystory, ale jednak to nie one.

    ---------------------

    Trochę denerwujące to jest, ale chyba niepozostanie mi nic innego jak użycie czerwonej folii dla poprawienia kontrastu.

    0
  • #18 19 Wrz 2013 15:46
    perlon
    Poziom 19  

    Czy ja dobrze widzę, że w każdym obiegu pętli głównej wywołujesz DS1820a() a w niej za każdym rzem robisz reset 1wire? No to pętla ma sporo _delayów do zrobienia. Ja bym w procedurze obsługi timera zrobił multipleks LED'ów i flagę maszyny stanów do obsługi DS1820. Ponadto w pętli głównej w kółko liczysz co ma być wyświetlane na wyświetlaczu jak to się między pomiarami nie zmienia. Wg mnie bufor do wyświetlania powinien być aktualizowany tylko po dokonaniu odczytu temperatury.

    0
  • #19 19 Wrz 2013 16:48
    lukaszkny
    Poziom 11  

    Tak jak nad tym posiedziałem i popatrzyłem, to dla mnie za wolno działa któryś z elementów, jak się ustawi statycznie to ładnie wszystko wyświetla.

    Tak jakby nie schodziło całe napięcie z bazy tranzystora.

    0
  • #20 19 Wrz 2013 21:21
    perlon
    Poziom 19  

    Co to znaczy statycznie? Pokaż program, który pracuje statycznie.

    0
  • #21 19 Wrz 2013 21:30
    lukaszkny
    Poziom 11  

    Statycznie w sensie bez odświeżania. Jak wyświetlam jeden znak.

    0
  • #22 19 Wrz 2013 21:49
    perlon
    Poziom 19  

    Jak wyświetlasz jeden znak - czyli jedną cyfrę na jednym wyświetlaczu siedmiosegmentowym to diody, które zapalasz świecą cały czas - czyli 100% czasu. Jak zaczynasz multipleksować cztery cyfry to każda z nich świeci przez 25% okresu multipleksu. To chyba oczywiste że czym więcej wyświetlaczy jest do obsłużenia tym intensywność świecenia każdego z nich jest mniejsza. Chyba że inaczej rozumiemy pojęcie "odświeżania". Może napisz najpierw jakiś program do obsługi samego LED'a w multipleksie.

    0
  • #23 21 Wrz 2013 14:53
    lukaszkny
    Poziom 11  

    Problem rozwiązałem w inny sposób. Kupiłem inne wyświetlacze, które świecą jaśniej i trochę szybciej reagują.

    Wielkie dzięki wszystkim za pomoc, a szczególnie BlueDraco.

    0