roboforum.ru

Технический форум по робототехнике.
Текущее время: 18 фев 2025, 20:09

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




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Ввод/вывод HELP
СообщениеДобавлено: 16 фев 2007, 00:10 
Не в сети

Зарегистрирован: 04 фев 2007, 00:53
Сообщения: 45
Откуда: Питер
Уважаемые товарищи  8) Помогите прозреть.
Я не первый, и не последний с подобным вопросом.
Итак, исходные данные:
1) Моя плата  http://smileymicros.com/download/Butterfly%20Alternate%20Pin%20Uses.pdf?&MMN_position=62:62

2)Схемка подключения переферии
Изображение

3)Программка 8)
======================================
#include <avr/io.h>
#include <avr/delay.h>

int main (void)
{
DDRD = 0xFF;
DDRB = 0xFF; // Настройка порта D и B для вывода
unsigned char temp;

        while (1)
{
cbi(PORTB,PB1);
_delay_ms(0.485);
sbi(PORTB,PB1);
_delay_ms(0.065);

temp=PINB;
if (temp)
{

cbi(PORTD,PD0);
_delay_ms(0.240);
}
else
while(1)
{
sbi(PORTD,PD0);
}
}

}
=========================================
Суть: Диод поключенный к PD0 никак нихочет гореть когда я закорачиваю PB1 на землю  :?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ввод/вывод HELP
СообщениеДобавлено: 16 фев 2007, 00:35 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
советую В КУРСЕ - никогда не замыкать ноги МК на землю или питание - всегда когда можно ставьте резистор 300 ом

что у вас делает:

cbi(PORTB,PB1);
_delay_ms(0.485);
sbi(PORTB,PB1);
_delay_ms(0.065);

а светодиод к какой ноге подключен ?


а симуляция в VMLAB вам показала где в проге МК "сидит" ?


а подтяжку включили на ножке кнопки и сделали еевходом ?  
можно резистором 10 ком ее подтянуть у питанию

устройство AVR на стр.  avr123.nm.ru/02.htm  - там и конфигурация ножек.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 фев 2007, 00:38 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
ноги удобно настраивать мастером в CVAVR  даже используя WinAVR.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 фев 2007, 00:45 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
if (temp)
{

cbi(PORTD,PD0);
_delay_ms(0.240);
}
else
while(1)
{
sbi(PORTD,PD0);
}
}
если нажата кнопка то PD0 установить
иначе порт PD0 установить. а где  смысл??


и зачем аж 2 раза while(1) ???

а зачем оба порта на вывод??
минимум один должен быть на ввод чтоб читал кнопку
у вас порт В  должен быть входом чтоб читать единичку когда нажимаете кнопку



короче такое чувство что прога просто выставляет в порты значения не заморачиваясь о чтении кнопки

возьмите CVAVR воспользуйтесь мастером начального кода(прочитав курс 123avr) и напишете программу на языке Си =)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 фев 2007, 00:55 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Myp писал(а):
и напишете программу на языке Си


она на Си. только почему-то в WinAVR любят использовать такие АСМ-оподобные штуки как cbi


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 фев 2007, 01:45 
Не в сети

Зарегистрирован: 04 фев 2007, 00:53
Сообщения: 45
Откуда: Питер
Логика работы:
======================================
#include <avr/io.h>
#include <avr/delay.h>

int main (void)
{
DDRD = 0xFF;
DDRB = 0xFF; // Настройка порта D и B для вывода
unsigned char temp;

       while (1)
{
cbi(PORTB,PB1); //Отрицательный импульс ()
_delay_ms(0.485);
sbi(PORTB,PB1); //Положительный импульс
_delay_ms(0.065);

temp=PINB; //Проверка уровня линии
if (temp) //если линия в единичном состоянии
{

cbi(PORTD,PD0); //Гасим светодиод
_delay_ms(0.240);
}
else
while(1)
{
sbi(PORTD,PD0); //Иначе зажигаем светодиод и оставляем гореть.
}
}

}
=========================================


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 фев 2007, 01:54 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
зачем ты импульс создаешь на ноге на которой кнопка ?

ПАФФФФФТАРЯЮ !  

ты ногу с кнопкой настроил как вход с подтяжкой (avr123.nm.ru/02.htm   -  ЧИТАТЬ БУДЕШЬ ???)

откуда на ноге PB1  должна взяться ЕДИНИЦА ???

как считать что на ножке написано на стр.   avr123.nm.ru/05.htm

======

вместо

temp=PINB; //Проверка уровня линии
if (temp) //если линия в единичном состоянии


можно писать в CVAVR

if (PINB.1) //если линия в единичном состоянии

это выражение означает:
if (PINB) // если PINB не ноль


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 фев 2007, 02:14 
Не в сети

Зарегистрирован: 04 фев 2007, 00:53
Сообщения: 45
Откуда: Питер
Импульс я создаю для датчика DS1920 (1-Ware) который как и кнопка будет сажать ногу на землю, после получения им длинного отрицательного импульса, и уже по этому я буду определять присутствует датчик на линии или нет.
По остальному ...
Я думаю, что немогу больше думать  :RTFM:  :mrgreen:
Завтра еще раз попробую усё осмыслить...
Я вод в свое время наработался в симуляторе, думал что все понял, оказывается нифига  8)
ОК пока всем спасиба буду думать...
Завтра на работе буду мучать девайс =)
Эх реально бы с кем нибудь пообщаться, показать...
Мечты, мечты...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 фев 2007, 02:26 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
GIGAWAT писал(а):
Я вод в свое время наработался в симуляторе, думал что все понял, оказывается нифига  8)
...


а как вы в проге для симулятора делали подключение, конфигурацию ножки для кнопки  и как делали чтение ее ?

здесь В РЕАЛЕ все также как и в СИМУЛЯТОРЕ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 17 фев 2007, 23:54 
Не в сети

Зарегистрирован: 04 фев 2007, 00:53
Сообщения: 45
Откуда: Питер
2АВР123
Я работал с симулятором HOLTEK HT-IDE 3000 V6.5/

Вобщем программа работает:
я при описании забыл сказать, что платка работает на 3В.
Замыкать на GND можно без опаски ибо макс ток 15-18мА.
Суть еще в том ,что на плате все выводы имеют какие либо альтернативные функции, нпример порт D еще идет как сегменты LCD (SEG1.SEG2 и т.д.).
==========================================
#include <avr/io.h>
#include <avr/delay.h>

int main (void)
{
DDRD = 0xFF;
DDRB = 0xFF; // Настройка порта D для вывода

unsigned char temp;
while (1)
{
cbi(PORTB,PB1);
_delay_ms(0.485);
sbi(PORTB,PB1);
_delay_ms(0.065);

temp=PINB;
if (temp==0xFD)
{
sbi(PORTD,PD0);
_delay_ms(0.240);

}
else
{
cbi(PORTD,PD0);
_delay_ms(0.240);
}
}

}
==============================================
Вот, чтобы не быть голословным:
1) Начальные импульсы
Изображение

2)Вот состояние когда не PB1 не замкнут на GND:
Изображение
3)Ну и собственно когда замкнут:
Изображение

Прога работает даже с датчиком DS1920 т.е. импульс сброса обрабатывается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 18 фев 2007, 00:47 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
GIGAWAT писал(а):
платка работает на 3В.
Замыкать на GND можно без опаски ибо макс ток 15-18мА.


а что ограничивает ток ? она от батарейки питается ?

======

1) я не пойму нафига ты делаешь импульсы не
на светодиоде ??? их же глазами можно будет увидеть !

2) все верно. ножка выход и в порте 0.

3) откуда это напряжение ?  и откуда почти 6 вольт ?

на мультиметре напряжения PB1 ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 18 фев 2007, 01:06 
Не в сети

Зарегистрирован: 04 фев 2007, 00:53
Сообщения: 45
Откуда: Питер
Да, девайс работает от батарейки CR21

Мультиметр показывает ТОК в мА (я через него зымыкал на землю PB1).

Мне нужно было проверить работу датчика DS1920, откликается ли он на импульс сброса.
Для этого необходимо:
1) Сформировать отрицательный импульс длительностью 480 мкс

2)отпустить линию и выждать 65 мкс

3)Проверить состояние линии. Если датчик принял отрицательный импульс, то он посадит линию на землю примерно на 240 мкс.
Если он не принял импульс то линия останется с состоянии 1.
Для индикации состояния линии и нужен светодиод.

Для датчика линия порта является и питанием и линией передачей данных, второй контакт датчика на землю.

Вот здесь подробнее, если интересно http://ibutton.ru/about/info/


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


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

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO