Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Trudności w zaprogramowaniu ATMega88 wlutowanego w płytkę

godmode 06 Apr 2009 11:48 3968 39
Tespol
  • #1
    godmode
    Level 14  
    Witam!

    Korzystam z programatora AVR USB, złożonego samodzielnie.
    Programator został opisany na tej stronie:
    http://www.fischl.de/usbasp/

    mikrokontroler ATMega88 został wlutowany już w gotowy układ i w tym momencie wystąpiły problemy. ATMega jest rozpoznawana przez program avrdude, tak mniej więcej co drugi, trzeci raz. Boję się ustawiać fusebity z wiadomego powodu - trafie akurat na ten moment kiedy kontroler jest nierozpoznawany i połowa fusebitów zostanie ustawiona a część nie i cała płytka z układem będzie do wyrzucenia - mikrokontroler jest w obudowie TQFP32 i przy pomocy dostępnych mi narzędzi nie jest możliwe jego wylutowanie.
    Linie SPI, którymi programuje uP zostały przedstawione na poniższym schemacie.

    Trudności w zaprogramowaniu ATMega88 wlutowanego w płytkę

    Tutaj pojawia się moje pytanie oraz wątpliwości:
    czy te rezystory ograniczające prąd bazy tranzystora mogą w jakiś sposób zakłucać pracę programatora?
    Zaznaczam, że programator działa sprawnie - inne procki nie w systemie są z powodzeniem rozpoznawane.
    Proszę o wszelkie rady konstrukcyjne.
    Czy kupno jakiegos profesjonalnego programatora może rozwiązać ten problem?
  • Tespol
  • #2
    marenc
    Level 24  
    Ja bym szukał winy w zasilaniu ... a tego fragmentu schematu nie dałeś. Linie ISP zasilają tranzystory wyświetlacza - pewnie wydajność prądowa jest zbyt niska i napięcie spada tak, że AVR nie może odpowiedzieć.

    Odłącz zasilanie IC2 dla pewności... I daj cały schemat...
  • #3
    godmode
    Level 14  
    Pełen schemat (kliknąć raz i później znów drugi raz w obrazek, aby zobaczyć full screen):
    Trudności w zaprogramowaniu ATMega88 wlutowanego w płytkę

    Dodam, że układ jest zasilany z programatora (zworka USB POWER, podaje napięcie z programatora poprzez złącze AVR ISP na stabilizator) i w ten sposób czasami jestem w stanie przeczytać sygnaturę, natomiast gdy układ zasilam sobie z własnego napięcia to sygnatura wychodzi zawsze nieprawidłowa 0x000000 itp., co uważam za bardzo dziwne zwłaszcza, że sygnały dochodzącą do procesora prawidłowe - 3,3V.
  • #4
    Demoman
    Level 17  
    Nie widać kondensatorów 100n przy procku, są?

    Masz nie podłączone kilka nóżek zasilania procka, tak jest na płytce?

    Oporniki na liniach gdzie jest programator Atmel zaleca 1k, może warto spróbować o ile "wyrobisz się" prądowo z wyświetlaczami.


    Może zasilaj układ nie z programatora, tylko normalnie i wtedy programuj?


    Edit:
    Teraz dopatrzyłem się jeszcze czegoś:

    Zasilanie z programatora wpinasz przed stabilizator.
    Z USBasp dostaniesz max tyle, ile jest na USB, czyli niecałe 5V o ile korzystasz z huba z zasilaniem lub prosto z komputera.

    Nie wiem jaki spadek ma ten stabilizator, i nie wiem ile prądu zjada Ci ten układ. Ale problem może istnieć.

    A już tak poza tym problemem, masz sporo "multipleksowanego wyświetlania", a zewnętrznego kwarca nie zastosowałeś... wyrobisz się czasowo?
  • #5
    janbernat
    Level 38  
    A ten dm74ls47 to jest TTL LS chyba.
    Powinien mieć 5V zasilanie.
    A ma 3.3V-0.6V na diodzie=2.7V.
    To w ogóle działa?
    I na jego wejście A3 wchodzi MOSI.
    Ale jak się zachowuje wejście TTL przy zasilaniu układu 2.7V to nie wiem.
    A jak sprawdzasz czy sygnały MOSI, MISO itp. mają przy procesorze 3.3V?
  • Tespol
  • #6
    marenc
    Level 24  
    Zasilanie wszystkich diod LED wyświetlacza podczas programowania pobiera ponad 0,7A, a port USB na wydajność 0,5A. Dodatkowo sam programator i AVR pobiera energię. Napięcie spada, a AVR nie jest w stanie prawidłowo odpowiedzieć na zapytanie.

    AREF do VCC? Chyba będziesz musiał wymienić procka...

    C4 za duży - mogłeś uszkodzić stabilizator!
  • #7
    Freddy
    Level 43  
    marenc wrote:
    ....
    C4 za duży - mogłeś uszkodzić stabilizator!

    Ciekawe w jaki sposób można uszkodzić stabilizator za dużą pojemnością ?
  • #8
    atom1477
    Level 43  
    Oczywiście że można.
    Będzie duży prąd ładujący.
    Ale uszkodził by się stabilizator bez zabezpieczeń termicznych i obciążony pojemnością 1000000uF, a nie LF33 obciążony 1000uF.
  • #9
    Nawigator
    Level 33  
    Procesor powinien mieć wszystkie piny masy podłączone do masy a zasilania do zasilania.
    Przy niskim Vcc pożądany jest rezystor resetu do Vcc i kondensator rzędu 10...100nF do masy.
    LF33 przeżyje z 1000uF na wyjściu ale może mieć kłopoty ze stabilnością (low-drop).
    W jakimś układzie mam rezystory 220R do baz tranzystorów npn na liniach ISP i bez problemu programuję ale za pomocą typowego stk200.
    N.
  • #10
    Freddy
    Level 43  
    atom1477 wrote:
    Oczywiście że można.
    Będzie duży prąd ładujący.
    Ale uszkodził by się stabilizator bez zabezpieczeń termicznych i obciążony pojemnością 1000000uF, a nie LF33 obciążony 1000uF.

    a że wszystkie stabilizatory sa aktualnie zabezpieczone przed zwarciem i termicznie, więc jest to nierealne.
  • #11
    atom1477
    Level 43  
    Freddy wrote:
    atom1477 wrote:
    Oczywiście że można.
    Będzie duży prąd ładujący.
    Ale uszkodził by się stabilizator bez zabezpieczeń termicznych i obciążony pojemnością 1000000uF, a nie LF33 obciążony 1000uF.

    a że wszystkie stabilizatory sa aktualnie zabezpieczone przed zwarciem i termicznie, więc jest to nierealne.



    Nie wszystkie więc jest to realne.
  • #12
    godmode
    Level 14  
    @Demoman
    Przy procku jest 22uF (tak wiem, że na wyrost), także więcej jak potrzeba.

    Niepodłączone nóżki to 6 - VCC oraz 5 i 21 - GND. No i tu pojawia się moja kolejna wątpliwość, bo obiegowa opinia jest taka, że podłączamy wszystkie nóżki VCC i GND, nawet te zdublowane. Ja wszystkich nie podłączyłem, bo wyszedłem z założenia że zostały specjalnie zdublowane po to by czasami poprowadzić scieżki tak a nie inaczej (gdy nie da się pociągnąc ścieżki do jednego VCC/GND to ciągniemy do innej nóżki VCC/GND).
    Czy bezwzględnie konieczne jest podłączenie wszystkich VCC/GND.

    Zasilanie z programatora istotnie wpinam przed stabilizator, ponieważ cała płytka zasilana jest z 3,3V i nie mogę nagle wpuscić na układy 5V z USB.

    Co do kwarcu to istotnie boje sie, czy ze wszystkim się wyrobie ale to okaże się podczas pisania programu. Zależało mi na małej wielkości płytki ze względu na docelową obudowę, a dwa to już wykorzystałem nóżki od oscylatora do sterowania.

    Czy rzeczywiście brak rezystorów 1k na liniach programujących może być problemem? Przecież to ma byc InSystemProgramming, więc cięzko jest zaposkoić możliwość programowania i wykorzystanie nóżek do sterowania.

    @janbernat
    Rzeczywiście 74LS47 według noty katalogwej wymaga minimum 4,5V do pracy, jednak przetestowałem go praktycznie na napięciu bliskim 2,5V i wszystki działało, jedynie po zaświeceniu wszystkich diód prąd spadł o 2-3mA. Dioda jest po to aby nie stosowac rezystorów ograniczających prądy diód (diody pracują nominalnie na napięciu 2,5V).
    Sygnały sprawdzam zwykłym multimetrem. Nie pamiętam, które sygnały sprawdzałem, napewno reset miał 3,3V.

    @marenc
    Na sterownik 74LS47 wchodzi tylko jedna nóżka od programowania MOSI, na wyprowadzenie A3, czyli kod dostajemy 1000 binarnie, więc jest to decymalnie 8 - rzeczywiście nie przewidziałem tego że zapalą sie wszystkie diody... w następnej wersji zamienie tą nóżkę tak aby sterowała wejściem A0. Tak czy siak wyświetlacze NIE SA PODŁĄCZONE także prąd nie płynie - możemy wyeliminować ten błąd. Prąd który ciągne z USB w takim razie jest nieznaczny - tyle co zasilić uP, sterownik LED oraz czujnik przyśpieszenia no i stabilizator.. nie powinno wyjść wiele.

    Hmm zawsze podłączałem VCC/AVCC do AREF i nigdy sie nie spaliło - jesteś pewien że nie powinienem tak robić? Przecież rezystora nie wstawie bo wtedy to już wogóle nie będe w stanie określić jakie jest napięcie na AREF.

    Nie zgadzam się, że mogę zniszczyć stabilizator od dużego kondensatora. W momencie jak kondensator jest nienaładowany i zaczynamy go ładować to stanowi zwarcie i prąd jest istotnie duży ale zamyka się w pętli. Wydaje mi się, że efekt będzie odwrotny - przez pewien czas prąd wpływający do stabilizatora będzie znikomy, bo wszystko zamknie sie w obwodzie zasilanie-kondensator. Mogę się mylić.
    --

    Dzięki wielkie wszystkim za rady, wprowadze zmiany na płytce i napisze co z tego wyszło. Jeśli ktoś ma jeszcze jakieś uwagi lub jest w stanie odpowiedzieć na moje wątpliwości to będe bardzo wdzięczny!

    Po przeczytaniu wszystkich postów obstawiam brak połączeń między WSZYSTKIMI VCC/GND, brak podciągnięcia resetu oraz kondensatorów na resecie.
    Coś jeszcze?
  • #13
    marenc
    Level 24  
    Nie czytałem całości, ale obronię swojego stwierdzenia, że kondensator może uszkodzić stabilizator...

    Jeżeli kondensator na wejściu rozładuje się szybciej(czas zależny od pojemności), to napięcie na wyjściu będzie większe od napięcia na wejściu. Zjawisko to powoduje powstanie wstecznego prądu przepływające przez wewnętrzne źródło odniesienia, które może go uszkodzić. Zabezpieczenia nadprądowe i termiczne nie przeciwdziałają temu zjawisku, a w schematach wewnętrznych stabilizatorów nie znalazłem układów i diod zabezpieczających przez prądem wstecznym.

    //Już przeczytałem całość :D Na AREF znajduje się standardowo źródło napięcie odniesienia 2,56V. Jeżeli zewrzesz je do VCC, to wewnętrzne źródło odniesienia może ulec uszkodzeniu. a wraz z nim sąsiadujące układy w rdzeniu. Możesz wyłączyć zewnętrzne źródło odniesienia, ale nie wiem jak mikrokontroler będzie się zachowywał w takich chwilach jak BOD czy RESET. Radzę nie stosować takiej praktyki ze względuw bezpieczeństwa układu. Zaleca się kondensator(ceramicznyc 100n) w celu eliminacji zakłóceń zewnętrznych wchodzących(jak antena) do tego pinu...
  • #14
    _Robak_
    Level 33  
    To dlatego stosunek pojemnosci kondensatora na wejsciu do kondensatora na wyjsciu powinien byc 10:1 ?
  • #15
    atom1477
    Level 43  
    Nie. Gdy może się pojawić takie zjawisko to wstawia sie diodę pomiędzy wyjście a wejście stabilizatora. Katoda na wejście, anoda na wyjście.
    W klasycznym zasilaczu, gdy przed stabilizatorem nie ma nic poza kondensatorem (i diodami prostowniczymi) to kondensator przed stabilizatorem prawie nigdy nie rozładuje się szybciej niż ten na wyjściu.
  • #16
    marenc
    Level 24  
    Na wejściu większy od tego na wyjściu ;) bez żadnych stosunków ;)
  • #17
    godmode
    Level 14  
    @Robak
    To jest raczej rada praktyczna - napięcie za stabilizatorem będzie mniejsze od tego na wejściu, przy normalnej pracy, a więc i energia zgromadzona w kondensatorze może być mniejsza.

    @marenc
    No teraz mnie to przekonuje :)

    Prosze jednak o powrót do pierwotnego tematu, gdyż płytke mam złożoną a nie mogę je programować i jest to dla mnie problem jak narazie nierozwiązany :(
  • #18
    marenc
    Level 24  
    Jak nie masz wszystkiego SMD, to wylutuj te rezystory i ten układ z którym łączy się MOSI. Spróbuj wtedy... ISP to dobra sprawa, ale są z nim problemy, gdy są jakieś peryferia. Dlatego właśnie linie CS z urządzeń magistrali SPI są sterowane osobno i podnoszone(pull-up) w celu zabezpieczenia transmisji.
  • #19
    crazy_phisic
    VIP Meritorious for electroda.pl
    godmode wrote:
    ...
    Hmm zawsze podłączałem VCC/AVCC do AREF i nigdy sie nie spaliło - jesteś pewien że nie powinienem tak robić? Przecież rezystora nie wstawie bo wtedy to już wogóle nie będe w stanie określić jakie jest napięcie na AREF.
    ....

    Przecież możesz to zrobić programowo, podłączenie samo w sobie nie jest błędne.
  • #20
    janbernat
    Level 38  
    godmode:
    "Przecież to ma byc InSystemProgramming, więc cięzko jest zaposkoić możliwość programowania i wykorzystanie nóżek do sterowania."
    Faktycznie, czasem trudno.
    Czasami wręcz trzeba w układ wstawić zworki lub dip-switch.

    "Sygnały sprawdzam zwykłym multimetrem."
    No to nie sprawdzasz napięcia sygnałów tylko napięcie na resecie przy braku sygnałów programujących.
    Jak nie masz oscyloskopu to daj zworki.

    "Na sterownik 74LS47 wchodzi tylko jedna nóżka od programowania MOSI"
    A w stanie niskim z wejścia z TTL WYPŁYWA prąd wg. danych 74LS47 max.0.4 mA na MOSI-ciekawe co się dzieje wtedy z napięciem na tym wejściu.
    Oczywiście przy zasilaniu 74LS47 5V-dla 2.7V-nie wiem.
    Podejrzewam że te parametry zasilania będą w przyszłości źródłem "radości" i "ciekawostek"
    Wszystkie GND/VCC należy podłączyć-tak pisze producent układu- aby w przyszłości uniknąć "radości" i "ciekawostek".
    Ja do tak ryzykownie zaprojektowanego układu bez oscyloskopu bym nie podchodził.
  • #22
    janbernat
    Level 38  
    A do tych diod w wyświetlaczu to tak ZUPEŁNIE bez oporników to ja bym się nie ośmielił podczepić.
    Coś walnie, jak Amen w pacierzu.
  • #23
    godmode
    Level 14  
    @marenc

    Using AVR Analog Voltage Reference (AREF) :: AVR Freaks:
    http://www.avrfreaks.net/index.php?func=viewItem&item_id=238&module=Freaks%20Tools

    Według tego dokumentu AREF można podłączać do AVCC.
    Ja jestem zmuszony to zrobić ponieważ analogowy czujnik przyśpieszenia 3-osiowego wysyła informacje, których sygnał w amplitudzie ma do 3,3V.
    W AVR'ach nie można czytać sygnałów po ADC większych od napięcia na AREF. Jeszcze co wyczytałem to to, że AREF ma rezystancję wewnętrzną 10k, czyli podłączając te 2,56V do napięcia 3,3V popłynie prąd co najwyżej 70uA - przez tą krótką chwile kiedy wyłączamy w rejestrach wewnętrzne napięcie odniesienia 2,56V.
    -------

    crazy_phisic wrote:
    godmode wrote:
    ...
    Hmm zawsze podłączałem VCC/AVCC do AREF i nigdy sie nie spaliło - jesteś pewien że nie powinienem tak robić? Przecież rezystora nie wstawie bo wtedy to już wogóle nie będe w stanie określić jakie jest napięcie na AREF.
    ....

    Przecież możesz to zrobić programowo, podłączenie samo w sobie nie jest błędne.


    Na rezystorze odłoży się jakieś napięcie zależne od prądu, to ile odłoży się na AREF? Programowo to ja mogę sobie odczytać wartość, a później na podstawie AREF ja przeliczyć na napięcie które zostało zczytane. Wkładanie rezystora w szereg skutkuje błędnymi odczytami z przetwornika ADC. IMHO.
    -------

    @janbernat

    No tak tylko, że ze względu na brak miejsca nie wrzucałem drugiego zasilania +5V, z tego względu zdecydowałem się na wygodne 2,7V - co ma walnąć skoro te diody sa przystosowane na troszke ponad 2,5V? Musiałaby dioda się przepalić i podać 3,3V.
    Zrezygnuje z bezpiecznej wersji (brak miejsca) i zobaczymy jak będzie.
    -----


    Zabieram się za testowaniem, więc dam znać co i jak!

    Hmm w sumie to wrzucę wygląd płytki, może ktoś wpadnie na inne mądre rady:
    TOP
    BOTTOM
  • #24
    marenc
    Level 24  
    Nie zgłębiałem struktury wewnętrznej rdzenia. W sumie rezystor można było przewidzieć, że będzie, aby nie było tak łatwo uszkodzić ;) Przyznaje się do błędu...
  • #25
    crazy_phisic
    VIP Meritorious for electroda.pl
    godmode wrote:
    @marenc

    Using AVR Analog Voltage Reference (AREF) :: AVR Freaks:
    http://www.avrfreaks.net/index.php?func=viewItem&item_id=238&module=Freaks%20Tools

    Według tego dokumentu AREF można podłączać do AVCC.
    Ja jestem zmuszony to zrobić ponieważ analogowy czujnik przyśpieszenia 3-osiowego wysyła informacje, których sygnał w amplitudzie ma do 3,3V.
    W AVR'ach nie można czytać sygnałów po ADC większych od napięcia na AREF. Jeszcze co wyczytałem to to, że AREF ma rezystancję wewnętrzną 10k, czyli podłączając te 2,56V do napięcia 3,3V popłynie prąd co najwyżej 70uA - przez tą krótką chwile kiedy wyłączamy w rejestrach wewnętrzne napięcie odniesienia 2,56V.
    -------


    ATmega88 posiada wewnętrzne napięcie odniesienia o wartości 1.1V i rezystancję "referencyjną" 32kΩ.

    Przy podłączeniu "na stałe" Vref i AVCC przełączenie się na wewnętrzne napięcie odniesienia może uszkodzić powyższe (wynika to z budowy ADC).
    Dlatego też lepiej korzystać z możliwości konfiguracyjnych przetwornika (rejestr ADMUX).

    godmode wrote:

    .......
    Na rezystorze odłoży się jakieś napięcie zależne od prądu, to ile odłoży się na AREF? Programowo to ja mogę sobie odczytać wartość, a później na podstawie AREF ja przeliczyć na napięcie które zostało zczytane. Wkładanie rezystora w szereg skutkuje błędnymi odczytami z przetwornika ADC. IMHO.
    -------

    Może jaśniej? Bo niestety nie wiem o co Ci chodzi.
  • #26
    _Robak_
    Level 33  
    Ale w nocie do wszystkich atmeg jest napisane, ze jak podlaczasz napiecie do Vref, to nie mozesz korzystac z wewnetrznego zrodla, nie napisali tylko dlaczego nie mozesz ;) A jesli chcesz mierzyc napiecia wzgledem 5V (tych z VCC) to przeciez nie musisz tego podlaczac do Vref tylko wybrac w rejestrach ze mierzysz wzgledem AVCC i koniec ;)
  • #27
    atom1477
    Level 43  
    Właśnie. W ogóle się dziwię że wszyscy niepodłączenie VFER uważają za błąd. Ja nawet kondensatora do masy od VREF nie dawałem a żadnych zakłóceń nie widziałem. Choć oczywiście już teraz kondensator podłączam, bo zawsze lepiej.
    _Robak_: w nocie to nie pisze, ale jest pokazane ;) Wewnętrzne VREF jest podłączane do szyny VREF za pomocą tranzystora. A ta szyna jest jedna. Wybór wewnętrznego napięcia nie przełącza źródła sygnału z pinu VREF na wewnętrzne źródło VREF, lecz po prostu podłącza wewnętrzne napięcie do pinu VREF. Więc inaczej mówiąc wymuszenie jakiegoś napięcia na VREF i podłączenie do niego napięcia VREF z wnętrza mikrokontrolera za pomocą tego wewnętrznego tranzystora zaowocuje po prostu zwarciem.
  • #28
    _Robak_
    Level 33  
    To co nie jest napisane jest pokazane i mysle watek odnosnie Vref juz jest wytlumaczony dosyc gruntownie ;)
  • #29
    janbernat
    Level 38  
    A tak wracając do poczatku:
    " ATMega jest rozpoznawana przez program avrdude, tak mniej więcej co drugi, trzeci raz. Boję się ustawiać fusebity z wiadomego powodu - trafie akurat na ten moment kiedy kontroler jest nierozpoznawany i połowa fusebitów zostanie ustawiona a część nie i cała płytka z układem będzie do wyrzucenia - mikrokontroler jest w obudowie TQFP32 i przy pomocy dostępnych mi narzędzi nie jest możliwe jego wylutowanie."
    W najgorszym przypadku-jest możliwe wylutowanie TQFP32 prostymi metodami.
    Przy pewnej ostrożności nawet nie uszkodzisz procesora.
    Ale-przed programowaniem odlutuj nóżkę 74ls74 tam gdzie idzie mosi.
    Robi się to tak:
    Bierzemy cienki skalpel(ew. złamaną ukośnie żyletkę lub coś podobnego-ze stali wysokowęglowej-bo się cyna do niej nie klei)-podważamy delikatnie nóżkę scalaka SMD, nakładamy trochę cyny i grzejemy lutownicą.
    Jak się cyna rozpuści obracamy lekko skalpel i noga jest odlutowana.
    Sprawdzamy pod lupą i omomierzem czy nie została jakaś nitka cyny.
    Jak została-topnik i odsysarka.

    Dodano po 3 [minuty]:

    PS.
    Pracowałem w serwisie przy SMD 9 lat-naprawdę nie jest to takie trudne.
  • #30
    Nawigator
    Level 33  
    Moim zdaniem ta nota DN_005 z avrfreaks odnosi się do starszych procesorów a w nowszych jak ATmega88 nie można podłączać nóżki AREF do Vcc. Wyboru Aref=Vcc można dokonać tylko programowo.
    Kondensator do AREF jest potrzebny bo tłumi zakłócenia cyfrowe z sąsiednich nóżek.

    N.