ATtiny13

Možné problémy a jejich řešení

Na této stránce budu průběžně doplňovat řešení problémů, které se mohou vyskytnout při programování ATtiny.
Pokud na nějaký problém narazíte a podaří se vám ho odstranit, prosím podělte se o řešení s ostatními. Stačí, když mi problém a řešení popíšete v e-mailu a já to zde vystavím.

 krupa[zavináč]centrum.cz


1)  Problém s kompilací delay()

Pokud při překladu začne kompilátor hlásit tato varování:

Stačí v souboru "...Arduino/hardware/arduino/avr/cores/core13/wirig_private.h" 
   nahradit na řádce 31 původní text <avr/delay.h>  textem <util/delay.h>

 


2) Problém s nepřesným časováním

ATtiny má z výroby v jednom registru trvale vypálenou konstantu, pomocí které se dolaďuje frekvence vnitřního oscilátoru.
Tato hodnota se dá pouze přečíst, ale není možné jí měnit. Výrobce zaručuje, že pomocí této konstanty má oscilátor nastavenu přesnost +/- 10%.

Pokud by tato přesnost byla nedostatečná, stačí na začátek programu přidat tuto řádku:

OSCCAL = nová konstanta;

Tato nová konstanta se ale musí doladit zkusmo.

Když jsem například potřeboval přesný 10Hz generátor, použil jsem následující kód pro ATtiny13.

Při nastavení OSCCAL=150 byla frekvence 7,23Hz.
Při nastavení OSCCAL=193 byla frekvence 9,96Hz.
Při nastavení OSCCAL=194 byla frekvence 10,06Hz.

// generator 10Hz na pinu PB0 a jeho inverze na PB1
void setup()
  { 
    OSCCAL = 193;        // kalibrace vnitrniho oscilatoru
    DDRB  = 0b00000011;  // nastaveni smeru signalu na portu B ("1" = vystup ; "0" = vstup)
    PORTB = 0b00000010;  // PB0 do LOW ; PB1 do HIGH
  }

void loop()
  {
    PORTB = 0b00000001;  // PB0 do HIGH; PB1 do LOW
    delay(50);           // pauza 0.05s
    PORTB = 0b00000010;  // PB0 do LOW; PB1 do HIGH
    delay(50);           // pauza 0.05s
  }
 

 

 

 

 


 

 

 

 

 

 

 

 

 


úvodní strana webu AstroMiK.org

poslední úprava stránky 1.5.2016