Помогите с такой задачей. Есть МК атмега8. Нужно сделать так, чтобы при отключении питания МК сохранял некие переменные в EEPROM. Есть мысль подтянуть ногу к питанию через резистивный делитель и задействовать в цифровом режиме. Там есть определённый барьер (вроде около 1.5В) ниже которого лежит низкий уровень, а выше, соответственно высокий. Задумка такая, что при падения напряжения питания с 5В, скажем, до 3 напряжение на делители уменьшится и пин распознает низкий уровень, по появлении которого МК и будет записывать данные в EEPROM. Есть только сомнения, в плане того, что при падении напряжения питания может упасть и "восприимчивость" порта к порогу, который может тоже снижаться до тех пор, пока МК не отрубится. Подскажите пожалуйста, как лучше реализовать такую задачу?
Мелкие вопросы по МК и ПЛИС.
- Сообщения: 2316
- Зарегистрирован: Вс июн 26, 2011 20:03:21
Добрый вечер!!!
Помогите с такой задачей. Есть МК атмега8. Нужно сделать так, чтобы при отключении питания МК сохранял некие переменные в EEPROM. Есть мысль подтянуть ногу к питанию через резистивный делитель и задействовать в цифровом режиме. Там есть определённый барьер (вроде около 1.5В) ниже которого лежит низкий уровень, а выше, соответственно высокий. Задумка такая, что при падения напряжения питания с 5В, скажем, до 3 напряжение на делители уменьшится и пин распознает низкий уровень, по появлении которого МК и будет записывать данные в EEPROM. Есть только сомнения, в плане того, что при падении напряжения питания может упасть и "восприимчивость" порта к порогу, который может тоже снижаться до тех пор, пока МК не отрубится. Подскажите пожалуйста, как лучше реализовать такую задачу?
Помогите с такой задачей. Есть МК атмега8. Нужно сделать так, чтобы при отключении питания МК сохранял некие переменные в EEPROM. Есть мысль подтянуть ногу к питанию через резистивный делитель и задействовать в цифровом режиме. Там есть определённый барьер (вроде около 1.5В) ниже которого лежит низкий уровень, а выше, соответственно высокий. Задумка такая, что при падения напряжения питания с 5В, скажем, до 3 напряжение на делители уменьшится и пин распознает низкий уровень, по появлении которого МК и будет записывать данные в EEPROM. Есть только сомнения, в плане того, что при падении напряжения питания может упасть и "восприимчивость" порта к порогу, который может тоже снижаться до тех пор, пока МК не отрубится. Подскажите пожалуйста, как лучше реализовать такую задачу?
- Реклама
Была ветка, на эту тему. Вкратце, нужно отдельное питание МК с электролитическим конденсатором по питанию, емкостью несколько сотен микрофарад - рассчитывается для количества байтов, которые надо сохранить. Пропадание питания смотреть или цифровой ножкой, но подключенной через делитель к другой части схемы, в которой напряжение проседает быстрее, или аналоговым компаратором подключенным вторым входом к внутреннему ИОН. Так вполне реально сохранять несколько байтов. Обязательно предпринять обычные жесткие меры для сохранности ЕЕПРОМ, например включить БОД.
- Сообщения: 2316
- Зарегистрирован: Вс июн 26, 2011 20:03:21
А может диод после делителя поставить, чтоб напряжение просело побольше?
Нет.
http://radiokot.ru/forum/viewtopic.php?f=20&t=62877
Вот, кстати, ветка с обсуждением, хотя там были споры, т.к. каждый привык делать по-своему.
http://radiokot.ru/forum/viewtopic.php?f=20&t=62877
Вот, кстати, ветка с обсуждением, хотя там были споры, т.к. каждый привык делать по-своему.
Питание на контроллер подать через диод и обязательно конденсатор в питании. Свободный вывод порта повесить через резистор на незащищенную цепь питания - до диода, при его пропадании срабатывает прерывание по уровню на порту, в прерывании экстренно отключаешь все нагрузки контроллера(светодиоды например) - иначе через них преждевременно разрядится конденсатор. Это буквально 10-20 тактов, затем можно сохранять в ЕЕПРОМ и уходить в бесконечный цикл.
А по сбросу контроллера, прежде чем разрешить прерывания - перевести вывод в режим входа и дождаться там "1", чтобы предотвратить ситуацию когда в процессе выключения контроллер случайно сбросится и на остатках конденсатора попытается сохранить в EEPROM еще раз, естественно испортив значение в ячейке.
А по сбросу контроллера, прежде чем разрешить прерывания - перевести вывод в режим входа и дождаться там "1", чтобы предотвратить ситуацию когда в процессе выключения контроллер случайно сбросится и на остатках конденсатора попытается сохранить в EEPROM еще раз, естественно испортив значение в ячейке.
- Реклама
- Сообщения: 2316
- Зарегистрирован: Вс июн 26, 2011 20:03:21
Попробовал смодулировать в протеусе. Получилось весьма не плохо, при подении напряжения до 4В даже простой делитель на резисторах дал не плохой эффект. Напряжение питания у меня 5В, ёмкость 1000мкФ, потребляемый ток около 250мА, записать нужно всего 5 переменных в int. Вроде должно и так получится. Сделал ещё после записи вывод сообщения на дисплей. Потом на железяке попробую как себя покажет. Если ещё успею прочитать сообщение с дисплея, то значит работать будет как часы... 
250мА - это ток идущий через шины контроллера? Всю силовую часть надо оставить до диода либо при просадке напряжения и срабатывании защиты - отключить нагрузку немедленно и только после этого приступать к записи, это будет залогом нормальной работы.
- Сообщения: 2316
- Зарегистрирован: Вс июн 26, 2011 20:03:21
Всего 250мА. Попробую пока по- простому, если не прокатит, то буду пробовать всё отключать.... Спасибо за помощь!! 
- Сообщения: 32
- Зарегистрирован: Вт мар 12, 2013 05:25:54
Есть желание перенести проект с ардуины на МК.
Буду использовать atmaga64.
Какая нужна к нему обвязка?
Питаться будет от usb на компьютере или телефоне/ планшете
Буду использовать atmaga64.
Какая нужна к нему обвязка?
Питаться будет от usb на компьютере или телефоне/ планшете
- Сообщения: 16
- Зарегистрирован: Вс май 15, 2011 10:56:57
Всем привет, подскажите пожалуйста как можно соединить между собой 2е Atmega16? Если можно, то рисунком какие ножки соединять между собой
P.S.: у одной Атмега16 нехватает мне ножек, поэтому хочу взять 2е чтобы они могли обмениваться информацией
P.S.: у одной Атмега16 нехватает мне ножек, поэтому хочу взять 2е чтобы они могли обмениваться информацией
А по какому интерфейсу хотите сделать обмен ?
А это зависит от того, что будет подключено к контроллеру. Сам по себе контроллер работает если на него просто подать питание. Для надежности нужен резистор 5-10к с ресета на + и керамика 0.1мкФ по питанию. Если используется внешний кварц, то соответственно кварц+конденсаторы, все это есть в даташите. Остальное зависит от вашей конкретной схемы.z00lu писал(а):Буду использовать atmaga64.
Какая нужна к нему обвязка?
UART (2 ноги: RXD-TXD крест-накрест), SPI (4 ноги:MOSI c MISO крест накрест, CLK, SS напрямую), I2C/TWI (2 ноги - SCL,SDA - напрямую)Nemon писал(а):Всем привет, подскажите пожалуйста как можно соединить между собой 2е Atmega16?
А вот тут уже напрашивается использование расширителей вывода вместо лишнего контроллера. Для этого проще всего использовать регистры например 74hc595 (для вывода) и 597 (для ввода) или пару HC164/165.Nemon писал(а):P.S.: у одной Атмега16 нехватает мне ножек, поэтому хочу взять 2е чтобы они могли обмениваться информацией
Я больше люблю SPI. Быстрый, простой, аппаратный. Но для односторонней передачи нужны три линии, для двусторонней - четыре.
Для большей экономии ножек могут быть лучше I2C или UART. Еще они лучше, если устройства на разных платах, т.е. расстояние между МК больше 10-15 сантиметров.
А я не против использования нескольких МК! Это более гибкое решение, чем сдвиговые регистры, но решение за разработчиком.
Для большей экономии ножек могут быть лучше I2C или UART. Еще они лучше, если устройства на разных платах, т.е. расстояние между МК больше 10-15 сантиметров.
А я не против использования нескольких МК! Это более гибкое решение, чем сдвиговые регистры, но решение за разработчиком.
- Сообщения: 535
- Зарегистрирован: Вт авг 28, 2012 22:21:33
Почему три линии? Достаточно SI/SO и SCK, то есть две. Для двухстороннего соответственно три: SI, SO, SCK.
У многих микросхем с SPI загрузка данных или выполнение команды происходит по переднему фронту и без линии CS они просто не будут работать. В той же меге в режиме слейва низкий уровень SS включает логику SPI, а высокий уровень делает ей сброс. В конкретном случае конечно можно и обойтись без нее.
- Сообщения: 16
- Зарегистрирован: Вс май 15, 2011 10:56:57
- Сообщения: 73
- Зарегистрирован: Вт июн 22, 2010 20:15:17
в чем может быть следующий прикол: посадил пару кнопкок на INT1 и INT0 меги16... в протеусе все идеально, а на реальном железе работает только кнопка от INT0. контакт между кнопкой и ногой INT1 есть 146%))) а прерывание не срабатывает... в чем может быть косяк?
Код: Выделить всё
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: On
// INT1 Mode: Falling Edge
// INT2: Off
GICR|=0xC0;
MCUCR=0x0A;
MCUCSR=0x00;
GIFR=0xC0;
// Обработка внешнего прерывания по INT0
interrupt [EXT_INT0] void ext_int0_isr(void)
{
point_no++;
if (point_no >= menu[menu_no].count) point_no = 0;
LCD_OK();
}
// Обработка внешнего прерывания по INT1
interrupt [EXT_INT1] void ext_int1_isr(void)
{
menu_no++;
point_no = 0;
if (menu_no >= 4) menu_no = 0;
LCD_OK();
}
DDark, а SREG|=(1<<SREG_I) кто будет писать? Где настройка самого порта D (что-то вроде PORTD|=0x0C) или у вас подтяжка внешняя?
Обе кнопки с PD2 и PD3 на землю идут?
Схему в студию и полный код. Чудес не бывает.
Обе кнопки с PD2 и PD3 на землю идут?
Схему в студию и полный код. Чудес не бывает.
Здравствуйте. Начинаю по-тихоньку изучать микроконтроллеры. Выбор пал на AVR'ы и язык С. Нужно выбрать среду разработки и программатор под неё. AVR Studio 6 подойдет для начинающего? Если нет, то какой посоветуете? Так же вопрос о программаторе, как покупном, так и самодельном (рассматриваю оба варианта). Заранее благодарю за конструктивные ответы.
- Сообщения: 73
- Зарегистрирован: Вт июн 22, 2010 20:15:17
глобальные прерывания разрешены, PORTD = 0x0CGRAF писал(а):DDark, а SREG|=(1<<SREG_I) кто будет писать? Где настройка самого порта D (что-то вроде PORTD|=0x0C) или у вас подтяжка внешняя?
Обе кнопки с PD2 и PD3 на землю идут?
Схему в студию и полный код. Чудес не бывает.
обе кнопки на землю
в принципе проблема решена - если цеплять не на землю ножку INT1, а просто касаться рукой или подавать, например, напряжение питания - идет срабатывание прерывания) а вот на землю сажать - не идет, хотя прерывание по падающему фронту + подтяжка... странно короче, интересная тема


