Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

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

Gunslinger 17 May 2014 19:15 2256 16
IGE-XAO
  • #1
    Gunslinger
    Level 30  
    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ć?
  • IGE-XAO
  • #3
    Gunslinger
    Level 30  
    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?
  • IGE-XAO
  • #4
    dondu
    Moderator on vacation ...
    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.
  • #5
    Gunslinger
    Level 30  
    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?
  • #6
    dondu
    Moderator on vacation ...
    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 wrote:
    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:

  • #7
    ste
    Level 26  
    dondu wrote:


    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.
  • #8
    dondu
    Moderator on vacation ...
    ste wrote:
    dondu wrote:
    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.
  • #9
    Gunslinger
    Level 30  
    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ę.
  • #10
    Gunslinger
    Level 30  
    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.
  • #11
    szczywronek
    Level 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.
  • #12
    Gunslinger
    Level 30  
    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?
  • #13
    LordBlick
    VIP Meritorious for electroda.pl
    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.
  • #14
    Gunslinger
    Level 30  
    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?
  • #15
    szczywronek
    Level 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!
  • #16
    Gunslinger
    Level 30  
    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:
    Code: Bascom
    Log in, to see the code

    $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:
    Code: Bascom
    Log in, to see the code
  • #17
    dondu
    Moderator on vacation ...
    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:

    Code: basic4gl
    Log in, to see the code


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

    Code: basic4gl
    Log in, to see the code

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