Перейти к содержанию

Аналог Переключателя На Attiny2313


igorxvor

Рекомендуемые сообщения

Нужна схема - простой переключатель вместо механического на attiny2313, на входе две кнопки и десять выходов (можно и больше по максимально возможному для м/сх): первая кнопка после каждого нажатия поочередно по нарастающей включает с 1 по 10-й выход (на землю), вторая кнопка - по убывающей с 10-й по 1. Если при отключении эл.питания м/сх, был включен например 4 выход, то при следующем включении эл.питания 4 вывод должен остаться включенным. Спасибо за помощь.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Нужна схема - простой переключатель вместо механического на attiny2313, на входе две кнопки и десять выходов (можно и больше по максимально возможному для м/сх): первая кнопка после каждого нажатия поочередно по нарастающей включает с 1 по 10-й выход (на землю), вторая кнопка - по убывающей с 10-й по 1. Если при отключении эл.питания м/сх, был включен например 4 выход, то при следующем включении эл.питания 4 вывод должен остаться включенным. Спасибо за помощь.

т.е. алгоритм такой:

включение

если в памяти нет n, то n=1, иначе n=n(eeprom)

0)ожидаем нажатия кнопок 1 и 2; если нажата 1, то goto на 1; если нажата 2, то goto на 2;

1)set port.n("выключаем" текущий контакт, устанавливаем на нем 1); incr n(увеличиваем); reset port.n("включаем" следующий, устанавливаем на нем 0 ); goto 3

2)set port.n; decr n(уменьшаем); reset port.n; goto 3

3)записываем значение в eeprom, goto 0

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

т.е. алгоритм такой:

включение

если в памяти нет n, то n=1, иначе n=n(eeprom)

0)ожидаем нажатия кнопок 1 и 2; если нажата 1, то goto на 1; если нажата 2, то goto на 2;

1)set port.n("выключаем" текущий контакт, устанавливаем на нем 1); incr n(увеличиваем); reset port.n("включаем" следующий, устанавливаем на нем 0 ); goto 3

2)set port.n; decr n(уменьшаем); reset port.n; goto 3

3)записываем значение в eeprom, goto 0

надо немного по другому, так:

- выходы от первого до десятого обозначим как n = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;

- обозначим кнопку 1 как “plus”;

- обозначим кнопку 2 как “minus”;

включение

n=n(eeprom), иначе n=1

0) ожидаем нажатия кратковременного одной из кнопок “plus” или “minus” (т.е. надо один раз нажать и отпустить);

– если вдруг нажата “plus”, то goto на 1; (можем только плюс, но если n=10 то 10+1=10)

– а если вдруг нажата “minus”, то goto на 2; (можем только минус, но если n=1 то 1-1=1)

1) set port.n ("выключаем" текущий контакт n, устанавливаем на нем уровень “1”); incr n (увеличиваем); reset port.n ("включаем" следующий, устанавливаем на нем уровень“0”); goto 3

2) set port.n ("выключаем" текущий контакт n, устанавливаем на нем уровень “1”); decr n (уменьшаем); reset port.n ("включаем" его, устанавливаем на нем уровень “0”); goto 3

3) записываем значение в eeprom; goto 0

Ссылка на комментарий
Поделиться на другие сайты

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Секреты депассивации литиевых батареек FANSO EVE Energy

Самыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

да ниразу) ресурс большинства еепром - 1 миллион циклов... запаришься вырабатывать, кнопки раньше сломаются))

Изменено пользователем NebsteR

> Правила форума <

...из древних времен доходят до нас слухи о колдунах и волшебниках... - кто бы мог подумать, что так может начинаться дипломная работа по радиотехнике...

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Вот пример, вроде рабочий

/*****************************************************
CodeWizardAVR V2.03.9 Standard

Chip type               : ATtiny2313
AVR Core Clock frequency: 8,000000 MHz
Memory model            : Tiny
External RAM size       : 0
Data Stack size         : 32
*****************************************************/

#include <tiny2313.h>
#include <delay.h>

#define plus PINA.0
#define minus PINA.1

// Declare your global variables here  

unsigned char n=0;

eeprom unsigned char n_eep;

flash unsigned char port_out[15][2] ={
                                     {0b0111111,0b11111111}, 
                                     {0b1011111,0b11111111}, 
                                     {0b1101111,0b11111111}, 
                                     {0b1110111,0b11111111}, 
                                     {0b1111011,0b11111111}, 
                                     {0b1111101,0b11111111}, 
                                     {0b1111110,0b11111111}, 
                                     {0b1111111,0b01111111}, 
                                     {0b1111111,0b10111111}, 
                                     {0b1111111,0b11011111}, 
                                     {0b1111111,0b11101111}, 
                                     {0b1111111,0b11110111}, 
                                     {0b1111111,0b11111011},
                                     {0b1111111,0b11111101},
                                     {0b1111111,0b11111110}}; 


void main(void)
{
// Declare your local variables here
unsigned char eeprom *u_eep;
unsigned char *u_ram;
unsigned char i;
char napr;
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// входы plus PORTA.0, minus PORTA.1  
PORTA=0x03;
DDRA=0x00;

//порты PORTB и PORTD выходы
PORTB=0xFF;
DDRB=0xFF;
PORTD=0x7F;
DDRD=0x7F;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;

u_eep=&n_eep;
u_ram=&i;

*u_ram=*u_eep;

if ((i>0) && (i<15)) {
   n=i;}                

PORTD=port_out[n][0];        // вывод
PORTB=port_out[n][1];        // в порты
u_ram=&n;

while (plus && minus) {}           //ожидаем нажатия кнопки

while (1)
     {      
       if (!plus)
         { 
           delay_ms(20);
           if (!plus)
             {     
               napr=1;
             }
         } 
       if (!minus)
         {
           delay_ms(20);
           if (!minus)
             {     
               napr=0;
             }
         }
       if (napr)
         {
           if (n<14)
             { 
               n++; 
               *u_eep=*u_ram;  
               PORTD=port_out[n][0];
               PORTB=port_out[n][1];   
               delay_ms(1000);
             }
         }
       else
         {
           if (n>0)
             {
               n--; 
               *u_eep=*u_ram;   
               PORTD=port_out[n][0];
               PORTB=port_out[n][1];
               delay_ms(1000);
             }
         }      

     };
}

Покритикуйте!

Изменено пользователем Dan'nah
Ссылка на комментарий
Поделиться на другие сайты

Вот пример, вроде рабочий

.........

Покритикуйте!

Протестировал в протеусе, работает, алгоритм сохранения в eeprom правильный, алгоритм переключения вверх или вниз - правильный

но по алгоритму переключения: после нажатия кнопки переключает без перерыва,

а надо - один раз нажал PA0 > переключился один раз (с того значения которое было в eeprom) на следующий контакт, остановился и записал в eeprom это значение;

второй раз нажал РА0 > переключился на следующий и записал в eeprom это значение,

третий раз > на дальше и т.д. ,

а нажал РА1 - наоборот, с того значения которое было в eeprom,

примерно как на рисунке ниже

спасибо.

post-102183-1256586968_thumb.jpg

Изменено пользователем igorxvor
Ссылка на комментарий
Поделиться на другие сайты

Поместите строку:

while (plus && minus) {} //ожидаем нажатия кнопки

после

while (1)

{

Прога будет ожидать нажатия кнопки

при этом можно уменьшить задержку после переключения портов для более быстрого переключения при нажатой кнопке

либо, чтобы при нажатии на кнопку переключение было одинарное вместо "delay_ms(1000);" поставить "while (!plus) {}" и "while (!minus) {}"

Вродебы так, если ничО не напутал

Ссылка на комментарий
Поделиться на другие сайты

Интересно, что вы будете делать, если понадобится добавить ещё какой нибудь функционал. Например равномерно мигающая лампочка?

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

переместил строку, а как теперь создать файл .hex? Пробовал через cvavreval, но почему-то не получается, наверное что-то не так делаю.

Изменено пользователем igorxvor
Ссылка на комментарий
Поделиться на другие сайты

Вот проект. поидее не должен матюкаться :)

Всё получилось прекрасно, в протеусе тестируется правильно,

я больше силён в электронике, а в программирование приходится вникать параллельно :o , но пока еще с трудом, поэтому спасибо за помощь. :rolleyes:

Изменено пользователем igorxvor
Ссылка на комментарий
Поделиться на другие сайты

Всё получилось прекрасно, в протеусе тестируется правильно,

С протеусом у меня трудновато - еще не разобрался. Поэтому тестировал на макете (макет как раз на тинке 2313) :) все работает :)

Ссылка на комментарий
Поделиться на другие сайты

Я протэус усвоил в один момент, если надо могу помочь с прогой (42МБ)

При прошивке оставляю фьюзы с заводскими настройками как на рисунке ниже, если что не так - поправьте, т.к. сомневаюсь с SUT0:

post-102183-1256754939_thumb.jpg

Изменено пользователем igorxvor
Ссылка на комментарий
Поделиться на другие сайты

При прошивке м/сх я оставляю заводские установки фьюзов, как на рисунке ниже, если что не так - поправьте, т.к. сомневаюсь в SUT0:

У вас похоже стоит внутренний RC-генератор на 4 МГц, если не ошибаюсь (зашиваю МК uniprof-ом, а это, похоже, PonyProg)

Я протэус усвоил в один момент, если надо могу помочь с прогой (42МБ)

Протеус у меня есть, но ATtiny2313 там не нашел :(

Да, рекомендую почитать А.В. Белов "Микроконтроллеры AVR в радиолюбительской практике", там как раз про ATtiny2313 написано. написана довольно хорошо! :)

Изменено пользователем Dan'nah
Ссылка на комментарий
Поделиться на другие сайты

У меня с ATtiny2313, более новая версия

Да, это PonyProg,

Да, на 8 МГц надо ставить CKSEL 0100

Книги А.В.Белова есть, но неполные версии (без примеров)

post-102183-1256756475_thumb.jpg

Изменено пользователем igorxvor
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...