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

3)Программка

======================================
#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 на землю :?
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 » 16 фев 2007, 00:38
ноги удобно настраивать мастером в CVAVR даже используя WinAVR.
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) и напишете программу на языке Си =)
avr123.nm.ru » 16 фев 2007, 00:55
Myp писал(а):и напишете программу на языке Си
она на Си. только почему-то в WinAVR любят использовать такие АСМ-оподобные штуки как cbi
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); //Иначе зажигаем светодиод и оставляем гореть.
}
}
}
=========================================
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 не ноль
GIGAWAT » 16 фев 2007, 02:14
Импульс я создаю для датчика DS1920 (1-Ware) который как и кнопка будет сажать ногу на землю, после получения им длинного отрицательного импульса, и уже по этому я буду определять присутствует датчик на линии или нет.
По остальному ...
Я думаю, что немогу больше думать :RTFM: :mrgreen:
Завтра еще раз попробую усё осмыслить...
Я вод в свое время наработался в симуляторе, думал что все понял, оказывается нифига 8)
ОК пока всем спасиба буду думать...
Завтра на работе буду мучать девайс =)
Эх реально бы с кем нибудь пообщаться, показать...
Мечты, мечты...
avr123.nm.ru » 16 фев 2007, 02:26
GIGAWAT писал(а):Я вод в свое время наработался в симуляторе, думал что все понял, оказывается нифига 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 т.е. импульс сброса обрабатывается.
avr123.nm.ru » 18 фев 2007, 00:47
GIGAWAT писал(а):платка работает на 3В.
Замыкать на GND можно без опаски ибо макс ток 15-18мА.
а что ограничивает ток ? она от батарейки питается ?
======
1) я не пойму нафига ты делаешь импульсы не
на светодиоде ??? их же глазами можно будет увидеть !
2) все верно. ножка выход и в порте 0.
3) откуда это напряжение ? и откуда почти 6 вольт ?
на мультиметре напряжения PB1 ?
GIGAWAT » 18 фев 2007, 01:06
Да, девайс работает от батарейки CR21
Мультиметр показывает ТОК в мА (я через него зымыкал на землю PB1).
Мне нужно было проверить работу датчика DS1920, откликается ли он на импульс сброса.
Для этого необходимо:
1) Сформировать отрицательный импульс длительностью 480 мкс
2)отпустить линию и выждать 65 мкс
3)Проверить состояние линии. Если датчик принял отрицательный импульс, то он посадит линию на землю примерно на 240 мкс.
Если он не принял импульс то линия останется с состоянии 1.
Для индикации состояния линии и нужен светодиод.
Для датчика линия порта является и питанием и линией передачей данных, второй контакт датчика на землю.
Вот здесь подробнее, если интересно
http://ibutton.ru/about/info/