LED на порту все равно горит

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Пн мар 30, 2009 15:58:32
Откуда: Украина Запорожье

Сообщение 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;
}

Нет правда гаснет на тот момент пока отсылаются данные. Чего я собственно не хотел.
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Пн мар 30, 2009 15:58:32
Откуда: Украина Запорожье

Сообщение 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);
};
Тускло Кто может объяснить Скважность одинаковая. Мабуть дело в подтягивающем резисторе. Ток вот не соображу до конца.
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 47
Зарегистрирован: Пн мар 30, 2009 15:55:13
Откуда: г. Комсомольск на Амуре

Сообщение kupriyanov »

lkote68 писал(а): PORTC=0x01;
DDRC=0x00;

Тускло Кто может объяснить Скважность одинаковая. Мабуть дело в подтягивающем резисторе. Ток вот не соображу до конца.
Прочитай даташит!!!
DDRC=0x00;

этой строкой ты устанавливаешь ногу порта на вход....
(в этом случае бит 0 регистра PORTC управляет подтягивающим резистором, а не состоянием выхода)
а тут:
while (1)
{
PORTC.0 = 1;
delay_ms(200);
PORTC.0 = 0;
delay_ms(200);
};

ты подключаешь или выключаешь подтягивающий резистор... Понятное дело что через подтягивающий резистор светодиод ярко гореть не будет...
Any Problems????
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 47
Зарегистрирован: Пн мар 30, 2009 15:55:13
Откуда: г. Комсомольск на Амуре

Сообщение kupriyanov »

lkote68 писал(а):
Решил пока идет измерение пусть горит когда закончилось измерение гаснет. Поставил в начале функции измерения
PORTC.0 = 1;
измерение 10 термометров
PORTC.0 = 0;

и вот так горит.

.
Цикл повторяется видимо настолько часто, что время между опросами гораздо меньше времени опроса всех 10 датчиков...так что в вашем решении включения светодиода на момент опроса смысла нет...
Any Problems????
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Пн мар 30, 2009 15:58:32
Откуда: Украина Запорожье

Сообщение 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
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

lkote68 писал(а):
Тобишь PORTC=0x01 == Func = Out
DDRC=0x01 == State=1
а почему не наоборот??? не понимаю почему не рассматриваешь два варианта, раз уж в даташит трудно заглянуть!!! :evil: :evil: :evil:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

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

Вернуться в «Микроконтроллеры и ПЛИС»