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.

Atmega8l - Podwójna dioda led z wspólną anodą, grzanie się mikroprocesora.

Gunslinger 17 Maj 2014 19:15 2001 16
  • #1 17 Maj 2014 19:15
    Gunslinger
    Poziom 29  

    Witam. Od razu powiem że to mój pierwszy układ, dlatego miał być prosty. Składa się z microswitcha, atmegi i podwójnego led. Switch, to + następnie switch portB0, input, stan 0. Dioda led, jako że była podwójna to +, 2 rezystory 100 szeregowo, wspólna anoda, katoda 1 do d0, 2 do D1. Port D testowałem zarówno na imput i output, D0 stan 0, D1 1. Program na togle D0 i D1 (dodam później, piszę z telefonu), obie masy podpięte, VCC i AVCC, oraz reset przez 10k. Efek, po włączeniu napięcia nic. Sprawdziłem i zobaczyłem że bateria nie łączy dobrze (telefon), po dociśnięciu oba kolory delikatnie się świecą (punktcik), po wciśnięciu switcha oba przygasają. Atmega mocno się grzeje. Już po 7 sekundach pracy zaczyna mocno grzać, wręcz przechodzi w parzenie. Podpiąĺem ją potem po programator, więc sprawna. Co może to powodować?

    0 16
  • #3 17 Maj 2014 20:45
    Gunslinger
    Poziom 29  

    Już się zabiorę za lekturę.

    Atmega8l - Podwójna dioda led z wspólną anodą, grzanie się mikroprocesora.

    Poczytałem. Z tego by wynikało że nie mogę wywołać większego poboru niż 300mA dla całego procka, oraz 40mA dla całego pinu. Widziałem na schematach, że ludzie używają diod z R100, ja dałem 200, oraz podpinając katodę do procka. Gdzie popełniłem błąd?

    0
  • #4 17 Maj 2014 21:00
    dondu
    Moderator Mikrokontrolery Projektowanie

    Pin 21 to AREF a nie GND - błąd na schemacie lub w Twoim projekcie.
    Do lektury dodatkowo art nr 1 stąd: http://mikrokontrolery.blogspot.com/2011/03/Dioda-LED-elektroluminescencyjna.html

    Przycisk S1 powinien zwierać do masy, a nie do Vcc. W programie powinieneś włączyć rezystor pull-up, a wykrywać przycisk, gdy jest na pinie zero logiczne: http://mikrokontrolery.blogspot.com/2011/03/atmega8-pierwszy-program.html

    Ten mikrokontroler potrzebuje co najmniej 4,5V do prawidłowego działania - przy 4,2 może zadziała poprawnie, ale pewności już mieć nie możesz.

    0
  • #5 17 Maj 2014 21:05
    Gunslinger
    Poziom 29  

    Znalazłem gdzie błąd. Te 21 to pomyłka w schemacie. Lutowałem od dołu, a miałem schemat od góry, w efekcie czego mam źle podpięte piny VCC, GDN, AVCC. Więc zrobiłem zwarcie. Może się nie uszkodził, skoro programator go widzi. Dziś zrobię zmiany w kodzie, a jutro poprawię płytkę.

    Oraz dlaczego S1, nie może być do +, skoro w kodzie mam if Pinb.0 = 1 Then i reszta?

    0
  • #6 17 Maj 2014 21:07
    dondu
    Moderator Mikrokontrolery Projektowanie

    Pewności jego poprawnej pracy mieć już nie możesz. Oznacz go jakąś kropką z farby olejnej itp., bo część bebechów mogła ulec uszkodzeniu.

    Gunslinger napisał:
    Oraz dlaczego S1, nie może być do +, skoro w kodzie mam if Pinb.0 = 1 Then i reszta?

    Naciskając przycisk podłączysz go do napięcia Vcc, co zinterpretowane zostanie przez mikrokontroler jako 1. Jednocześnie naładujesz pojemności pinu i po puszczeniu S1 mikrokontroler nadal będzie widział stan wysoki. Jak wymusisz na pinie stan niski?

    Możesz dodać zewnętrzny rezystor pull-down, albo zrobić to co napisałem wyżej.

    Jak ładuje się bramka tranzystora MOSFET na wejściu? O tak:


    Link

    0
  • #7 17 Maj 2014 22:09
    ste
    Poziom 17  

    dondu napisał:


    Ten mikrokontroler potrzebuje co najmniej 4,5V do prawidłowego działania - przy 4,2 może zadziała poprawnie, ale pewności już mieć nie możesz.


    Jeżeli to Atmega8L jak autor pisze to może pracować zasilana napięciem od 2,7 do 5,5V.

    0
  • #8 17 Maj 2014 22:16
    dondu
    Moderator Mikrokontrolery Projektowanie

    ste napisał:
    dondu napisał:
    Ten mikrokontroler potrzebuje co najmniej 4,5V do prawidłowego działania - przy 4,2 może zadziała poprawnie, ale pewności już mieć nie możesz.

    Jeżeli to Atmega8L jak autor pisze to może pracować zasilana napięciem od 2,7 do 5,5V.

    Gdy to pisałem patrzyłem na schemat, a tam ma oznaczenie ATmega8.

    0
  • #9 17 Maj 2014 22:28
    Gunslinger
    Poziom 29  

    Acha, to jutro zmienię na masę. Robiłem tak, gdyż tak nakazywał tutorial z forbota (dawna dioda). Po poprawnym zlutowaniu, i załączeniu nic. Nie grzeje się, nie świeci. Zmieniłem źródło zasilania, to samo. Zrobiłem chyba z niego frytkę.

    0
  • #10 18 Maj 2014 10:16
    Gunslinger
    Poziom 29  

    Zrobiłem dzisiaj test na schemat1 i kod1. Efekt - nic, zero oznak życia. Postanowiłem ostatecznie sprawdzić czy procek to frytka, kod2, schemat2. Efekt - działa, ale pomimo waitms 500, zmienia stan co ponad 4s. Czy może to być spowodowane uszkodzeniem? Dodałbym film, ale jest w 3gp.

    0
  • #11 18 Maj 2014 11:28
    szczywronek
    Poziom 27  

    Zakładam, że bitów konfiguracyjnych (fuse bitów) nie zmieniałeś? Różnica w długości opóźnienia wynika z tego, że mikrokontroler jest taktowany z częstotliwością 1MHz (tak jest ustawiony "fabrycznie") a w programie masz podane 8MHz. Mikrokontroler pracuje 8x wolniej niż deklarujesz, stąd 0,5s * 8 -> 4s. Zmień "$crystal = 8000000" na "$crystal = 1000000" i będzie działać.

    Co do "kodu1" - diody podłączone do PD0 i PD1 nie mają szansy się zapalić jeśli te piny będą ustawione jako wejściowe. Dodatkowo przycisk jest podłączony do bani - poczytaj post kolegi dondu.

    0
  • #12 18 Maj 2014 13:11
    Gunslinger
    Poziom 29  

    Później zrobię zmianę w kodzie i sprawdzę. Z filmu który obejrzałem wynika że jeśli za włącznikiem dam spory rezystor do masy to będzie git? To w jaki sposób załączać tą podwójną diodę? Output i 0-załączona, 1-odłączona?

    0
  • #13 18 Maj 2014 13:55
    LordBlick
    VIP Zasłużony dla elektroda

    Co do wyłacznika/przycisku, to owszem rezystor się przyda, tylko narysuj(mamy na forum narzędzie do rysowania schematów - przycisk „Rysuj schemat” w funkcji edycji postu) co masz na myśli.
    Nie wiem, czemu się uparłeś i oszczędzasz na rezystoach. Kazda sekcja LED-y powinna mieć po 470Ω w szeregu, a ten 200Ω wywal. Dioda na 23-im wyprowadzeniu nie bardzo wiem po co…
    P.S. Proszę się wypowaiadać technicznie i po polsku. Slang i przejawy błyskotliwości zostaw dla kolegów z podwórka.

    0
  • #14 18 Maj 2014 16:18
    Gunslinger
    Poziom 29  

    Po zmianie w kodzie wielmożni Panowie taktowania na 1MHz dioda zaczęła zmieniać stan jak powinna. Rozwinąłem więc układ do wersji 3, i napisałem nowy kod. (przepraszam, nie mogłem w Rysuj schemat znaleźć Atmegi8) Efekt jest taki że diody podpięte do D 0 i 1 świecą stale. Żadnej reakcji na microswitch. Diody podłączone do C 0, 1 i 2 nie świecą, nie migają, po prostu nie dają oznak życia. Gdzie popełniłem błąd?

    0
  • #15 18 Maj 2014 17:49
    szczywronek
    Poziom 27  

    Błąd polega przede wszystkim na tym, że kombinujesz na "chybił trafił". Zamiast tego powinieneś przemyśleć na spokojnie co chcesz osiągnąć i jak możesz to uzyskać.
    Dodatkowo wybrałeś sobie język wysokiego poziomu - niby kusi prostotą i "przyjaznością", ale pozorne "oderwanie od sprzętu" owocuje właśnie takimi problemami: czy pin ma być "Input" czy "Output"... Nie można programować mikrokontrolerów bez czytania ich dokumentacji - i nie ważne czy to Bascom, C, C++ czy asm.

    Odpowiedź na pytanie czemu przycisk nie działa masz już podaną w tym wątku. Przycisk (wciśnięty) wymusza stan wysoki ("jeden") na 14-tej nóżce Atmegi. A jaki stan panuje na tej nóżce kiedy przycisk nie jest wciśnięty (i dlaczego?)? Wszystko stanie się jasne kiedy odpowiesz sobie na to pytanie.

    Diody też zachowują się tak jak przewiduje to program. Odrobinę upraszczając - pin ustawiony jako wyjściowy:
    - w stanie wysokim (Portx=1): panuje na nim napięcie zbliżone do napięcia zasilania i może być źródłem prądu - może np. zasilać diodę podłączoną do masy (diody podłączone do portu C na Twoim schemacie, oczywiście nie zapominając o szeregowym rezystorze)
    - w stanie niskim: ma potencjał zbliżony do masy, może do niego wpływać prąd - jeśli więc diody będą podłączone między ten pin a "plus" zasilania (patrz na swoim schemacie D0 i D1) to się zapalą

    Piny ustawione jako wejścia:
    - w stanie wysokim napięcie na nich jest wymuszane przez rezystory podciągające (nie chce mi się szukać wartości - pewnie kilkadziesiąt kΩ) - rezystor wymusza napięcie na pinie (zbliżone do napięcia zasilania) ale ogranicza prąd, można więc taką nóżkę zwierać do masy i nic się nie spali
    - w stanie niskim - rezystory nie są włączone i pin jest w stanie wysokiej impedancji - to mniej więcej tak jakby wisiał do niczego nie podłączony - póki stan niski/wysoki nie zostanie wymuszony z zewnątrz to stan takiego pinu jest nieokreślony - łapie wszystkie śmieci jak antena ;)

    W kodzie masz dwie pętle - ta druga nigdy się nie wykona!

    0
  • #16 18 Maj 2014 21:08
    Gunslinger
    Poziom 29  

    Dobra, poddaje się. Szukałem, czytałem, kombinowałem i nic. W wypadku 1 dioda podwójna świeci cały czas, a tamte migają. W wypadku 2, ta nie świeci, a tamte dwie migają. Niezależnie od włącznika, który przecież jest wyjściem w stanie 1. Nie rozumiem totalnie co się dzieje.

    Kod1:

    Kod: Bascom
    Zaloguj się, aby zobaczyć kod

    $regfile = "m8def.dat" '
    $crystal = 1000000

    Config Portb = Input
    Portb = &B10000000
    Config Portd = Output
    Portd = &B01000000
    Config Portc = Output
    Portc = &B0000000


    Do

    If Pinb.0 = 0 Then
    Toggle Portd.0
    Toggle Portd.1
    End If


    If Pind.0 = 0 Then
    Portc.0 = 1
    Portc.1 = 0
    Portc.2 = 1
    Waitms 500
    Portc.0 = 0
    Portc.1 = 1
    Portc.2 = 0
    Waitms 500
    End If

    Loop


    End
    [/syntax]

    Kod2:
    Kod: Bascom
    Zaloguj się, aby zobaczyć kod

    0
  • #17 19 Maj 2014 00:27
    dondu
    Moderator Mikrokontrolery Projektowanie

    Zacznij używać głowy i wykonywać po kolei co podpowiadamy. W przeciwnym wypadku w pewnym momencie temat przekroczy granicę, przy której wyląduje w koszu.

    Zastanów się także, do którego pinu masz podłączony przycisk, a któremu pinowi włączasz programowo rezystor pull-up.

    Zastanów się także, jak szybko wykonuje się ta część programu i czy jesteś to w stanie zauważyć wzrokowo:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Dlaczego sprawdzasz pin PD0 skoro jest on ustawiony jako wyjście?:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    ... no chyba, że źle rozumiem komendy BASCOMa, którego nie znam.

    Poczytaj także o łączeniu diod LED z jednym rezystorem: http://mikrokontrolery.blogspot.com/2011/03/Diody-LED-Zrodlo-pradowe-Laczenie-rownolegle.html

    0