Jadi sebelum ini saya hanya bekerja dengan Atmel MCU 8 bit sederhana dan saya menyadari pada skema papan pengembangan saya hanya memiliki kristal 12Mhz, namun MCU beroperasi hingga 100MHz. (Saya pikir defaultnya adalah 80MHz. Saya hanya membuatnya lebih tinggi sekali untuk bersenang-senang. Ini hanya garis sederhana dalam kode.)
Bagaimana cara melakukannya? Mengapa Atmega328, misalnya, berjalan pada kecepatan kristal yang digunakan?
Jawaban:
Ini tidak ada hubungannya dengan inti menjadi prosesor ARM; ini tentang bagaimana sirkuit clocking bekerja:
Dalam banyak sistem seperti mikrokontroler, chip RF, chip audio, ... Anda perlu menghasilkan jam yang lebih cepat yang merupakan kelipatan tepat dari beberapa jam referensi (misalnya, kristal eksternal).
Anda melakukannya dengan memiliki osilator yang dikendalikan tegangan (VCO) yang dapat Anda sesuaikan frekuensinya dengan menambah atau mengurangi tegangan kontrol.
Sekarang, dengan hanya mengatur voltase kontrol apa saja, Anda dapat membuatnya berosilasi pada frekuensi yang kira-kira ada di "ballpark" kanan, tetapi tidak pada kelipatan frekuensi input yang tepat. Terutama, VCO bisa sedikit melayang, sehingga frekuensi juga akan terus-menerus "berkeliaran" di semua tempat. Anda perlu mengontrol osilator itu dengan membandingkannya dengan osilator referensi.
Cara untuk melakukannya adalah dengan menggunakan Phase-Locked Loop . Idenya sederhana:
Di atas adalah loop kontrol, dikunci ke fase - maka namanya.
Untuk mikrokontroler "kaya", yang memiliki banyak periferal dan karenanya mendapat manfaat dari memiliki beberapa jam secara internal, biasanya memiliki setidaknya 1 PLL. ATMega328 agak aneh dalam hal ini: Ini adalah mikrokontroler yang relatif haus daya, relatif kaya perangkat yang masih belum memiliki PLL.
sumber
Beberapa perangkat memiliki PLL di dalamnya yang dapat melipatgandakan frekuensi kristal ke frekuensi yang lebih tinggi. ATMega328 tidak memiliki PLL, ia menggunakan kristal secara langsung.
sumber