Dapatkah mikrokontroler dijalankan pada frekuensi clock rendah yang sewenang-wenang?

103

Datasheet untuk ATTiny13A, misalnya, mencantumkan frekuensi Min 0 MHz. Apakah ini berarti jam dapat dijalankan pada frekuensi rendah yang sewenang-wenang tanpa efek buruk? Saya menganggap itu menarik arus yang lebih rendah pada kecepatan clock yang lebih rendah? Apakah 0 MHz berarti Anda dapat menghentikan jam sepenuhnya, dan selama daya masih diterapkan, ia akan mengingat statusnya tanpa batas?

endolit
sumber
34
Saya ingin menambahkan, ini pertanyaan yang sangat bagus. Sebagian besar EE senior tidak meluangkan waktu untuk benar-benar membaca dan memikirkan lembar data, yang merupakan pelengkap bagi Anda atau penghinaan terhadap mereka, saya ingin menyiratkan keduanya.
Kortuk
Saya tidak sepenuhnya yakin bahwa osilator RC internal dimatikan kecuali jika Anda secara khusus menginstruksikannya (melalui berbagai opsi penghematan daya). Tidak yakin untuk apa digunakan, tetapi setidaknya untuk EEPROM dan mungkin ADC.
jippie
1
@ Jippie apa yang Anda katakan RC internal? ATMegaX misalnya, memiliki RC internal untuk jam sistem (biasanya 8Mhz, dengan prescaler div 8 opsional), ia memiliki osilator pengawas. Jam sistem dipilih sekering dan mungkin mati saat menggunakan jam eksternal. Yang lain seperti yang Anda katakan mungkin dinonaktifkan oleh mode hemat daya, tapi saya ragu akan berhenti oleh jam sistem.
Diego C Nascimento

Jawaban:

73

Iya. Jika lembar data mengatakan "operasi sepenuhnya statis", maka Anda dapat mencatatnya dengan kecepatan apa pun, bahkan 0 Hz. Chip "dinamis" perlu memiliki jam pada tingkat tertentu atau chip kehilangan statusnya.

todbot
sumber
1
apakah Anda memiliki contoh mikro yang memungkinkan ini?
MrEvil
4
Mikrokontroler yang berisi flash on-chip dapat menentukan kecepatan jam flash minimum (dan maksimum) saat menulis ke flash. Namun, saat membaca dari flash, ini tidak berlaku.
Steve Melnikoff
8
MrEvil, seri Atmel AVR ATtiny yang disebutkan dalam pertanyaan sepenuhnya statis, karena saya pikir sebagian besar semua chip Atmel AVR. Dan saya pikir sebagian besar mikrokontroler PIC Microchip.
todbot
7
Sebenarnya, saya pikir ADC dalam ATTiny13A tidak berfungsi pada frekuensi rendah, mungkin karena sampel-dan-terus kapasitor membusuk? "Secara default, sirkuit aproksimasi berturut-turut membutuhkan frekuensi clock input antara 50 kHz dan 200 kHz untuk mendapatkan resolusi maksimum. ... Modul ADC berisi prescaler, yang menghasilkan frekuensi clock ADC yang dapat diterima dari frekuensi CPU di atas 100 kHz."
endolith
8
endolith - Saya setuju, ADC biasanya tidak berfungsi pada frekuensi rendah. Sejauh yang saya tahu, semua hal lain tentang praktis semua mikrokontroler modern terus bekerja dengan baik hingga "0 Hz", alias "jeda tanpa batas". Secara khusus, banyak mikrokontroler memiliki mode "daya rendah" yang menghentikan semua jam, sampai sesuatu - biasanya seseorang menekan tombol - membangunkannya dan melanjutkan kembali tepat di tempat ia tinggalkan. en.wikipedia.org/wiki/Static_logic_(digital_logic)
davidcary
23

Saya memposting jawaban lain, hanya karena pertanyaan terakhir yang belum Anda jawab sebelumnya.

Todbot sepenuhnya benar. Ini juga akan menarik daya lebih rendah pada kecepatan rendah. Ini juga berarti jika Anda menyuplai jam dari prosesor lain, misalnya, Anda bisa berhenti memasoknya di titik mana pun dan kemudian mulai memasangnya nanti, selama Anda tidak pergi lebih cepat dari kecepatan maks, Anda akan baik-baik saja.

Keripik saya telah mendapatkan urutan perubahan besar antara 32768Hz osilator dan yang 1MHz. Saya sudah memiliki aplikasi di mana saya tidak perlu kecepatan, saya hanya perlu orang kecil lain melakukan beberapa penanganan data dasar untuk saya.

Semoga ini membantu.

Kortuk
sumber
9
Saya selalu ingin menjalankan garis waktu mikrokontroler dengan tombol. Biarkan manusia menjadi jam. :) Pada catatan serius, hal yang sangat menyenangkan tentang desain statis ini adalah konsumsi daya mereka linier dengan kecepatan clock: memperlambat jam dan menggunakan lebih sedikit daya. Ini bisa sangat berguna.
todbot
5
Ya, tapi saya suka mencatat, konsumsi daya adalah fungsi linier dengan offset, bahkan tanpa jam mereka masih mengkonsumsi daya, terutama dengan output yang didorong. Kami baru saja mendapat pekerja magang di tempat kerja saya, saya akan menyarankan agar kami menggunakan tombol dan lihat apa yang terjadi.
Kortuk
13
@todbot Ide bagus. :-) Tapi pastikan untuk mendobrak tombol.
starblue
4
Coba dengan "grind crank" (seperti dalam Jargon yang berarti: jargon.net/jargonfile/g/grindcrank.html ) :-)) (dan ya, bertahun-tahun yang lalu saya membangun satu untuk melangkah melalui kode ketika saya menggunakan Turbo Pascal di sekolah :-)
Axeman
@todbot Ini tidak terlalu mengada-ada atau sulit, jika Anda dapat menerima abstraksi kasar. Ada beberapa contoh orang yang menggunakan gadget semacam itu untuk mengajarkan cara kerja komputer. Myke Predko memiliki buku yang sangat bagus, dan bahkan dilengkapi dengan PCB (walaupun tidak untuk proyek komputer): amazon.com/Digital-Electronics-Guidebook-Michael-Predko/dp/…
Lou
17

Kebanyakan desain mikrokontroler modern akan bekerja dengan pola apa pun pada input jam mereka, asalkan hanya tidak ada pulsa tinggi di bawah panjang minimum tertentu, tidak ada pulsa rendah di bawah panjang minimum tertentu, dan tidak ada rendah-tinggi-rendah atau tinggi-rendah-tinggi pasangan pulsa di bawah panjang tertentu. Pada dasarnya apa yang terjadi adalah bahwa setelah chip melakukan semua tindakan yang terkait dengan clock edge tertentu, chip akan berada dalam keadaan di mana chip tidak melakukan apa-apa selain menunggu edge clock berikutnya. Jika ujung jam berikutnya tidak tiba selama sepuluh hari kemudian (kecuali chip memiliki pengawas eksternal) chip akan berada dalam keadaan yang sama seperti jika tepi telah tiba saat chip siap untuk itu.

Perhatikan bahwa secara umum, menghentikan jam pada mikrokontroler akan mengurangi konsumsi saat ini secara substansial, tetapi tidak sebanyak menggunakan fitur "tidur". Sebagian besar konsumsi mikrokontroler saat ini dalam mode "lari" dapat diperkirakan dengan cukup baik sebagai arus diam yang konstan ditambah sejumlah arus per siklus per detik (yang mungkin lebih 'alami' dinyatakan sebagai muatan per siklus). Sebagai contoh, sebuah chip mungkin memiliki arus diam 10uA, ditambah arus 0,1mA / MHz (100pC / cycle). Menjalankan chip sebesar 10MHz akan menghasilkan arus sebesar 1,01mA. Menjalankannya pada 1MHz akan menghasilkan 0,11mA. Menjalankannya pada 100KHz akan menghasilkan 0,02mA. Menjalankannya pada 1Hz akan menghasilkan 0,0100001mA. Di sisi lain, chip mungkin menawarkan arus tidur 1uA. Umumnya, memasuki mode tidur akan sepenuhnya mematikan area chip yang tidak akan melakukan hal yang berguna saat chip sedang tidur, sehingga menghindari kebocoran arus yang mungkin dimiliki area tersebut. Dalam beberapa kasus hal ini juga akan mengurangi tegangan ke area seperti mendaftarkan file ke tingkat di mana file register dapat menyimpan konten mereka, tetapi tidak mengaksesnya dengan sangat cepat (karena mereka tidak akan diakses sama sekali, kecepatan akses tidak masalah) .

Beberapa mikroprosesor, mikrokontroler, dan perangkat lain yang lebih lama memiliki waktu clock-high dan / atau clock-low maksimum. Prosesor semacam itu memanfaatkan logika dinamis untuk menghemat sirkuit. Sebagai contoh dari logika dinamis, pertimbangkan register geser: bit register statis tipikal memerlukan sirkuit dua-transistor untuk menahan nilainya, sementara bit register dinamis menyimpan nilai pada gerbang transistor pembacaan. Register pergeseran dinamis dua fase clock dapat direalisasikan dalam NMOS menggunakan empat NFET dan dua resistor per bit. Register geser statis akan membutuhkan delapan NFET dan empat resistor per bit. Pendekatan logika dinamis tidak begitu umum saat ini. Kembali pada tahun 1970-an, kapasitansi gerbang sangat besar dan tidak ada cara untuk menghilangkannya. Karena itu tidak ada alasan khusus untuk tidak memanfaatkannya. Hari ini, gerbang kapasitansi umumnya jauh lebih rendah, dan pembuat chip secara aktif berusaha untuk mengurangi lebih jauh. Membuat logika dinamis bekerja dengan andal seringkali perlu dengan sengaja bekerja untuk meningkatkan kapasitansi gerbang. Dalam kebanyakan kasus, area chip tambahan yang diperlukan untuk meningkatkan kapasitansi dapat digunakan secara efektif untuk menambah lebih banyak transistor sehingga membuat kapasitansi tidak diperlukan.

supercat
sumber
Anda menyebutkan NMOS dan IIRC ada hubungan antara popularitas logika dinamis dan MOS komplementer (CMOS) belum tersedia.
jpc
@ jpc: Saya telah memeriksa skema berbagai chip NMOS - beberapa di antaranya sangat detail, termasuk Atari 2600 TIA yang merupakan karya genius sejati - orang masih menemukan hal-hal baru untuk dilakukan dengannya tiga dekade kemudian. Saya pikir salah satu keuntungan dari NMOS dibandingkan CMOS dari sudut pandang desain-kenyamanan adalah bahwa 'shoot-through' (aktivasi simultan drive sisi tinggi dan rendah secara bersamaan) adalah non-faktor, meskipun saya akan mengakui beberapa keingintahuan mengapa CMOS tidak bekerja pada tegangan yang cukup rendah sehingga titik penyeberangan pada input akan membuat driver sisi tinggi dan rendah mati, daripada mengaktifkan keduanya.
supercat
@ jpc: Dalam NMOS, dimungkinkan untuk menerapkan gerbang XOR dengan dua transistor dan dua resistor, jika inputnya cukup "kuat". Bahkan jika seseorang harus menambahkan inverter ke kedua input, gerbang empat-transistor xor empat-resistor akan lebih baik daripada banyak pendekatan lainnya. Namun, saya belum pernah melihat pendekatan yang digunakan, meskipun saya mendesain sirkuit serupa menggunakan BJT sekitar tahun 1978 (konsep desain akan bekerja lebih baik dengan MOSFET, tetapi saya tidak tahu apa-apa tentang mereka).
supercat
2
+1 - Saya merasa seperti permata asli yang Anda sebutkan di sini adalah bahwa kecepatan clock yang lebih rendah menghemat daya, tetapi tidak sebanyak mode tidur yang dirancang khusus untuk mengoptimalkan penghematan daya. Naluri saya memberi tahu saya bahwa Anda akan menghemat lebih banyak daya dengan menjalankan osilator cepat yang dikombinasikan dengan penggunaan mode tidur yang bijaksana, alih-alih berlari pada frekuensi yang sangat rendah terus-menerus.
Joel B
@ JoelB: Itu tergantung pada banyak faktor. Pada banyak prosesor, ada penundaan antara menyalakan jam cepat dan benar-benar dapat menggunakannya; selama ini, seseorang akan membuang-buang tenaga. Jika seseorang harus bangun misalnya 100x / detik, mungkin lebih baik berjalan perlahan terus menerus daripada terus-menerus mulai dan berhenti. Di sisi lain, jika seseorang akan memulai dan menghentikan jam cepat, mungkin baik untuk meminimalkan jumlah waktu yang berjalan sejauh yang dapat dilakukan tanpa membuang energi tambahan. Misalnya ...
supercat
12

Ya, Anda dapat menghentikan jam sepenuhnya dan menyalakannya kembali di lain waktu tanpa konsekuensi. Anda bahkan dapat mengganti jam dengan tombol dan pergi melalui program Anda secara harfiah langkah demi langkah (frekuensi: sekitar 0,1 Hz).

Daya hampir linier dengan frekuensi: pada 10 MHz mikrokontroler akan mengkonsumsi daya 10 kali lebih banyak pada 1 MHz. Ini tidak berarti bahwa pada 0 Hz konsumsi sama sekali nol. Selalu ada disipasi statis, tetapi itu sangat rendah, biasanya 1 uA atau kurang.

PS: perhatikan bahwa ADC memang memiliki frekuensi operasi minimum. Jika frekuensinya terlalu rendah kapasitor di mana tegangan diukur akan mengeluarkan terlalu banyak dan pengukuran Anda akan salah.

flup
sumber
Tekan tombol? Bagaimana dengan debouncing?
Peter Mortensen
1
Diperlukan debouncing.
Vovanium