Страница 36 из 421
Добавлено: Чт мар 26, 2009 21:17:46
Aheir
Добавлено: Пт мар 27, 2009 15:38:46
L@merOk
Пишу код для ATmega8 в CodeVisionAVR Evaluation V2.04.0a
Запускаю эмуляцию в Протеус ISIS 7.4 Professional
Протеус выкидывает сообщение Time step too small и останавливает эмуляцию
Что это за шаг?
Как его увеличить?
Надоли его увеличивать?
Это значить что протеус не может проэмулировать данную ситуацию или это не корректный код, и лутше таким не прошивать МК?
Добавлено: Пт мар 27, 2009 16:10:28
ikarab
L@merOk писал(а):Протеус ISIS 7.4 Professional
PROTEUS в другом разделе форума.
Добавлено: Сб мар 28, 2009 21:24:02
Arlleex
Помогите, что такое, написал программу, но она выдает какую то ошибку! что делать?
Добавлено: Сб мар 28, 2009 21:41:39
ARV
Stalker46 писал(а):Помогите, что такое, написал программу, но она выдает какую то ошибку! что делать?
не надо пользоваться пиратски-крякнутыми программами

Добавлено: Сб мар 28, 2009 23:14:19
ikarab
Stalker46 писал(а):Помогите, что такое, написал программу, но она выдает какую то ошибку! что делать?
CVAVR 1.25.9 используйте.
Добавлено: Пн мар 30, 2009 19:46:00
kupriyanov
Уважаемый tych...
Подскажите пожалуйста как правильно использовать функцию scanf() чтобы исключить всевозможные подвисания\сбои в работе МК AVR.
Предыстория вопроса такова: разрабатывается устройство, основанное на общении мк с GSM телефоном Siemens C45. Общение в основном в формате: вопрос - ответ. при этом все просто здорово. Сбои начинаются если подается команда телефону например позвонить и не ожидается от него ответ. в последствии при следующей попытке стребовать какую либо информацию с телефона контроллер подвисает, срабатывает гав гав таймер и работа нормализуется.
цикл опроса текущего времени с телефона:
TIMSK=0x00;
.
.
.
putsf("AT+CCLK?\x0d");
i=0;
delay_ms(200);
#asm("WDR")
do {if(rx_counter!=0) scanf("%s",strtmp); if(i>4){skip++; TIMSK=0x10; return; } i++; delay_ms(50);}
while (strcmpf(strtmp, "+CCLK:"));
я попытался решить таким образом проблему присутствия в буффере старевших данных, делаю scanf() 4 раза если не добился присутствия "+CCLK:" в строке strtmp то пропускаю этот цикл опроса и инкрементирую счетчик пропусков skip.
Проблема этого куска кода всплывает например при вызове другого телефона (между этими циклами опроса времени). хотя вызов сопровождается также считыванием строки, подразумевается что в нем ответ ОК.
printf("ATD+%s;\x0d",user_number); delay_ms(200);scanf("%s",strtmp);
Добавлено: Вт мар 31, 2009 16:59:55
DataLife
Всем МЯУ!
Вопросик: хотел отключить сторожевой таймер, как это написано в книжке "Микроконтроллеры АВР в радиолюбительской практике" Автора Белова.
Собственно код:
Код: Выделить всё
#define WDRF 3
#define WDCE 4
#define WDE 3
void WDT_off(void)
{
#asm("cli");
#asm("wdr");
MCUSR &= ~(1<<WDRF);
WDTCR |= (1<<WDCE) | (1<<WDE);
WDTCR = 0x00;
#asm("sei");
}
Программка ругается на первую строчку данного кода, а именно на то, что не объявлено начала блока ... да и говорит, что после данного блока void не хватает открывающейся скобочки ...
Что не так я уже сотворил?
Добавлено: Вт мар 31, 2009 17:26:03
ikarab
Мнене понятно какую строчку вы считаете первой.
Лучше проект прицепите архивом с коментами в коде.
Ваша функция может включить прерывания если они были выключены.
Добавлено: Вт мар 31, 2009 18:13:21
Yellow Tiger
DataLife писал(а):Программка ругается на первую строчку данного кода, ...
Этот код скомпилировался без ошибок - ошибка где-то выше в тексте. Что-нибудь вроде незакрытого блока поищи там.

Добавлено: Вт мар 31, 2009 18:13:40
DataLife
ikarab писал(а):Мнене понятно какую строчку вы считаете первой
А, блин, точно. Ругается на строчку
void WDT_off(void).
Разве это код для включения прерываний? В книге написано обратное... Да и WDT_
off тогда не ясно ...
Добавлено: Вт мар 31, 2009 18:24:50
ikarab
вот у вас включение прерываний
#asm("sei");
Добавлено: Вт мар 31, 2009 18:35:09
Yellow Tiger
DataLife писал(а):Ругается на строчку void WDT_off(void).
Разве это код для включения прерываний?
Этот код вообще не исполняемый - он лишь объявляет дальнейший код, как тело функции WDT_off. Само объявление тела функции синтаксически верно (и, как я уже сказал,
компилируется без ошибок), искать ошибку нужно
выше по тексту.
А что, проект - секретный что-ли?

Добавлено: Вт мар 31, 2009 18:55:10
DataLife
Проект ничуть не секретный... Просто просто и может показаться смешным некоторым. Ну, собственно...
ЗЫ. так как всё же выключить прерывания???
Добавлено: Вт мар 31, 2009 18:57:30
ikarab
kupriyanov писал(а):Уважаемый tych...
Он в бане давным давно !
kupriyanov писал(а):
delay_ms(200);
#asm("WDR");
В CVAVR "СОБАКА" сьрасывается в паузах.
kupriyanov писал(а):зависает
ИМХО надо определить почему он зависает, что он в это время делает. Может ли быть зависание аппаратное - такт пропадает например от наводок телефона ...
Добавлено: Вт мар 31, 2009 19:05:46
ikarab
DataLife писал(а): так как всё же выключить прерывания ???
Прерывания выключить - "Язык Си для AVR"
Но вы вроде таймер сторожевой пытались выключить ???
CVAVR его обычно сам выключает в начале программы - смотрте литинг - файл .lst
Вот отключение WDT - разбор кода и применение АЦП в AVR

Добавлено: Вт мар 31, 2009 19:23:33
DataLife
Попробовал я выключить собаку кодом:
Код: Выделить всё
#asm
LDI R31,0x18
OUT WDTCR,R31
LDI R31,0x10
OUT WDTCR,R31
#endasm
Всё рано через время работы - идёт сбой...
В файл-листинге вроде бы есть отключение:
Код: Выделить всё
;DISABLE WATCHDOG
000017 e1f8 LDI R31,0x18
000018 b7a4 IN R26,MCUSR
000019 7fa7 CBR R26,8
00001a bfa4 OUT MCUSR,R26
00001b bdf1 OUT WDTCR,R31
00001c bde1 OUT WDTCR,R30
Ничего не пойму ...
Добавлено: Вт мар 31, 2009 19:29:40
ikarab
проект компилятора и симулятора надо прицеплять ДАВНО уж !
Добавлено: Вт мар 31, 2009 19:53:30
DataLife
Проблема решена!

Просто я удалил пару строчек, как оказалось, зря ...
Строчки
Код: Выделить всё
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
перед настройкой портов. Да, и выкинул код выключения собаки, всё и так работает!)
Спасибо за помощь
------------
Выводы были поспешны ... Суть проблемы подробнее изложил ниже...
Добавлено: Вт мар 31, 2009 19:54:13
Yellow Tiger
DataLife писал(а):... так как всё же выключить прерывания???
- Во-первых - раньше речь шла не о "выключить прерывания", а о выключении собаки - что-таки нужно?
- во вторых, код в приложенном проекте и код приведенный выше - разные,
- в третьих, приложенный проект у меня скомпилировался без ошибок - о какой ошибке ты говорил?
- в четвертых, покажи-ка ту часть asm-листинга, что между "#asm("cli");" и "ACSR=0x80;"...
DataLife писал(а):Просто я удалил пару строчек, как оказалось, зря ...
Удачно выбрал, что удалить...
