Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 kwi 2024, o 14:31


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 22 ] 
Autor Wiadomość
PostNapisane: 12 kwi 2014, o 14:21 
Offline
Użytkownik

Dołączył(a): 12 kwi 2014
Posty: 39
Pomógł: 0

Używam programatora ISP USBASP kupionego. Chcę zaprogramować Atmegę88PA. Robię to przez Atmel Studio 6.1 Chciałem sprawdzić działanie programu. Zaprogramowałem go kilka razy działało w miarę jak należy. Przestawiałem częstotliwość pomiędzy 8/16MHz, ponieważ programowe milisekundy nie trwały tyle co milisekundy rzeczywiste. Dla eksperymentu ustawiłem 32MHz, po tym wyświetliło się okienko związane z avrdude.exe:
Obrazek
Po restartowaniu programu i reprogramowaniu wyświetla się komunikat:
Składnia: [ Pobierz ] [ Ukryj ]
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Wiem, że jest to częsty problem, ale nigdzie nie znalazłem rozwiązania i nie wiem jak ten problem wyeliminować.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2014, o 14:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sie 2013
Posty: 137
Lokalizacja: śląskie
Pomógł: 13

Te 32MHz to nie jest trochę za dużo .Chyba przetaktowany uP ? Tak myślę i z tond ten problem.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2014, o 15:59 
Offline
Użytkownik

Dołączył(a): 12 kwi 2014
Posty: 39
Pomógł: 0

Co to znaczy, że przetaktowany, prócz tego, że do wyrzucenia?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2014, o 16:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sie 2013
Posty: 137
Lokalizacja: śląskie
Pomógł: 13

Wydaje mi się,że ustawiłeś za dużą częstotliwość uP, spróbuj zmniejszyć np. z powrotem na 16MHz oczywiście z zewnętrznym kwarcem lub wewnętrzny oscyl. ustaw na 8 MHz myślę,że powinno wszystko działać jak należy.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2014, o 16:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Mikrokontrolery rodziny AVR (z wyjątkiem ATxmega) nie umożliwiają konfiguracji sygnału zegarowego, tak aby przetaktowany został ich rdzeń. Jedyną taką możliwością jest sprzętowe (zewnętrzne) podanie "zegara" o wyższej częstotliwości.
Zapewne został wybrany zewnętrzny oscylator/rezonator, który w tym momencie jest niezbędny do ponownego reprogramowania.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2014, o 16:32 
Offline
Użytkownik

Dołączył(a): 12 kwi 2014
Posty: 39
Pomógł: 0

Po zmniejszeniu częstotliwości na 8/16MHz problem wciąż występuje. Czy to znaczy, że powinienem teraz podłączyć zewnętrzny kwarc?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2014, o 17:00 
Offline
Użytkownik

Dołączył(a): 12 kwi 2014
Posty: 208
Lokalizacja: Białystok
Pomógł: 0

JungleMan napisał(a):
Po zmniejszeniu częstotliwości na 8/16MHz problem wciąż występuje. Czy to znaczy, że powinienem teraz podłączyć zewnętrzny kwarc?


A czy mógłby mi kolega powiedzieć, jak zmienił częstotliwość, skoro po tym pyta czy podłączyć zewn. kwarc. Jeśli zaprogramowałeś go na zewn. kwarc, to i przeprogramować go musisz z zewnętrznym kwarcem (oczywiście o częstotliwości w granicach rozsądku) i ustawić na razie na wewnętrzny oscylator.

_________________
Mam 16 lat, nie jestem zawodowcem ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2014, o 18:30 
Offline
Użytkownik

Dołączył(a): 12 kwi 2014
Posty: 39
Pomógł: 0

Mówię tu o częstotliwości F_CPU - wewnętrznej:
Obrazek
Nie programowałem nigdy z użyciem zewnętrznego kwarcu.

Obrazki wklejamy w/g zaleceń http://forum.atnel.pl/topic44.html

Różowo-zielony J.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2014, o 18:35 
Offline
Użytkownik

Dołączył(a): 12 kwi 2014
Posty: 208
Lokalizacja: Białystok
Pomógł: 0

JungleMan napisał(a):
Mówię tu o częstotliwości F_CPU - wewnętrznej:
Obrazek
Nie programowałem nigdy z użyciem zewnętrznego kwarcu.


A, no to jeśli tak, to oczywiście, że musisz włożyć kwarc (może być 12 MHz) i spróbować i ożywić procka. Jeśli przestawiłeś na zewnętrzny, to procesor będzie brał taktowanie z nóżek XTAL i tylko z tamtąd. Powiedz, czym przestawiałeś fuse bity i czy wybrałeś zewnętrzny rezonator, czy oscylator.

----EDIT:-------

I zmień te taktowanie F_CPU na 12000000 Hz, chyba, że podłączysz rezonator 16 MHz.

_________________
Mam 16 lat, nie jestem zawodowcem ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2014, o 19:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

F_CPU to nie jest "taktowanie wewnętrzne". Nie ma czegoś takiego.
Ta wartość to jest tylko POINFORMOWANIE kompilatora o tym jaką częstotliwością jest taktowany procesor.
Dzięki F_CPU kompilator wie jak rozwinąć niektóre funkcje (np. _delay_ms) aby odpowiadały rzeczywistości.
Jeśli wstawi się tam wartość o połowę mniejszą niż rzeczywiste taktowanie to po prostu 1 ms będzie trawała 0,5 ms. To wszystko.

Czym innym jest źródło sygnału zegarowego którym "napędzany" jest procesor. Tutaj możliwe są różne opcje, różne źródła sygnału:
1. Wewnętrzny oscylator RC
2. Zewnętrzny rezonator kwarcowy
3. Zewnętrzny rezonator ceramiczny
4. Zewnętrzny oscylator RC (chyba nikt nie używa)
5. Zewnętrzny generator TTL.

Rodzaj źródła ustawia się fusebitami. Oczywiście tam są jeszcze dodatkowe ustawienia takie jak czas rozruchu, full swing itd.
Przetaktowanie procesora jest możliwe tylko przy użyciu zewnętrznego generatora TTL, ale z moich doświadczeń wynika, że Megi pracują stabilnie przy 40MHz a nawet 55MHz.

Zacznij od tego, co masz ustawione w fusebitach. Jakie źródło taktowania.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 kwi 2014, o 23:02 
Offline
Użytkownik

Dołączył(a): 12 kwi 2014
Posty: 39
Pomógł: 0

A więc tak:
Mam rezonator PY 12 MHz full swing, slowly rising power - strzelam, bo nie mogę się doszukać noty katalogowej. Podłączyłem go przez kondensatory 18pF.
Z noty katalogowej Atmegi88PA wyczytałem, że dla takiego rezonatora, parametr "Start-up time from power-down and power-save" wynosi 16KCK a parametr "Additional delay from reset (VCC = 5.0V) " 14CK + 65ms.
Wchodzę w Atmel Studio 6.1 do "Device Programming", wybieram w "Tool" i "Simulator" patrzę jak będą ustawione fusebity. Przy wywołaniu avrdude dodaję argumenty ustawienia fusebitów a komenda wygląda tak:
Składnia: [ Pobierz ] [ Ukryj ]
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wynik:
Składnia: [ Pobierz ] [ Ukryj ]
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 kwi 2014, o 23:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

rc=-1 oznacza brak kontaktu z CPU, najczęściej złe podłączenie.

Ale oprócz tego dwie sprawy:
1. Napisałeś, może to pomyłka, że podłączyłeś kwarc przez kondensatory. Tak się nie podłącza. Kondensatory mają bocznikować kwarc do masy.

2. Fusebity które przesyłasz zawierają ustawiony bit CKDIV8 czyli podział zegara przez 8. Jeśli jest to włączone to trzeba zwolnić SCK w avrdude bo proc faktycznie będzie taktowany znacznie mniejszym zegarem. czyli do wywołania avrdude dodać parametr -B 2000



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 kwi 2014, o 00:39 
Offline
Użytkownik

Dołączył(a): 12 kwi 2014
Posty: 39
Pomógł: 0

1. Tak, to pomyłka. Kondensatory bocznikują kwarc do masy.
2. Co oznacza ta komenda "-B 2000" dokładnie?

Cytuj:
rc=-1 oznacza brak kontaktu z CPU, najczęściej złe podłączenie.

Właśnie rzecz w tym, że sprawdzałem wszystkie podłączenia wiele razy. Dziwne jest to, że normalnie programowałem ten mikrokontroler a po zmianie częstotliwości na 32MHz nagle nie może się połączyć z mikrokontrolerem. Po kolejnym przeprogramowaniu nie zmieniałem nic oprócz tej częstotliwości. Odstęp czasu pomiędzy kolejnym przeprogramowaniem wynosił kilkadziesiąt sekund maksymalnie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 kwi 2014, o 01:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

-B 2000 spowalnia taktowanie linii SCK do chyba najniższej możliwej częstotliwości. Przez co nawet procesor taktowany bardzo małą częstotliwością będzie się komunikował.
Generalnie im WIĘKSZA jest liczba po -B to taktowanie SCK jest MNIEJSZE.
Dobre programatory USBasp pozwalają się przestawić w taki właśnie sposób. Na gorszych jest zworka "slow sck", która realizuje to "sprzętowo". A na najgorszych nie ma nic... :P

Jeśli tylko zmieniłeś F_CPU to to nie mogło mieć wpływu na procesor, bo to nic nie zmienia w procesorze. Stawiam na przestawienie FUSE Bitów. I tutaj może być problem bo jeśli coś przestawiłeś w fusach to proc może być ustawiony "dziwnie". Jeśli to jest tylko kwestia bitu CKDIV8 to spowolnienie SCK pomoże. Gorzej jeśli w fusach jest ustawiony np. zewnętrzny generator... Wtedy nie pomoże kwarc. Trzeba podłączyć zewnętrzny generator do piny XTAL1. Co nie jest wielkim problemem, ale może być komplikacją.

Niezależnie od tego sprawdziłbym czy w ogóle programator działa. Np. z innym układem, jeśli masz.

Jeszcze jedna sprawa. Jeśli programator nie pozwoli się przestawić ani programowo ani "zworkowo" na mniejsze SCK.
A procesor ma ustawione fusy tak jak napisałeś (zrzut wywołania avrdude sugerujący załączony dzielnik przez 8). Jeśli w nich nie grzebałeś to były tak zaprogramowane wcześniej, co również wyjaśniałoby rozbieżności w czasie trwania milisekund o których pisałeś na początku i które skłoniły Cię do zmieniania F_CPU. To by znaczyło że przy obecnym kwarcu 12 MHz realne taktowanie masz 1,5 MHz i to może być za mało dla typowej wartości SCK.
Możesz wsadzić kwarc np. 16, albo 20 MHz i wtedy może wystarczy.

------------------------ [ Dodano po: 33 minutach ]

Teraz nawet przetestowałem.
ATmega88PA taktowana 10 MHz + plus dzielnik przez 8 czyli efektywnie 1,25 MHz.
Na normalnym taktowaniu (bez parametru -B) nie działa. Jest rc=-1.
Zaczyna dopiero działać przy -B 4.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 kwi 2014, o 15:00 
Offline
Użytkownik

Dołączył(a): 12 kwi 2014
Posty: 39
Pomógł: 0

Odnośnie Fusebitów. Nigdy ich nie przestawiałem ręcznie. Zawsze wywoływałem programator w Atmel Studio (AS), aby zaprogramował przekompilowany program, nie miałem nawet ustawione aby pokazywane były argumenty wywołania avrdude. Nigdy nie korzystałem z innego programu niż AS6.1 do programowania mikrokontrolerów.
Sprawdzałem dla parametrów j.w. argument -B z 8, 4, 2 i 1. Cały czas rc = -1.
Mam nadzieję, że jeszcze dzisiaj uda mi się sprawdzić czy da się zaprogramować inny mikrokontroler, wtedy jasne będzie, gdzie leży usterka.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 kwi 2014, o 15:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Zobacz jeszcze z większym -B np. 100 albo 500.

Domyślnie, prosto ze sklepu AT88 ma ustawione źródło taktowania na wewnętrzny oscylator RC oraz podział przez 8.
Czyli jest taktowana efektywnie 1 MHz.
Jeśli po tym jak zaczął się pokazywać błąd rc=-1 próbowałeś przestawić fusebity to i tak one się nie przestawiły. Chyba, że ktoś ją wcześniej przestawiał na używanie kwarcu.
Przy domyślnych ustawieniach podłączenie kwarcu i tak nic nie da, bo on nie będzie używany.

Koniecznie zobacz na drugim układzie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 kwi 2014, o 17:07 
Offline
Użytkownik

Dołączył(a): 12 kwi 2014
Posty: 39
Pomógł: 0

Podłączyłem mały ATTiny13, zaprogramowałem go bez zmiany Fusebitów i działa wszystko jak trzeba. Spróbuję jutro jeszcze z większym kwarcem z AT88PA.

Ostatnio edytowane: 04.15 22:58
Składnia: [ Pobierz ] [ Ukryj ]
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Tym razem problem z AT13. Na początku ustawiłem F_CPU=8000000. Potem chciałem zrobić "tak jak powinno być" czyli ustawić częstotliwość jaka ustawia się po resecie czyli 9,6MHz. Niestety znów wyskoczył błąd i tym razem doczytałem że lfuse powinien być 0x6A a jest 0x0. Avrdude pyta się czy chcę aby były przywrócone( [y/n]) , ale nic wcisnąć się nie da bo wyskakuje przy okazji błąd avrdude.exe i czy chcę "zamknąć program" czy "debugować".
Chcąc przeprogramować podając odpowiednio fuse'y w argumentach avrdude nie da się nic zrobić, bo wyskakuje błąd j.w.
Nie wiem już czy mam pecha czy jestem po prostu kretynem. :D
A tak wygląda błąd po zmianie częstotliwości na 9,6MHz:
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 kwi 2014, o 14:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Jeszcze raz przypomnę Ci to co było wcześniej.
Parametr F_CPU nie ma absolutnie żadnego wpływu w procesor. Jest to tylko informacja dla kompilatora, który musi znać częstotliwość pracy procesora aby wiedzieć ile ma wstawić instrukcji NOP przy rozwijaniu np. funkcji _delay_ms. W F_CPU możesz wstawić nawet 100MHz i to też nie zmieni nic w procesorze. A już na pewno parametr ten nie jest potrzebny programowi avrdude przy programowaniu proca.

W związku z zamieszczonym zrzutem odnośnie wywalenia się avrdude wniskuję, że masz jakiś problem z samym avrdude, albo z systemem.
Ściągnij Mirkowy MK_AVRcalculator, tak jak jest w wersji free. Do niego masz dołączoną podrasowaną wersję avrdude.
A później spróbuj skomunikować się z precesorem nie używając Atmel Studio, tylko czegoś bardziej prostego.
Druga sprawa, co to za programator ? Bo może tutaj być problem.

EDYTA----
Albo nawet ściągnij coś takiego:
http://blog.zakkemble.co.uk/avrdudess-a-gui-for-avrdude/
I zobacz czy "czyste" avrdude + programator będzie działać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2014, o 11:59 
Offline
Użytkownik

Dołączył(a): 12 kwi 2014
Posty: 39
Pomógł: 0

Próbowałem przez MkAvrCalculator oraz bezpośrednio przez avrdude, który podesłałeś i wynik jest ten sam tzn.: z ATt13 połączenie wykrywane bez problemu na dwóch programatorach a na ATm88 rc=-1. Czy można zatem jakoś ożywić ATm88?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2014, o 13:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Jeśli jesteś pewny połączeń AT88 i próbowałeś na różnych kwarcach. To jeśli jest tak jak mówisz to ja widzę dwie możliwości:
1. W jakiś sposób (być może AVR studio) przestawiło fusy np. na zewnętrzny generator TTL (fusami też można wyłączyć reset i ISP).
2. Procesor został uwalony np. przez ładunek statyczny. Choć to jest mało prawdopodobne.

W pierwszym przypadku pomoże podanie na nogę XTAL1 przebiegu prostokątnego z zewnętrznego generatora.
Najprościej użyć jest czegoś takiego:
Obrazek

Można też użyć typowej aplikacji NE555.
Albo, jeśli masz jakiś inny MCU np. ten Attiny13 lub dowolny inny.
To możesz napisać mu króciutki programik który uruchomi w nim jeden timer w trybie CTC dzięki czemu wyprodukuje dla Ciebie na jednym swoim wyprowadzeniu przebieg prostokątny w sumie o dowolnej częstotliwości (maksymalnie połowa jego taktowania).

W drugim przypadku.... No to można z niego zrobić np fajny breloczek. Tylko musi być dobra, przezroczysta żywica odlewnicza :P


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2014, o 16:42 
Offline
Użytkownik

Dołączył(a): 12 kwi 2014
Posty: 39
Pomógł: 0

W takim razie należałoby podziękować, więc: dziękuję bardzo za pomoc przede wszystkim użytkownikowi @sq8dsr. Przy okazji nabyłem dzięki niemu wiele nowych informacji na temat mikrokontrolerów.
Spróbuję jeszcze z zewnętrznym generatorem, jeżeli nie pójdzie to zrobię sobie ładny breloczek. :D
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2014, o 17:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Nie ma sprawy. ;)
Szkoda, że nie AT88 nie ruszyła. Może jeszcze ruszy...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 22 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 7 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO