Страница 1 из 1
LED на порту все равно горит
Добавлено: Чт апр 23, 2009 16:22:05
lkote68
Уважаемые Коты Чет мануалы не помагают. Прога меряет 10 термометров и по запросу выводит значения через UART.
// Port C initialization
In Func4=In Func3=In Func2=In Func1=In Func0=Out
5=T State4=T State3=T State2=T State1=T State0=1
PORTC=0x01;
DDRC=0x01;
while(1){}
Горит все соответствует.
PORTC=0x01;
DDRC=0x01;
потом если в while(1){
PORTC.0 = 0;
}
Не горит что также соответствует.
Решил пока идет измерение пусть горит когда закончилось измерение гаснет. Поставил в начале функции измерения
PORTC.0 = 1;
измерение 10 термометров
PORTC.0 = 0;
и вот так горит.
while (1)
{
// ResponceFunc();
// MeasureFunc();
//
PORTC.0 = 1;
delay_ms(1000);
PORTC.0 = 0;
}
Нет правда гаснет на тот момент пока отсылаются данные. Чего я собственно не хотел.
LED на порту все равно горит
Добавлено: Чт апр 23, 2009 17:44:28
lkote68
Вот еще фишку для себя открыл
ежели
PORTC=0x01;
DDRC=0x01;
while (1)
{
PORTC.0 = 0;
delay_ms(200);
PORTC.0 = 1;
delay_ms(200);
};
Мигает ярко и красиво ежели
PORTC=0x01;
DDRC=0x00;
while (1)
{
PORTC.0 = 1;
delay_ms(200);
PORTC.0 = 0;
delay_ms(200);
};
Тускло Кто может объяснить Скважность одинаковая. Мабуть дело в подтягивающем резисторе. Ток вот не соображу до конца.
Re: LED на порту все равно горит
Добавлено: Чт апр 23, 2009 18:34:04
kupriyanov
lkote68 писал(а):
PORTC=0x01;
DDRC=0x00;
Тускло Кто может объяснить Скважность одинаковая. Мабуть дело в подтягивающем резисторе. Ток вот не соображу до конца.
Прочитай даташит!!!
DDRC=0x00;
этой строкой ты устанавливаешь ногу порта на вход....
(в этом случае бит 0 регистра PORTC управляет подтягивающим резистором, а не состоянием выхода)
а тут:
while (1)
{
PORTC.0 = 1;
delay_ms(200);
PORTC.0 = 0;
delay_ms(200);
};
ты подключаешь или выключаешь подтягивающий резистор... Понятное дело что через подтягивающий резистор светодиод ярко гореть не будет...
Re: LED на порту все равно горит
Добавлено: Чт апр 23, 2009 18:40:35
kupriyanov
lkote68 писал(а):
Решил пока идет измерение пусть горит когда закончилось измерение гаснет. Поставил в начале функции измерения
PORTC.0 = 1;
измерение 10 термометров
PORTC.0 = 0;
и вот так горит.
.
Цикл повторяется видимо настолько часто, что время между опросами гораздо меньше времени опроса всех 10 датчиков...так что в вашем решении включения светодиода на момент опроса смысла нет...
LED на порту все равно горит
Добавлено: Чт апр 23, 2009 20:47:35
lkote68
С несвечением в первом случае я разобрался Фишка в том что светодиод загорается потом идет измерение (оно длинное) а вот гасится светодиод иголкой и сразу снова загорается тут все уже понятно.
Прочитай даташит!!!
DDRC=0x00;
этой строкой ты устанавливаешь ногу порта на вход....
(в этом случае бит 0 регистра PORTC управляет подтягивающим резистором, а не состоянием выхода)
а CodeVision грит
Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out
State5=T State4=T State3=T State2=T State1=T State0=1
PORTC=0x01;
DDRC=0x01;
Тобишь PORTC=0x01 == Func = Out
DDRC=0x01 == State=1
Re: LED на порту все равно горит
Добавлено: Чт апр 23, 2009 22:32:11
ibiza11
lkote68 писал(а):
Тобишь PORTC=0x01 == Func = Out
DDRC=0x01 == State=1
а почему не наоборот??? не понимаю почему не рассматриваешь два варианта, раз уж в даташит трудно заглянуть!!!

Добавлено: Чт апр 23, 2009 23:25:13
BCluster
DDR=Data DiRection елки)
когда в программе ты пишешь PORTC.0 = 1; а не DDR.0 = 1;
И когда в порт пишешь значение PORTC=0xFF а не DDR=0xFF
Проверяется просто
PORTC.5 например замени на (PORTC>>5)&0x01, кстати данная конструкция удобна если надо гонять по битам порта в цикле)