реклама на сайте
подробности

 
 
> Странности у Atmega88PA
alik_tv
сообщение Feb 7 2014, 14:36
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 5-01-06
Пользователь №: 12 859



Привет всем

Вот программа:

CODE
#include <ioavr.h>
#include <inavr.h>

unsigned char ucCurChanel;
unsigned char btPIN;
unsigned char ucCurChanel_lpctr;

#define BUTTON_MASK_PORTC 0x04

#define SIGNAL_LS_STATE_ON PORTB |= 0x10;
#define SIGNAL_LS_STATE_OFF PORTB &= ~0x10;


void main(void)
{
// Port B
DDRB = 0x10;
PORTB = 0x00;

// Port C
DDRC = 0x00;
PORTC = 0x00;

ucCurChanel = 2;

while(1)
{
btPIN = (PINC & BUTTON_MASK_PORTC);

if (btPIN == 0)
{
if (ucCurChanel_lpctr == 0)
{
SIGNAL_LS_STATE_ON
}
}
else
{
ucCurChanel_lpctr = ucCurChanel;
SIGNAL_LS_STATE_OFF
}
}
}


На один пин порта С навешена кнопка. Резистор на питание, конденсатор
на землю. Их общая точка через кнопку сидит на земле.
На пине порта В транзистор НПН с светодиодом в коллекторе.

Программа проверялась на эмуляторе АВР студии 4.18. Все работает как и должно быть. При запуске переменная ucCurChanel_lpctr получает значение 2 и при нажатии на кнопку светодиод НЕ включается.

Откомпилировал ее на ИАР АВР 4.3 и 5x. Загрузил в проц.
В проце при каждом нажатии кнопки включается светодиод.
При отпускании отключается.

Оптимизация отключена. Выводил значение переменной ucCurChanel_lpctr
по компорту в ПК. При нажатии кнопки значение _обнуляется_.
А значение переменной ucCurChanel не зависит от состояния кнопки.
Все переменные глобальные.

вывел листинг, ничего странного не нашел.
Вот основная часть его

CODE
RSEG CODE:CODE:NOROOT(1)
// 15 void main(void)
main:
CFI Block cfiBlock0 Using cfiCommon0
CFI Function main
// 16 {
// 17 // Port B
// 18 DDRB = 0x10;
LDI R16, 16
OUT 0x04, R16
// 19 PORTB = 0x00;
LDI R16, 0
OUT 0x05, R16
// 20
// 21 // Port C
// 22 DDRC = 0x00;
LDI R16, 0
OUT 0x07, R16
// 23 PORTC = 0x00;
LDI R16, 0
OUT 0x08, R16
// 24
// 25 ucCurChanel = 2;
LDI R16, 2
STS ucCurChanel, R16
// 26
// 27 while(1)
// 28 {
// 29 btPIN = (PINC & BUTTON_MASK_PORTC);
??main_0:
IN R16, 0x06
ANDI R16, 0x04
STS btPIN, R16
// 30
// 31 if (btPIN == 0)
LDS R16, btPIN
TST R16
BRNE ??main_1
// 32 {
// 33 if (ucCurChanel_lpctr == 0)
LDS R16, ucCurChanel_lpctr
TST R16
BRNE ??main_0
// 34 {
// 35 SIGNAL_LS_STATE_ON
SBI 0x05, 0x04
RJMP ??main_0
// 36 }
// 37 }
// 38 else
// 39 {
// 40 ucCurChanel_lpctr = ucCurChanel;
??main_1:
LDS R16, ucCurChanel
STS ucCurChanel_lpctr, R16
// 41 SIGNAL_LS_STATE_OFF
CBI 0x05, 0x04
RJMP ??main_0
CFI EndBlock cfiBlock0
REQUIRE _A_PORTC
REQUIRE _A_DDRC
REQUIRE _A_PINC
REQUIRE _A_PORTB
REQUIRE _A_DDRB
// 42 }
// 43 }// end while
// 44
// 45 }// end main


К сожалению у меня нет внутрисхемного отладчика, не могу словить где
переменная ucCurChanel_lpctr обнуляется.
Если кому не влом и все под руками, проверьте где тут грабли.

Я уже не знаю, что делать, может быть это у меня с головой ... 0)
Я перепроверил все с десяток раз, при различном коде.
Каждый раз одно и тоже, ucCurChanel_lpctr обнуляется.

Собрал еще одно устройство, с другим экземляром 88РА. Все также. Одна сплошная грабля.

Ткаченко Олег

Сообщение отредактировал alik_tv - Feb 8 2014, 13:44
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- alik_tv   Странности у Atmega88PA   Feb 7 2014, 14:36
- - coolbassnik   Попробуйте static и/или volatile   Feb 7 2014, 14:53
- - Палыч   Цитата(alik_tv @ Feb 7 2014, 18:36) При з...   Feb 7 2014, 15:08
|- - alik_tv   Цитата(Палыч @ Feb 7 2014, 18:08) Э-э-э-э...   Feb 7 2014, 15:55
- - Сергей Борщ   Цитата(alik_tv @ Feb 7 2014, 16:36) Кажды...   Feb 7 2014, 19:52
|- - alik_tv   Цитата(Сергей Борщ @ Feb 7 2014, 22:52) С...   Feb 7 2014, 20:11
- - San_75   volatile unsigned char ucCurChanel; volatile unsig...   Feb 8 2014, 01:31
|- - _Артём_   Цитата(San_75 @ Feb 8 2014, 03:31) volati...   Feb 8 2014, 01:55
|- - alik_tv   Цитата(San_75 @ Feb 8 2014, 04:31) volati...   Feb 8 2014, 13:40
|- - _Артём_   Цитата(alik_tv @ Feb 8 2014, 15:40) я сра...   Feb 8 2014, 14:08
|- - alik_tv   Цитата(_Артём_ @ Feb 8 2014, 17:08) Вообщ...   Feb 8 2014, 14:34
|- - _Артём_   Цитата(alik_tv @ Feb 8 2014, 16:34) Боюсь...   Feb 8 2014, 15:22
|- - alik_tv   Цитата(_Артём_ @ Feb 8 2014, 18:22) А где...   Feb 8 2014, 15:51
- - Сергей Борщ   Ну что, есть прорыв? "Давайте пойдем логичес...   Feb 10 2014, 07:10
|- - alik_tv   Цитата(Сергей Борщ @ Feb 10 2014, 10:10) ...   Feb 10 2014, 10:46
|- - delamoure   AVcc подключен к питанию? Да, и еще. Блокировочные...   Feb 10 2014, 11:45
|- - alik_tv   Цитата(delamoure @ Feb 10 2014, 15:45) AV...   Feb 10 2014, 21:10
|- - delamoure   Цитата(alik_tv @ Feb 10 2014, 23:10) Зали...   Feb 11 2014, 09:07
|- - alik_tv   Цитата(delamoure @ Feb 11 2014, 13:07) . ...   Feb 11 2014, 14:45
- - delamoure   То есть RESET - это длинная линия, которая подключ...   Feb 11 2014, 21:11
|- - alik_tv   Я отключаю программатор перед проверкой схемы. Эта...   Feb 11 2014, 21:35
|- - Сергей Борщ   Цитата(alik_tv @ Feb 11 2014, 23:35) Я от...   Feb 12 2014, 07:11
|- - alik_tv   Цитата(Сергей Борщ @ Feb 12 2014, 10:11) ...   Feb 12 2014, 09:56
|- - Сергей Борщ   Цитата(alik_tv @ Feb 12 2014, 11:56) легк...   Feb 12 2014, 10:08
|- - alik_tv   Не через всю плату, тут вы загнули. Сразу за резис...   Feb 12 2014, 13:21
- - delamoure   OK. alik, предлагаю выложить здесь схему и плату в...   Feb 12 2014, 22:54
- - alik_tv   схема плата в файле. Чего на схеме нет, и на плат...   Feb 13 2014, 06:03
- - delamoure   alik, извините за задержку с ответом. Принципиальн...   Feb 24 2014, 11:16


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01393 секунд с 7
ELECTRONIX ©2004-2016