roboforum.ru

Технический форум по робототехнике.

Ввод/вывод HELP

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Ввод/вывод HELP

Сообщение GIGAWAT » 16 фев 2007, 00:10

Уважаемые товарищи  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 на землю  :?
GIGAWAT
 
Сообщения: 45
Зарегистрирован: 04 фев 2007, 00:53
Откуда: Питер

Re: Ввод/вывод HELP

Сообщение avr123.nm.ru » 16 фев 2007, 00:35

советую В КУРСЕ - никогда не замыкать ноги МК на землю или питание - всегда когда можно ставьте резистор 300 ом

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

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

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


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


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

устройство AVR на стр.  avr123.nm.ru/02.htm  - там и конфигурация ножек.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение avr123.nm.ru » 16 фев 2007, 00:38

ноги удобно настраивать мастером в CVAVR  даже используя WinAVR.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение Myp » 16 фев 2007, 00:45

if (temp)
{

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


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

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



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

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

Сообщение avr123.nm.ru » 16 фев 2007, 00:55

Myp писал(а):и напишете программу на языке Си


она на Си. только почему-то в WinAVR любят использовать такие АСМ-оподобные штуки как cbi
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение GIGAWAT » 16 фев 2007, 01: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); //Иначе зажигаем светодиод и оставляем гореть.
}
}

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

Сообщение avr123.nm.ru » 16 фев 2007, 01:54

зачем ты импульс создаешь на ноге на которой кнопка ?

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

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

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

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

======

вместо

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


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

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

это выражение означает:
if (PINB) // если PINB не ноль
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение GIGAWAT » 16 фев 2007, 02:14

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

Сообщение avr123.nm.ru » 16 фев 2007, 02:26

GIGAWAT писал(а):Я вод в свое время наработался в симуляторе, думал что все понял, оказывается нифига  8)
...


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

здесь В РЕАЛЕ все также как и в СИМУЛЯТОРЕ.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение GIGAWAT » 17 фев 2007, 23:54

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 т.е. импульс сброса обрабатывается.
GIGAWAT
 
Сообщения: 45
Зарегистрирован: 04 фев 2007, 00:53
Откуда: Питер

Сообщение avr123.nm.ru » 18 фев 2007, 00:47

GIGAWAT писал(а):платка работает на 3В.
Замыкать на GND можно без опаски ибо макс ток 15-18мА.


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

======

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

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

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

на мультиметре напряжения PB1 ?
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение GIGAWAT » 18 фев 2007, 01:06

Да, девайс работает от батарейки CR21

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

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

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

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

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

Вот здесь подробнее, если интересно http://ibutton.ru/about/info/
GIGAWAT
 
Сообщения: 45
Зарегистрирован: 04 фев 2007, 00:53
Откуда: Питер


Вернуться в Микроконтроллеры

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

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