ATMega8 / Конфигурация FUSE битов
Документация
FUSE-биты предназначены для настройки аппаратной конфигурации микроконтроллера. FUSE-биты задаются в настройках программы, при помощи которой осуществляется загрузка прошивки в микроконтроллер. В atmega8 запрограммированный FUSE-бит читается как лог.0
FUSE-бит | Назначение | Значение по умолчанию |
RSTDISBL | Определяет является 6-ой вывод порта “С” выводом для приёма сигнала сброса (RESET pin) или обычным I/O выводом | 1 (незапрограммировано, 6-ой выход порта C – RESET pin) |
WDTON | Сторожевой таймер всегда включён и не может быть отключён программно | 1 (незапрограммировано, сторожевой таймер включается в регистре WDTCR) |
SPIEN | Разрешает внутрисхемное программирование микроконтроллера по интерфейсу SPI | 0 (программирование по SPI разрешено) |
CKOPT | ||
EESAVE | Защищает EEPROM от стирания при перепрошивке/стирании памяти программ | 1 (незапрограммировано, EEPROM не защищена) |
BOOTSZ1 | ||
BOOTSZ0 | ||
BOOTRST | ||
BODLEVEL | ||
BODEN | включает встроенный детектор недопустимого уровня питающего напряжения | 1 (отключено) |
SUT1 | ||
SUT0 | ||
CKSEL3 | ||
CKSEL2 | ||
CKSEL1 | ||
CKSEL0 |
Если у вас есть какие-то замечания по этому документу или что-то осталось непонятно, то вы можете оставить свой отзыв или вопрос
Анонимная отправка сообщений запрещена! Пожалуйста зарегистрируйтесь
Примеры установок фьюзов (FUSE) для микроконтроллеров AVR ATmega – Информация по МК, FAQ – Микроконтроллеры – Каталог статей
Продолжение статьи, начало по скринам ATtiny .
Во всех картинках фьюзы как по даташиту:
– снятая галочка– fuse bit = 0, фьюз запрограммирован / активный;
– установленная галочка– fuse bit = 1, фьюз НЕ запрограммирован / НЕ активный.
Для UniProf – ставить как на картинках
Для PonyProg, CVAVR, AVR Studio – ставить инверсно, т.е. наоборот.
Фьюзы ATmega8 заводские настройки внутренний RC генератор на 1.0МГц
Фьюзы ATmega8 внутренний RC генератор на 2.0МГц
Фьюзы ATmega8 внутренний RC генератор на 8.0МГц
Фьюзы ATmega8 внешний генератор на 1.0-16.0МГц
Фьюзы ATmega48/88/168 заводские настройки внутренний RC генератор на 1.0МГц
Фьюзы ATmega48/88/168 внутренний RC генератор на 8.0МГц
Фьюзы ATmega48/88/168 внутренний RC генератор на 128кГц
Фьюзы ATmega48/88/168 внешний генератор на 0.4_25.0МГц
Удачных вам проектов и поменьше залоченных микроконтроллеров!
Atmega8 fuse bits
This is most important thing and setting fuse bits incorrectly may render microcontroller useless. Let us see which different fuse bits are available for different AVRs and their uses. We will use PonyProg for configuring fuse bits. There are different clock sources available for AVR.
Mostly we need either internal RC oscillator or external crystal hence we will only concentrate on that. Once you understand the process u can configure for other options with the help of datasheet. It is calibrated for 1,2,4 or 8 MHz. Frequency of oscillator gets affected by VCC and temperature.
If you are not performing any time critical operations in your system, then this is best option to go with. This table can be found in corresponding AVRs datasheet. CKOPT fuse should always be unprogrammed while using this option. Crystal oscillator should be used when u need accurate frequency of operation. CKSEL3,2,1 fuses should be configured as follows for crystal oscillator. Refer datasheet for more info. How can I recognise that?
Thanks for sharing. These bits have to be programmed manually. Can you tell me what the output voltage of the OC2 pin is?
Can i use a opamp? OC2 frequency will be 40 Khz. So you can connect ultrasonic TX to the uC directly. For proper operation and increased range you will have to give complementary signals to each pin of TX. You generate such complementary square wave signals using CTC mode of the timers. Your email address will not be published. Save my name, email, and website in this browser for the next time I comment.
Notify me of follow-up comments by email. Notify me of new posts by email. This site uses Akismet to reduce spam. Learn how your comment data is processed. Skip to content. Introdcution to AVR 2. GPIO ports 3.This project introduces ATmegaP fuse bits and shows how to set them to use an external 16 MHz crystal oscillator. This article will explain what these operations are in the ATmegaP, and how to set them in general. A schematic diagram, a complete parts list, and construction details are contained in a previous article.
As you can see, the entire Extended Fuse Byte deals with the Brownout detection level. In the case of the ATmegaP, one of three different voltages nominally 1.
Perhaps the most important thing to notice from the table is that programming a fuse bit consists of setting it low, i.
For example, notice that each bit is unprogrammed when it is set to a logic high, i. This somewhat unusual method applies to all bits in all fuse bytes in the ATmegaP. Bits are used to set the boot size for the ATmegaP; boot size refers to the amount of memory reserved for the installation of a “Boot Loader” similar in function to the bootloader used in the Arduino line of development boards. The purposes of the remaining bits in the Fuse High Byte are made reasonably clear by the table entries.
However, the general process for programming all fuse bits is similar. This Fuse Low Byte selects the clock source for the ATmegaP, and controls some of the details of the clock operation. Table from the datasheet is reproduced below. Don’t forget that programming a fuse bit consists of setting it low, i. You should now have an understanding that the Fuse Low Byte is pre-programmed to which, in hexadecimal notation, is 0x62and what that means for the operation of the microcontroller.
If any part of that isn’t clear, don’t be surprised; it’s a complicated subject. Perhaps you also remember that the UNO has an external oscillator circuit consisting of a 16MHz crystal and two small ceramic capacitors often about 22pF each. Can you determine its default operating speed when it’s shipped from the factory? You know that the ATmegaP default clock is an internal RC oscillator, but do you recall its speed?
The answer is in Note 2 of Table 8MHz. Thus, the default operating speed of the ATmegaP is But suppose that your project called for a clock speed for the ATmegaP of 16MHz; would you know how to accomplish that? As usual, there’s both hardware and software involved. In order to run an ATmegaP at 16MHz, you would need to add an external crystal oscillator to the circuit shown at the very beginning of this article. Only three new parts are required: a 16MHz crystal Jameco and two 22pF ceramic capacitors Jameco The resulting schematic diagram is reproduced immediately below, and a photo of the breadboarded circuit is just below the schematic.
Don’t change the clock source to an external crystal unless you actually have the crystal installed. If you do, there will be no clock for the ATmegaP, and therefore no way to reprogram it. Table indicates that for operation from 8. Read on.I mostly work with mega microcontrollers atmega8, atmega16, atmega, atmega, atmegap but the information in this article applies to all the other AVR microcontrollers.
To set the fusebits you can use the same tool you use to write the. Here things get a bit more complicated. On one hand you need the software that works with USBAsp, but on the other hand you need to correctly compute the fusebit values that will be programmed in your AVR.
For the first I use Winavr.
If working with a command prompt line tool seems complicated to you, consider using alternatives such as Extreme burner. For computing the fusebits, there are quite a few online webpages that help you achieve the goal in easy steps: here or here. Any of these two will do.
Accessing one of these pages, you must select the AVR you need to program the fusebits forthen several tables with apparently complicated settings show up: To help you get going, here are a few details you should know: Clock selection This controls how the chip is clocked.
Wrong clock settings can make your AVR unusable. You should know that this clock varies with temperature and the power supply voltage. The KHz clock is for very low power applications where the low speed helps conserve power. External Crystal option is used when you need a special clock rate, like 8MHz or 12MHz or a high precision clock that will not vary with temperature or power supply voltage fluctuations.
In this case you need to connect an external crystal or oscillator. The Startup Time is a short delay, used to pause the clock for the given time, the very first time the power is applied.
Clock Output available for some AVRs only produces a square wave of the same frequency of the clock input internal, external, crystal, etc on a given pin D2, B0, etc. Clock Divide available for some AVRs onlycauses the chip to divide the clock rate by 8. By default, this is turned on. Reset Disableturns the Reset pin into a normal pin instead of a special pin as it is set by default.
Be careful about this option, and never set it on, unless you really need the one extra pin. Brown-out Detect fuses set the voltage threshold for the Brownout protection circuitry on. If the voltage decreases below 4. To keep it under control, set the brownout voltage to 4. If the voltage goes below this threshold, the chip will turn off until the voltage returns. It will then reset and start over. If the chip is meant to run at 5V, set the brown-out to 4. If the chip can run as low as 3.
How to set the AVR Fusebits
You can read more in the datasheet. By default, this option is disabled. Be careful about disabling this fuse, as without a high voltage programmer, your AVR might become unusable. Extreme burner As you can see the lfuse and hfuse numbers are the same 0xE1 and 0xD9.
To save on article length, and increase readability, I will only show the AVRdude settings, while you can easily insert those numbers in Extreme Burner for the same results. The fusebit doctor, designed by manekinenis a device for repairing dead ATmega and ATtiny family AVRs by writing the default, correct fusebits.
So easy. As all project resources have been kindly provided by the author, I built my own board to repair some of my faulty chips. So simple. PCB, Schematics and firmware available here or here. You must be logged in to post a comment. Leave a Reply Cancel reply You must be logged in to post a comment.By using our site, you acknowledge that you have read and understand our Cookie PolicyPrivacy Policyand our Terms of Service.
Electrical Engineering Stack Exchange is a question and answer site for electronics and electrical engineering professionals, students, and enthusiasts.
It only takes a minute to sign up. I’m trying to protect whole flash from reading through ISP. It has bootloader, able to self program application section.
So there is no way to let user update firmware by custom bootloader and protect flash from reading at the same time? You didn’t specify a chip, the following is mostly geared to the 8 bit atmega devices, but it’s general information. Read the ‘Memory Programming’ section for you specific chip’s datasheet for more specific information!
The level of protection is divided in three modes, where mode 1 offers no protection and mode 3 offers maximum protection. It is possible to move to a higher mode of protection simply by reprogramming the Lock bits.
The AVR allows changing “high” bits to “low”, but not the other way around. It is not possible to change a “low” Lock bit to a “high”, thus lowering the level of protection is not possible. To clear the Lock bits, a complete Chip Erase is required, which erase the Flash memory. These 2 lock bits alone LB1 and LB2 when low will prevent Probably more than It would almost always be easier to reverse engineer your code. However when none of the Lock bits are programmed, there are no memory lock features enabled!!!
For some extra information, the Lock bits and Fuses are not located in the normal flash or EEPROM space, nor are they accessible from the software, except for Lock bits related to the Boot Loader in devices with the Self-Programming feature. Table 2 in this app note will help you identify what you can do for your particular device! Atmel’s AVR line are not high security devices unless explicitly noted! Like all non-secure devices and sadly even some secure ones, they are prone to common attacks!
I will put HV programming interface header onboard. I don’t think you should include the HV programmer in your board design unless absolutely needed and you know for sure it won’t cause problems with anything.
HV programmer’s 12 volt signals, are available only as a safety measure to program locked error locked, mostly chips. In theory this is only meant to program the device not read anything. And I have never heard of an exploit that would allow reading. For upgrading bootloader occasionally I will put HV programming interface header onboard.Part of programming stand-alone ATmega chips is setting the fuse bytes, these are special settings that can be used to change how the ATmega chips operate.
There are many articles online but I could not find a single source that brought all the information together and fully explain what the fuses actually do. It is important to remember that some of the fuse bits can be used to lock certain aspects of the chip and can potentially brick it make it unusable.
However, with a bit of care it is fairly straight forward to understand and use the fuse settings. Disclaimer, I am relatively new to programming fuses and these are notes I wrote to help me remember things. There is also a forth byte that is used to program the lock bits. Lock bits are not covered by this article. Each byte is 8 bits and each bit is a separate setting or flag.
When programming the fuses you can use binary notation or more commonly hexadecimal notation. For 8 bits 1 byte we can use B or 0xFF. Both are the same value. The low byte fuse deals with the clock source, how fast the chip will run, and how long it waits at startup.
The ATmega chips can be run at different speeds or frequencies and the frequency is determined by the clock source that is used. Arduinos normally use an external 16MHz crystal. A common mistake is to have the crystal correctly connected in the circuit but forget to tell the chip to use it.
Arduinos normally use a low power crystal oscillator. The external clock option allows the chip to use an external square wave clock signal. This is used when you have a circuit with its own clock that you want to sync the ATmega with or if you want to use a separate clock chip.
Crystals and oscillators require sufficient voltage to operate correctly. When you start the ATmega chip it can take a brief period of time for the voltage to get to its maximum value.AVR lock bits and fuses are one of the topics that may cause some confusion. If you missed something or set one bit wrong, it may lead to failure — bricking whole AVR chip. So it is important to understand once and do things right. Even though datasheets give enough information about AVR fuses, many times, we feel somewhat unsure before executing write command.
Let us go through main features of AVR fuses and lock bits so next time we would feel safe and get expected results. This is one of the main confusions while programming fuse and lock bits. We are used to thinking that setting value means writing 1, right?
So with AVR fuses, this is opposite, and we have to deal with this. Fuse and lock bits are located on separate nonvolatile memory area. If we look at Atmegap microcontroller, it has four bytes that need to be written to configure MCU properly. One of those bytes contains lock-bits while other three fuse-bits. Each of them holds a set of bits that sets initial MCU preferences like clock cycles, bootloader selection, etc. First of all, let us see lock byte. Depending on AVR type there can be a different number of lock bits.
How to Change Fuse Bits of AVR Atmega328p – 8bit Microcontroller Using Arduino
But two least bits are always present. LB1 and LB2 bits are used to lock memory. You probably know that product developers practically always secure their microcontrollers to protect their intellectual property. So no one could read and duplicate.
So unless you want to protect your firmware from copying you can lock the memory contents, otherwise, leave lock bits as is.
What interests us most are fuse bits. You need to deal with them want you this or not. The location of specific fuze bits differs among all three fuse bytes depending on AVR chip used.
So be sure to write them down before setting them. As an example we take Atmegap microcontroller and here are all three fuse bytes for it:. They are used to select clocking options. This is logically the safest option to start.
AVR Fuse Bits Explained
But as you know, AVRs can be clocked in more different ways:.I guess many of you were confused when programming AVR fuse bits. Most of them understands wrongly that programmed fuse bit in configuration should be left unchecked and opposite.
First thing you do before programming chip is set configuration bits Atmega8 in picture :. The first attention should be paid to clock sources. As you may already know, Atmega8 can have 4 different clock sources:. As you may noticed, for most of them there are ranges of settings left. For example External Crystal or Resonator. These ranges are left for user to select microcontroller startup times to stabilize oscillator performance before first instruction.
This bit selects two different modes of oscillator amplifier. This is handy when environment is noisy or you use XTAL2 to drive another microcontroller or buffer. But in other hand this takes more power. These settings are necessary to ensure stability of ceramic resonators and crystals.
Note 2. Most used with ceramic resonators to ensure stable startup. This is OK to use with crystals as well, but device is not operating at maximum frequency. Low frequency crystal is typical clock crystal where frequency is kHz. Calibrated internal RC oscillator is pretty often used, because there is no need any external components and it can provide fixed 1, 2, 4 and 8 MHz clock.
This mode is selected by programming fuse bits in range to People make mistake checking them and thinking that they are enabling external crystal resonator and then they are wondering why it is not working. You may find all this information in datasheets. But like always — people forget to read them.
Please explain to me about setting ATMega16 internal oscillator fuse bit. I found a problem with my Mega16, i try to the ADC in Mega16 using 12 MHz Crystal i do nothing on fuse bit and that works no problemthat means my M16 works not dead. But when i test the m16 serial usart connect to my comm port pc i observe the data from M16 usart with hyper terminalthat is not works, i try using cystal 12 Mhz, 4 MHz, 8 Mhz and also change the baud rate from,and that is still remain NOT WROKS, why.??
ADC works with this too, just sampling freq is lower. I have read about fuse bits in the datasheet for the ATMega8, and have read this article as well, but I use avrdude on Linux and I am still confused. And how am I going to set the bits using a 12 MHz crystal? The sheet I have been reading only specifies up to 8MHz? I would suggest reading this forum post. If I remove the capacitors and the crystal it works O. Is my crystal blown?
AVR Ассемблер. Урок 22. Fuse и Lock биты.Atmega8 fuse по умолчанию. Микроконтроллеры avr: fuse-биты. Fuse- и Lock-биты
В прошлых статьях я советовал тебе не лезть к этим битам. И на это были свои основания, так как неправильно выставив эти биты ты можешь наглухо заблокировать контроллер для дальнейшей перепрошивки или вообще какого либо использования.
Но без знания этой особенности контроллера далеко не уедешь. Так что распишу все по порядку. У разных версий контроллеров число FUSES разное, какие то могут отсутствовать, но основные есть всегда. Вот по ним и пройдемся.
Конфигурационные биты находятся в особой области памяти и могут быть изменены только с помощью программатора при записи контроллера. Есть старший байт и младший байт. Младший байт обычно отвечает за частоту, а старший за всякие фенечки.
Итак, главное:
В Atmel AVR принята следующая нотация: сброшенный в ноль fuse bit считается активным, т.е. включенным.
Пример Бит RSTDSBL, как можно догадаться из названия, это RESET DISABLE. Включил эту опцию и у тебя нога RESET превращается в порт ввода-вывода, но за это ты теряешь возможность перешить контроллер через ISP.
Так вот, чтобы выключить RESET (и получить большое западло с прошивкой в обмен на мелкую подачку в виде дополнительной ножки) в этот бит надо записать 0.
С одной стороны нелогично и криво. Как бы во всем мире принята нотация, что ноль это выключено, а тут, понимаешь, наоборот. С другой стороны, это их контроллер, что хотят то и делают. Один раз запомнить и все. Да и вообще, в электронике часто за сигнал берут ноль.
Однако контроллеры делают электронщики, а прошивающие программы — программисты. Как бы логично. И вот эти программисты взяли и заварили адскую путаницу с галочками. Нет бы им раз и навсегда принять за стандарт, что галочка это 1, а не ВКЛЮЧЕНО (что, напомню, является нулем). И поэтому в одних прошивающих программах галочка означает, что опция включена (в FUSE бит записывается 0),в других, обычно написанных электронщиками, галочка означает единицу. Т.е. с точностью до наоборот.
А что будет если перепутать? А будет ОЧЕНЬ плохо. Контроллер войдет в неправильный режим и может заблокируется наглухо. Т.е. раз прошил и все. Приехал.
Нет, спасти его можно, но для этого тебе потребуются дополнительные ухищрения в виде высоковольтного программатора, JTAG адаптера или генератора тактов. Все зависит от того в какой режим ты загонишь контроллер своими неправильными настройками.
Новичку, обычно, бывает проще сходить и купить новый МК, чем оживить заблокированный. Но не спеши отправлять его в помойку. Пометь и отложи на будущее, разберешься оживишь.
Конфигурация тактового сигнала
По умолчанию все контроллеры AVR (кроме старых серий AT90S2313, AT90S8535 итд) сконфигурированы так, чтобы работать от внутреннего источника тактов. Т.е. стоить подать на них питание и они начинают работать. Ничего больше и не нужно.
За источник тактов отвечают биты CKSEL
Выставив их правильным образом можно выбрать частоту работы контроллера, а также источник тактового сигнала.
- CKSEL3…0 = 0000 — Внешний источник сигнала.
Т.е. на вход XTAL1 подаются прямоугольные импульсы. Такое иногда делают в синхронных системах, когда несколько контроллеров работают от одного генератора.
Техническое отступление
В этот режим часто попадают, когда пытаются выставить контроллер на работу от внешнего кварца (CKSEL=1111), но либо путают нотацию, либо из-за прикола с обратной нотацией битов во всяких извратских прошивающих программах. Раз и кристалл заблокировался. Но, на самом деле, наглухо, с помощью CKSEL, заблокировать кристалл нельзя. Обычно все решается напайкой кварца и запуском от этого кварца. Худшее же что может случиться — потребуется внешний генератор тактов. Который бы оживил кристалл. Делается он за пять минут из любой микросхемы ТТЛ логики, например из К155ЛА3 — схем в инете навалом. Или на таймере 555, либо можно взять второй МК и на нем написать простую программку, дрыгающую ножкой. А если есть осциллограф, то с него можно поиметь сигнал контрольного генератора — его клемма должна быть на любом осциле. Землю осцила на землю контроллера, а выход генератора на XTAL1.Но что делать если зуд нестерпимый, контроллер залочен, а никакой микросхемы для реанимации под рукой нету? Тут иногда прокатывает метод пальца. Прикол в том, что на тело человека наводится весьма нефиговая наводка частотой примерно 50Гц. Всякий кто хватался за щупы осциллографа руками помнит какие шняги тут же возникают на экране — вот это оно! А почему бы эту наводку не заюзать как тактовый сигнал? Так что припаиваешь к выводу XTAL1 провод, хватаешься за него рукой, и жмешь на чтение или запись контроллера:) Предупреждаю сразу, метод работает через жопу, далеко не с первого раза, читает долго и порой с ошибками, но на перезапись FUSE битов в нужную сторону должно хватить. Пару раз у меня такой фокус получался.
CKSEL3…0 = 0100 – 8 MHz от внутреннего генератора(обычно по умолчанию стоят такие)
Для большинства AVR такая конфигурация CKSEL означает тактовку от внутреннего генератора на 8Мгц, но тут могут быть варианты. Так что в этом случае втыкай внимательно в даташит. В табличку Internal Calibrated RC Oscillator Operating Modes
Иногда нужно иметь внешний тактовый генератор, например, чтобы его можно было подстраивать без вмешательства в прошивку. Для этого можно подключить RC цепочку, как показано на схеме и подсчитать частоту по формуле f = 1/3RC , где f будет частотой в герцах, а R и С соответственно сопротивлением резистора и емкостью конденсатора, в омах и фарадах.
- CKSEL3…0 = 0101 – для частот ниже 0.9 MHz
- CKSEL3…0 = 0110 – от 0.9 до 3 MHz
- CKSEL3…0 = 0111 – от 3 до 8 MHz
- CKSEL3…0 = 1000 – от 8 до 12 MHz
Данная табличка справедлива только для ATmega16 у других МК может отличаться. Уточняй в даташите!
Проблема у внутреннего генератора и внешних RC цепочек обычно в нестабильности частоты, а значит если сделать на ней часы, то они будут врать, не сильно, но будут. Поэтому иногда полезно запустить контроллер на кварце, кроме того, только на кварце можно выдать максимум частоты, а значит и производительности проца.
- CKSEL3…0 = 1001 — низкочастотный «часовой» кварц.
На несколько десятков килогерц.
Используется в низкоскоростных устройствах, особенно когда требуется точная работа и низкое потребление энергии.
Для обычных кварцев ситуация несколько иная. Тут максимальная частота кварца зависит также и от бита CKOPT когда CKOPT = 1 то:
- CKSEL3…0 = 1010 или 1011 — от 0,4 до 0.9 MHz
- CKSEL3…0 = 1100 или 1101 — от 0,9 до 3 MHz
- CKSEL3…0 = 1110 или 1111 – от 3 до 8 MHz (либо от 1 до 16Мгц при CKOPT=0)
А если CKOPT равен 0 то при тех же значения CКSEL можно поставить кварц от 1 до 16MHz.
Разумеется, кварц на 16MHz можно поставить только на Мегу без индекса ”L”. (Хотя, как показывает практика, Lку тоже можно неслабо разогнать. У меня ATMega8535L заработала на 16Мгц, но были странные эффекты в работе. Поэтому я не стал так извращаться и разгон снял). Опять же, все выше сказанное в точности соответствует только Меге 16, у других может незначительно отличаться.
Бит CKOPT задает размах тактового сигнала. Т.е. амплитуду колебаний на выходе с кварца. Когда CKOPT = 1 то размах маленький, за счет этого достигается меньшее энергопотребление, но снижается устройчивость к помехам, особенно на высоких скоростях (а предельной, судя по таблице выше, вообще достичь нельзя. Точнее запуститься то он может запустится, но вот надежность никто не гарантирует). А вот если CKOPT активизировать, записать в него 0, то размах сигнала сразу же станет от 0 до питания. Что увеличит энергопотребление, но повысит стойкость к помехам, а значит и предельную скорость. При оверклокинге МК тем более надо устанавливать CKOPT в 0.
Также стоит упомянуть бит SCKDIV8 которого нет в Atmega16, но который часто встречается в других контроллерах AVR. Это делитель тактовой частоты. Когда он установлен, т.е. в нуле, то частота выставленная в битах CКSEL0…3 делится на 8, на чем в свое время прилично застрял Длинный, долго пытаясь понять чего это у него западло не работает. Вся прелесть в том, что этот делитель можно отключить программно, записав в регистр CLKPR нужный коэффициент деления, например один. Весь прикол в том, что SCKDIV8 активен по дефолту! Так что внимательней!
Биты SUT задают скорость старта МК после снятия RESET или подачи питания. Величина там меняется от 4ms до 65ms. Мне, за всю практику, пока не довелось эту опцию использовать — незачем. Так что ставлю на максимум 65ms — надежней будет.
Бит RSTDISBL способен превратить линию Reset в одну из ножек порта, что порой очень нужно когда на какой-нибудь крошечной Tiny не хватает ножек на все задачи, но надо помнить, что если отрубить Reset то автоматически отваливается возможность прошивать контроллер по пяти проводкам. И для перешивки потребуется высоковольтный параллельный программатор, который стоит несколько тысяч и на коленке сделать его проблематично, хотя и возможно.
Второй заподлянский бит это SPIEN если его поставить в 1, то у тебя тоже мгновенно отваливается возможность прошивать по простому пути и опять будет нужен параллельный программатор. Впрочем, успокаивает то, что сбросить его через SPI невозможно, по крайней мере в новых AVR (в старых, в AT90S*** было можно)
WDTON отвечает за Собачий таймер, он же Watch Dog. Этот таймер перезагружает процессор если его периодически не сбрасывать – профилактика зависаний. Если WDTON поставить в 0, то собаку нельзя будет выключить вообще.
BODLEVEL и BODEN — это режим контроля за напряжением. Дело в том, что при определенном пороге напряжения, ниже критического уровня, контроллер может начать сильно глючить. Самопроизвольно может запортачить, например, EEPROM или еще что откосить. Ну, а ты как думал, не покорми тебя с пару недель — тоже глючить начнешь:)
Так вот, для решения этой проблемы есть у AVR встроенный супервизор питания. Он следит, чтобы напруга была не ниже адекватного уровня. И если напруги не хватает, то просто прижимает RESET и не дает контроллеру стартовать. Вот эти два фуза и рулят этой фичей. BODEN включает, а BODLEVEL позволяет выбрать критический уровень, один из двух. Какие? Не буду раскрывать, посмотри в даташите (раздел System Control and Reset).
JTAGEN — Включить JTAG. По умолчанию активна. Т.е. JTAG включен. Из-за этого у MEGA16 (а также 32 и прочих, где есть JTAG) нельзя использовать вывода порта C, отвечающие за JTAG. Но зато можно подключать JTAG отладчик и с его помощью лезть контроллеру в мозги.
EESAVE — Защита EEPROM от стирания. Если эту штуку включить, то при полном сбросе МК не будет стерта зона EEPROM. Полезно, например, если в EEPROM записываются какие-либо ценные данные по ходу работы.
BOOTRST — перенос стартового вектора в область бутлоадера. Если эта галочка включена, то МК стартует не с адреса 00000, а с адреса бутсектора и вначале выполняет бутлоадер. Подробней про это было написано в статье про прошивку через лоадер.
BOOTSZ0..1 — группа битов определяющая размер бут сектора. Подробней смотри в даташите. От контроллера к контроллеру они отличаются.
Lock Bits
Это, собственно, и к фузам то отношения не имеет. Это биты защиты. Установка этих битов запрещает чтение из кристалла. Либо флеша, либо ЕЕПРОМА, либо и того и другого сразу. Нужно, только если ты продаешь свои устройства. Чтобы злые конкуренты не слили прошивку и не заказали в китае более 9000 клонов твоего девайса, оставив тебя без штанов. Опасности не представляют. Если ты заблокируешь ими кристалл, то выполни полное стирание и нет проблемы.
Характерной особенностью установленных лок битов является считываемая прошивка — в ней байты идут по порядку. Т.е. 00,01, 02, 03, 04… FF, 00… Видел такую срань? Значит не судьба тебе спереть прошивку — защищена =)
Техника безопасности
И главное правило при работе с FUSE битами — ВНИМАНИЕ, ВНИМАНИЕ и ЕЩЕ РАЗ ВНИМАНИЕ! Не выставляйте никогда FUSE не сверившись с даташитом, даже если срисовываете их из проверенного источника.
Обязательно разберитесь что означает галочка в прошивающей программе. Ноль или единицу. Включено или выключено! Стандарта нет!!!
Если фуз биты задаются двумя числами — старший и младший биты, то выставляются они как в даташите. Где 0 это включено.
Второе, железное, правило работы с FUSE. Запомните это навсегда и не говорите, что я не учил.
ВНАЧАЛЕ ЧИТАЕМ ТЕ ЧТО ЕСТЬ, ПОТОМ ЗАПИСЫВАЕМ ТЕ КОТОРЫЕ НАДО НАМ
Чтение — модификация — запись. ТОЛЬКО так. Почему? Да просто часто бывает как — открыл вкладку FUSE, а программатор попался тупой и сам их не считал. Как результат — у тебя там везде пустые клеточки. Довольный, выставил только те, что тебе надо SKSEL, а потом нажал WRITE. Тут то и наступает, Обычно, кабздец. Т.к. в контроллер записываются не только те, что ты изменишь, а ввобще вся секция. С теми самыми пустыми клеточками. Представь какой трешняк там будет. То то же! А потом бегут жаловаться по комментам и форумам, мол я ничего такого не трогал — оно само. Ага, щаз!
Так что, еще раз — Чтение, Модификация, Запись!
Подсказка:
Как с одного взгляда определить какого типа (прямые или инверсные) fuse биты в незнакомой прошивающей проге?
Дедуктивный метод: Нажмите чтение Fuses и посмотрите на состояние бита SPIEN Этот бит всегда активен, а если он будет сброшен, то программатор контроллер даже определить не сможет. Если SPIEN в 1 — значит фьюзы инверсные, как в PonyProg. Если ноль — значит по нотации Atmel.
Опубліковано 16.07.2012
Фьюзы (Fuses) – это несколько специальных байт, которые можно прошить только , и отвечают они за разные настройки микроконтроллера. У разных микроконтроллеров фьюзы могут отличаться. Поэтому более подробную информацию смотрите в документации. Поскольку это делается в последнюю очередь, я приведу здесь краткое описание фьюзов и перечислю наиболее часто встречающиеся ошибки при работе с фюзами.
Хочу заметить, что установленным считается бит, который сброшен в 0. Для начинающих это часто вносит путаницу, при работе с разными программами для прошивки.
Так как не всегда ясно установленная напротив фьюза птичка это 1 или 0 (в смысле, установлен). Разработчики ПО имели ввиду, если стоит птичка, значит, бит считается установленным (т.е. =0).
Семейство ATtiny | Семейство ATmega | ||||||||||||
2313 | 25 / 45/ 85 | 13 | 26 | 261 / 461/ 861 | 8 | 16 | 48 / 88/ 168 | 128 | 169 | 329 | 8515 | 8535 | |
RESERVED | M103С | + | S8515С | S8535С | |||||||||
OCDEN | + | + | + | + | |||||||||
JTAGEN | + | + | + | + | |||||||||
SELFPRGEN | + | + | + | + | + | ||||||||
DWEN | + | + | + | + | + | + | |||||||
EESAVE | + | + | + | + | + | + | + | + | + | + | + | + | + |
SPIEN | + | + | + | + | + | + | + | + | + | + | + | + | + |
WDTON | + | + | + | + | + | + | + | + | + | + | + | ||
BODLEVEL2 | + | + | + | + | + | ||||||||
BODLEVEL1 | + | + | + | + | + | + | + | ||||||
BODLEVEL0 | + | + | + | BOD LEVEL | + | BOD LEVEL | BOD LEVEL | + | BOD LEVEL | + | + | BOD LEVEL | BOD LEVEL |
BODEN | + | + | + | + | + | + | |||||||
RSTDISBL | + | + | + | + | + | + | + | + | |||||
CKDIV8 | + | + | + | + | + | + | + | ||||||
CKOUT | + | + | + | + | + | + | |||||||
SUT1 | + | + | + | + | + | + | + | + | + | + | + | + | + |
SUT0 | + | + | + | + | + | + | + | + | + | + | + | + | + |
CKOPT | + | + | + | + | + | + | |||||||
CKSEL3 | + | + | + | + | + | + | + | + | + | + | + | + | |
CKSEL2 | + | + | + | + | + | + | + | + | + | + | + | + | |
CKSEL1 | + | + | + | + | + | + | + | + | + | + | + | + | + |
CKSEL0 | + | + | + | + | + | + | + | + | + | + | + | + | + |
PLLCK | + | ||||||||||||
BOOTRST | + | + | + | + | + | + | + | + | |||||
BOOTSZ1 | + | + | + | + | + | + | + | + | |||||
BOOTSZ0 | + | + | + | + | + | + | + | + |
В таблице fuse -биты популярных AVR . Слева названия fuse -битов по даташиту, в первых двух строках перечислены семейства и типы конкретных МК, а на пересечении строк и столбцов стоит знак плюс , если данный fuse -бит имеется в данном МК, или указано название , отличное от стандартного. Если какой-то бит отсутствует – в соответствующей клетке ничего нет.Назначение каждого фьюза AVR fuse бита:RESERVED – этот бит зарезервирован для каких-то неизвестных простым смертным целей фирмой Atmel . Ни при каких условиях не рекомендуется менять его состояние (т. е. надо оставлять его таким, как он установлен при изготовлении МК). В этой строке
встречаются биты с другими названиями, как правило, это биты включения режима совместимости с устаревшими типами МК, на смену которым выпущены новые. Обычно в конце названия такого fuse -бита имеется символ С – от COMPATIBLE (совместимый).
OCDEN – fuse разрешает работу схемы внутреннего отладчика (O n C hip D ebug EN able). Не оставляйте установленным этот бит в коммерческих продуктах! Иначе вашу программу можно будет считать из памяти МК.
JTAGEN – fuse бит разрешает работу интерфейса программирования-отладки JTAG . По сравнению с SPI -интерфейсом, JTAG обладает расширенными возможностями. Не рекомендуется без необходимости оставлять этот бит установленным, т. к. в этом случае потребляемый МК ток возрастает.
SELFPRGEN – бит, разрешающей программе МК производить запись в память программ, т. е. производить самопрограммирование.
DWEN – fuse бит, разрешающий работу DebugWire – это интерфейс отладки по одному проводу. Не рекомендуется оставлять его установленным в коммерческих изделиях.
EESAVE – fuse бит, после установки которого при стирании памяти МК содержимое EEPROM данных будет сохраняться нетронутым, т. е. не будет стерто.
SPIEN – fuse бит, разрешающий работу интерфейса внутрисхемного программирования МК по SPI . Этот бит может быть легко переустановлен при помощи параллельного программатора (или JTAG , если таковой разрешен и имеется в МК). Все МК выпускаются с установленным битом SPIEN , снять его по интерфейсу SPI невозможно .
WDTON – fuse бит, после установки которого сторожевой таймер WDT включается сразу после подачи питания и не может быть отключен программно. Если бит не установлен, то включением и отключением WDT можно управлять программно.
Группа fuse битов BODLEVEL . Может быть либо один такой бит, либо несколько, тогда они нумеруются, начиная с нуля. Значение этих fuse битов определяет порог срабатывания схемы BOD – детектора уровня питающего напряжения, при снижении напряжения питания ниже этого уровня произойдет “сброс” МК.
BODEN – fuse бит, включающий схему аппаратного детектора недопустимого уровня питающего напряжения, т.е. схему BOD .
RSTDISBL – fuse бит, отключающий сигнал внешнего сброса от вывода микроконтроллера и подключающий к нему схему порта ввода-вывода. Этот бит имеется только в тех МК, у которых вывод аппаратного сброса RESET совмещен с одинм из портов ввода-вывода. Ошибочная установка этого fuse бита может отключить RESET и вы не сможете больше прошивать по ISP. Не устанавливайте этот бит, если намерены продолжать работать с МК при помощи последовательных программаторов. “Оживить” МК с установленным RSTDISBL можно только параллельным программатором и не для всех МК.
CKDIV8 – fuse бит, включающий предварительное деление частоты кварцевого (или иного имеющегося) тактового генератора на 8. То есть при включенном этом бите и применении кварцевого резонатора на 8 МГц реальная тактовая частота МК составит1 МГц.
CKOUT – fuse бит, разрешающий вывод тактовой частоты на один из выводов МК (для тактирования других устройств).
SUT1 и SUT0 – fuse биты, управляющие режимом запуска тактовых генераторов МК. Связаны с нижеописываемыми битами, определяющими тип и частоту тактового генератора, причем связь весьма хитрая и запутанная. При ошибочной их установке возможны ситуации неустойчивого запуска генератора или неоднократного сброса МКв процессе подачи на него питания.
CKOPT – бит, определяющий режим работы встроенного генератора тактовой частоты для работы с кварцевыми резонаторами. Реально изменяет коэффициент усиления встроенного инвертора в схеме генератора и, следовательно, – выходное напряжение на ножке XTAL2 . Ошибочная установка может приводить к неустойчивому запуску кварцевого генератора, вплоть до возбуждения его не на той гармонике, что надо (из-за этого бита кварц запускался или только при питании МК напряжением не выше 3,6В, или только после прикосновения к выводу XTAL1 пинцетом )
Группа битов CKSEL0 …CKSEL3 – fuse биты, комбинация которых определяет тип и частоту работающего тактового генератора. Всего возможно до 16 комбинаций, однако не все определены для всех типов МК. Ошибочная установка комбинации этих битов может сделать МК «мертвым» – он не будет работать в схеме без подачи тактового сигнала на ножку XTAL1 .
PLLCK – fuse бит, разрешающий использование встроенного синтезатора частоты для тактированияядра МК.
BOOTRST – fuse бит, определяющий адрес, с которого будет начато исполнение программы после сброса – если бит установлен, то начало программы будет не с адреса 0000h (как обычно), а с адреса области загрузчика (Boot Loader ).
Группа fuse битов BOOTSZ – два fuse бита, определяющие размер области памяти программ, выделяемой для загрузчика (Boot Loader ). Комбинация этих битов, в частности, определяет точку начала исполнения программы после сброса, если установлен бит BOOTRST .
Наиболее частые ошибки при настройке фюзов:
1. Установка фюза RSTDISBL . Ошибочная установка этого fuse бита отключает RESET , и Вы не сможете больше прошивать по ISP . Для этого потребуется последовательный программатор или что-то .
2. Неправильная установка CKSEL0 , CKSEL1 , CKSEL2 , CKSEL3 . Эти фьюзы определяют источник тактирования микроконтроллера. Если Вы случайно выбрали не ту частоту внутреннего RC генератора, это не смертельно. Программирование через ISP будет возможным, и вы сможете исправить ситуацию. А если случайно установить тактирование от внешнего источника, RC цепочки или кварцевого резонатора, а у Вас таких в схеме нет, то программирование по ISP тоже станет невозможным. По сути, микроконтроллер будет ожидать тактирования от несуществующей схемы. Как выйти из этого положения? Очень просто – дать микроконтроллеру источник тактирования и исправить фьюзы. Чаще всего устанавливают CKSEL все нули – тактирование от внешнего генератора. В этом случае можно собрать схему, генерирующую меандр (частота особой роли не играет, главное, чтобы она лежала пределах возможности микроконтроллера) и подать на ногу XTAL1 . После чего микроконтроллер можно будет прошить через ISP . Первое, что надо сделать, – сбросить фьюзы к заводским настройкам. Если CKSEL все установлены в 1 – тактирование от внешнего кварца. Навесьте кварц после чего микроконтроллер снова будет доступен через ISP .
Что же такое FUSE биты? Слова вроде бы знакомые, но многие толком и не знают их предназначение, ставят галочки и прошивают, работает устройство да и ладно. Я вам хочу рассказать немного про эти FUSE биты.
FUSE биты (фьюзы ) – ну если по простому, то они настраивают определенные параметры микроконтроллеров, это некий инструмент для их тонкой настройки Фьюзы включают или настраивают такие параметры как:
– частота генератора, внешний или внутренний генератор
– запрет на чтение прошивки микроконтроллера
– включение или выключение таймеров
– деление частоты кварцевого генератора
– защита EEPROOM от стирания
…и так далее. У каждого микроконтроллера выставляются свои фьюзы, у разных микроконтроллеров разный список фьюзов, например в ATmega8 нет фьюза CKOUT, но он присутствует в ATtiny2313. В даташитах к микроконтроллерам все эти фьюзы расписаны.
Главное правило при работе с фьюзами – не торопиться их выставлять, если вы точно не уверены в правильности своих действий.
Теперь распишем названия некоторых фьюзов, их обозначения и то, на что они влияют. Вообще, есть фьюзы для защиты программы от копирования (лок-биты), фьюзы, устанавливающие определенные функции, а так же так называемые “старшие” и “младшие” байты. Самый популярный фьюз, который выставляется практически всегда, это:
CKSEL , таких фьюзов с разными буквами всего четыре, это группа CKSEL 0, CKSEL 1, CKSEL 2 и CKSEL 3 , определяют частоту тактового генератора, и его тип, тактовые импульсы необходимы для работы практически любого микроконтроллера. Во многих микроконтроллерах есть внутренний генератор, но мы можем подключить внешний и фьюзы выставить для работы от внешнего генератора. Внешний кварцевый резонатор подключается на выводы XTAL 1 и XTAL 2 , кроме того припаивается пара конденсаторов ~20пф одним концом на кварц, другим на минус. Если допустить ошибку при установке этих фьюзов, то микроконтроллер может “заблокироваться” для того чтобы восстановить контроллер, подают тактовый сигнал на ногу XTAL1, на данный момент придумано не мало схем для восстановления контроллеров, залоченных таким образом. Этот генератор можно сделать практически из любой логики или даже из таймера 555.
Есть простые схемы, с использованием 1 транзистора, пары резисторов и кварцевого резонатора, и более сложные, на микросхемах типа К155ЛА3. Данные способы 100% оживляют контроллеры с таким дефектом
Группа фьюзов SUT1 и SUT0 – fuse биты, управляющие режимом запуска тактовых генераторов МК, а так же задают скорость старта МК после подачи питания. Связаны с фьюзами CKSEL, а именно CKSEL0 .
CKOPT – бит, определяет работу встроенного генератора для работы с кварцевыми резонаторами, устанавливает “амплитуду” колебаний тактового сигнала на кварце. Данный бит программируется достаточно часто.
RSTDISBL – очень опасный фьюз, ошибочная установка может отключить вывод RESE T , после чего пропадет возможность программирования ISP программатором. Бит RSTDISBL превращает вывод RESET в порт ввода-вывода.
SPIEN – фьюз, который разрешает работу МК по интерфейсу SPI. Все микроконтроллеры выпускаются с уже установленным битом SPIEN . Считается опасным фьюзом.
EESAVE – Удобно читать как EEPROOM SAVE, дословно означает “сохранить EEPROOM”, данный фьюз защищает EEPROM от стирания. Например когда в очередной раз заливаете прошивку в контроллер, можно поставить EESAVE = 0 , и при стирании МК EEPROOM останется не тронутым.
BOOTSZ , состоит из группы битов BOOTSZ1 и BOOTSZ0 , определяют размер области памяти записываемых программ, связан с битом BOOTRST .
BOOTRST, определяет адрес, с которого и будет начато исполнение программы. Если бит установлен т.е. если BOOTRST = 0 , то начало программы будет с адреса области загрузчика (Boot Loader).
BODEN – бит, который при выставлении (BODEN=0 ), будет контролировать за питающим напряжением, на предельно низких напряжениях микроконтроллер может перезапускаться, глючить и так далее. Связан с BODLEVEL.
BODLEVEL . – определяет момент срабатывания детектора уровня питающего напряжения, при снижении напряжения питания ниже уровня, произойдет “перезагрузка” контроллера.
SELFPRGEN – бит, который разрешает (SELFPRGEN=0 ) или запрещает (SELFPRGEN =1 ) программе производить запись в память.
OCDEN – данный фьюз разрешает или запрещает чтение программы из памяти контроллера.
Я как то упоминал в своих статьях про то, что в некоторых программах фьюзы выставляются зеркально. Запомните, запрограммированный фьюз=0 , а не запрограммированный=1 . В программах Algorithm Builder, UniProf фьюзывыставляются одним образом, а в программах PonyProg, CodeVisionAVR, AVR Studio, SinaProg и некоторых других, фьюзы нужно выставлять зеркально по сравнению с предыдущим списком программ.
Уже давно на просторах Интернета появились так называемые “калькуляторы фьюзов”, это специальные приложения, призванные помочь в конфигурировании микроконтроллера. Приложение интуитивно понятное, думаю разберетесь, в списке контроллеров выбираем нужный нам МК, далее выбираем необходимые функции, а ниже выставляются галочки фьюзов, все очень просто.
Данные приложения очень удобны, т.к. например в последнее время очень часто авторы своих проектов значения фьюзов пишут непонятными буквами или цифрами, или же словами, новичку не понятно, что это значит и какие фьюзы при этом нужно выставлять, (часто можно встретить комментарий к статье “а какие фьюзы выставлять?”). Калькулятор фьюзов нам в этом плане очень сильно помогает.
Думаю что теперь, если у вас спросят “что такое фьюзы, и зачем они нужны?”, вы сможете объяснить человеку их назначение, а пока, на этом все!
Вопрос, который давно требует пояснений — что же такое fuse bit (далее фьюзы) и как их использовать. Для простоты понимания, назовем их настройкой для микроконтроллера, которую можно изменить только при прошивке.
Удобны тем, что достаточно один раз указать конфигурацию фьюзов и независимо от этого изменять прошивку сколько угодно раз — фьюзы останутся те же. Нужно сказать о том, что для некоторых микроконтроллеров существуют специфичные фьюзы, здесь рассматривается пример для Atmega8.
CKSEL0-3 — отвечают за выбор источника тактирования микроконтроллера. В даташите есть таблица из нее прикинуть конфигурацию битов.
Например, хотим работать от внешнего кварца на 8МГц, для CAVR смело убираем галочки CKSEL0-3 (т.е их значения будут 1111). Схема для подключения кварца. Конденсаторы 12-22 пФ.
Или хотим работать от внутреннего генератора на 8МГц, видим диапазон значений для CKSEL, крутим вниз даташит и видим подробное описание:
Т.е. в нашем случае подойдет последний вариант, смело заносим в CKEL0-3=0010 и радуемся супер скорости.
Если вы случайно установили тактирование от внешнего источника, а у вас его нет, то — увы микроконтроллер становится не доступным для чтения и программирования. Но расстраиваться не стоит, стоит подцепить внешний кварц и atmega снова оживет.
CKOPT — используется только совместно с битами CKSEL, позволяет включить «режим усиления». Микроконтроллер в таком режиме имеет повышенное энергопотребление, однако более помехозащищен. Установка данного бита позволяет работать на частотах выше 8МГц, если сам микроконтроллер поддерживает такие частоты.
SUT0-SUT1 — эти биты отвечают за задержку, перед началом работы микроконтроллера. Насколько я понял из даташита, рекомендации в отношении этих битов касаются в основном питания и в том числе бита BODEN
BODEN — при установке бита, микроконтроллер контролирует напряжение питания. При снижении напряжения ниже определенного уровня, микроконтроллер сбрасывается.
BODLEVEL — определяет тот самый уровень напряжения, если фьюз установлен, то нижний предел питания 4В, если не установлен 2,6В.
BOOTRST — позволяет начать выполнение программы не с начала, а с определенной области BOOTLOADER.
BOOTSZ0-BOOTSZ1 — также относятся к бутлоадеру, определяют размер памяти отведенный загрузчика.
EESAVE — если бит установлен, то во время выполнения команды Erase Chip, EEProm память не будет стерта.
WDTON — позволяет использовать сторожевой таймер.
RSTDISBL — отвечает за назначение вывода reset. Если он установлен, то ножка reset становится обычным портом ввода-вывода. В следствие чего становится не возможным использовать ее при последовательном программировании, т.е. микроконтроллер не возможно прошить без специального программатора .
Обратите внимание, в некоторых программах есть коварный бит — запрет последовательного программирования, после установки этого бита микроконтроллер не возможно прошить без специального программатора.
Для внешнего кварца на 8МГц
Для внешнего кварца 8-16МГц
Для внутреннего на 8МГц
Все очень просто — небольшие комментарии на картинке помогут.
Вот такие инструменты есть для работы с фьюз битами. Выбирайте!
(Visited 149 580 times, 38 visits today)
Раздел:Добрый день форумчане, прошу небольшой помощи в одном вопросе, наверное уже задавался такой но все же спрошу, пытаюсь залить прошивку в мегу 48, Sinaprog ее видит и пишет что все записано в контроллер, но как-то быстро это происходит примерно секунду, прошивка для подсветки ступенек лестницы. При попытке установки и прошивки фьюзбитов программа считывает заводские настройки, устанавливаю инверсно в соответствии с картинкой к нужной прошивке, пишет что все ок. но возвращает 00 и сигнатура также 000000. подскажите в чем может быть дело.
Здравствуйте Евгений. Прошу помощи. Как будут выглядеть фьюзы в программе PONYPROG для этого
устройства.РадиоКот-приставка» морской бриз» для вентилятора. Спасибо.
admin Автор записи
Зайди в калькулятор http://www.engbedded.com/fusecalc/
Выбери чип ATtiny13
В самом низу будет установка фьюз байт
Для High вводишь F9
Для Low вводишь 5A
— это из картинки статьи.
Получишь все свои фьюзы. Ставить как есть
А вообще ориентируйся на SPIEN — он всегда активным должен быть. То есть если ты прочитал фьюзы из МК (перед их изменением) , то ты так должен менять фьюзы чтобы SPIEN остался нетронутым.
МИКРОКОНТРОЛЛЕРЫ AVR: FUSE-БИТЫ
В данном обзоре рассмотрим, что же такое fuse-биты и для чего они нужны, так как это вызывает много непонимания (да и разработчики прошиващего софта вертят их как хотят). В результате этого контроллеры AVR кучами складываются в коробки до «лучших времен». Для примера рассмотрим fuse-биты на примере МК ATMega8. Для других типов контроллеров AVR назначение уточняются в даташите на конкретный МК (не ленитесь читать документацию). Итак, поехали! Все фьюз-биты МК разделены на 2 байта – старший (Fuse High Byte) и младший (Fuse Low Byte). Разбор конечно же начнем со старшего байта.
RSTDISBL – определение режима работы пина RESET. Данный пин может работать в 2-х режимах как вывод внешнего сброса или как порт ввода-вывода.
RSTDISBL=1 – пин настроен на работу как вывод внешнего сброса.
RSTDISBL=0 – пин работает как порт ввода-вывода. Данный режим работы отключит возможность последовательного программирования и поможет только параллельный программатор.
WDTON – включение и отключение сторожевого таймера (Watch Dog Timer), который выполняет защиту от зависания программы, выполняемой МК. В основном применяется в ответственных программах, где зависание нежелательно.
WDTON=1 – сторожевой таймер отключен (можно включить программно через бит WDT регистра WDTCR).
WDTON=0 – сторожевой таймер включен (программно отключить не получится).
SPIEN – разрешение последовательного программирования.
SPIEN=0 – последовательное программирование разрешено.
SPIEN = 1 – последовательное программирование запрещено.
Если отключить режим последовательного программирования, то сможет помочь только параллельный программатор. Во многих программах для прошивки данный бит изменить нельзя (чекбокс недоступен).
CKOPT – бит опций тактового генератора. Его разберем позже, когда доберемся до младшего байта.
EESAVE — бит защиты данных, хранящихся в EEPROM памяти при стирании микросхемы. Если данный бит не установлен, т.е. EESAVE = 1, то при стирании микросхемы затрутся данные, хранящиеся в EEPROM.
BOOTSZ1…0 – биты определяющие объем flash-памяти, отводимой под бутлоадер.
Бутлоадер – это набор команд, даже точнее – это программа, которая болтается в конце flash-памяти МК, способная принимать данные от внешних устройств при наступлении какого-либо события и заносить их во flash-память. Бутлоадер применяется в основном для прошивки МК без использования спецпрограмматора.
BOOTRST – бит, определяющий с какого места начнется загрузка контроллера после сброса.
BOOTRST = 1 – загрузка начнется с нулевого адреса
BOOTRST = 0 – загрузка начнется с адреса начала области flash-памяти, выделенной под бутлоадер.
Вот и добрались до младшего байта.
BODLEVEL и BODEN – биты, управляющие схемой мониторинга напряжения питания контроллера (Vcc). Если напряжение опуститься ниже установленного битом BODLEVEL, то МК сброситься и будет держаться в режиме сброса, пока напряжение не превысит установленный порог.
BODLEVEL = 1 – пороговое напряжение равно 2,7В.
BODLEVEL = 0 – Пороговое напряжение равно 4В.
BODEN = 1 – схема мониторинга неактивна.
BODEN = 0 – схема мониторинга напряжения питания активна.
SUT1…0 – биты, определяющие время запуска микроконтроллера (см. режимы работы тактового генератора). После подачи на МК питания, выхода его из режима энергосбережения или после сброса, МК начинает работать не сразу, а по истечении определенного времени. Как раз это время и задают данные биты. Если время старта не важно, то ставим максимум SUT1…0 = 11. Все операции, выполняемые контроллерам, производятся по импульсам, приходящим от тактового генератора. Тактовый генератор может быть встроенным в МК, либо быть внешним.
Внутренний генератор может работать в нескольких режимах:
— с внутренней задающей RC-цепочкой;
— с внешней задающей RC-цепочкой;
— с внешним задающим кварцевым или керамическим резонатором.
При работе контроллера от внешнего тактового генератора на его вход XTAL1 подаются прямоугольные импульсы от какого-либо внешнего генератора:
Все эти режимы работы задаются битами CKSEL3…0.
Внутренний генератор с внутренней задающей RC-цепочкой
Все МК типа ATMega8 поставляются с завода со значением битов CKSEL3…0=0001, т.е. настроены на работу с тактовой частотой 1 МГц от внутреннего генератора с внутренней задающей RC-цепочкой. Время старта в данном режиме работы определяется по таблице:
Внутренний генератор с внешней задающей RC-цепочкой
Согласно даташиту емкость конденсатора должна быть не менее 22 пФ. При условии, что CKOPT=0 между выводом XTAL1 и GND подключается внутренний конденсатор емкостью 36 пФ и внешний конденсатор можно исключить. Частота задающей RC-цепочки определяется соотношением f=1/(3RC). В соответствии с выбором RC-цепочки биты CKSEL3…0 устанавливаются в соответствии с таблицей:
Время старта в данном режиме определяется по таблице:
Внутренний генератор с внешним резонатором
Частота тактового генератора будет определяться частотой кварца. При выбранной частоте кварца биты CKSEL3…1 выбираем из таблицы:
Комбинация CKSEL3…1 = 101 должна использоваться только с керамическим резонатором (см. примечание под таблицей). Время старта выбирается из таблицы:
При работе тактового генератора с внешним резонатором значение бита CKOPT определяет режим работы усилителя тактового генератора для раскачки резонатора. При CKOPT = 0 амплитуда колебаний максимальна, что дает устойчивость к помехам и возможность работать на всем диапазоне частот. При CKOPT = 1 амплитуда колебаний меньше (генератор работает в экономном режиме) и возможны сбои при работе контроллера из-за различных помех. Так что если нет жестких требований к энергосбережению устройства, то CKOPT = 0. Кроме работы с высокочастотными резонаторами, контроллер способен работать также на частотах так называемых часовых кварцев (32768 Гц). Для этого значение CKSEL3…0 = 1001. При CKOPT = 0 между XTAL1 и GND, и XTAL2 и GND подключаются внутренние конденсаторы, а внешние конденсаторы в данном случае можно исключить. Время старта определяется из таблицы:
Внешний тактовый генератор
Для выбора данного режима устанавливаем CKSEL3…0 = 0000. Установка CKOPT = 0 позволяет подключить между XTAL1 и GND, и XTAL2 и GND внутренние конденсаторы 36 пФ (зачем?). Время старта опять же определяется из таблицы:
Кроме младшего и старшего fuse-байтов в окне прошивальщика можно увидеть Lock Bit Byte – так называемый байт защиты. С помощью изменения значения битов данного байта можно запрещать и разрешать доступ к памяти программ (flash-памяти), EEPROM и области бутлоадера. Можно сказать, что биты этого байта предназначены для защиты того, что есть в контроллере. В основном это надо разработчику, чтобы защитить свой интеллектуальный труд от кражи и обычному пользователю эти биты особо неинтеесны.
Немного о прошивающем софте
Немало косяков с залочкой контроллеров возникает из-за прошивающего софта. В каких-то программах галка в чекбоксе означает 0, а в каких-то 1. Перечислять значения галки в каждой программе бесполезно, так как этих программ навалом. Поэтому дам совет, как определить who is who. Берем МК и подключаем его к последовательному программатору, заходим в режим программирования fuse-битов и считываем все байты. Смотрим значение бита SPIEN. Т.к. последовательное программирование разрешено, то SPIEN = 0. А теперь смотрим что стоит в чекбоксе напротив данного бита. Если стоит галка, то в данной программе это означает 0, если чекбокс пуст, то галка в данной программе означает 1. При прошивке всегда шейте первым делом прошивку, а fuse-биты в самую последнюю очередь, т.к. fuse-биты могут быть настроены не от работы тактового генератора с внутренней RC-цепочкой или вообще в данной схеме пин RESET используется как обычный порт. Перед прошивкой fuse-битов всегда делайте их считывание, т.к. при выставлении только нужных битов остальные зашьются как есть на экране. Автор статьи: skateman.
ATmega8 в среде разработки Arduino
Для работы с микроконтроллером ATmega8 или с Arduino устройством на ATmega8 в среде разработки Arduino программу Arduino необходимо настроить. Нужно добавить в файл hardware/arduino/boards.txt параметры поддерживаемых устройств на микроконтроллере ATmega8.
Возможно, будет необходимо добавить файлы bootloader (загрузчик) в папку hardware/arduino/bootloaders/optiboot.
Микроконтроллер ATmega8 может работать на частоте 0-16МГц при напряжении ~5В, а ATmega8L на частоте 0-8МГц и ATmega8A на частоте 0-16МГц в широких пределах напряжения питания. Это по паспорту, а практически, при напряжении 5В, все микроконтроллеры серии ATmega8 могут работать на частоте 16МГц с внешним кварцевым резонатором и на частотах 8, 4, 2, 1МГц с внутренним генератором.
Существует вариант платы Arduino на микроконтроллере ATmega8, это Arduino NG. Среда разработки Arduino (Arduino IDE) готова к работе с микроконтроллером ATmega8, но только с одним устройством – это плата Arduino NG с микроконтроллером ATmega8 на частоте 16МГц с внешним кварцевым резонатором. Так обстоят дела в Arduino v. 1.0.6. Кроме того, для Arduino NG предлагается не самый оптимальный и главное не удобный bootloader.
Для того, чтобы была возможность программировать микроконтроллеры ATmega8 работающие на разных частотах с кварцевым резонатором и без него необходимо внести изменения в файл hardware/arduino/boards.txt Например, можно добавить в него следующие секции:
# http://optiboot.googlecode.com # http://homes-smart.ru/index.php/oborudovanie/arduino/avr-zagruzchik ############################################################## atmega8o.name=ATmega8 (optiboot 16MHz ext) atmega8o.upload.protocol=arduino atmega8o.upload.maximum_size=7680 atmega8o.upload.speed=115200 atmega8o.bootloader.low_fuses=0xbf atmega8o.bootloader.high_fuses=0xdc atmega8o.bootloader.path=optiboot50 atmega8o.bootloader.file=optiboot_atmega8.hex atmega8o.bootloader.unlock_bits=0x3F atmega8o.bootloader.lock_bits=0x0F atmega8o.build.mcu=atmega8 atmega8o.build.f_cpu=16000000L atmega8o.build.core=arduino:arduino atmega8o.build.variant=arduino:standard ############################################################## a8_8MHz.name=ATmega8 (optiboot 8 MHz int) a8_8MHz.upload.protocol=arduino a8_8MHz.upload.maximum_size=7680 a8_8MHz.upload.speed=115200 a8_8MHz.bootloader.low_fuses=0xa4 a8_8MHz.bootloader.high_fuses=0xdc a8_8MHz.bootloader.path=optiboot a8_8MHz.bootloader.file=a8_8MHz_a4_dc.hex a8_8MHz.build.mcu=atmega8 a8_8MHz.build.f_cpu=8000000L a8_8MHz.build.core=arduino a8_8MHz.build.variant=standard ############################################################## a8_1MHz.name=ATmega8 (optiboot 1 MHz int) a8_1MHz.upload.protocol=arduino a8_1MHz.upload.maximum_size=7680 a8_1MHz.upload.speed=9600 a8_1MHz.bootloader.low_fuses=0xa1 a8_1MHz.bootloader.high_fuses=0xdc a8_1MHz.bootloader.path=optiboot a8_1MHz.bootloader.file=a8_1MHz_a1_dc.hex a8_1MHz.build.mcu=atmega8 a8_1MHz.build.f_cpu=1000000L a8_1MHz.build.core=arduino a8_1MHz.build.variant=standard ############################################################## a8noboot_8MHz.name=ATmega8 (no boot 8 MHz int) a8noboot_8MHz.upload.maximum_size=8192 a8noboot_8MHz.bootloader.low_fuses=0xa4 a8noboot_8MHz.bootloader.high_fuses=0xdc a8noboot_8MHz.build.mcu=atmega8 a8noboot_8MHz.build.f_cpu=8000000L a8noboot_8MHz.build.core=arduino a8noboot_8MHz.build.variant=standard ##############################################################
Теперь в программе Arduino в меню / появятся следующие устройства:
- ATmega8 (optiboot 16MHz ext)
- ATmega8 (optiboot 8 MHz int)
- ATmega8 (optiboot 1 MHz int)
- ATmega8 (no boot 8 MHz int)
Первые три устройства на микроконтроллере ATmega8 содержат bootloader, являются Arduino совместимыми и в них непосредственно можно загружать скетчи (программы) из среды разработки Arduino. Четвертое устройство не содержит bootloader, это может быть отдельная микросхема ATmega8. В ATmega8 (no boot 8 MHz int) скетчи из программы Arduino можно загружать через программатор, в том числе и через программатор на базе платы Arduino.
ATmega8 (optiboot 16MHz ext) работает с внешним кварцевым резонатором, остальные устройства с внутренним генератором.
Параметры в файле hardware/arduino/boards.txt определяют fuse биты, путь к файлу загрузчика (bootloader), тип микроконтроллера и его частоту. Fuse биты записываются в микроконтроллер (с загрузчиком или без него) когда вы выбираете пункт меню / . Fuse биты определяют на какой частоте будет работать Ваш микроконтроллер и другие важные параметры, в том числе и такие, от которых зависит его работоспособность, перепрограммируемость и т.д.
Fuse биты НЕ записываются в микроконтроллер когда вы заливаете скетчи. Если в меню / будет выбрано не подходящая платформа то:
- При загрузке скетчей
- Не подходящая частота – приводит к изменению скорости работы программ
- Не подходящий процессор – приводит к неработоспособности программ
- При записи загрузчика
- Не подходящая частота – может привести к неработоспособности микроконтроллера в данной системе
- Не подходящий процессор (fuses) – к блокировке микроконтроллера
Внимание, Ваши не корректные действия могут вывести из строя микроконтроллер для восстановления которого потребуется программатор.
Bootloader для микроконтроллера ATmega8.
Оптимальный bootloader для микроконтроллеров ATmega 8 можно скачать с сайта проекта Optiboot.
Optiboot bootloaders для различных рабочих частот микроконтроллера можно скачать с сайта Конструктор загрузчика.
Bootloaders Optiboot – это не зависимая свободная разработка загрузчиков, признанная разработчиками Arduino. Optiboot предназначен для использования в разных вариантах Arduino и для множества микроконтроллеров Atmel. Основные отличия загрузчика Optiboot от конкурентов – это до четырех раз уменьшенный размер кода, сокращение бесполезных задержек в работе микроконтроллера, высокая скорость загрузки скетчей с компьютера.
Размещайте файлы bootloaders в программе Arduino в соответствии с тем, что написано в файле hardware/arduino/boards.txt. Например, для устройства ATmega8 (optiboot 16MHz ext) файл загрузчика необходимо поместить в папку hardware/arduino/bootloaders/optiboot50 и имя файла должно быть optiboot_atmega8.hex
realbest.club - Ressources et information concernant realbest Resources and Information.
I’m making program for GSM module interfacing. I need to concern more about Baud rates to communicate with it. My Atmega8 IC was working fine. I wanted it to work with 8MHz internal oscillator. For that I’ve configured fuse bit. I hope I’ve set it wrong that’s why it’s showing me ‘Device missing ‘ error. The problem is that I don’t remember the fuse bits. I’ve searched on net.
All you need to know about AVR fuses
Some said about fuse bit doctor and some say about external clock. I’m messed up.
It’s my first time using Atmega. How to fix the Atmga8? Find and address the root cause rather than try to fix the effect, as there is no end to the latter. Thank you for your reply. I’ll try first by applying 1MHz clock pulse. I think the appropriate for me is to give the 1MHz clock pulse by using another working Atmega toggling the port. But now the problem is that the other Atmega8 is also not working device missing !
Learn About ATmega328P Fuse Bits and How to Use Them with an External Crystal Oscillator
The avr programmer checked twice. You were supposed to program just he flash of the second AVR to make it toggle an output and provide the clock, how did you manage to mess it up too? The day i started working on AVR the first biggest hurdle for me was setting fuses.
Nclex questions and answersI started with STK boardPages: [1] 2 I’ve finally got myself a virgin ATMegap and without uploading a bootloader, I’ve uploaded a simple variation of Blink and thought it was broken until I realised that because I hadn’t set the fuses, the MCU was just using internal clock and running at 1MHz intead of 16MHz I’ve included a crystal on my board.
But I can’t find what the bytes should be – could someone tell me please I’ve given up trying to read them out from my Uno And of course, if the fuses should be different for a non-bootloader 16Mhz crystal clocked ATMegap than my Uno, could I have those instead regards Simon. I had exactly the same issue when I programmed my first ! PS – If you just want the same ones as used in a standard Arduino, you can find them in the boards.
Formal verification of safety-critical software, software development, and electronic design and prototyping.
Please do not ask for unpaid help via PM, use the forum. Code: [Select]. Hi, These setting did it for me too Have you heard of the phrase “a day late and a dollar short” out there in zeroland? What has this post to a stale thread added that wasn’t already said in the very first reply? Quote from: dc42 on Sep 06,pm. When I use the Arduino IDE to flash the bootloader it always sets the proper fuses without any interaction on my behalf.
Now with Unlimited Eagle board sizes! I’ve been doing the same – burn a Uno bootloader to set the fuses. Then upload my sketch via File :Upload Using programmer. Quote from: clivemist on Oct 29,pm. Quote from: dc42 on Oct 30,am.
So do delay calls in sketches you upload delay for the correct amount of time or not? Quote from: dc42 on Nov 06,am. Quote from: clivemist on Nov 06,am.I mostly work with mega microcontrollers atmega8, atmega16, atmega, atmega, atmegap but the information in this article applies to all the other AVR microcontrollers.
To set the fusebits you can use the same tool you use to write the. Here things get a bit more complicated. On one hand you need the software that works with USBAsp, but on the other hand you need to correctly compute the fusebit values that will be programmed in your AVR. For the first I use Winavr. If working with a command prompt line tool seems complicated to you, consider using alternatives such as Extreme burner.
For computing the fusebits, there are quite a few online webpages that help you achieve the goal in easy steps: here or here. Any of these two will do. Accessing one of these pages, you must select the AVR you need to program the fusebits forthen several tables with apparently complicated settings show up: To help you get going, here are a few details you should know: Clock selection This controls how the chip is clocked.
Wrong clock settings can make your AVR unusable.
Programming AVR fuse bits – oscillator settings
You should know that this clock varies with temperature and the power supply voltage. The KHz clock is for very low power applications where the low speed helps conserve power. External Crystal option is used when you need a special clock rate, like 8MHz or 12MHz or a high precision clock that will not vary with temperature or power supply voltage fluctuations. In this case you need to connect an external crystal or oscillator. The Startup Time is a short delay, used to pause the clock for the given time, the very first time the power is applied.
Clock Output available for some AVRs only produces a square wave of the same frequency of the clock input internal, external, crystal, etc on a given pin D2, B0, etc. Clock Divide available for some AVRs onlycauses the chip to divide the clock rate by 8. By default, this is turned on. Reset Disableturns the Reset pin into a normal pin instead of a special pin as it is set by default. Be careful about this option, and never set it on, unless you really need the one extra pin.
Brown-out Detect fuses set the voltage threshold for the Brownout protection circuitry on.This is default clock setting with which ATmega chip been shipped from factory. We can use these fuse bits to clock microcontroller with desired frequency. I highly recommend opening up datasheet of ATmega32A or any your microcontroller for the duration of this tutorial, and briefly skimming the chapter on system clock and clock option Page 25 click here for ATmega32A datasheet.
This holds a few bytes for fuses: Low Byte, High Byte. Before we begin to analyze fuse and lock bits. This is little bit tricky and very important to be noted before we proceed any further. In this tutorial we want to show, how you can clock your microcontroller with different frequency setting avr fuse bits. Typically, there are only two fuse bytes: a high one and low one. The location of specific fuse bits differs among all the fuse bytes depending on AVR chip used.
SO be sure to write them down before setting them. As example we take ATmega32A microcontroller and here are all fuse bytes for it. When programmed 0 the trigger level is 4V and when not programmed 1 the trigger level is 2.
When VCC increases above the trigger level, it starts the microcontroller again. SUT These bits select a startup time. Table, Page No: 30]. Some common fuse bits value given in the end of this article. It is enabled in new microcontroller. When CKOPT is programmed, the oscillator output will oscillate with a full rail-to-rail swing on the output.
When not programmed, the oscillator has a smaller output swing. And impact will be shown in terms of change in beeps. The first option is how the chip is clocked. Every CPU uses a clock, The clock keeps track of time for the chip, in general one assembly code instruction is run every clock cycle.
Leasehackr bmw msdThe one in your PC has a clock that runs at 1GHz or higher. This little chip runs much slower. This is pretty rare unless you have a clock generating chip. The clock varies with temperature and the power supply voltage.
The KHz clock is for very low power applications where running the chip very slowly helps conserve power. External Crystal If you need a special clock rate, like 3. You are commenting using your WordPress.
You are commenting using your Google account. You are commenting using your Twitter account.Part of programming stand-alone ATmega chips is setting the fuse bytes, these are special settings that can be used to change how the ATmega chips operate. There are many articles online but I could not find a single source that brought all the information together and fully explain what the fuses actually do.
It is important to remember that some of the fuse bits can be used to lock certain aspects of the chip and can potentially brick it make it unusable. However, with a bit of care it is fairly straight forward to understand and use the fuse settings. Disclaimer, I am relatively new to programming fuses and these are notes I wrote to help me remember things. There is also a forth byte that is used to program the lock bits. Lock bits are not covered by this article. Each byte is 8 bits and each bit is a separate setting or flag.
When programming the fuses you can use binary notation or more commonly hexadecimal notation. For 8 bits 1 byte we can use B or 0xFF. Both are the same value. The low byte fuse deals with the clock source, how fast the chip will run, and how long it waits at startup. The ATmega chips can be run at different speeds or frequencies and the frequency is determined by the clock source that is used.
Arduinos normally use an external 16MHz crystal. A common mistake is to have the crystal correctly connected in the circuit but forget to tell the chip to use it.
Arduinos normally use a low power crystal oscillator. The external clock option allows the chip to use an external square wave clock signal.
Certified kubernetes administrator exam questionsThis is used when you have a circuit with its own clock that you want to sync the ATmega with or if you want to use a separate clock chip. Crystals and oscillators require sufficient voltage to operate correctly. When you start the ATmega chip it can take a brief period of time for the voltage to get to its maximum value. While the voltage is rising the clock source may not be working at the correct speed or frequency.
To allow the clock to stabilise a startup delay can be set. New chips are shipped with this set as the clock source and the CKDIV8 fuse active, resulting in a 1. The startup time is set to maximum and time-out period enabled. This setting is used so that all users can make their desired clock source setting using any available programming interface.
CKDIV8 should be used if the selected clock source has a higher frequency than the maximum frequency of the ATmega chip. The ATmega chips can be used at very low voltages, however, the lower the voltage the slower they need to work at. The clock signal can be routed to PB0.AVR lock bits and fuses are one of the topics that may cause some confusion. If you missed something or set one bit wrong, it may lead to failure — bricking whole AVR chip.
So it is important to understand once and do things right. Even though datasheets give enough information about AVR fuses, many times, we feel somewhat unsure before executing write command.
Прошивка ATmega8, создание bootloader и добавление платы boards в Arduinio IDE, настройка fuse bitLet us go through main features of AVR fuses and lock bits so next time we would feel safe and get expected results. This is one of the main confusions while programming fuse and lock bits. We are used to thinking that setting value means writing 1, right? So with AVR fuses, this is opposite, and we have to deal with this.
Fuse and lock bits are located on separate nonvolatile memory area. If we look at Atmegap microcontroller, it has four bytes that need to be written to configure MCU properly.
One of those bytes contains lock-bits while other three fuse-bits.
Preauthentication failed sssdEach of them holds a set of bits that sets initial MCU preferences like clock cycles, bootloader selection, etc.
First of all, let us see lock byte. Depending on AVR type there can be a different number of lock bits. But two least bits are always present. LB1 and LB2 bits are used to lock memory.
C162 b1You probably know that product developers practically always secure their microcontrollers to protect their intellectual property. So no one could read and duplicate. So unless you want to protect your firmware from copying you can lock the memory contents, otherwise, leave lock bits as is. What interests us most are fuse bits. You need to deal with them want you this or not. The location of specific fuze bits differs among all three fuse bytes depending on AVR chip used.
So be sure to write them down before setting them. As an example we take Atmegap microcontroller and here are all three fuse bytes for it:. They are used to select clocking options. This is logically the safest option to start. But as you know, AVRs can be clocked in more different ways:. These are necessary to ensure enough time to stabilize ceramic resonators and crystals.
You can find a detailed table of exact timings on particular fuse selections.These fuse bits control settings such as the multiplier of the internal oscillator and thus the speed of the chipor if the reset pin can be used as a GPIO pin.
Admit you made a mistake and move on. Not everyone who reads this site knows about this kind of stuff. I would just like to say that when you have an array of 8 elements and call. Yet the indexes of said array start at zero in most programming languages and that the last element is located at the seventh index. Therefore it seems to be the global accepted concept that when we quantify elements we distinctively give the total amount, period.
It goes to say that this applies to bits and bytes as well if we consider a byte a container of bits. What a coincidence! I just put up a similar tutorial to demystify fuse bytes for beginners.
Yes, because it immediately gets much easier because you call it a configuration bit instead of a fuse bit.
Avr-libc allows to insert the fuses directly in the code, in a clear, intelligible way. For example :. I highly recommend it, since the code is written for specific fuses, they are actually part of the code. That way you can also easily add them to version control.
Wow… Seriously? Maybe such people should stick to some basic-on-a-chip solution. This comment leaves no room for beginners…. I have found the documentation starts at a level 3, skipping 0,1,2 and assuming much knowledge I do not possess. I tend to agree with you. No matter how well written the documentation, people learn differently and any sufficiently complex thing is likely to have dark corners of confusion.
Учебное пособие по
AVR – Предохранители
Предохранители– чрезвычайно важная часть программирования микросхемы, но они редко объясняются подробно. Вам нужно установить их только один раз, но если вы не сделаете это правильно, это катастрофа!
Комментариев? Предложения? Напишите на форум!
Вы знаете, что флеш-память, eeprom и RAM являются частями микросхемы. Я не упомянул, что есть также 3 байта постоянного (под постоянным я имею в виду, что они остаются после отключения питания, но вы можете менять их столько раз, сколько захотите) хранилища, называемого предохранителями.Предохранители определяют, как будет работать микросхема, есть ли у нее загрузчик, с какой скоростью и напряжением он любит работать и т. Д. Обратите внимание, что, несмотря на то, что они называются «предохранителями», их можно переустанавливать и не имеют никакого отношения к защите от перегрузки. (как предохранители в доме).
Предохранители задокументированы в таблицах данных, но лучший способ проверить предохранители – это посмотреть на калькулятор предохранителей, например, на вычислитель предохранителей avr из проекта palmavr
.Щелкните эту ссылку в новом окне и выберите ATtiny2313 для расчета предохранителей
Мы будем использовать быструю настройку, поэтому используйте эти меню, а не флажки.
Первый вариант – как тактовая частота микросхемы.Каждый процессор использует часы, часы отслеживают время для чипа, как правило, одна инструкция ассемблерного кода запускается за каждый тактовый цикл. Один на вашем ПК имеет часы, которые работают на частоте 1 ГГц или выше. Этот маленький чип работает намного медленнее. Если вы посмотрите на меню, вы увидите огромный список опций, но если внимательно присмотритесь, то увидите две группы: Clock Source , Clock Startup
Источник тактовой частоты может быть одним из следующих:
Внешняя тактовая частота, Внутренняя тактовая частота 8 МГц, Внутренняя тактовая частота 4 МГц, Внутренняя тактовая частота 128 кГц, Внешний кристалл (0.4-0,9 МГц), внешний кристалл (0,9–3,0 МГц), внешний кристалл (3,0–8,0 МГц) или Внешний кристалл (8,0 МГц +)
Запуск часов может быть одним из следующих:
14CK + 0 мс, 14CK + 4 мс, 14CK + 65 мс .
External Clock означает, что сигнал прямоугольной формы подается на вывод CLOCK-IN . Это довольно редко, если у вас нет микросхемы, генерирующей часы. Не используйте это, если вы не уверены, что имеете в виду
Internal Clock означает, что внутри микросхемы есть небольшой осциллятор, он не очень точный, но подходит для большинства проектов, у которых нет проблем с точной синхронизацией.Часы меняются в зависимости от температуры и напряжения источника питания. Вы можете выбрать частоту 8 МГц, 4 МГц или 128 кГц. Тактовая частота 128 кГц предназначена для приложений с очень низким энергопотреблением, когда очень медленная работа чипа помогает экономить электроэнергию. Наличие внутреннего генератора означает, что нам не нужно подключать кристалл, и мы можем использовать контакты часов для наших собственных гнусных целей.
Внешний кристалл
Если вам нужна особая тактовая частота, например, 3,58 МГц или 12 МГц, или высокоточные часы, которые не будут дрейфовать с температурой, вам понадобится внешний кристалл или генератор.
выглядят примерно так: Керамические генераторы выглядят так:
Кристаллы бывают разных упаковок, они могут быть цилиндрическими или больше, чем показано на изображении. В обоих случаях скорость указывается сверху или сбоку, почти всегда в МГц.
Время запуска – это время, в течение которого источник тактовых импульсов должен успокоиться с момента первого включения питания. Всегда выбирайте самую длинную настройку 14CK + 65 мс , если вы не знаете, что вашему источнику тактовых импульсов требуется меньше времени, а 65 мс – слишком долго, чтобы ждать.
По умолчанию микросхемы, которые поставляются с завода, имеют внутреннюю тактовую частоту 8 МГц с запуском 14CK + 65 мс.
Следующая опция – это Clock Out на PortD2 , что, по сути, означает, что независимо от входного тактового сигнала (внутреннего, внешнего, кварцевого и т. Д.) Прямоугольная волна той же частоты будет появляться на выводе D2 . Это полезно, если вы отлаживаете тактовую частоту или хотите использовать часы для управления другим чипом.
По умолчанию на чипах, которые идут с завода, это отключено.
Этот предохранитель заставляет микросхему делить тактовую частоту на 8. Итак, если источник тактовой частоты установлен на Internal 8MHz и у вас установлен этот предохранитель, тогда вы действительно будете работать на 1MHz.
По умолчанию на чипах, которые поступают с завода, эта функция включена.
Этот предохранитель превращает штифт Reset в обычный штифт вместо специального штифта. Если вы включите этот предохранитель, вы больше не сможете программировать чип с помощью ISP .Я бы посоветовал вам никогда не устанавливать этот предохранитель, если только вы не действительно .
По умолчанию у микросхем, которые идут с завода, это отключено (то есть сброс включен)
Эти предохранители устанавливают напряжение для включения схемы защиты Brownout . «Понижение напряжения» в этом случае такое же, как когда энергосистема становится чрезмерно облагаемой налогом из-за того, что тысячи людей используют свои кондиционеры летом: напряжение падает, и радиочасы, возможно, перестают работать.Отключение микросхемы означает, что напряжение питания слишком низкое для надежной работы со скоростью тактовых импульсов.
Например, attiny2313 может работать так же быстро на частоте 20 МГц, но только при напряжении питания от 4,5 до 5,5 В. Если напряжение ниже этого, он может работать нестабильно, стирая или перезаписывая RAM и EEPROM. Также может запускаться случайный фрагмент флеш-программы. Чтобы этого не произошло, установите напряжение пониженного напряжения на 4,3 В, затем, если напряжение упадет, микросхема отключится до тех пор, пока напряжение не вернется.Затем он будет сброшен и начнется заново.
Если микросхема предназначена для работы при 5 В, установите пониженное напряжение на 4,3 В. Если микросхема может работать до 3,3 В, вы можете установить снижение напряжения на 1,8 В. Если чип является «совместимым с низким напряжением», например attiny2313V (который может работать до 1,8 В, если он работает на частоте 4 МГц или меньше), вы можете установить снижение напряжения на 1,8 В. Вы можете прочитать классы скорости и напряжения на первой странице таблицы данных.
По умолчанию микросхемы, которые поступают с завода, не имеют функции обнаружения потемнения, однако я предлагаю вам установить ее, если можете.Если у вас есть загрузчик или вы храните данные в EEPROM, вы должны установить BOD!
текст
Программирование битов предохранителей AVR – настройки генератора
Думаю, многие из вас были сбиты с толку при программировании предохранителей AVR. Я получаю много вопросов новичков, например: «Я программировал Atmega8, но он не работает». Тогда мой стандартный ответ: «Вы трогали биты конфигурации?», И если да, то я почти на 90% уверен, что он сделал это неправильно. Большинство из них ошибочно понимают, что запрограммированный бит предохранителя в конфигурации следует оставлять неотмеченным и наоборот.Давайте посмотрим на широко используемое программное обеспечение для программирования – PonyProg.
Первое, что вы делаете перед программированием микросхемы, это установка битов конфигурации (Atmega8 на картинке):
В первую очередь следует обратить внимание на источники тактовой частоты. Источниками синхронизации Atmega8 управляют четыре бита: CKSEL0, CKSEL1, CKSEL2, CKSEL3.
Как вы, возможно, уже знаете, Atmega8 может иметь 4 разных источника синхронизации:
- Внешний кристалл или резонатор;
- Внешний низкочастотный кристалл;
- Внешний RC-генератор или откалиброванный внутренний RC-генератор;
- Внешний источник синхронизации.
В таблице вы видите соответствующие настройки CKSEL0..3
Как вы могли заметить, для большинства из них осталось несколько настроек.
Внешний кристалл или резонатор
Внешний кристалл или резонаторможет быть установлен от 1010 до 1111 (обратите внимание, что запрограммирован «0», а «1» означает незапрограммированный). Эти диапазоны оставлены для выбора времени запуска микроконтроллера для стабилизации характеристик генератора перед первой командой.
Если вы подключаете внешний кварцевый генератор или резонатор к XTAL1 и XTAL2
Появляется еще один бит предохранителя CKOPT.Этот бит выбирает два разных режима усилителя генератора. Если CKOPT запрограммирован (не отмечен), тогда осциллятор колеблется с полным выходом rail-to-rail. Это удобно, когда среда шумная или использует XTAL2 для управления другим микроконтроллером или буфером. Но с другой стороны, для этого требуется больше мощности. Если CKOPT не запрограммирован (отмечен), то раскачка меньше, и энергопотребление уменьшается. Обычно, если резонатор имеет частоту до 8 МГц, оставьте CKOPT (отмечено = не запрограммировано) и запрограммировано (не отмечено флажком) выше 8 МГц.В таблице вы видите выбираемые режимы кварцевого генератора:
битов CKSEL0, SUT0 и SUT1 в этом случае используются для выбора времени запуска микроконтроллера – сколько тактов нужно ждать перед выполнением первой команды. Эти настройки необходимы для обеспечения стабильности керамических резонаторов и кристаллов.
Примечание 1. Это быстрое время запуска – не подходит для кристаллов;
Примечание 2. Наиболее часто используется с керамическими резонаторами для обеспечения стабильного запуска.Это нормально для использования с кристаллами, но устройство не работает на максимальной частоте.
Итак, если вы хотите стабильный запуск системы, лучше оставить CKSEL0, SUT0 и SUT1 запрограммированными (не отмеченными флажками), что означает время запуска около 65 мс.
Генератор низкочастотный
Для CKSEL0, CKSEL1, CKSEL2, CKSEL3 установлен только один бит – 1001 (не отмечено, отмечено, отмечено, не отмечено) для низкочастотного генератора. Низкочастотный кристалл – это типичный тактовый кристалл с частотой 32768 кГц.Основными опциями для этого режима являются установка времени запуска кристалла с помощью предохранителей SUT0 и SUT1.
Примечание 1. Менее стабильный запуск.
Внешний RC-генератор
Частота в этом режиме рассчитывается по формуле f = 1 / (3RC), в то время как C должно быть не менее 22 пФ. Если CKOPT запрограммирован (не отмечен), тогда включен внутренний конденсатор 36 пФ между XTAL1 и GND, тогда нужен только резистор.
..И снова таблица режимов работы:
И время запуска:
Примечание 1. не используйте эту настройку, когда частота близка к максимальной.
Калиброванный внутренний RC-генератор
Калиброванный внутренний RC-генератор довольно часто используется, поскольку не требует каких-либо внешних компонентов и может обеспечивать фиксированные тактовые частоты 1, 2, 4 и 8 МГц. Этот режим выбирается путем программирования битов предохранителей в диапазоне от 0001 до 0100. Оставьте бит CKOPT незапрограммированным для этого режима (отмечен).
Режимы работы:
Примечание 1. по умолчанию этот параметр выбран для всех Atmega8 и таблицы параметров запуска:
Примечание 1. по умолчанию эта опция выбрана для всех Atmega8
О калибровке внутреннего RC-генератора читайте в техническом описании устройства.
Внешние часы
Внешние часы – это основная ошибка, которую делают новички при запуске своих проектов. Чтобы включить внешний источник синхронизации, вы должны оставить биты CKSEL0, CKSEL1, CKSEL2, CKSEL3 незапрограммированными – это означает, что они отмечены. Люди делают ошибки, проверяя их и думая, что они включают внешние кристаллические резонаторы, а затем задаются вопросом, почему это не работает.
И снова есть таблица запуска внешнего источника синхронизации, управляемая SUT0 и SUT1:
Если вы отключите CKOPT, тогда вы включите конденсатор между XTAL1 и GND.
Примеры правильного программирования источников синхронизации Atmega8
- Кристалл 8 МГц с медленно нарастающей мощностью:
- 2 МГц керамический резонатор с быстрым увеличением мощности:
- Стабильная частота резонатора 32768 кГц при запуске:
- Внешний RC-генератор 4 МГц с внутренним C, позволяющим быстро нарастать мощность:
- Если вы хотите получить максимальную отдачу от Atmega: выберите быстрорастущую мощность 16 МГц:
Вы можете найти всю эту информацию в таблицах данных.Но как всегда – люди забывают их читать.
Если есть какие-либо вопросы или проблемы, не стесняйтесь спрашивать.
Конфигурация предохранителя AVR, чувак для внешнего кристалла 12 МГц в Atmega 168
PS: Я новичок, поэтому делюсь тем, что узнал, если есть какая-то ошибка, пожалуйста, дайте мне знать, чтобы в будущем я мог исправить себя.
Ага вы правы, внутренний RC-генератор не идеален … Часы меняются в зависимости от температуры и напряжения питания.Таким образом, лучше использовать внешний кварцевый генератор, который не будет дрейфовать с температурой, и , если вы хотите использовать кристалл 12 МГц, тогда вам следует выбрать вариант полного поворота кристалла.
ИсточникамClocks обычно требуется немного времени, чтобы разогреться и начать давать нам надежный сигнал при включении микроконтроллера. Это называется временем запуска. Чтобы не рисковать, вы должны установить максимальное время запуска, чтобы дать часам столько времени, сколько нужно для набора скорости. На самом деле максимальное время запуска в любом случае составляет всего несколько миллисекунд! Итак, чтобы быть в безопасности, вы должны выбрать время запуска 16K CK и дополнительную задержку 65 мс.
Если вы используете avrdude, то я счел наиболее полезным использовать калькулятор предохранителей AVR для команд avrdude, и ссылка: http://www.engbedded.com/fusecalc/. Независимо от того, какой аргумент генерируется в калькуляторе предохранителей AVR, вы должны скопировать и вставить после этого аргумента (если вы используете устройство USBASP с avrdude, в противном случае вам придется использовать команды в соответствии с вашим устройством) …
avrdude -c usbasp -p m168
например в вашем случае вы можете использовать эту команду…
avrdude -c usbasp -p m168 -U lfuse: w: 0xf7: m -U hfuse: w: 0xdf: m -U efuse: w: 0xf9: m
В случае каких-либо проблем с предохранителем, вы можете пропустить это и написать только
avrdude -c usbasp -p m168 -U lfuse: w: 0xf7: m -U hfuse: w: 0xdf: m
Этот учебник может оказаться полезным … http://www.ladyada.net/learn/avr/fuses.html, а также просмотреть раздел «Часы» в таблице данных микроконтроллера.
Сообщите мне, если есть еще сомнения.
Настройки предохранителей AVR – блог Embedded Electronics
Правильная установка предохранителей AVR – самая важная и не менее запутанная часть для многих новичков. В этом посте я представил некоторые из готовых к использованию настроек битов предохранителей и соответствующие командные файлы, которые можно использовать с AVRdude.
Ссылка для загрузки командных файлов avrdude (для использования с USBasp) приведена в конце этого сообщения.
Микроконтроллер | H предохранитель | л предохранитель | Описание |
ATmega16 / 32 | 0x99 | 0xE1 | Заводские настройки по умолчанию для ATmega16 / 32.Предохранитель H: JTAG: включен ОКР: отключено Программирование SPI: включено CKOPT: незапрограммированный EEPROM Preserve: незапрограммировано (EEPROM не сохраняется) Размер ЗАГРУЗКИ: 1024 слова Вектор сброса: флэш-код пользователя L предохранитель: Уровень затемнения: 2,7 В Обнаружение потемнения: отключено Время запуска: по умолчанию Источник тактовой частоты: внутренний, 1 МГц |
ATmega16 / 32 | 0xD9 | 0xFF | Внешний кристалл до 16 МГц, JTAG отключен.Остальные параметры: По умолчанию. |
ATmega16 / 32 | 0xD9 | 0xE4 | Внутренний генератор 8 МГц, JTAG отключен. Остальные параметры: По умолчанию. |
ATmega8 | 0xD9 | 0xE1 | Заводские настройки по умолчанию для ATmega8. Предохранитель H: Сброс отключен: не запрограммирован (контакт сброса включен) Сторожевой таймер: выключен Программирование SPI: включено CKOPT: незапрограммированный EEPROM Preserve: незапрограммировано (EEPROM не сохраняется) Размер ЗАГРУЗКИ: 1024 слова Вектор сброса: флэш-код пользователя L предохранитель: Уровень затемнения: 2.7В Обнаружение потемнения: отключено Время запуска: по умолчанию Источник тактовой частоты: внутренний, 1 МГц |
ATmega8 | 0xD9 | 0xEF | Внешний кристалл до 16 МГц. Остальные параметры: По умолчанию. |
ATtiny13 | 0xFF | 0x6A | Заводские настройки по умолчанию для ATtiny13. Предохранитель H: Самостоятельное программирование: отключено debugWire: отключено Обнаружение потемнения: отключено Сброс отключен: не запрограммирован (контакт сброса включен) L предохранитель: Программирование SPI: включено EEPROM Preserve: незапрограммировано (EEPROM не сохраняется) Сторожевой таймер: выключен Деление часов на 8: включено Время запуска: по умолчанию Источник часов: внутренний, 9.6 МГц |
ATtiny13 | 0xFF | 0x69 | Внутренний генератор 4,8 МГц, разделите тактовую частоту на 8. Остальные параметры: По умолчанию |
ATtiny13 | 0xFF | 0x79 | Внутренний генератор 9,6 МГц, частота не делится на 8. Остальные параметры: По умолчанию. |
Программирование предохранителей является наиболее важным, и любая ошибка может привести к неработающему контроллеру AVR.Я также создал командные файлы DOS, которые можно использовать для применения вышеупомянутых настроек с AVRdude и USBasp. Вы можете скачать эти файлы по адресу:
AVR Dude – командные файлы DOS для настройки битов предохранителей с помощью USBasp. [Примечание. Ваш антивирус может пометить эти файлы как подозрительные, поскольку они являются исполняемыми BATCH-файлами. Игнорируйте эти предупреждения или временно отключите антивирус]
https://www.dropbox.com/s/k0q52biat2h9m8m/AVRDude_Batch%20Programs%20for%20fuse%20bit%20settings.zip?dl=0
[Всего: 4 Среднее: 4/5]
Нравится:
Нравится Загрузка…
СвязанныеAvr Основы предохранителей: Запуск Avr с внешними часами: 6 шагов
Перед тем, как начать, нам нужно посмотреть на биты предохранителя Atmega8 и их начальное значение. Поскольку я делаю это поучительно с мобильного, я сделал таблицу, содержащую необходимые детали. Я создал его с помощью приложения Google Sheet для Android. Я не мог найти способ преобразовать их в картинки. Итак, я публикую ссылку.
Плавкие вставки Atmega 8 (тот, который я использую в этом руководстве)
https: // docs.google.com/spreadsheets/d/1haE2Sprdsa-NgKYsOQlwI99WHfGqCItJutG4h-MnOus/edit?usp=docslist_api
Теперь мы переходим к деталям того, как программировать биты предохранителей в вашем AVR в зависимости от конкретного программатора, который вы используете. Сначала мы должны проконсультироваться с инструкциями программиста о деталях. Например, если вы используете STK600 с AVR Studio, в окне STK600 есть вкладка с надписью «Предохранители», где вы устанавливаете различные биты и где вы можете программировать, проверять или считывать биты предохранителей.
(в моем примере я использую Atmega 8.Я в основном использую Atmega 8, потому что она дешевая и в ней достаточно памяти для большинства моих проектов).
Большинство людей не понимают эту тему. Проще говоря, существует только два типа предохранителей: предохранитель высокого уровня (hfuse) и предохранитель низкого уровня (lfuse), некоторые микроконтроллеры имеют дополнительный байт предохранителя, известный как расширенный предохранитель (efuse).
Самое запутанное здесь. Непрограммированное состояние бита предохранителя – высокий логический уровень или 1, программирование любого бита предохранителя изменит его уровень на низкий логический уровень или 0.
“Исключение, которое следует иметь в виду, – биты предохранителя, относящиеся к загрузчику, недоступны из программное обеспечение, но к ним можно получить доступ в режиме программирования с помощью инструмента параллельного / последовательного программирования.”
Как описано на рисунке выше, показан предохранитель вместе с его битовым значением и битовым номером. Некоторые функции вышеупомянутых предохранителей: –
(я использовал таблицу данных Atmega 8 для диаграммы, которую я опубликовал) .
Старший байт предохранителя (hfuse)
1) Первый бит – это BOOTRST, который по умолчанию не запрограммирован (1) .Если этот бит запрограммирован (0), то после включения питания или сброса устройства он начинает выполнение программы из раздела памяти загрузчика. Проще говоря, если для прошивки MCU используется загрузчик, этот бит должен быть включен.Если вы просто загружаете прошивку с помощью программатора ISP, оставьте этот бит нетронутым.
BOOTSZ0 и BOOTSZ1 также важны, если используется загрузчик. Эти биты позволяют выбрать размер раздела загрузчика.
2) Следующий бит – EESAVE. Если этот предохранитель запрограммирован (записав в него 0), память EEPROM остается нетронутой во время процедуры Chip Erase. Иногда этот предохранитель может оказаться полезным. Например, если вы храните некоторые важные данные в памяти EEPROM, такие как значения калибровки, и вам нужно обновить программу без потери этих данных, запрограммируйте этот бит.Но если вы хотите всегда иметь чистый чип после стирания, оставьте этот бит нетронутым (установите значение 1).
3) Бит WDTON используется для первоначальной установки сторожевого таймера. Если вы запрограммируете это, ваш сторожевой таймер будет всегда включен и будет периодически сбрасывать микросхему, если не будут приняты особые меры. Если сторожевой таймер не нужен, оставьте его незапрограммированным.
4) Бит SPIEN используется для отключения режима последовательного программирования ISP. На самом деле отключить этот бит в последовательном режиме невозможно. Это должно быть сделано посредством программирования высокого напряжения.
5) Такая же ситуация и с битом RSTDSBL. Он используется для отключения функции сброса, которая преобразует вывод RESET в ввод / вывод. Как правило, это не рекомендуется. И его нельзя отключить, когда устройство запрограммировано в режиме ISP.
6) Бит CKOPT используется для выбора опций генератора.
Низкие предохранители (lfuse)
Давайте посмотрим на младшие байты предохранителей.
1) Группа из четырех одинаковых битов от CKSEL0 до CKSEL3 используется для выбора параметров синхронизации. По умолчанию предохранители от CKSEL0 до CKSEL3 установлены для выбора внутреннего RC-генератора 8 МГц.Но мы знаем, что AVR можно синхронизировать и другими способами:
* Калиброванный внутренний RC-генератор (по умолчанию 8 МГц)
* Внешний RC-генератор
* Внешний кварцевый или кварцевый резонатор
* Внешний низкочастотный кварц
* Внешний источник тактового сигнала
Я объяснил о SUT (время запуска) на следующем шаге.
Я напишу о том, как вычислить эти значения самостоятельно, позже в этом руководстве.
2) BODEN или бит разрешения обнаружения потемнения включает обнаружение потемнения.Обнаружение перебоев в работе обычно отключено (1). Установка этого бита на низкий уровень (0) позволяет обнаруживать потемнение. Причина этой особенности в том, что когда напряжение питания становится ниже, чем напряжение, требуемое микроконтроллером, он начинает работать хаотично. Он может начать стирать собственную память или запускать случайные разделы со своей флеш-памяти. Чтобы избежать этого, предусмотрена функция обнаружения потемнения. Как только напряжение питания упадет ниже установленного уровня BOD, микросхема безопасно отключится. Когда напряжение питания снова нормализуется, микросхема запускается заново.
BODLEVEL – С помощью этого бита мы можем установить уровень обнаружения сбоев. Например, если микроконтроллер работает от 3,3 вольт, мы можем установить уровень обнаружения отключения питания на уровне 2,7 вольт, чтобы, если напряжение питания станет ниже этого значения, микроконтроллер безопасно отключится.
Здесь стоит отметить интересную особенность: другие микроконтроллеры AVR, такие как Atmega 32, имеют некоторые предохранители, отличающиеся, например, в старшем байте предохранителя у них есть OCDEN и JTAGEN, а в Atmega 328p есть DWEN и т. Д.
Прошу прощения за изображения низкого качества, потому что я делаю это инструктируемым с моего андроида.
Установка битов предохранителя АРН
Все мы знаем, как работает микросхема AVR ATmega32A. Во всех наших предыдущих уроках мы использовали внутренние часы с частотой 1 МГц для управления микросхемой AVR. Это настройка часов по умолчанию, с которой чип ATmega поставляется с завода. В этом уроке мы научимся настраивать биты предохранителя AVR для использования разной тактовой частоты для различных приложений. Это важно там, где нам требуется очень точное время, например, для реализации последовательного UART или USB-соединения.У нас есть предохранители в микроконтроллерах AVR. Мы можем использовать эти предохранительные биты для синхронизации микроконтроллера с желаемой частотой.
Давайте сначала разберемся с основной концепцией и идеями, связанными с настройкой источника синхронизации (внутреннего или внешнего). Я настоятельно рекомендую открыть техническое описание ATmega32A (или любого вашего микроконтроллера) на время этого руководства и вкратце пролистать главу о системных часах и параметрах часов (стр. 25). Щелкните здесь, чтобы просмотреть техническое описание ATmega32A.
Что такое биты предохранителя AVR?
Как мы все знаем, микроконтроллер AVR обычно имеет три области памяти: FLASH, которая предназначена для программного кода, SRAM для переменной времени выполнения и EEPROM, которая может использоваться кодом пользователя для хранения данных, которые должны быть сохранены, когда MCU выключен.Теперь замок / предохранители вместе образуют четвертую область памяти, доступную для программирования. Он содержит несколько байтов для предохранителей: младший байт, старший байт.
Прежде чем мы начнем анализировать предохранители и запорные биты. Мы должны помнить, что бит, установленный в «0», означает запрограммированный, а бит, установленный в «1», означает незапрограммированный. Это немного сложно и очень важно отметить, прежде чем мы продолжим.
В этом уроке мы хотим показать, как вы можете синхронизировать свой микроконтроллер с разной частотой (установка битов предохранителя avr).Обычно есть только два байта предохранителя: старший и младший. Мы больше сосредоточимся на его использовании. Практический пример в этом руководстве позволит вам полностью понять концепцию, и вы будете готовы к дальнейшим экспериментам самостоятельно. Мы рассмотрим биты замков в следующем уроке. Расположение конкретных битов предохранителя различается для всех байтов предохранителя в зависимости от используемого чипа AVR. Поэтому обязательно запишите их, прежде чем устанавливать. В качестве примера мы возьмем микроконтроллер ATmega32A, и вот для него все байты предохранителей.
Младший байт предохранителя – AVR Высокий байт предохранителя – AVRЗначение по умолчанию для бита предохранителя ATmega32 / 32A – 0x99E1, т.е. высокий предохранитель: 0x99 и низкий предохранитель: 0xE1, при этом частота настройки по умолчанию установлена на 1 МГц, внутренний RC-генератор, время запуска: 6CK + 64 мс:
Заявление об отказе от ответственности: Это руководство предназначено для информационных целей; настраивайте биты предохранителей на свой страх и риск.
Описание каждого бита предохранителя:
BODLEVEL: Уровень срабатывания BOD (обнаружение пониженного напряжения) может быть выбран с помощью этого бита предохранителя.Когда запрограммирован (0) уровень запуска составляет 4 В, а когда не запрограммирован (1) уровень запуска составляет 2,7 В
BODEN: ATmega32A имеет встроенную схему обнаружения пониженного напряжения (BOD) для контроля уровня VCC во время работы путем сравнения его с фиксированным уровнем запуска. Когда BOD включен (запрограммирован BODEN) и VCC уменьшается до значения ниже уровня срабатывания, немедленно активируется сброс пониженного напряжения. Когда VCC превышает уровень запуска, микроконтроллер снова запускается.
SUT1: 0: Эти биты выбирают время запуска.Значение по умолчанию SUT1: 0 приводит к максимальному времени запуска (6CK и дополнительная задержка 65 мс после RESET [Ссылка Таблица: 8-9, Страница №: 30].
CLKSEL [3-0]: Эти биты используются для выбора различных доступных опций синхронизации. Значение по умолчанию для CLKSEL [3..0] – 0001, т.е. внутренний RC-генератор, работающий на частоте 1 МГц. Если вы хотите добавить внешний кварцевый резонатор, вам необходимо изменить значение в соответствии с [Таблица 8-1, Страница №: 26]. Некоторые общие значения битов предохранителей приведены в конце этой статьи.
OCDEN: Этот вывод используется для включения или отключения отладки на кристалле.Это позволяет эмулировать микроконтроллер в реальном времени при работе в целевой системе. По умолчанию он отключен, поскольку «1» означает, что он не запрограммирован.
JTAGEN: Для отладки встроены интерфейсы JTAG. Он включен в новом микроконтроллере. Вот почему некоторые новички говорят: «PORTC ATmega32 не работает должным образом», отключите его, если вы не используете JTAG, установив бит JTAGEN 1 (высокий).
SPIEN: Значение 0 (запрограммировано) означает, что последовательное программирование ATmega32 / 32A включено.Не меняйте это, если у вас нет параллельного программиста! Поскольку однажды отключенный ATmega32A не может быть запрограммирован с помощью последовательного программатора.
CKOPT: Предохранитель CKOPT выбирает между двумя различными режимами усилителя генератора. Когда CKOPT запрограммирован, выход генератора будет колебаться с полным размахом на выходе от Rail-to-Rail. Когда не запрограммирован, генератор имеет меньший размах выходного сигнала. Если вы используете внешний генератор, лучше запрограммировать CKOPT, т.е. CKOPT = 0
EESAVE: Если запрограммировано (0), это будет сохранять EEPROM от стирания во время стирания чипа, иначе EEPROM также будет стерто с флэш-памятью.
BOOTSZ0 и BOOTSZ1: Эти биты используются для установки размера загрузчика
BOOTRST: Если бит BOOTRST запрограммирован (0), устройство перейдет на первый адресный блок загрузчика.
Пример: установка битов предохранителя АРН
На этом этапе вы готовы синхронизировать свой микроконтроллер с разными частотами. В этом примере мы будем генерировать звуковой сигнал с помощью пьезодиска. И влияние будет отображаться в виде изменения звуковых сигналов. Рассчитаем биты предохранителей для разной тактовой частоты.Вот замечательная программа для расчета предохранителей для вас AVR Fuse Calculator
Случай 1: Внутренняя частота 1 МГц (по умолчанию), Низкий предохранитель: 0xE1 Высокий предохранитель: 0x99
Случай 2: Внутренняя частота 8 МГц, Низкий Предохранитель: 0xE4 Высокий Предохранитель: 0x99
Корпус 3: Внешний кристалл 16 МГц, Низкий предохранитель: 0xFF Высокий предохранитель: 0x99
Мы надеемся, что это руководство поможет вам понять предохранители AVR. Мы рекомендуем вам поиграться с микросхемой AVR, чтобы сжечь предохранители и увидеть удар.Не бойтесь попробовать самостоятельно и не стесняйтесь оставлять вопросы / комментарии ниже.
Вот видео, которое представляет собой пошаговое руководство. Также влияние было продемонстрировано в живой демонстрации: Установка битов предохранителя AVR
Как установить предохранители AVR – PocketMagic
Для большинства моих проектов, связанных с микроконтроллерами, я стараюсь описать все подробно, но я просто понял, что не уделял достаточно внимания тому, чтобы показать, как настроить плавкие вставки AVR, чтобы AVR работал с различными внешними кристаллами, 8 МГц, 16 МГц, и Т. Д.Я в основном работаю с мегаконтроллерами (atmega8, atmega16, atmega128, atmega168, atmega328p), но информация в этой статье применима ко всем другим микроконтроллерам AVR.
Метизные инструменты
Для установки плавких вставок вы можете использовать тот же инструмент, что и для записи .hex. В моем случае это мой надежный программатор USBAsp USB, который отлично работает!
Программные средства
Здесь все немного сложнее. С одной стороны, вам нужно программное обеспечение, которое работает с USBAsp, но с другой стороны, вам нужно правильно вычислить значения fusebit, которые будут запрограммированы в вашем AVR.
Для первого использую Winavr. Если работа с инструментом командной строки кажется вам сложной, рассмотрите возможность использования альтернатив, таких как Extreme Burner.
Для вычисления плавких вставок существует множество веб-страниц, которые помогут вам достичь цели в несколько простых шагов: здесь или здесь. Подойдет любой из этих двух. Зайдя на одну из этих страниц, вы должны выбрать AVR, для которого нужно запрограммировать блоки предохранителей, после чего появятся несколько таблиц с явно сложными настройками:
Вот несколько деталей, которые вы должны знать, чтобы помочь вам:
Выбор часов
Управляет тактовой частотой микросхемы.В раскрывающемся меню отображается большой список опций, но, внимательно прочитав их, вы быстро увидите, что все они упоминают Источник часов и Запуск часов. Неправильные настройки часов могут сделать ваш AVR непригодным для использования. Если это произойдет, обратитесь к врачу Fusebit ниже, чтобы узнать, как сбросить предохранители и «оживить» ваш AVR.
Источник тактовой частоты содержит следующее: внешняя тактовая частота
, внутренняя частота 8 МГц, внутренняя частота 4 МГц, внутренняя частота 128 кГц, внешний кристалл (0,4-0,9 МГц), внешний кристалл (0.9–3,0 МГц), внешний кристалл (3,0–8,0 МГц) или внешний кристалл (8,0 МГц +)
Запуск тактовой частоты может быть одним из следующих:
14CK + 0 мс, 14CK + 4 мс, 14CK + 65 РС.
Внешние часы означает, что прямоугольный сигнал вводится на вывод CLOCK-IN с помощью микросхемы, генерирующей часы. Это редкость, и обычно она вам не понадобится.
Internal Clock устанавливает avr для использования внутреннего генератора, который не очень точен, но подходит для большинства проектов, не требующих точной синхронизации.Вы должны знать, что эти часы зависят от температуры и напряжения источника питания. Вы можете выбрать частоту 8 МГц, 4 МГц или 128 кГц. Тактовая частота 128 кГц предназначена для приложений с очень низким энергопотреблением, где низкая скорость помогает экономить электроэнергию. Используя внутренние часы, вам не нужно подключать кристалл, поэтому мы можем использовать выводы XTAL1 и XTAL2 для различных других целей.
Внешний кристалл используется, когда вам нужна особая тактовая частота, например 8 МГц или 12 МГц, или высокоточные часы, которые не будут изменяться в зависимости от температуры или колебаний напряжения источника питания.В этом случае необходимо подключить внешний кварцевый резонатор или генератор.
Время запуска – это короткая задержка, используемая для приостановки часов на заданное время при самом первом включении питания. На всякий случай выберите самую длинную настройку 14CK + 65 мс, если вы точно не знаете, что ваши настройки должны быть другими.
Тактовый выход (доступен только для некоторых AVR) производит прямоугольную волну той же частоты, что и тактовый вход (внутренний, внешний, кварцевый и т. Д.) На данном контакте (D2, B0 и т. Д.).Это полезно, если вы отлаживаете тактовую частоту или хотите использовать часы для управления другим чипом.
Clock Divide (доступно только для некоторых AVR), заставляет чип делить тактовую частоту на 8. Таким образом, если источник синхронизации установлен на Internal 8MHz и у вас установлен этот предохранитель, тогда вы действительно будете работать на 1MHz. . По умолчанию это включено.
Отключение сброса , превращает вывод сброса в обычный вывод вместо специального вывода (как он установлен по умолчанию). Если этот предохранитель включен (Reset Disabled), вы больше не сможете программировать чип с помощью ISP.Будьте осторожны с этой опцией и никогда не включайте ее, если вам действительно не нужна одна дополнительная булавка. Если вы установили предохранитель по ошибке и больше не можете получить доступ к AVR, обратитесь к врачу Fusebit, чтобы узнать, как сбросить предохранители и «оживить» ваш AVR.
Обнаружение пониженного напряжения Предохранители устанавливают пороговое значение напряжения для цепи защиты от пониженного напряжения. «Понижение напряжения» происходит, когда напряжение падает, и радиочасы могут перестать работать: напряжение питания слишком низкое для надежной работы на заранее заданном уровне.Пример: ATtiny2313 может работать так же быстро на частоте 20 МГц, но только при напряжении питания от 4,5 до 5,5 В. Если напряжение падает ниже 4,5 В, AVR может вести себя нестабильно, стирая или перезаписывая ОЗУ и EEPROM, он также может запускать случайный фрагмент флэш-программы, все в одном действии с непредсказуемыми результатами, ничего, что вы бы хотели, чтобы ваше оборудование делать. Чтобы держать его под контролем, установите пониженное напряжение на 4,3 В. Если напряжение упадет ниже этого порога, микросхема выключится, пока напряжение не вернется.Затем он будет сброшен и начнется заново. Если микросхема предназначена для работы при 5 В, установите пониженное напряжение на 4,3 В. Если микросхема может работать до 3,3 В, вы можете установить снижение напряжения на 1,8 В. Если чип является «совместимым с низким напряжением», например attiny2313V (который может работать до 1,8 В, если он работает на частоте 4 МГц или меньше), вы можете установить пониженное напряжение на 1,8 В. Вы можете прочитать больше в таблице данных.
По умолчанию этот параметр отключен. Если ваш AVR использует загрузчик или EEPROM, вы должны установить BOD для безопасности!
Программирование SPI (предохранитель SPIEN) , если этот предохранитель не включен, часть должна быть запрограммирована с использованием высокого напряжения, и интерфейс SPI не будет использоваться (так что USBASP для вас не будет).Будьте осторожны при отключении этого предохранителя, так как без программатора высокого напряжения ваш AVR может выйти из строя. Также обратитесь к врачу Fusebit ниже, чтобы узнать, как сбросить предохранители и «оживить» ваш avr.
В результате тщательного выбора настроек FUSEBIT вы получите несколько чисел в HEX, представляющих НИЗКИЙ ПРЕДОХРАНИТЕЛЬ, ВЫСОКИЙ ПРЕДОХРАНИТЕЛЬ, а для некоторых АРН – РАСШИРЕННЫЙ ПРЕДОХРАНИТЕЛЬ.
Чтобы установить их с помощью AVRDUDE (WinAVR) или Extreme Burner, см. Примеры ниже:
Примеры
Настройки по умолчанию ATMega8 : внутренний генератор 1 МГц
avrdude Синтаксис:
avrdude -p atmega8 -c usbasp -U lfuse: w: 0xE1: m -U hfuse: w: 0xD9: m
Extreme burner
Как видите, номера lfuse и hfuse совпадают (0xE1 и 0xD9).Чтобы сэкономить на длине статьи и повысить удобочитаемость, я покажу только настройки AVRdude, в то время как вы можете легко вставить эти числа в Extreme Burner для тех же результатов.
Внешний кристалл ATMega8 8 МГц
avrdude -p atmega8 -c usbasp -U lfuse: w: 0xDC: m -U hfuse: w: 0xD9: m
Внешний кристалл ATMega8 16 МГц
avrdude -p atmega8 -c usbasp -U lfuse: w: 0xFF: m -U hfuse: w: 0xC9: m
ATMega128 по умолчанию
avrdude -p atmega128 -c usbasp -U lfuse: w: 0xE1: m -U hfuse: w: 0x99: m
Внешние кварцевые предохранители ATMega128 16 МГц
avrdude -p atmega128 -c usbasp -U lfuse: w: 0xFF: m -U hfuse: w: 0x89: m
Предохранители по умолчанию ATMega168, внутренний генератор 1 МГц
avrdude -p atmega168 -c usbasp -U lfuse: w: 0x62: m -U hfuse: w: 0xDF: m -U efuse: w: 0x1: m -U lock: w: 0xFF: m
Внешние кварцевые предохранители ATMega168 16 МГц
avrdude -p atmega168 -c usbasp -U lfuse: w: 0xdf: m -U hfuse: w: 0xDF: m -U efuse: w: 0xF9: m -U lock: w: 0xFF: m
Предохранители по умолчанию ATMega328p, внутренний генератор 1 МГц
avrdude -p atmega328p -c usbasp -U lfuse: w: 0x62: m -U hfuse: w: 0xD9: m -U efuse: w: 0x7: m -U lock: w: 0xFF: m
Внешний кристалл ATMega328p 3-8 МГц
avrdude -p atmega328p -c usbasp -U lfuse: w: 0xdc: m -U hfuse: w: 0xDF: m -U efuse: w: 0xFF: m -U lock: w: 0xFF: m
Настройки внешних кварцевых предохранителей ATMega328p 16 МГц
avrdude -p atmega328p -c usbasp -U lfuse: w: 0xdf: m -U hfuse: w: 0xDF: m -U efuse: w: 0xF9: m -U lock: w: 0xFF: m
Доктор Фусебит
Fusebit Doctor, разработанный manekinen, представляет собой устройство для ремонта неисправных AVR семейств ATmega и ATtiny путем записи правильных предохранительных битов по умолчанию.Наиболее частыми причинами выхода из строя AVR являются неправильные настройки источника синхронизации (предохранители CKSEL), отключенное программирование SPI (предохранитель SPIEN) или отключенный вывод сброса (предохранитель RSTDISBL). В этой схеме используется метод параллельного и последовательного программирования высокого напряжения: HVPP = параллельное программирование высокого напряжения и HVSP = последовательное программирование высокого напряжения. Устройство
Manekinen поставляется с базой данных поддерживаемых микросхем, хранящейся в основном микроконтроллере платы, которая используется для распознавания неисправных микросхем и восстановления их исходных настроек.Для этого нам нужно только вставить их в правильную розетку и нажать кнопку СТАРТ. Так легко. Поскольку все ресурсы проекта были любезно предоставлены автором, я построил свою собственную плату для ремонта некоторых из моих неисправных микросхем.
У одного из моих atmega328p были неправильные настройки fusebit из-за некоторых сложностей при написании прошивки.