Easyelectronics.ru

Электроника для всех
Текущее время: 01 ноя 2020, 07:01

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: команда PIN
СообщениеДобавлено: 31 янв 2010, 23:53 
Старожил

Зарегистрирован: 31 янв 2010, 22:25
Сообщения: 247
Нужно выполнить команду при нажатии кнопки.
Можно ли командой PIN считать данные и с одной ножки порта, или она считывает со всех.
Попробовал записать так,

if (PINC5 == 0)
PORTC = 0b0000011;
else PORTC = 0b0001100;

но при симуляции в АВРстудио это не сработало. Контроллер Мега8 схема
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: команда PIN
СообщениеДобавлено: 01 фев 2010, 00:03 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 11:58
Сообщения: 679
Откуда: Курган
а так
Код:
if(!(PINC&(1<<PINC5)))...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: команда PIN
СообщениеДобавлено: 01 фев 2010, 00:34 
Администратор
Аватара пользователя

Зарегистрирован: 16 янв 2010, 06:09
Сообщения: 6281
Откуда: Челябинск
Компилятор то какой? Судя по синтаксису это что то из CVAVR. В WinAVR так обращаться к регистру PIN не прокатит.

_________________
Хозяин дома


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: команда PIN
СообщениеДобавлено: 01 фев 2010, 10:01 
Старожил

Зарегистрирован: 31 янв 2010, 22:25
Сообщения: 247
lix писал(а):
а так
Код:
if(!(PINC&(1<<PINC5)))...

спасибо, попробую попозже на работе не получится.
DI HALT писал(а):
Компилятор то какой? Судя по синтаксису это что то из CVAVR. В WinAVR так обращаться к регистру PIN не прокатит.

AVRStudio и WinAVR . Так как я начинающий а это моя первая программа то то начал всё по курсу «AVR. Учебный Курс. Программирование на Си» но как считывать информацию с одной ножки не нашёл. Хотелось бы сделать без прерывания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: команда PIN
СообщениеДобавлено: 02 фев 2010, 10:30 
Старожил

Зарегистрирован: 31 янв 2010, 22:25
Сообщения: 247
вот это пытаюсь довести до ума, но всё время байт устанавливаются в 0b0000011. Конечно когда нибудь и сам дойду как считать информацию с кнопки :) но хотелось бы побыстрее.
Код:
#define F_CPU 1000000UL
#include <avr/io.h>         
#include <util/delay.h>     

int main (void)
{
  DDRB  = 0b01000111;
  DDRC  = 0b00100000; 
  PORTC = 0b00100000;

  if ( ! ( PINC& ( 1<<PINC5 )))
          PORTC = 0b0000011;
     else PORTC = 0b0001100;
    _delay_ms(50);
 
}       


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: команда PIN
СообщениеДобавлено: 02 фев 2010, 13:59 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 26 янв 2010, 23:02
Сообщения: 57
lix писал(а):
а так
Код:
if(!(PINC&(1<<PINC5)))...

расшифруйте по-русски
если не равно значение на PINC а далее о логическом И и сдвиге
это одно и то же, что и
Цитата:
if (PINC5 == 0)
PORTC = 0b0000011;
else PORTC = 0b0001100;

последннее понятно, а вот сокращенная запись нет. можно кто ее в полном виде записать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: команда PIN
СообщениеДобавлено: 02 фев 2010, 14:43 
Супермодератор
Аватара пользователя

Зарегистрирован: 28 янв 2010, 05:47
Сообщения: 1027
Откуда: Винница
Ka3ax писал(а):
...


запись if(PINC5==0) не правильная. PINC5 численно равно 5, это номер бита. Получается if(5==0) - ложно всегда.

JonBraun писал(а):
вот это пытаюсь довести до ума, но всё время байт устанавливаются в 0b0000011. Конечно когда нибудь и сам дойду как считать информацию с кнопки :) но хотелось бы побыстрее.
Код:
  DDRB  = 0b01000111;
  DDRC  = 0b00100000; 
  PORTC = 0b00100000;


мб
Код:
  DDRC  = 0b11011111; 
  PORTC = 0b00100000;

_________________
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: команда PIN
СообщениеДобавлено: 02 фев 2010, 17:26 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 11:58
Сообщения: 679
Откуда: Курган
Код:
if( PINC&(1<<PINC5)) // истинно, если в 5 бите PINC 1


PINC & 0b00100000 = 0b00100000 - то кнопка не нажата
PINC & 0b00100000 = 0 - то кнопка нажата


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: команда PIN
СообщениеДобавлено: 02 фев 2010, 22:31 
Старожил

Зарегистрирован: 31 янв 2010, 22:25
Сообщения: 247
xrayman писал(а):
мб

DDRC = 0b11011111;
PORTC = 0b00100000;
правильно что то я ошибся


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: команда PIN
СообщениеДобавлено: 03 фев 2010, 01:02 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 26 янв 2010, 23:02
Сообщения: 57
if( PINC&(1<<PINC5)) // истинно, если в 5 бите PINC 1
===
зачем так мозг закакивать? зачем PINC5? зачем через одно место гланды вырезать? какую смысловую нагрузку в данном случае несет PINC во втором случае?
если написать
if( PINC&(1<<5)) будет понятнее, загружаем 1 и двигаем ее 5 раз


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: команда PIN
СообщениеДобавлено: 03 фев 2010, 01:49 
Супермодератор
Аватара пользователя

Зарегистрирован: 28 янв 2010, 05:47
Сообщения: 1027
Откуда: Винница
Ka3ax писал(а):
if( PINC&(1<<PINC5)) // истинно, если в 5 бите PINC 1
===
зачем так мозг закакивать? зачем PINC5? зачем через одно место гланды вырезать? какую смысловую нагрузку в данном случае несет PINC во втором случае?
если написать
if( PINC&(1<<5)) будет понятнее, загружаем 1 и двигаем ее 5 раз


как зачем?
делаем
Код:
#undef PINC5
#define PINC5 3

и хрен кто догадается, особенно если переопределить всё :) потом можно врагам продавать исходники, пусть отлаживают

А вообще, в winavr вроде есть макрос типа _BV(x) или как-то так, для этих дел
if (PINC&_BV(5))

_________________
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: команда PIN
СообщениеДобавлено: 03 фев 2010, 09:22 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 11:58
Сообщения: 679
Откуда: Курган
использование предопределенных констант считается хорошим тоном. это позволяет улучшить читаемость программы. в данном случае используя подстановку препроцессора PINC5, которая заменяется на 5, явно видно что мы обращаемся к 5 пину.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: команда PIN
СообщениеДобавлено: 03 фев 2010, 10:27 
Старожил

Зарегистрирован: 31 янв 2010, 22:25
Сообщения: 247
Приятно послушать умных людей. Но я совсем запутался подумаю пару дней :) Тем более всё равно это код пока не работает.
Был бы очень признателен если кто выложит рабочий кусочек. Кстати С0-С3 предполагается задействовать под АЦП. Если это так геморойно может проще кнопку повесить на другой порт?

Вообще планировал сделать зарядку для NI-Mh аккумуляторов. Чтобы одновременно заряжать 4 ак. но параметры отслеживать на каждом отдельно. Самое смешное что в интернете не нашлось ни одной подходящей схемы. Это было последним толчком к изучению МК так как на логике делать меня не привлекало. Хотя лет 20 назад делал частотомеры и цифр вольтметры на 155 серии.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: wyfinger


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB