Bity konfiguracyjne ATTiny 26 - Systemy mikroprocesorowe
Farnell, An Avnet Company   Phoenix Contact Sp. z o.o.   Przedstawicielstwo Handlowe Paweł Rutkowski   Fluke Europe B.V.  

Energetyka, Automatyka przemysłowa, Elektrotechnika

Dodaj firmę Ogłoszenia Poleć znajomemu Dodaj artykuł Newsletter RSS
strona główna GRUPY Systemy mikroprocesorowe Bity konfiguracyjne ATTiny 26
REKLAMA
Przejdź do grup
REKLAMA

Bity konfiguracyjne ATTiny 26

Awatar użytkownika
dziadekkamila
Mam problem w następującym temacie " Po zaprogramowaniu mikrokontrolera trzeba jeszcze następująco ustawić bity konfiguracyjne: RSTDISBL = 1, EESAVE = 0, BODLEVEL = 0, BODEN = 0, PLLCK = 1, CKOPT = 1, SUT1 = 0, SUT0 = 0, CKSEL3 = 0, CKSEL2 = 1, CKSEL1 = 0, CKSEL0 = 0. Mikrokontroler jest taktowany z wewnętrznego oscylatora RC pracującego z częstotliwością 8MHz. Ponieważ stabilność tego generatora jest dużo gorsza niż generatora kwarcowego istnieje możliwość dokładniejszej kalibracji częstotliwości jego pracy. Nie jest to absolutnie konieczne, ale zalecane. Aby każdorazowo przy uruchomieniu częstotliwość była kalibrowana należy odczytać programatorem jednobajtową wartość kalibrującą dla częstotliwości 8MHz zapisaną na stałe razem z sygnaturami mikrokontrolera podczas jego produkcji, a następnie zaprogramować ją w pierwszej komórce pamięci EEPROM mikrokontrolera pod adresem 0x00. Każda zapisana pod tym adresem wartość inna niż 0xFF będzie automatycznie ładowana przez program sterujący do rejestru kalibrującego przy uruchomieniu."Nie mam zielonego pojęcia w jaki sposób mam dokonać tego zapisu.Nadmienie że chodzi o Attiny 26,konfigurację bitów dokonałem za pomocą ,ISP Programmer 1.2.0.52.Ink  
cytuj pomógł zgłoś nadużycie
Brak awataru
Kamil Wróblewski

Niestety nie zrobisz tego w prosty sposób prostym programatorem. Najprościej jest wykonać to programatorami STK500v2, AVRISP mkII lub JTAG ICE mkII i np. programem AVRDUDE z opcją "-O". Wtedy wykonywana jest kalibracja i wynik zapisywany jest w EEPROMIE w komórce pod adresem 0. Ewentualnie można innymi programatorami obsługiwanymi przez AVRDUDE odczytać kalibrację i potem w jeden z możliwych sposobów zapisać w EEPROMIE. Co do sposobów, to mogę podpowiedzieć następujące:

  • możesz spreparować hex-a w którym pod zerowym adresem będzie zapisana wartość kalibracyjna dla 8 MHz i zaprogramować nim EEPROM,
  • jeśli masz jakieś klawisze i wyświetlacz, to możesz napisać program, który pozwoli przy ich pomocy zapisać odpowiednią wartość w EEPROM-ie,
  • możesz również napisać program, który zapisze w EEPROM-ie wartość odebraną przez UART-a.
cytuj pomógł zgłoś nadużycie
Awatar użytkownika
Holy
  1. Fabryczny bajt kalibracyjny jest umieszczony tam gdzie sygnatura procesora i nie jest dostępny spod poziomu programu.
  2. Fabryka kalibruje oscylator jedynie przy założeniu, że będzie on pracował na 1 MHz. Owszem można przestawić oscylator na 8 MHz przy użyciu tego bajtu, ale mogą pojawić się większe niedokładności.
  3. Do rejestru OSCCAL po resecie procesora jest wpisywana wartość bajtu kalibracyjnego wprost z obszaru sygnatury. Więc po co brać to z EEPROMu? Chyba, że kogoś nie interesuje bajt kalibracyjny z obszru sygnatury.
  4. Radzę ostrożnie ze zmianami OSCCAL, bo można tak pogonić procek, że nie wstanie nawet do trybu SPI, a wtedy wiadomo - programator równoległy, wysokonapięciowy.
  5. Jeśli chcemy super dokładnie uzyskać 8 MHz, to oczywiście oprócz kwarcu można napisać kawałek softu, który nam będzie sam kalibrował ten bajt np. na podstawie zewnętrznego sygnału wzorcowego doprowadzanego do płytki CPU w momencie pierwszego uruchomienia.
  6. Można to zrobić też ręczenie np. Za pomocą PonyProg'a. Odczytać EEPROM procka, zmodyfikować komórkę na zerowym adresie i zapisać EEPROM. Oczywiście o ile procek nie ma zapisanych lockbitów.
  7. Adres zerowy EEPROMu nie jest za dobrym pomysłem. Nie wiem jak w ATTiny26, ale w 2313 był problem, że w momencie zapisu danych do EEPROMu na dowolnym niezerowym adresie i zaniku zasilania przed dokończeniem transakcji dane te były zapisywane do komórki o adresie 0. To był znany błąd tych procków i przyznaję się, że nie wiem, czy go poprawili.
cytuj pomógł zgłoś nadużycie
Awatar użytkownika
dziadekkamila

Właśnie kolego HOLY prosiłbym bardzo o pomoc odnośnie punktu 5 Twojej wypowiedzi.Pomóż mi napisać ten kawałek softu bo ja niestety nie wiem jak się za to zabrać.O takie właśnie rozwiązanie mi chodzi.

cytuj pomógł zgłoś nadużycie
Awatar użytkownika
dziadekkamila

 Kolego Kamilu
Mogę oczywiście napisać program który zapisze.....itd twojej wypowiedzi ale jak bym wiedział jak to zrobić nie było by mnie na ty forum.
Ale dzięki za zainteresowanie.

 

cytuj pomógł zgłoś nadużycie
Awatar użytkownika
Holy

Program byłby dość prosty. Uruchamiasz procek w trybie kalibracyjnym, np. bit zerowy portu A wymuszasz na stan niski, procek to sprawdza i przechodzi do kalibracji. Potem procek czeka, aż ten pin wskoczy na stan wysoki. Jeśli to wykryje uruchamiasz timer z prescalerem równym 1 i liczysz dotąd dopóki stan nie wróci do niskiego. Stan wysoki trwa powiedzmy 100 ms. Sprawdzasz ile taktów zliczył procek w czasie 100ms i na tej podstawie szacujesz z  jaką częstotliwością pracuje i jak zmienić bajt kalibracyjny.

cytuj pomógł zgłoś nadużycie
Awatar użytkownika
dziadekkamila

Kolego Holy nie o to prosiłem.Proszę dokładnie przeczytać mój soft oraz swoją wypowiedz w punkcie 5.

cytuj pomógł zgłoś nadużycie
odpowiedz
REKLAMA
Nasze serwisy:
elektrykapradnietyka.com
przegladelektryczny.pl
rynekelektroniki.pl
automatykairobotyka.pl
budowainfo.pl