logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATMega16: Brak reakcji LCD na porcie C, działa na innych portach - co robić?

lukaspaw 09 Kwi 2004 02:39 2185 8
REKLAMA
  • #1 587383
    lukaspaw
    Poziom 12  
    Posty: 104
    Ocena: 5
    witam. potrzebowałbym pomocy w dwóch sprawach:
    1. mam problem z mikrokontrolerem. chciałem podłączyć do ATMega16 LCD, całość programuje na STK500.podłaczylem z LCD linie danych do portu mikrokontrolera C0...C7 i po napisaniu programu nic, żadnej reakcji.jak podłaczyłem go do portu A, B lub D (zmieniajac odpowiednio listing) to ruszył bez problemu (sprawdziłem nie ma błędu w programie na AT90S8515 chodzi bez problemu na porcie C-taki sam listing). stwierdziłem że może jest uszkodzony port C mikrokontrolera i podłączylem drugi ATMega16-ta sama reakcja z portem C, czyli nic. dla sprawdzenia użyłem pokazowego programu ATMELA (naciskanie odpowiednich przycisków powoduje zaświecenie lub gaszenie odpowiednich diód) i przerabiałem go po kolei na wszystkie porty, wynik - program działał według opisu producenta ale nie przy porcie C (przy nim zachowywał się jakby mikrokontroler sam naciskał przyciski-dla I-mikrokontrolera, lub część diód nie świeciła -II-mikrokontroler). nie wiem czemu tak się dzieje bo to już dwa ATMega prosto z półki sklepowej, czemu nie działają w nich tylko porty C. czy może być tak że STK500 ma jakąś wade i np. pali te porty, a jeśli tak to czy mozna to jakoś wykryć domowym sposobem. a może na porcie C są włączone jakieś alternatywne funkcje pinów i trzeba je najpierw wyłączyć (ale nic na ten temat nie znalazłem w dokumentacji). jeśli ktoś ma jakiś pomysł to prosze o rade.

    2. druga sprawa dotyczy sposobu tworzenia tablic w asemblerze. dałby mi ktoś jakiś prosty przykładzik jak zrobić by np. wpisując 10 z tablicy wybrano np. A a wpisując 20 np. B.

    dzieki za jakiekolwiek rady. no i Wesołych Świąt.
  • REKLAMA
  • #2 589859
    slawko_k
    Poziom 35  
    Posty: 2929
    Pomógł: 254
    Ocena: 238
    Witam.
    Odnosnie pierwszego pytania to mozliwe ze i jest uszkodzony ale znacznie wieksze jest prawdopodobienstwo ze cos zle robisz.
    Napisz co port robi jak wystawaisz mu 0 (czyli same 0) i 255 (czyli same 1)
    Ja bym zrobil tak (np w bascomie)
    config portc = output
    do
    portc=0
    wait 1
    portc=255
    wait 1
    loop
    end

    Jak port dobry musi chodzic.

    Dodatkowe funkcje portu sa po resecie wylaczone. trzeba je dopiero ustawiac dodatkowo.
  • #3 590089
    lukaspaw
    Poziom 12  
    Posty: 104
    Ocena: 5
    ten sam program wpisuje po kolei na porty i A B i D chodzą bez problemów a ten C albo w jednym mikrokontr. zaczyna działać sam a w drugim nie dzialaja środkowe diody.na innych atmelach programik chodzi bez problemu
  • REKLAMA
  • #4 594125
    Kriti
    Poziom 15  
    Posty: 94
    Pomógł: 9
    Ocena: 1
    A jest tam JTAG ja mialem na ATMEGA32 tak ze jak byl wlaczony JTAG (w ustawienniach programatora) jeden z protow nie dzialal.
    Kriti
  • #5 1820309
    plp
    Poziom 15  
    Posty: 216
    Pomógł: 3
    Ocena: 12
    Jest JTAG i wyłącza z normalnego użycia 4 piny portu C.
    Trzeba zmienić odpowiedni bit w fuse'ach.
    Dokumentacja, strona 220.
    Jeśli robisz to w Bascomie, to w programatorze jest to opisane przy fuse'ach.

    PL
  • #6 1882398
    mimi1972
    Poziom 13  
    Posty: 41
    Pomógł: 2
    Dokładnie tak. Trzeba wyłączyć JTAGa. też miałem ten sam problem z portem C.
    Pozdrawiam.
  • REKLAMA
  • #7 5859543
    j_r_k
    Poziom 11  
    Posty: 17
    Pomógł: 1
    Ocena: 4
    Żeby nie tworzyć nowego tematu, dopiszę się do tego wątku. Mój problem jest bardzo podobny. Wydaje mi się, że w moim μC (ATmega32) uszkodzony jest port C.
    Napisałem testowy programik.
    #include <avr/io.h>
    #include <util/delay.h>
    
    int main(void)
    {
    	DDRC = 255;
    	while (1)
    	{
    		PORTC = 255;
    		_delay_ms(5000);
    		PORTC = 0;
    		_delay_ms(5000);
    	}
    	return 0;
    }

    Efektem działania powyższego programu powinno być mruganie wszystkich diód. Mrugają tylko diody podłączone do pinów: PC0, PC1, PC6 i PC7. Diody podłączone do pinów PC2, PC4 i PC5 świecą się bez przerwy słabo. Dioda podłączona do pinu PC3 nie świeci. Lepiej to widać na filmiku na YT. Gdy ten sam test robiłem z portem A, było OK.

    Niedawno popełniłem taki błąd:
    Chciałem wykorzystać klawiaturę 4×4. Podłączyłem ją do portu C, a program był napisany dla portu B. Czyli stykałem piny bez włączonych rezystorów podciągających. Były to krótkie zwarcia – naciśnięcie guzika i po chwili jego puszczenie. Czy mogło to spowodować uszkodzenie?

    Czyli mam uszkodzone cztery z ośmiu pinów portu C? Czy może da się je „zresetować”? Jakieś ustawienia FUSE? Początkujący jestem – nie znam się za bardzo.
  • #8 5859624
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    Sorry, że zwracam uwagę na taką oczywistą oczywistość, ale czy wyłączyłeś JTAGa w fuse bitach. Ja wiem, że dwa posty wyżej jest o tym napisane i nie można tego nie zauważyć, ale nie napisałeś tego wprost :) Co do zwarcia, to jak to wyglądało? Konkretnie co z czym zwierałeś i jak był skonfigurowany port? Z doświadczenia wiem, że ATmegi są dość cierpliwe jeśli chodzi o takie zabawy :)
  • REKLAMA
  • #9 5860151
    j_r_k
    Poziom 11  
    Posty: 17
    Pomógł: 1
    Ocena: 4
    don diego napisał:
    Ja wiem, że dwa posty wyżej jest o tym napisane i nie można tego nie zauważyć

    Przyznam szczerze, że przeczytałem tylko dwa pierwsze posty.

    Wyłączyłem JTAGa i jest dobrze.

    Twoja odpowiedź bardzo mi pomogła. Nie wiem, dlaczego pod Twoim postem nie guzika ATMega16: Brak reakcji LCD na porcie C, działa na innych portach - co robić?

Podsumowanie tematu

✨ Problem dotyczy braku reakcji wyświetlacza LCD podłączonego do portu C mikrokontrolera ATMega16, podczas gdy porty A, B i D działają poprawnie z tym samym programem. Testy wykazały, że port C zachowuje się niestandardowo – w jednym mikrokontrolerze działa samoczynnie, a w drugim nie działają niektóre piny. Przyczyną problemu jest aktywny interfejs JTAG, który blokuje normalne użycie czterech pinów portu C. Rozwiązaniem jest wyłączenie JTAG poprzez odpowiednią zmianę bitów fuse w mikrokontrolerze. Po wyłączeniu JTAG port C działa poprawnie. Podobne problemy zgłaszano również dla ATMega32, gdzie niektóre piny portu C świecą się stale lub nie działają, co również wiązało się z aktywnym JTAG. Testy programowe polegające na ustawianiu portu C na wyjście i naprzemiennym ustawianiu stanów 0 i 1 potwierdzają poprawne działanie portu po wyłączeniu JTAG. Dodatkowo zwrócono uwagę na konieczność konfiguracji portu jako wyjścia oraz na możliwość uszkodzenia portu w wyniku zwarć lub nieprawidłowego podłączenia, jednak główną przyczyną problemów jest aktywny JTAG.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA