AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
21.04.2014, 16:07
|
|
Временная регистрация
Регистрация: 04.07.2010
Адрес: город Омск
Сообщений: 72
Сказал спасибо: 6
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
ATTiny13 управление портами в CodeVisionAVR
Доброго времени суток господа и товарищи.
Собственно проблема возможно проста и её решение тоже, но меня она поставила в тупик.
Вот кусок сода:
Код:
|
#define sensor1 PINB.3// сенсор №1 ЗАТЕНЁН
#define sensor2 PINB.4// сенсор №2 ЗАТЕНЁН
bit blockSensor1 = 0;
bit blockSensor2 = 0;
void control(void)
{
if(sensor1)
{
blockSensor1 = 1;
};
if(sensor2)
{
blockSensor2 = 1;
};
PORTB.0 = blockSensor1;
PORTB.1 = blockSensor2;
};
void main(void)
{
...
...
...
while (1)
{
control();
}; |
По идее при blockSensor1 = 1 и/или blockSensor2 = 1 состояние пина.0 и/или пина.1 порта В тоже должны быть равны единице (например свечение светодиодов), вплоть до ресета, и в протеусе так и происходит. НО! На макетке то состояние поддерживается только пока выполняется условие if. Как будто не
Код:
|
if(sensor1)
{
blockSensor1 = 1;
}; |
а
Код:
|
if(sensor2)
{
blockSensor2 = 1;
}
else
{
blockSensor2 = 0;
} |
Т.е. к примеру, единица на выходе PORTB.0 держится только пока вход PINB.3 тоже равен 1
Камень tiny13...
Спасибо.
Последний раз редактировалось orionSSV; 21.04.2014 в 16:13.
|
|
|
|
22.04.2014, 13:22
|
|
Частый гость
Регистрация: 22.07.2007
Адрес: Харьков
Сообщений: 47
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
|
Re: ATTiny13 управление портами в CodeVisionAVR
#define sensor1 PINB.3 !!!
#define sensor2 PINB.4 !!!
странно - работаете с пинами 3 и 4, а подтяжки делаете 0 и 1 !?
PORTB.0 = blockSensor1; ??
PORTB.1 = blockSensor2; ??
А если вы выводите в пин PORTx.0 то соответственно сконфигурируйте пин на выход - DDRx.0 = 1;
DDRB.0=1; DDRB.1=1;
while(1)
{
PORTB.0= sensor1;
PORTB.1= sensor2;
}
както так.
Последний раз редактировалось sserg_ey; 22.04.2014 в 13:34.
Причина: добавить
|
|
|
|
22.04.2014, 13:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,832
Сказал спасибо: 742
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Re: ATTiny13 управление портами в CodeVisionAVR
может по сторожевому таймеру ресетиться ?
Цитата:
|
странно - работаете с пинами 3 и 4, а подтяжки делаете 0 и 1 !?
PORTB.0 = blockSensor1; ??
PORTB.1 = blockSensor2; ??
|
это не подтяжки это запись в порт
__________________
Да здравствует Разум,да сгинет Маразм!
|
|
|
|
22.04.2014, 13:31
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,058
Сказал спасибо: 2,563
Сказали Спасибо 11,890 раз(а) в 5,964 сообщении(ях)
|
Re: ATTiny13 управление портами в CodeVisionAVR
Сообщение от orionSSV
|
единица на выходе PORTB.0 держится только пока вход PINB.3 тоже равен 1
|
Все как заказано. Функция control() ведь ставит выход в состояние входа, причем в бесконечном цикле.
А Вы что ожидали получить?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
22.04.2014, 13:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,832
Сказал спасибо: 742
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Re: ATTiny13 управление портами в CodeVisionAVR
Сообщение от akegor
|
Функция control() ведь ставит выход в состояние входа, причем в бесконечном цикле.
А Вы что ожидали получить?
|
Так у него если сработает хоть раз, то
нигде не будет , соответственно
Код:
|
PORTB.0 = blockSensor1;
PORTB.1 = blockSensor2; |
на выходе всегда единица, уже независимо от входа.
__________________
Да здравствует Разум,да сгинет Маразм!
|
|
|
|
22.04.2014, 13:52
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,058
Сказал спасибо: 2,563
Сказали Спасибо 11,890 раз(а) в 5,964 сообщении(ях)
|
Re: ATTiny13 управление портами в CodeVisionAVR
Сообщение от E_C_C
|
Так у него
|
Таки, да. Просю пардона. Недовник. Тогда только через сброс, чудес не бывает.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
Последний раз редактировалось akegor; 22.04.2014 в 14:04.
|
|
|
|
22.04.2014, 19:58
|
|
Временная регистрация
Регистрация: 04.07.2010
Адрес: город Омск
Сообщений: 72
Сказал спасибо: 6
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: ATTiny13 управление портами в CodeVisionAVR
Спасибо за участие в решении моей проблемы.
Голову скоро сломаю. В каком-то месте глобальные переменные blockSensorX сбрасываются в ноль. Но пока выполняется условие - они равны единице. Что может вызывать сброс этих переменных сразу по снятии единицы (+5в) с пинов PINB.3 и PINB.4 я не знаю. Фьюзы вобще не трогал - там полный дефаулт. Конструкция реально ведёт себя, как если бы я написал PORTB.0 = PINB.3 и PORTB.1 = PINB.4))). Но это не соответствует моим целям! Что ещё поглядеть, какие данные выложить? Проект встал колом из-за какой-то нелепицы)).
На всякий случай упрощённая схемка (удалил всё непричастное, оставил только суть, один фиг работает не так - как ожидаю)
И состояние фьюзов (AVR Studio)
полный листинг (CodeVisionAVR 2.05.3)
Код:
|
#include ‹tiny13.h›
#include ‹delay.h›
// Declare your global variables here
#define sensor1 PINB.3// сенсор №1 ЗАТЕНЁН
#define sensor2 PINB.4// сенсор №2 ЗАТЕНЁН
#define lampON PORTB.0 = 1
#define lampOFF PORTB.0 = 0
bit blockSensor1 = 0;
bit blockSensor2 = 0;
void control(void)
{
if(sensor1)
{
blockSensor1 = 1;
};
if(sensor2)
{
blockSensor2 = 1;
};
PORTB.0 = blockSensor1;
PORTB.1 = blockSensor2;
};
void main(void)
{
// Declare your local variables here
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Input/Output Ports initialization
// Port B initialization
// Func5=Out Func4=In Func3=In Func2=Out Func1=Out Func0=Out
// State5=0 State4=P State3=P State2=0 State1=0 State0=0
PORTB=0x18;
DDRB=0x27;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;
// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;
DIDR0=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
while (1)
{
control();
}
} |
жду помощи
|
|
|
|
22.04.2014, 20:13
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,058
Сказал спасибо: 2,563
Сказали Спасибо 11,890 раз(а) в 5,964 сообщении(ях)
|
Re: ATTiny13 управление портами в CodeVisionAVR
Не знаю, как ведет себя по умолчанию wdt, лень читать. Посмотрите сами, он у Вас включен соответствующим фьюзом. Или отключите, или периодически сбрасывайте его.
Скорее всего, собака порылась там. Вам об этом уже говорили.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
22.04.2014, 20:20
|
|
Временная регистрация
Регистрация: 04.07.2010
Адрес: город Омск
Сообщений: 72
Сказал спасибо: 6
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: ATTiny13 управление портами в CodeVisionAVR
Сообщение от akegor
|
Не знаю, как ведет себя по умолчанию wdt, лень читать. Посмотрите сами, он у Вас включен соответствующим фьюзом. Или отключите, или периодически сбрасывайте его.
Скорее всего, собака порылась там. Вам об этом уже говорили.
|
Спасибо за совет. Следуя ему проблему решил - она была именно в этом сторожевом псе. Мне пока не совсем ясны тонкости работы и использования его - поэтому я его просто выключил. Схема стала работать ожидаемым образом. Ещё раз спасибо - сам бы до фьюзов дошёл не раньше чем к выходным)).
P.S. E_C_C тоже спасибо - вы первый заподозрили WD ещё до скрина с fuses))
Последний раз редактировалось orionSSV; 22.04.2014 в 20:48.
|
|
|
|
22.04.2014, 21:57
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,058
Сказал спасибо: 2,563
Сказали Спасибо 11,890 раз(а) в 5,964 сообщении(ях)
|
Re: ATTiny13 управление портами в CodeVisionAVR
Сообщение от orionSSV
|
Мне пока не совсем ясны тонкости работы
|
Выбирается его период так, чтобы при нормальной работе контроллера успевать его сбрасывать. В этом случае только при зависании он проснется и сбросом выведет контроллер из тупика.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:04.
|
|