ATtiny13A, kalibreringsvärde för 4.8MHz-oscillatorn?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
SM7WVZ
Inlägg: 9
Blev medlem: 4 mars 2013, 19:56:38

ATtiny13A, kalibreringsvärde för 4.8MHz-oscillatorn?

Inlägg av SM7WVZ »

Hej,

någon som är duktig på AVR:er kanske kan hjälpa till med detta för ATtiny13A:
Enligt databladet görs fabrikskalibrering av både 9.6MHz- och 4.8MHz-internoscillatorn. 9.6MHz-kalibreringsvärdet laddas automatiskt vid uppstart. Kalibreringsvärdet för 4.8MHz ska finnas sparat i minnet och enl. databladet ska programmet kunna läsa in detta värde också. Dock förstår jag inte hur detta kan göras och om det verkligen kan göras i programmet eller bara genom att läsa ut med en programmerare (för att isåfall sedan läggas in i koden manuellt). Har googlat runt lite men inte hittat något exempel på detta. Någon som vet?
sodjan
EF Sponsor
Inlägg: 43250
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: ATtiny13A, kalibreringsvärde för 4.8MHz-oscillatorn?

Inlägg av sodjan »

> enl. databladet

Länk?
Sidnummer?
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: ATtiny13A, kalibreringsvärde för 4.8MHz-oscillatorn?

Inlägg av snigelen »

Men det är ju bara en intern oscillator på 9.6MHz som kan delas med två när du väljer 4.8MHz, så det relativa felet är lika stort med ett givet kalibreringsvärde oavsett om du använder den höga eller den låga frekvensen, så det är ju inte så stor poäng med två värden. Men visst, frekvensen på oscillatorn kan väl ändras lite av andra anledningar när du delar den med två.

De inbrända kalibreringsvärdena kan bara läsas med en extern programmerare (9.6MHz värdet laddas ju i OSCCAL vid reset, så det kan du läsa från ditt program). Men den är ju bara kalibrerad för +/- 10% vid 25 °C, du kan ju lika gärna kalibrera den själv till högre noggrannhet. Generera en periodisk signal och ratta på OSCCAL-registret tills signalens frekvens är nära den frekvens det borde vara så skall du kunna komma inom +/- 2% (vid den temperatur du har vid kalibreringen).

Har du krav på noggranheten så använd en kristall i stället (men då vill du kanske använda något med fler ben än på en tiny13A). Den är ju betydligt noggrannare och inte lika temperaturkänslig som RC-oscillatorn.

Edit: Tiny13A har inte stöd för extern kristall, bara extern klock-signal. Jag skulle ha använt en annan AVR.
SM7WVZ
Inlägg: 9
Blev medlem: 4 mars 2013, 19:56:38

Re: ATtiny13A, kalibreringsvärde för 4.8MHz-oscillatorn?

Inlägg av SM7WVZ »

Tack för responsen.

Datablad finns här:
http://www.atmel.com/Images/doc8126.pdf

Sektion 17.3 skriver:
There is a separate calibration byte for the internal oscillator in 4.8 MHz mode of operation but
this data is not loaded automatically. The hardware always loads the 9.6 MHz calibration data
during reset. To use separate calibration data for the oscillator in 4.8 MHz mode the OSCCAL
register must be updated by firmware. The calibration data for 4.8 MHz operation is located in
the high byte at address 0x01 of the signature area.


Vilket jag tolkar som om att man vid programkörning kan läsa ut kalibreringsvärdet för 4.8MHz och ladda i OSCCAL. Har egentligen inga jättekrav på frekvensstabilitet i applikationen, men om det finns ett kalibreringsvärde tillgängligt kan man ju lika gärna använda det om det nu går att göra på ett enkelt vis...

Har letat efter detta värdet när jag programmerat och läst data från kretsen genom AVR Studio, men lyckas inte hitta kalibreringsvärdet då heller.
Användarvisningsbild
bachler
EF Sponsor
Inlägg: 189
Blev medlem: 23 december 2003, 13:58:24
Skype: alexander.bachler.jansson
Ort: Sala
Kontakt:

Re: ATtiny13A, kalibreringsvärde för 4.8MHz-oscillatorn?

Inlägg av bachler »

I AVR Studio 4 så finns det funktion för att läsa ut kalibreringsvärdet ur signaturbyten och skriva det till valfri adress i antingen flash- eller eeprom minnet. (Bild)
Tanken är, som jag tolkar det, och som jag har gjort själv, att man skriver värdet i tex. första byten av eeprom. och precis i början av sitt program så läser man ur eeprom och laddar OSCCAL med det värdet.
OSCCAL.png
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
SM7WVZ
Inlägg: 9
Blev medlem: 4 mars 2013, 19:56:38

Re: ATtiny13A, kalibreringsvärde för 4.8MHz-oscillatorn?

Inlägg av SM7WVZ »

Tack; har letat lite efter detta tidigare, dock finns inte i fliken "Advanced" i programmeringsfönstret i AVR Studio 6 ... möjligen har den flyttat någon annanstans (har inte lusläst manualen än); verkar märkligt att Atmel skulle ta bort den helt.

Hur som helst hade det smidigaste ju varit om programmet själv kunde börja med att läsa ut denna byte och lägga i OSCCAL. Det är så jag tolkar databladet, men jag kan ha fel.
sodjan
EF Sponsor
Inlägg: 43250
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: ATtiny13A, kalibreringsvärde för 4.8MHz-oscillatorn?

Inlägg av sodjan »

Det är ju fullständigt värdelöst och oanvändbart om man *måste*
göra det från AVR Studio! Självklart måste det gå att göra "at runtime"
direkt från koden om det ska ha någon praktiskt funktion. Hur gör
man annars om man har 100 eller 1000 kretsar? Ska man göra detta
manuellt i AVR Studio för varje krets?

Men databladet ger faktiskt sken av att det enbart går att läsa från
"signature bytes" under "serial and high-voltage programming mode".
Alltså inte under runtime direkt från koden! Sen så kan man ju undra
(och databladet förklarar det inte) varför man behöver ett separat
calibration byte för 4.8 MHz om det bara är en delning av 9.6 MHz...
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: ATtiny13A, kalibreringsvärde för 4.8MHz-oscillatorn?

Inlägg av snigelen »

Jo, det märkliga är ju som sagt att det finns två kalibreringsvärden när det bara är en oscillator som eventuellt delas med två. Det har jag inte sett på någon annan (icke antik) AVR. De säger ju själva att anledningen till att bara 9.6MHz-värdet laddas vid reset är (6.2.2)
There are separate calibration bytes for 4.8 and 9.6 MHz operation but only one is automatically loaded during reset (see section “Calibration Bytes” on page 105). This is because the only difference between 4.8 MHz and 9.6 MHz mode is an internal clock divider.
Det kan hända att det är en kvarleva från gamla tider då det fanns flera RC oscillatorer.

Men även om man vill använda värdet så är det ju inga problem att i programmeringsprocessen (den skall väl ändå programmeras) läsa ut värdet och lägga det på lämpligt ställe i FLASH eller EEPROM. Naturligtvis måste inte detta göras från AVR/Atmel-studio, man kan ju göra ett script som gör alltihop (sätta fuses, programmera FLASH, programmera EEPROM, sätta lock-bits samt läsa/skriva kalibreringsvärdet).

För alla andra (icke antika) AVR'er är det som sagt inga problem då de bara har ett värde som laddas automatiskt vid reset.
(XMega har förvisso två RC-oscillatorer med separata kalibreringsvärden men de laddas automatiskt till respektive kalibrerings-register vid reset. Men man kan även läsa dem från programmet om man vill).
SM7WVZ
Inlägg: 9
Blev medlem: 4 mars 2013, 19:56:38

Re: ATtiny13A, kalibreringsvärde för 4.8MHz-oscillatorn?

Inlägg av SM7WVZ »

Tycker liksom Sodjan att det verkar lite meningslöst om man nu bara kan läsa ut med en programmerare. Jag tänkte mig något i stil med hur man gör för t.ex. PIC12F629 där programkoden oftast börjar med att kalibreringsvärdet hämtas och läggs i OSCCAL. För ATtiny13A skulle man då skriva över kalibreringsvärdet för 9.6MHz (som hämtas automatiskt) med värdet för 4.8MHz. Verkar märkligt att Atmel lägger tid på att kalibrera 4.8MHz-oscillatorn och sparar värdet (samt skriver om det i databladet) om man inte ska använda det till något...

Jag lyckas inte heller läsa ut värdet i AVR Studio 6; fliken "Advanced" existerar inte. Använder AVRISP mkII/AVR Dragon, fast val av programmerare ska väl kvitta för detta? Någon som vet hur detta görs?

I övrigt tycker jag att Microchip verkar ha bättre ordning på sina internoscillatorer än Atmel. Även efter fabrikskalibrering slår AVR:erna ofta på +/-10% enligt databladet... när jag mätte på en ATtiny13A med 4.8MHz vald som oscillator låg jag mer fel än 10% och därför hade det varit intressant att använda kalibreringsvärdet som ska finns för att iallafall hamna lite mer rätt. Men låt oss inte dra igång ytterligare en PIC- vs. AVR-debatt här. :)
sodjan
EF Sponsor
Inlägg: 43250
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: ATtiny13A, kalibreringsvärde för 4.8MHz-oscillatorn?

Inlägg av sodjan »

> Verkar märkligt att Atmel lägger tid på att kalibrera 4.8MHz-oscillatorn...

Men om nu 4.8 MHz bara är en delning av 9.6 MHz med 2, så är det ju
frågan om man alls kan tala om en "4.8MHz-oscillator" över huvudtaget.

När det gäller precisionen så är den nog ungefär lika "dålig" på de äldre
PIC modeller som har ett separat kallibreringsvärde, om man inte "laddar"
värdet som man ska. Nyare modeller (även AVR antar jag) har en INTOSC
som är kallibrerad direkt från fabrik utan ett separat värde som ska laddas.
Sannolikt inte någon anledning till debatt/krig i det fallet... :-)
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: ATtiny13A, kalibreringsvärde för 4.8MHz-oscillatorn?

Inlägg av snigelen »

Jo det är samma för alla AVR'er som släppts de senaste 10 åren, ett fabriksvärde som förvisso skall laddas, men det sker automatiskt. Tiny13 är väl ett unikt övergångsfall med sina 10 år på nacken.

Angående att läsa värdet med programmerare så vet jag inte riktigt med Studio6 (jag använder normalt inte Windows), men det verkar inte vara implementerat. Med avrdude kan man i alla fall läsa kalibreringsvärden. Kan hända att det går med kommandoradsprogrammet atprogram.exe som medföljer i studio6, men jag har inte provat det.
Skriv svar