LGT8F88A — ustawienia FUSE BITS

LGT8F88A — ustawienia FUSE BITS
Razem głosów: 8 co stanowi: 95% całości.

logicgreen_new_log1

Co nieco już poznaliśmy ten klon ATmegi88  i wygląda całkiem sensownie, pod kątem zgodności , ładnie przyjmuje oprogramowanie pisane dla m88 i niema tu dużego problemu zarówno z działaniem jak i wydajnością , ale na uwagę i dłuższy opis zasługują FUSE BITY naszego klona co też zrobimy teraz.

W istocie bardzo uproszczone zostało podejście do Fusów  w LGT8F88 co zasługuje na pochwałę i znacząco poprawia komfort pracy z mikrokontrolerem niwelując problem możliwości zablokowania mikrokontrolera.

Przechwytywanie

LGT8F88A nie posiada odrębnej pamięci dla Fusów i ich ustawienia są realizowane w wydzielonym obszarze pamięci FLASH , jest on też używany do emulowania pamięci E2PROM. Niektóre komórki tego obszaru są zapisane na poziomie produkcyjnym np:

GUID zawierające ID mikrokontrolera oraz bajt kalibracyjny RC które tylko możemy czytać od strony oprogramowania. Inne możemy zapisywać i odczytywać w naszych aplikacjach. Dotyczy to 504 bajtów pamięci Flash pracującej jako E2PROM oraz raptem kilku bajtów konfiguracyjnych mikrokontrolera.

W przeciwieństwie do ATmega88 który  ma bardzo bogate ustawienia FUSE BITS co często spędza sen z powiek początkujących i powoduje sporo błędów a co za tym idzie prowadzi  do częstych zablokowań mikrokontrolerów, w LGT8F88A  wiele jest realizowane poprzez rejestry I/O, a niektórych niema wcale lub są realizowane w zupełnie odmienny sposób o tego, który znamy z M88. Przykładem np. jest brak LOCK Bitów.

Bajty kalibracji dla 32Mhz wewnętrznego oscylatora RC są zaprogramowane fabrycznie. A zmiana ustawień jest realizowana poprzez zapis rejestru RCCAL w rejestrze I/O pamięci. Tymczasem ustawienia BOR są ustawiane przy użyciu FUSE BITS i są realizowane natychmiast po włączeniu zasilania. W każdej w sumie chwili można aktualizować swoje ustawienia w rejestrze I/O.  LGT8F88A wspiera pracę dla 32MHz w pełnym zakresie napięć zasilania (1,8V do 5,5V) Dla większości zastosowań BOR nie jest wymagany jak w atmedze88 gdyż nie stanowi problemu spadek napięcia do 1.8V co powoduje że podczas używania LGT8F88 możemy zapomnieć o ustawieniach FUSE i niema to żadnego znaczenia i wpływu na działanie mikrokontrolera.


Co nieco o peryferiach:


 

Większość peryferii mikrokontrolera LGT8F88A  jest kompatybilna z ATmega88 w tym te najbardziej popularne jak:

  • WDT
  • ADC
  • SPI
  • USART
  • TWI

oraz oczywiście co nie jest bez znaczenia TIMERY.    Oprogramowanie pisane dla ATmegi88 z obsługą SPI/USART/TWI i Timerów może być bezpośrednio i bez zmian zastosowane na LGT8F88, ale w przypadku WDT/ADC i E2PROM  są jednak niewielkie różnice w kodzie.

— Dla WDT różnicą jest źródło zegara, gdzie ATmega88 używa dedykowanego układu RC dla WDT 128KHz , natomiast LGT8F88 posiada 2 źródła zegara dla WDT:

  • Wewnętrzny oscylator RC 32KHz
  • Wewnętrzny osylator RC 32Mhz  z preskalerem 16

Ustawia się to w rejestrze PMCR[4]  i można wybrać 32Khz lub 2MHz  jako źródło zegara dla licznika WDT. Co czynimy wstawiając 0 lub 1 do rejestru. Jak widać deflautowo jest wybrane 0  czyli 32Mhz/16

Przechwytywanie

 

Innymi peryferiami zajmiemy się innym razem , ale są one bardzo dobrze opisane w dokumencie :

migrating_from_atmega88_to_lgt8f88a_v1.0.pdf

na którym w zasadzie tutaj bazuję :)


 

Nasz gwóźdź programu FUSE SETING:


 

— ZEGAR i Zarządzanie zegarem:

LGT8F88 używa zupełnie innego „układu zegara” niż ATmega88 dzięki czemu praktycznie niema możliwości zablokowania mikrokontrolera podczas pomyłki w ustawieniach  jak to często ma miejsce w AVR. Firma Logic Green  wyszła na przeciw początkującym i poprzez zredukowanie do minimów FUSE BITÓW oraz przeniesienia niektórych funkcji i zaadoptowania ich w rejestrach I/O zupełnie praktycznie wyeliminowała możliwość blokady mikrokontrolera.  Z FUSÓW zostało konieczne minimum np. służące do ustawienia BOR.  Natomiast ustawienie taktowania mikrokontrolera odbywa się przy użyciu rejestru PMCR w kodzie programu. Przez co Rejestr PMCR jest managerem zegara systemowego. Tymczasem zerknijmy na schemat blokowy obwodów zegara :

Przechwytywanie

LGT8F88A posiada trzy typy źródła zegara co widać wyżej, a są to:

— 32Mhz  wewnętrzny oscylator RC kalibrowany fabrycznie z 1%  rozdzielczością

— 32Khz wewnętrzny oscylator RC również kalibrowany fabrycznie 1%

— Zewnętrzny kwarc dołączany do pinów którym może być:

— kwarc zegarkowy 32.768KHz

— rezonator kwarcowy w zakresie od 400KHz do 32MHz

Ustawienia taktowania są realizowane jak już wiemy w rejestrze PMCR gdzie są zdefiniowane w następujący sposób:

Przechwytywanie

Konfiguracja zegara systemowego jest w zasadzie prosta co widać w tabelce:

Przechwytywanie

Gdy wybierzemy źródło zegara możemy ustawić prescaler by uzyskać wolniejsze taktowanie wymagane w naszym projekcie. Dokonujemy tego w rejestrze CLKPR, który jest zgodny z ATmega88.  Jeśli używamy taktowania z wewnętrznego RC – 32Mhz  to domyślnie jest ustawiony prescaler 8 co powoduje że nasz LGT8F88A pracuje fizycznie z taktowaniem 4MHz. Ale nic nie stoi na przeszkodzie by zaktualizować ustawienia w dowolnym momencie poprzez nasze oprogramowanie, ale jednak zalecane jest wykonanie ustawień zegara przed inicjacją systemu.  Musimy jednak pamiętać o wymaganym opóźnieniu koniecznym do ustabilizowania się układów RC. Oto przykładowy kod konfiguracji zegara udostępniony przez producenta :

Jak więc widać niema tu nic skomplikowanego:)


Biedne FUSY:


 

W przypadku posiadania Debugera dedykowanego SWDICE mkII używamy programu LGTMix_ISP zarówno do programowania jak i do ustawiania Istniejących FUSE BITS:

Przechwytywanie

wyglądają dziwnie prawda i w sumie możemy tylko ustawić 3 pozycje w wierszu FUSE,

a są to:

  • BOR config
  • IRC clibration
  • GUID

Jak widać w sumie nic interesującego i w zasadzie ich istnienie w większości przypadków możemy pominąć i nie zwracać sobie głowy:)

Napomnę tylko że GUID  i IRC są tylko do odczytu !!

I pamiętajcie ….

W LGT8F88A ustawienia zegara ustawiamy w kodzie programu przy pomocy rejestru PMCR !!!!

Płytka ITEADUINO LITE ma ustawiony zegar na 16MHz  !

Miłej zabawy …

Podziel się na:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay