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.

Atmega8 SMD miganie diodą nie działa poprawnie - przerywa zmienia częstotliwość

spongepie.com 21 Mar 2017 19:58 771 12
  • #1 21 Mar 2017 19:58
    spongepie.com
    Poziom 4  

    Witam,
    Mam problem z atmegą8A w wersji SMD. Przylutowałem ją do PCB które zrobiłem (schemat poniżej) i bez problemu udało się zaprogramować, niestety program nie działał jak powinien. Wgrałem więc prosty program do migania diodą (konkretnie jednym znakiem na wyświetlaczu 7 segmentowym 3 znakowym) i program dział tak jakby, ponieważ czasami przerywa tak jakby opóźniając mignięcie lub miga strasznie szybko bardzo nieregularnie. Bywa i tak, że przez jakiś czas dział dobrze i nagle przestaje. Wszystko dobrze zlutowane według schematu poniżej. Taktowane wewnętrznym oscylatorem 1MHz a zewnętrznie podpięty jest kwarc 32,768 kHz ponieważ cały projekt ma być jak najbardziej energooszczędny. DO filtrowania zasilania użyłem 2 kondensatorów 100pF i 10uF. Dodatkowo znalazłem informację, że czasami do kwarcu 32kHz potrzebne są dodatkowe kondensatory (ale znalazłem również taką że nie są, na płytce stykowej działało bez) więc je dolutowałem niestety dalej to samo a przecież program do migania diodą nie korzysta z zewnętrznego kwarcu tylko z wewnętrznego generatora. Zasilam to 3V z 2 baterii AAA próbowałem też 5V z USB, nic nie pomogło. Ma ktoś może jakiś pomysł, wskazówki co może być nie tak?
    Dzięki.


    Kod: c
    Zaloguj się, aby zobaczyć kod



    Atmega8 SMD miganie diodą nie działa poprawnie - przerywa zmienia częstotliwość

    0 12
  • #2 21 Mar 2017 20:32
    Adam-T
    Poziom 38  

    100pF na zasilaniu to zdecydowanie za mało. Daj 100nF.

    0
  • #3 21 Mar 2017 20:44
    spongepie.com
    Poziom 4  

    Niestety, dalej to samo po zmianie kondensatora

    0
  • #4 22 Mar 2017 06:27
    emarcus
    Poziom 35  

    spongepie.com napisał:
    Niestety, dalej to samo po zmianie kondensatora

    Zacznij od tego że masz błędny schemat.
    Ponieważ nie stosujesz dodatkowych wzmacniaczy/ bufferów/driverów dla wyświetlacza 7 segm. LED a zasilasz go bezposrednio z portów processora, więc w tej konfiguracji obowiazują pewne rygory w sposobie podłączenia.
    Mając do dyspozycji wyświetlacz 7-segm. ze wspólną anodą, to rezystory ograniczające prąd dla diod segmentów winny byc włączone w obwód każdego segmentu , czyli po stronie kathods.
    Dalej, Skoro wszystkie kathody są podłączone do portu C, to w/g data sheet m8 jest ograniczenie pradowe dla tego portu do 100 mA.
    A więc, jeżeli dla dostatecznej/optymalnej jasności przyjmiesz prąd 15 mA na segment, to już masz 15*8 = 120 mA, co automatycznie wskazuje na przekroczenie limitu prądowego dla tego portu(!).
    Oczywiście, prąd dla segmentu dobierasz rezystorem właczonym w szereg i obliczasz go wg. prawa Ohma, uwzględniając napięcie Vf dla aktualnie użytego wyświetlacza (nie wszystkie kolory tego samego modelu maja to samo napięcie Vf).
    Sam fakt ,że jest to wyświetlacz 3- cyfrowy, a ty wykorzystujesz na razie(?!) tylko jedną cyfrę, nie ma żadnego znaczenia, bo w jego pełnym wykorzystaniu będziesz stosował multiplexing, gdzie w danym momencie obsługiwana jest tylko jedna cyfra, jednak do obliczeń musisz brac pod uwagę sytuację że wszystkie segmenty cyfry są aktywne (na przykład cyfra 8) i dla tych warunkow obliczasz maxymalny prad obciązenia portu.
    Właczając rezystor w obwodzie anody, tak jak na załączonym twoim diagramie, otrzymasz efekt że jasnośc cyfry będzie zależała od ilości włączonych segmentów; jedynka będzie swiecic jaśniej niż kazda inna cyfra; najsłabsza będzie ósemka.

    e marcus

    0
  • #5 22 Mar 2017 08:25
    BlueDraco
    Specjalista - Mikrokontrolery

    Emarcus: ogólnie to niby masz rację, ale żadne prądy nie będą tu przekroczone, a Twoje wyliczenia są całkowicie błędne.

    Ja szukałbym przyczyny w nieprzewodzących lutach na zasilaniu.

    0
  • #6 22 Mar 2017 08:38
    895614
    Użytkownik usunął konto  
  • #7 22 Mar 2017 09:52
    spongepie.com
    Poziom 4  

    BlueDraco: luty są dobre a zasilanie jest w całym obwodzie, wszystko mierzyłem. W momentach kiedy zaczyna działać nie poprawnie również z zasilaniem nie ma problemów.

    Zdz_13: o kwarcach pisałem, aktualny program korzysta tylko z wbudowanego generatora 1MHz, zewnętrznie mam podpięty 32kHz który w tym programie nie jest w ogóle wykorzystany.

    Jak na razie podejrzewam że wyświetlacz pobiera zbyt duży prąd z pinów tak jak pisze emarcus ale sprawdzę to dopiero.

    0
  • #8 22 Mar 2017 10:05
    dondu
    Moderator Mikrokontrolery Projektowanie

    zdz_13 napisał:
    Brak 2 kondensatorów 27PF przy kwarcu dlatego oscylator pracuje niestabilnie.

    Kondensatory są niepotrzebne - wystarczy zaprogramować odpowiedni fusebit by włączyć wewnętrzne kondensatory:

    Cytat:
    By programming the CKOPT Fuse, the user can enable internal capacitors on XTAL1 and XTAL2, thereby removing the need for external capacitors. The internal capacitors have a nominal value of 36pF.


    To:
    zdz_13 napisał:
    Rezystory trzeba dodać do segmentów A....G a CA1...C3 bezpośrednio do portów inaczej wszystko będzie zmieniać jasność świecenia.

    bardzo słuszna uwaga...

    ... ale niestety nie do końca właściwa, bo nie wspomniał kolega o prądach pinów. Podłączenie bowiem do jednego pinu 8 diod LED świecących jednocześnie może uszkodzić co najmniej pin mikrokontrolera. Niezbędne są tam tranzystory. Lektura do uważnego przeczytania (4 artykuły): http://mikrokontrolery.blogspot.com/2011/03/datasheet-mikrokontroler-prady-pinow.html

    C2 nie 100pF tylko 100nF.

    0
  • #9 22 Mar 2017 11:11
    BlueDraco
    Specjalista - Mikrokontrolery

    Ech, Koledzy ortodoksi... No niby słusznie prawicie o tych rezystorach i wyświetlaczach, ale niestety zupełnie nie macie racji. Po pierwsze - Autor narysował na schemacie rezystory 330 Ohm, a więc w najgorszym przypadku mamy prąd 10 mA, więc pewnie ATmegi nie zabijemy. Inna rzecz, że zbyt jasno to świecić nie będzie. Po drugie, być może genialny Autor chciał zaoszczędzić na pięciu rezystorach i zrobić multipleksowanie odwrócone (po segmentach, a nie po cyfrach) - wtedy takie połączenie jest jak najbardziej poprawne.

    Autorze: jeśli nie wiesz, co to jest multipleksowanie odwrócone - posłuchaj rad Kolegów.

    A odnośnie niedziałania - sprawdź, czy masz dobrze podciągnięty do zasilania RESET, skoro upierasz się, że wszytskie zasilania i masy kontaktują dobrze (w co wątpię, skoro podkreślasz, że jesteś zielony w temacie SMD).

    0
  • #10 22 Mar 2017 11:16
    trol.six
    Poziom 31  

    spongepie.com napisał:
    Ma ktoś może jakiś pomysł, wskazówki co może być nie tak?
    Dzięki.

    Miałem podobny problem przy źle wyczyszczonej PCB z topnika. Akurat używałem czegoś innego niż kalafonii ;)

    Możesz pokazać ustawienia FUSE bitów?

    Zobacz czy z rezystorami 3k będzie tak sam efekt.

    Może coś nie tak z rezystorkiem na resecie? Może drobne zwarcie na PCB? Drobna przerwa na ścieżkach. Takich dziwnych uszkodzeń możesz nie wykryć mierząc miernikiem.

    Przetestuj inne konfiguracje, np. weź jakiś generatorek podaj na atmege i ustaw na taktowanie zewnętrzne. Przy 1 sek opóźnienia nie może nagle migać szybko.

    0
  • #11 22 Mar 2017 11:30
    dondu
    Moderator Mikrokontrolery Projektowanie

    Problem Twojego stanowiska polega właśnie na tym:

    BlueDraco napisał:
    Inna rzecz, że zbyt jasno to świecić nie będzie.

    Autor zapewne zmniejszy rezystory, by zwiększyć jasność przy multipleksacji, co skończy się tym o czym piszemy. Niezależnie od tego nawet przy tak skonstruowanym schemacie i programie jak aktualnie, i jego próbach z 5V jest szansa uszkodzić pin.

    Poza tym nic nie pisał o multipleksacji odwróconej (co miałoby sens w tym przypadku - tylko 3 wyświetlacze) tym bardziej, że w programie w pętli głównej włącza i wyłącza wyświetlacz, czyli multipleksuje wyświetlacze, a nie poszczególne diody.

    Poza tym, powinieneś był swoim pierwszym poście (#5) napisać o multipleksacji odwróconej, a nie tylko podawać zwracać uwagę emarcus.

    0
  • #12 22 Mar 2017 13:32
    spongepie.com
    Poziom 4  

    dondu: Według dokumentacji:

    Cytat:
    When the internal RC Oscillator is used as the main clock source, it is possible to run the
    Timer/Counter2 asynchronously by connecting a 32KHz Oscillator between XTAL1/TOSC1
    and XTAL2/TOSC2. But when the internal RC Oscillator is selected as the main clock
    source, the CKOPT Fuse does not control the internal capacitors on XTAL1/TOSC1 and
    XTAL2/TOSC2. As long as there are no capacitors connected to XTAL1/TOSC1 and
    XTAL2/TOSC2, safe operation of the Oscillator is not guaranteed.

    Ale na wielu forach znalazłem informacje że nie są one potrzebne przy 32kHz. Tak jak już pisałem na płytce stykowej działało bez kondensatorów.

    Co do jasności świecenia to jest całkiem ok, spróbuję dzisiaj z większymi rezystorami.


    BlueDraco: Nie powiedziałem że jestem zielony w temacie SMD już kilka razy to lutowałem jak na razie bez większych problemów. Mierzyłem reset jest podciągnięty.

    trol.six: każda ścieżka zmierzona i przerw nie ma

    Zmierzyłem prąd jaki pobiera cały układ w momencie włączenia wyświetlacza pobiera około 55mA, przy wyłączonym 5mA a więc 50mA na pin to za dużo, zmienię dzisiaj rezystory na większe i dam znać czy pomogło.

    0
  • #13 22 Mar 2017 14:32
    dondu
    Moderator Mikrokontrolery Projektowanie

    Faktycznie, zapomniałem o erracie.

    Nigdy nie sugeruj się tym co ktoś gdzieś na forum napisał (jak widać ja także popełniam błędy), tylko wyłącznie tym co podał producent.
    Ostatnie zdanie w zacytowanym przez Ciebie fragmencie erraty jest dla Ciebie wyznacznikiem.

    Może pokaż PCB?

    0