UPD по совету одного человека, я добавил в функцию system_sleep() отключение аналогового компаратора для ещё большей экономии заряда батарейки. Файлы в низу статьи перезалито.
По сути этот брелок для ключей - железный генератор случайных чисел который основан на ATtiny13 - 8 bit'ый микроконтроллер который основан на архитектуре AVR от компании Atmel.
Данное устройство генерирует случайным образом число 0 или 1.
Таким образом мы можем получить ответ на любой вопрос в формате да/нет, индикация осуществляется при помощи красного и зелёного светодиодов.
Вот схема:
Как Вы видите, схема очень простая, несколько деталей всего, это достигнуто потому что в качестве основного элемента используется микроконтроллер.
Почему именно ATtiny13?
Да потому что это один из самых дешёвых микроконтроллеров компании Atmel из доступных на рынке. Лично у меня ATtiny13A стоит примерно 1 доллар. Как по мне так не сильно то и много как за брелок для ключей.
Код написан на языке ардуино и на C++.
Вот он:
Как видите у меня генерируется не псевдо случайное число(одна и та же последовательность чисел) а реальный генератор случайных чисел, этого добиться удалось при помощи функции randomSeed() в Arduino IDE.
Если данное устройство будет говорить часто ответ которого не очень то ожидаете, то можете или переназначить порты в коде (led_Yes 0 и led_No 1 ) или же перепаять светодиоды местами, кому как удобно. Так же можно изменить тайм аут по котором светодиод перестанет гореть и микроконтроллер уснёт, задаётся в миллисекундах(одна тысячная секунды) при помощи директивы #define wait 5000 // тайм аут 5 сек, после 5 секунд светодиод гаснет и устройство в режим низкого потребления, так званый режим сна, ток потребления которого будет... Смотрим даташит на ATtiny13A:
0.2 мкА(микро Ампера), для сравнения - красный светодиод потребляет примерно 1.5 мА(1500 мкА).
Давайте подсчитаем на сколько нажатий хватит нашей батарейки CR2025, емкость которой к стати примерно 150 мА/ч.
При нажатии светодиод горит 5 сек, то есть 60 сек. / 5 = 12 нажатий на минуту * 60 минут = 720 непрерывных нажатий в час, за час схема будет потреблять ток 1.5 мА, при емкости в 150 мА/ч 150/1.5 мА/ч = схема проработает 100 часов, так как мы пришли к выводу что за час можно совершить максимум 720 нажатий то 720 * 100 = 72 000 нажатий до полного истощения литиевой батарейки CR2025.
Строчку #define rand_gen 3 и пин PB3 не трогаем иначе устройство будет выдавать одно и то же значение.
Запрограммировал микроконтроллер ATtiny13 при помощи Arduino IDE, как это делается смотрите ниже.
Ссылки:
Прошивка ATtiny13 при помощи Arduino.
Файлы Proteus 7, hex-файл, исходник, всё тут(download):
https://vk.com/doc256435878_337812446 (перезалито)
Фьюзы по умолчанию, как всегда:
Вот фотографии устройства:
Пару слов для буржуев:
The random answers to ATtiny13 and Arduino.
In fact, this hardware random number generator which is based on the ATtiny13 - 8 bit microcontroller based on the AVR architecture from company Atmel.
This equipment generates random 0 or 1. Thus, we can get an answer to any question in the form of yes / no indication made using red and green LEDs.
The code is written in Arduino and C++.
Вступайте в мою группу ВКонтакте:
http://vk.com/razniepodelkiblogspot
Код, фьюзы, схема и исходники ищите внизу записи.
Данное устройство генерирует случайным образом число 0 или 1.
Таким образом мы можем получить ответ на любой вопрос в формате да/нет, индикация осуществляется при помощи красного и зелёного светодиодов.
Вот схема:
Как Вы видите, схема очень простая, несколько деталей всего, это достигнуто потому что в качестве основного элемента используется микроконтроллер.
Почему именно ATtiny13?
Да потому что это один из самых дешёвых микроконтроллеров компании Atmel из доступных на рынке. Лично у меня ATtiny13A стоит примерно 1 доллар. Как по мне так не сильно то и много как за брелок для ключей.
Код написан на языке ардуино и на C++.
Вот он:
// vk.com/razniepodelkiblogspot // как прошить тини: // razniepodelki.blogspot.com/2014/05/attiny13-arduino.html #define F_CPU 1200000UL // Частота МК в герцах #include <avr/io.h> #include <avr/sleep.h> // здесь описаны режимы сна #include <util/delay.h> #define led_Yes 0 // grn #define led_No 1 // red #define rand_gen 3 #define wait 5000 // тайм аут перехода в спящий режим void setup() { //pinMode(led_Yes, OUTPUT); DDRB |= (1<<led_Yes); //pinMode(led_No, OUTPUT); DDRB |= (1<<led_No); } void loop() { randomSeed(analogRead(rand_gen)); // не псевдо радном byte randomValue; randomValue = random(0,2); // диапазон генератора случайных чисел от 0 до 1 if(randomValue > 0){ //digitalWrite(led_Yes, HIGH); PORTB |= (1<<led_Yes); } else{ //digitalWrite(led_No, HIGH); PORTB |= (1<<led_No); } _delay_ms(wait); system_sleep(); } void system_sleep(){ //digitalWrite(led_No, LOW); PORTB &= ~(1<<led_No); //digitalWrite(led_Yes, LOW); PORTB &= ~(1<<led_Yes); ADCSRA &= ~(1 << ADEN); // перед сном отключим АЦП ACSR |= (1 << ACD); // и компаратор // для уменьшения энергопотребления во сне set_sleep_mode(SLEEP_MODE_PWR_DOWN); // если спать - то на полную while(1) { sleep_enable(); // разрешаем сон sleep_cpu(); // спать! } } //Размер скетча в двоичном коде: 912 байт (из 1 024 байт максимум)
Как видите у меня генерируется не псевдо случайное число(одна и та же последовательность чисел) а реальный генератор случайных чисел, этого добиться удалось при помощи функции randomSeed() в Arduino IDE.
Если данное устройство будет говорить часто ответ которого не очень то ожидаете, то можете или переназначить порты в коде (led_Yes 0 и led_No 1 ) или же перепаять светодиоды местами, кому как удобно. Так же можно изменить тайм аут по котором светодиод перестанет гореть и микроконтроллер уснёт, задаётся в миллисекундах(одна тысячная секунды) при помощи директивы #define wait 5000 // тайм аут 5 сек, после 5 секунд светодиод гаснет и устройство в режим низкого потребления, так званый режим сна, ток потребления которого будет... Смотрим даташит на ATtiny13A:
Давайте подсчитаем на сколько нажатий хватит нашей батарейки CR2025, емкость которой к стати примерно 150 мА/ч.
При нажатии светодиод горит 5 сек, то есть 60 сек. / 5 = 12 нажатий на минуту * 60 минут = 720 непрерывных нажатий в час, за час схема будет потреблять ток 1.5 мА, при емкости в 150 мА/ч 150/1.5 мА/ч = схема проработает 100 часов, так как мы пришли к выводу что за час можно совершить максимум 720 нажатий то 720 * 100 = 72 000 нажатий до полного истощения литиевой батарейки CR2025.
Строчку #define rand_gen 3 и пин PB3 не трогаем иначе устройство будет выдавать одно и то же значение.
Запрограммировал микроконтроллер ATtiny13 при помощи Arduino IDE, как это делается смотрите ниже.
Ссылки:
Прошивка ATtiny13 при помощи Arduino.
Файлы Proteus 7, hex-файл, исходник, всё тут(download):
https://vk.com/doc256435878_337812446 (перезалито)
Вот фотографии устройства:
(Можете оценить размеры устройства на фоне моей ладони)
(Зелёным указаны перемычки)
Смотрите так же:
Прошивка бутлоадера Arduino в ATmega8, как сделать бюджетный Arduino.
Прошивка бутлоадера Arduino в ATmega8, как сделать бюджетный Arduino.
Пару слов для буржуев:
The random answers to ATtiny13 and Arduino.
In fact, this hardware random number generator which is based on the ATtiny13 - 8 bit microcontroller based on the AVR architecture from company Atmel.
This equipment generates random 0 or 1. Thus, we can get an answer to any question in the form of yes / no indication made using red and green LEDs.
The code is written in Arduino and C++.
Вступайте в мою группу ВКонтакте:
http://vk.com/razniepodelkiblogspot
Комментариев нет:
Отправить комментарий