Skocz do zawartości

ATMega16 zasilanie. poszedl z dymem?? :/


eosik

Pomocna odpowiedź

mam problem. meczylem sie z moja atmega i mi caly czas glupial. port wyjsciowy skonfigurowalem na wartosc poczatkowa 0, a na 3,5,6,7 bicie caly czas byly jedynki. i tak probowalem cos zrobic, zmienialem program, az w koncu atmega calkiem przestala reagowac na cokolwiek. niby sie programuje, ale jest trup;/ zasilam ja z 6 akumulatorkow przez stabilizator LDO 2940. co moglo pasc??

Link do komentarza
Share on other sites

Może niechcący grzebałeś w fusebitach i np. zablokowałeś możliwość programowania ISP? Jeśli tak, to pozostaje programator równoległy (link pierwszy z brzegu: projekt programatora równoległego/szeregowego wysokonapięciowego) i odwrócenie zmian. Prościej chyba jednak zakupić nową ATmegę i spróbować ją zaprogramować (upewniając się tym razem, że nie ruszamy niepotrzebnych fuse'ów), czekając aż zbierze się więcej takich zablokowanych procków by następnie zmobilizować się do zrobienia programatora lub przekupienia kolegi posiadającego taki programator 🙂

Jeszcze jedna sprawa - z jakiego programatora i programu do zgrywania wsadu korzystałeś?

Pozdrawiam

Link do komentarza
Share on other sites

STK200 program, to bascom avr. ale juz wszystko gra. nie wiem, co mialo to wspolnego, ale wymienilem jeden kondensator przy stabilizatorze i juz gra wszystko. tylko nadal mam problem, z ta konfiguracja portow;/ przeciez nie moge podac na mostki h zer, tylko musze jedynki...

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

    $regfile = "m16def.dat" 
   $crystal = 8000000

   Config Portc = Input
   Portc = &B11111111

   Config Portd = Output

   Portd = &B00000000


   Do
    If Pinc.0 = 0 Then
     Portd.4 = 1
    End If

    If Pinc.3 = 0 Then
     Portd.6 = 1
    End If

    If Pinc.3 = 0 And Pinc.0 = 0 Then
     Portd.4 = 1
     Portd.6 = 1
    End If

    If Pinc.1 = 0 Then
     Portd.5 = 1
    End If

    If Pinc.2 = 0 Then
     Portd.7 = 1
    End If

    If Pinc.2 = 0 And Pinc.3 = 0 Then
     Portd.5 = 1
     Portd.7 = 1
    End If

    If Pinc.0 = 0 And Pinc.3 = 0 Then
     Portd.4 = 1
     Portd.7 = 1
    End If

    If Pinc.1 = 0 And Pinc.3 = 0 Then
     Portd.5 = 1
     Portd.6 = 1
    End If

    If Pinc.0 = 0 And Pinc.1 = 0 Then
     Portd.2 = 1
    End If

    If Pinc.2 = 0 And Pinc.3 = 0 Then
     Portd.3 = 1
    End If

    If Pinc.1 = 0 And Pinc.2 = 0 And Pinc.3 = 0 Then
     Portd.0 = 1
    End If

    If Pinc.0 = 0 And Pinc.1 = 0 And Pinc.2 = 0 Then
     Portd.1 = 1
    End If
   Loop

   End

to ten kod. moze dopatrzysz sie jakiegos bledu...

Link do komentarza
Share on other sites

Nigdzie nie zerujesz portu. Jak wpadnie mu raz jedynka, to już nigdy z niej nie wyjdzie. Dodaj ELSE przy każdym ifie, który wyzeruje odpowiednie bity portu.

Upewnij się jeszcze, że masz w fusebitach wyłączony JTAG. Jeśli jest włączony to zrobi zamieszanie na pinach portu C.

Link do komentarza
Share on other sites

a sory, na koncu jest jeszcze w oryginale zrobiony warunek zerujacy. w drugim procku dziala. a wyglada tak

 if portc = &B11111111 then portd = &b00000000 end if

ale jak mam to ustawic. szukalem jakiejs mozliwosci, ale nie moge sie polapac. mam bascom-avr

Link do komentarza
Share on other sites

Jeśli już to if PINC=255 then PORTD = 0

W oknie programatora Bascoma jest zakładka fusebits, a w niej fusebit JTAGEN, ma być ustawiony na 1, albo "off". Domyślnie jest na 0 albo "on". Wybierasz opcje, zapisujesz i będzie ok. Nie mam bascoma więc nie wiem dokładnie jak te opcje wyglądają. Tylko nie grzeb w fusebitach, bo można trwale zablokować procka!

Link do komentarza
Share on other sites

no i zrobilem tak jak mowiles i nic. procek nie reaguje. a jak zmienie kod, zeby wejsciem byl port a, to chodzi, ale nie do konca tak, jak powinien. ale sa mi potrzebne przetworniki ADC...

Link do komentarza
Share on other sites

To chyba jednak nie ustawiłeś tych fuse'ów. Spróbuj ustawić ręcznie portc=255 i odczytaj zwracaną wartość (w sensie napisz program testowy i zapakuj go do tej atmegi). Jeśli wartość będzie inna niż 255, oznacza to, że nie możesz ustawić na pewnych "nóżkach" portu C wartości 1 - co oznaczało by problemy z fusami JTAG'a. Jeśli tak będzie w istocie:

Ustaw w fuses OCDEN=1 i JTAGEN=1, to powinno wyłączyć debugowanie i zwolnić 4 wyjścia portu C.

2) co do tego warunku, to poza błędem składni (jak napisał McRancor "if pinc=&B11111111 then portd=....") jesteś pewien, że to jest ok? ciężko powiedzieć bez rozeznania jak to ma działać, ale wydaje mi się dziwne...ale jeśli spełnia swoją funkcję (w co śmiem wątpić biorąc pod uwagę Twoje posty:P) to ok. Jeśli jednak nie, to może pójdź za przedstawioną powyżej radą eksperta i przerób te warunki np zamiast:

If Pinc.0 = 0 Then
Portd.4 = 1
End If 

na

If Pinc.0 = 0 Then
Portd.4 = 1
Else
Portd.4 = 0
End If 

Mam nadzieję, że choć trochę pomogłem 🙂

Pozdro

Link do komentarza
Share on other sites

fusebity juz rozgryzlem. a ten blad skladni, to przez pospiech byl tylko, jak pisalem post. poza tym kod w obecnej chwili wyglada tak:

    $regfile = "m16def.dat" 
   $crystal = 8000000

   Config Portc = Input
   Portc = &B00001111

   Config Portd = Output

   Portd = &B00000000


   Do
    If Pinc = &B00001110 Then
     Portd = &B00010000
    End If

    If Pinc = &B00000111 Then
     Portd = &B01000000
     End If

    If Pinc = &B00001011 Then
     Portd = &B10000000
    End If

    If Pinc = &B00001010 Then
     Portd = &B10010000
    End If

    If Pinc = &B00001101 Then
     Portd = &B00100000
    End If

    If Pinc = &B00001011 Then
     Portd = &B10000000
    End If

    If Pinc = &B00000011 Then
     Portd = &B00001000
    End If

    If Pinc = &B00000110 Then
     Portd = &B01010000
    End If

    If Pinc = &B00000101 Then
     Portd = &B01100000
    End If

    If Pinc = &B00001100 Then
     Portd = &B00000100
    End If

    If Pinc = &B00000011 Then
     Portd = &B00001000
    End If

    If Pinc = &B00000001 Then
     Portd = &B00000001
    End If

    If Pinc = &B00001000 Then
     Portd = &B00000010
    End If

    If Pinc = &B00001111 Then
     Portd = &B00000000
    End If
   Loop

   End

i dziala w 100% dobrze. poza tym w poprzedniej postaci zajal mi 5% pamieci procka, a teraz zajmuje 2%. a to, ze zadaje pytania w cale nie oznacza, ze nic nie wiem. poprostu lubie jak jest wszystko jasne. no i jezeli juz tak bardzo chcesz wiedziec, to jestem w 3 klasie technikum elektronicznego...

Link do komentarza
Share on other sites

Nie neguję Twoich umiejętności i nie chciałem by tak to wyglądało, starałem się jedynie pomóc. Co do pytań - kto pyta nie błądzi, wiem to po sobie...choć najlepiej człowiek uczy się paląc bezpieczniki na laboratoriach pod czujnym okiem prowadzącego;)

Pozdrawiam

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.