Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięKalibracja oscylatora - co to takiego?
Moderatorzy:Jacek Bogusz, procesorowiec, Łukasz Krysiewicz, Moderatorzy
Sprawa jak w temacie, na razie spotkałem się z tym przy programowaniu procesorów PIC i za bardzo nie wiem jak do tego tematu podejść. Programowanie przy użyciu ICprog nie udaje się mi bo pyta o kalibrację oscylatora jak to ugryźć - może ktoś wie to bardzo proszę o odpowiedź na ten temat.
pzdr
pzdr
Kalibracja oscylatora w procesorach PIC dotyczy wewnętrznego generatora. Polega na załadowaniu do rejestru OSCAL wartości kalibracji. Wartość zapisujemy np. w ostatnim bajcie pamięci programu i na początku programu piszemy tekścik:
bsf STATUS,RP0 ; bank 1
; Kalibracja oscylatora
call ROMEND
movwf OSCCAL
Z doświadczenia wiem, że wartość kalibracji zapisana w kupionym procku jest prawidłowa i nie warto jej zmieniać podczas programowania. (Zastosować wartość domyślną). Jednak, jeśli używasz wewnętrznego generatora, powyższy kod należy dołączyć do programu.
bsf STATUS,RP0 ; bank 1
; Kalibracja oscylatora
call ROMEND
movwf OSCCAL
Z doświadczenia wiem, że wartość kalibracji zapisana w kupionym procku jest prawidłowa i nie warto jej zmieniać podczas programowania. (Zastosować wartość domyślną). Jednak, jeśli używasz wewnętrznego generatora, powyższy kod należy dołączyć do programu.
-
- -
- Posty:651
- Rejestracja:13 sty 2005, o 18:38
- Lokalizacja:Krasnystaw
- Kontaktowanie:
Generalnie chodzi o to, że częstotliwośc pracy oscylatora zależy od wartości pewnego rejestru A (nie pamiętam nazw bo dawno zajmowałem się PICami). Jednak ze względu na rozrzuty parametrów w różnych egzemplarzach kostek żądaną częstotliwość uzyskujemy dla różnych wartości rejestru A. Dlatego producent dla każdego egzemplarza dokonuje przed wypuszczeniem na rynek pomiaru i ustala, że żądaną częstotliwość pracy uzyskuje się dla pewnej wartości rejestru A równej x. Wartość x wpisywana jest w pewne miejsce pamięci nieulotnej B dostepne programowo. Można ją na początku programu odczytać z B i wpisać do A.
Należy też pamiętać, że oscylator uzyskuje żądaną częstotliwość dla A=x w określonej temperaturze (zwykle 25C). Zmiany temp. zmienią częstotliwość.
W AVR-ach jest o tyle gorzej, że B nie jest dostępne programowo i podczas programowania mikrokontrolera (programatorem) wartość zapisaną w B należy wpisać w pewne wybrane przez siebie miejsce w pamięci Flash lub EEPROM danych i stamtąd odczytywać.
Należy też pamiętać, że oscylator uzyskuje żądaną częstotliwość dla A=x w określonej temperaturze (zwykle 25C). Zmiany temp. zmienią częstotliwość.
W AVR-ach jest o tyle gorzej, że B nie jest dostępne programowo i podczas programowania mikrokontrolera (programatorem) wartość zapisaną w B należy wpisać w pewne wybrane przez siebie miejsce w pamięci Flash lub EEPROM danych i stamtąd odczytywać.
To nie jest kwestia tylko wpisania "jakiejś" wartości. Ją trzeba najpierw zmierzyć a potem można ją wpisać tak jak powiedziałeś. Ale bez sensu jest umieszczanie jej w programie skoro ją należy najpiewr zmiezrzyć, najlepiej po każdym resecie procka.Generalnie chodzi o to, że częstotliwośc pracy oscylatora zależy od wartości pewnego rejestru A (nie pamiętam nazw bo dawno zajmowałem się PICami). Jednak ze względu na rozrzuty parametrów w różnych egzemplarzach kostek żądaną częstotliwość uzyskujemy dla różnych wartości rejestru A. Dlatego producent dla każdego egzemplarza dokonuje przed wypuszczeniem na rynek pomiaru i ustala, że żądaną częstotliwość pracy uzyskuje się dla pewnej wartości rejestru A równej x. Wartość x wpisywana jest w pewne miejsce pamięci nieulotnej B dostepne programowo. Można ją na początku programu odczytać z B i wpisać do A.
Należy też pamiętać, że oscylator uzyskuje żądaną częstotliwość dla A=x w określonej temperaturze (zwykle 25C). Zmiany temp. zmienią częstotliwość.
W AVR-ach jest o tyle gorzej, że B nie jest dostępne programowo i podczas programowania mikrokontrolera (programatorem) wartość zapisaną w B należy wpisać w pewne wybrane przez siebie miejsce w pamięci Flash lub EEPROM danych i stamtąd odczytywać.
-
- -
- Posty:651
- Rejestracja:13 sty 2005, o 18:38
- Lokalizacja:Krasnystaw
- Kontaktowanie:
Co to znaczy "jakiejś wartości"? Gdzie ja to napisałem?To nie jest kwestia tylko wpisania "jakiejś" wartości. Ją trzeba najpierw zmierzyć a potem można ją wpisać tak jak powiedziałeś. Ale bez sensu jest umieszczanie jej w programie skoro ją należy najpiewr zmiezrzyć, najlepiej po każdym resecie procka.
Coś Ci się pomyliło kolego. Jest dokładnie tak jak napisałem. Producent dokonuje pomiaru w typowych warunkach i wartość rejesrtu A odpowiadającą tej częstotliwości w tych warunkch (czyli x) zapisuje w tym lub innym miejscu zależnie od mikrokontrolera (producenta).
-
- -
- Posty:651
- Rejestracja:13 sty 2005, o 18:38
- Lokalizacja:Krasnystaw
- Kontaktowanie:
Mylisz się. Kalibracja jest po to aby zniwelować rozrzuty parametrów. Zależność częstotliwości pracy gen. RC od warunków (zwłaszcza temperatury) jest nieunikniona i nawet zmierzenie tuz po resecie niewiele da - warunki moga się zmieniać w trakcie pracy. Generator RC jest przewidziany do średnio wymagających zastosowań. Do bardziej wymagających się nie nadaje i tam stosuje się kwarce.Producent zmierzył to w warunkach X a twój procek pracuje w warunkach Y. Dlatego twierdzę że kalibracja jest poto aby skalibrować a nie poto żeby uruchomić wewnętrzny generator na parametrach domniemanych (przypuszczalnych).
Mylisz rejestr A (ten od którego zależy częstotliwośc pracy) z wartością x która jest ustalona w procesie produkcyjnym na pdst. pomiarów (tzw. bajt kalibracyjny - calibration byte). Czy naprawdę uważasz, że inżynierowie z Microchipa i Atmela zaszywaliby w pamięci nieulotnej wartośc ustaloną x gdyby to było bez sensu??
Oczywiście można zastosować bardziej elastyczne metody ustalania wartości A, ale zysk będzie w sumie nieznaczny. Jak pisze Atmel - zastosowanie "firmowego" bajta kalibracyjnego pozwala osiągnąć dokł. ok. 3%, zaś dodatkowe zabiegi - 1%. Gra nie jest warta świeczki.
Osobiście bawiłem się z kalibracją na ATtiny2313 i wystarczyło że zmieniłem podział zegara przez zminę ustawienia fuza a częstotliwość wcale nie była osiem razy mniejsza jak wynikało z tego dzielnika i generator wymagał innej wartości bajtu kalibracyjnego.
Jak do tego ma się ta optymalizacja na jednym bajcie ?
Jak do tego ma się ta optymalizacja na jednym bajcie ?
-
- -
- Posty:651
- Rejestracja:13 sty 2005, o 18:38
- Lokalizacja:Krasnystaw
- Kontaktowanie:
Wydawało mi się że rozmawiamy o kalibracji generatora wewnętrznego w procesorach jednoukładowych. Nie wiem jak to dokładnie wygląda w PIC-ach dlatego omawiałem to zagadnienie na podstawie znanych mi AVR-ow. Oczywiście kalibracja może być mniej lub bardziej dokładna. Ja miałem na myśli tą dokładniejszą wzorowaną na generatorze kwarcowym zewnętrznym. Z tąd te moje wywody na temat samej kalibracji.
Kalibracja jest zabiegiem normującym pracę mikroprocesora -dane podaje producent -i o ile dobrze pamiętam -należy je wcześniej odczytac z wnętrza uP -przed-programowaniem sim programem. Jeśli tego sie nie zrobi -nie odczyta sie
tych danych wcześniej -to mikroprocesor nie będzie pracował stabilnie /może nawet nie da się zaprogramować/
Autorem mogącym dać odpowiedż jest Pan PIETRASZKIEWICZ./zajmuje się tym/
Możliwe ,że fabryczny programator sam odczytuje dane i potem wstawia przy programowaniu /na fabrycznym programatorze/.....
tych danych wcześniej -to mikroprocesor nie będzie pracował stabilnie /może nawet nie da się zaprogramować/
Autorem mogącym dać odpowiedż jest Pan PIETRASZKIEWICZ./zajmuje się tym/
Możliwe ,że fabryczny programator sam odczytuje dane i potem wstawia przy programowaniu /na fabrycznym programatorze/.....
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości