Woodoo varázslat: a chip felkeltése (órajel generálás)

A mikrokontroller alapú rendszerek mindig valamilyen órajelről járnak. Legyen ez akár a chipen kívül (pl. kvarc) vagy akár chipen belül előállított. Néha azonban szükségünk van önálló négyszögjelet előállító áramkörre. Jól jön ez akkor, ha az AVR chip órajelénél elkevertük az External Quartz/Resonator és az External Clock fogalmát. A programozás után így chip tetszhalott állapotba kerül.

Azt, hogy melyik biztosítékbit - mire való, az az AVR tippek-trükkök ingyenes minitanfolyamban kerül bemutatásra. (→ http://tavir.hu/tanfolyam-trukkok)

Ha ezt a leckesorozatot még nem olvastuk és az órajelet elállítottuk, akkor nosza, adjunk neki külső órajelet!

Fontos! A programozás sebessége a chip órajelének negyedét nem haladhatja meg!

Kész áramkör

A legegyszerűbb megoldás valamilyen kész megoldást használni. Ezek az ún. oszcillátorkockák.

A beslő felépítésük egy kvarc, és még néhány kapuáramkör. A adatlapjukból ezt mutatja a blokkdiagram is:

A kimenetén (amiből általában kettő is van) a négyszögjel jelenik meg. A kocka tápfeszültsége 3...5V, így egyszerűen illeszthető a mikrokontrollerhez:

A biztosítekbitek közé belépve, a chip feltámad tetszhalott állapotából.

Kapuáramkör

Ha nincs kéznél oszcillátorkocka, akkor kapuáramkörből viszonylag egyszerű összeépíteni:

Ez a kapcsolás a kvarcnak megfelelő, leválasztott órajelet adja ki. A chipnek megfelelő tápfeszültséget adva, a rezgés azonnal beindul...

Fontos! Ha az órajelgenerátort 5V tápfeszültségről használjuk, akkor teljesen mindegy, hogy CMOS vagy TTL chipekből építhezünk. Azonban a chip tápfeszültsége és a céláramkör tápfeszültsége azonos legyen! Ha nincs épp kvarc kéznél, egyszerű RC-tagokból álló órajelgenerátort is építhetünk.

Az AVR érzéketlen a külső órajel frekvenciájára, ez 1..16(20)MHz közt bármi lehet. Fontos! A 74... sorozatú chipek 5V tápfeszültséget igényelnek és 3.3V-ról nem működnek! Ekkor vagy CMOS chipből (pl. 40xx) vagy kisfeszültségű TTL chipből rakhatjuk össze az áramkört. Vagy az 5V-os kimenetből ellenállásosztóval 3.3V jelet készítünk.

555 chip

A klasszikus kapcsolás alkalmazásával az 555 chip is lehet órajelforrás. A sokféle bekötés közül a közel 50% kitöltésű négyszögjelet előállító megoldást választjuk:

A rezgés frekvenciáját az adatlapjából puskázhatjuk ki (Texas adatlap). Pl.: R1>1kOhm, R2>3kohm, C1=10nF, c2=100nF. Fontos! Az eszközzel 100kHz feletti frekvencia nem állítható elő stabilan!

A kimenetet egyszerűen a tetszhalott AVR XTAL2 bemenetre kössük. Szerencsére az AVR chip nem érzékeny arra, hogy az órajel nem 50% kitöltési tényezővel tendelkezik.

És ha semmi nincs kéznél? Csak egy AVR chip?

AVR

Ekkor is van megoldás! Sőt!

A mikrokontroller kimenete magas és alacsony szintekre is állítható - ami az XTAL bemenethez ideális. Azaz készítsünk egy LED villogtatót, ami 1..20 MHz közt villog!

Arduino alatt a blink alapprogram azonnal készen is van erre a célra:

void setup() {                
  pinMode(13, OUTPUT);     
}

void loop() {
  digitalWrite(13, HIGH);
  //delay(1000);
  digitalWrite(13, LOW);
  //delay(1000);
}

A villogás sebessége kb. 150 kHz. Így a programozás sebessége maximum 150 kHz/4 = 37 kHz lehet!

Sőt, az órajelkimenet Bascom-AVR alatt is megoldható:

$regfile = "m328pdef.dat"
$crystal = 16000000
Config Portb = Output
Do
   Portb = 0
   Waitus 1
   Portb = 255
   Waitus 1
Loop

Megosztott órajel

Ha az AVR chipünk kvarc/rezonátorról jár, akkor annak órajelét is felhasználhatjuk. Fontos, hogy csak rövid kábellel szabad ezt megtenni, mert a rezgőkört ezzel terheljük, sőt a rezgést le is állíthatjuk! A bekötés:

A rezgések védelmére egy logikai kapun keresztül kell(ene) a járulékos órajelet elvinni. Utólag beépíteni azonban ilyet elég macerás. Szerencsére a chipek egy részében van ilyen készen! Ez az amit az adatlapok ClkOut kivezetésnek hívnak. Ezt egyszerűen a biztosítékbiteknél kapcsoljuk be.

Tipp: Ha a chip a belső RC tagról jár, akkor az az órajel kerül kikapuzásra!

Fontos tippek

  • A chip feszültsége és a külső órajel feszültségszintje illeszkedjen egymáshoz. Ha a tetszhalott IC 3.3V-os, akkor az órajelgenerátor is 3.3V-os legyen - értelemszerűen az 5V chipet 5V-os órajelgenerátorról hajtsuk meg.
  • Ha a chipben a biztosítékbiteknél a DivCLK8 be van kapcsolva, akkor nyolcadolódik az órajel! Így a programozósebességet is alacsonyabb értékre vissza kell venni. És ha tetszhalott a chip - akkor, ha ezt feltételezzük - biztosabban éleszthetjük fel.
  • A külső (kényszer) órajelet a chip XTAL1 kivezetésére kell kötni.
  • Az élesztendő chipen a külső kvarc/rezonátor és a két kondenzátor eltávolítása nem szükséges (kivéve, ha közvetlenül egy kvarcról vesszük le az élesztő-jelet).

A végső megoldás ...

Chipélesztésre utolsó lehetőség a soros vagy párhuzamos nagyfeszültségű programozó. De ez már csak a következő cikkben lesz elérhető...

TavIR-Facebook