www.kn34pc.com

Форум на силистренските радиолюбители
Дата и час: 01 Окт 2022, 02:40

Часовете са според зоната UTC + 2 часа [ DST ]




Напиши нова тема Отговори на тема  [ 4 мнения ] 
Автор Съобщение
МнениеПубликувано на: 16 Окт 2017, 17:58 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1335
Местоположение: Силистра
В схема към честотомер на RA4NAL ( http://ra4nal.qrz.ru/chlcd16.shtml, viewtopic.php?f=19&t=940 ) ми прави впечатление, че няколко извода (PB4, PB5, PB6) на PIC16F628A са едновременно входове (за бутони) и изходи (за LCD дисплей).

Ясно е, че функциите са мултиплексирани по време и ще е псевдо-едновременно действието им, но ми се ще с Arduino (ATMEGA328) това задание също да мога да изпълня, когато е необходимо. Възможно ли е това?

Досега в setup съм конфигурирал извод или като вход, или като вход с pull-up резистор, или като изход:
Код за потвърждение:
pinMode(IZV_1, INPUT);
...
pinMode(IZV_2, INPUT_PULLUP);
...
pinMode(IZV_3, OUTPUT);

Въпросът е без конкретно приложение и ще е вариант за решение тогава, когато броя на свободните неконфигурирани изводи "започнат да свършват" :smile
Прикачени файлове:
chlcd16_sb_cr.gif
chlcd16_sb_cr.gif [ 14.34 KiB | Прегледано 3527 пъти ]

---
PS. Още една конструкция с PIC микроконтролер, отново извод е вход-изход ...
Очень простые часы на PIC-контроллере: http://radioshem.net/index.php?newsid=172
Прикачени файлове:
1426887822_01.jpg
1426887822_01.jpg [ 71.05 KiB | Прегледано 3526 пъти ]


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 17 Окт 2017, 22:19 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1335
Местоположение: Силистра
Първо скоростно решение:

Изпозлвайки таймера, със 100 Hz назначавам извод 10 за вход и след това: за изход.

Когато е вход проверявам дали е активиран към земя.
Когато е изход изпълянвам Т-тригерна функция, привързана към бутона (вкл/изкл)
---
R1 е ограничителен резистор за тока през светодиода.
R2 осигурява +5V при "вход" (иначе падението в светодиода е 1,6V-1,8V).
R3 e "защитен" резистор за изхода, при условие, че се "засекат" изход +5V и "земя" от бутона.
---
Да се има предвид импулсния характер на сигнала в изхода (светодиодът мига (ок. 100 Hz, настройва се) и е с коеф. на запълване 50/50. Първата ми хрумнала идея е изхода през резистор и с кондензатор към земя да управлява база на PNP транзистор).

Реалното поведение на светодиода е макс. светене при натиснат бутон и с намалена сила: при активиран извод 10 (в случая - "земя").

Това решение ми е приложимо засега.
Ако има други идеи, споделете. :wink


Прикачени файлове:
pin_in_out_01.GIF
pin_in_out_01.GIF [ 35.81 KiB | Прегледано 3517 пъти ]
pin_in_out_01.jpg
pin_in_out_01.jpg [ 481.84 KiB | Прегледано 3517 пъти ]
pin_in_out_01.zip [553 Байта]
327 пъти
Върнете се в началото
 Профил  
 
МнениеПубликувано на: 20 Мар 2020, 14:04 
Offline
Аватар

Регистриран на: 20 Мар 2020, 10:31
Мнения: 3
LZ2WSG написа:
Ако има други идеи, споделете.

Прикачени файлове:
fig2.gif
fig2.gif [ 252.64 KiB | Прегледано 508 пъти ]

Кратко описание на работата на веригата.
Дисплеят работи само за запис на данни (pin RW е свързан към общ проводник).
Докато няма щит на импулс на pin Е, нивата на напрежение в останалите контакти се игнорират от дисплея.
Следователно, докато не се появи информация, можете да използвате щифтовете на контролера като входове и бутони за разпит.
Бутоните не могат да бъдат скъсени до обикновен, в противен случай портовете на контролера ще се провалят. Тази ситуация е възможна при натискане на бутона и извеждане на информация. Така че трябва да ограничите тока до безопасна стойност. В нашия случай това е резистор. В този случай спадът на напрежението през резистора с вътрешното издърпване на контролера (~ 20k) трябва да бъде разпознат като логично "0". Следователно съпротивлението трябва да бъде избрано в рамките на 3.3k ... 4.7k. При такива рейтинги на резистора натискането на бутона не пречи на показването на информация и недвусмислено се разпознава от контролера като логично "0".
Портовете на контролера при извеждане на информация трябва да бъдат конфигурирани като изходи. След показване на информацията, портовете трябва да бъдат конфигурирани като входове с вътрешен издърпващ елемент (INPUT_PULLUP).
Библиотеката LiquidCrystal няма да работи. Трябва да прочета ръководството за HD4780. Но това е отделен въпрос.

Подробно описание
http://kmpu.ru/other/zhki_obedinenie-s- ... index.html

Google Translate :comp


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 19 Апр 2022, 16:07 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1335
Местоположение: Силистра
Да, и с PIC (CCS) се получи:

дисплей и бутони с по-малко изводи:
- LCD (0802) (6 пина)
- два бутона
Използване на 6 пина (вместо 8 пина) на микроконтролера (вътрешните pull-up на порт А са включени).

Във всеки loop превключвам двата общи извода като входове за бутоните (натиснат ли е бутон?) или като изходи (DB4 и DB4 на LCD). Не ми се наложи преработка на управлението на LCD.

фрагмент от кода:
Код за потвърждение:
port_a_pullups(0b000110000);  // pullups PIN_A4, PIN_A5
---
if (ch_flag) {
  lcd_gotoxy(1, 1);
  printf(lcd_putc, "%Ld", c);
  ch_flag = FALSE;
  delay_ms(200);
}

set_tris_a(0b11111111);       // inputs PIN_A4, PIN_A5

if (!input_state(LCD_DB4)) {
  c--;
  ch_flag = TRUE;
}

if (!input_state(LCD_DB5)) {
  c++;
  ch_flag = TRUE;
}

set_tris_a(0b11001111);       // outputs PIN_A4, PIN_A5


Прикачени файлове:
lcd_6p_2btn_input_output.gif
lcd_6p_2btn_input_output.gif [ 48.47 KiB | Прегледано 161 пъти ]
Върнете се в началото
 Профил  
 
Покажи мненията от миналия:  Сортирай по  
Напиши нова тема Отговори на тема  [ 4 мнения ] 

Часовете са според зоната UTC + 2 часа [ DST ]


Кой е на линия

Потребители, разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
cron
Форумът се задвижва от phpBB® Forum Software © phpBB Group
Преведено от yarnaudov.com