Skocz do zawartości
Zaloguj się, aby obserwować  
eosik

ATMega16 zasilanie. poszedl z dymem?? :/

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

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
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...

Udostępnij ten post


Link to post
Share on other sites

Może wrzucisz wsad do procka?

Udostępnij ten post


Link to post
Share on other sites
    $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...

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
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!

Udostępnij ten post


Link to post
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...

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
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...

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
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.

Zaloguj się, aby obserwować  

×
×
  • Utwórz nowe...