Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с VMLAB.Помогите...
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
j_serg
Уважаемый форум! Изучал прерывания на мегах и столкнулся с проблемой, а пока не решу дальше не иду. Задал свой вопрос на forum.roboclub.ru, но видно сильно подробно описал или вопрос сильно до- школьный, но в ответ -- тишина. Надеюсь, что вы будете более снисходительны.
При пошаговой отладке прерывания Таймер0 обратил внимание:
1.Предделитель таймера-биты CS03-CS00 регистра ТССR0B не устанавливаются.
2.При ручном вводе этого значения в поле TCCRn окна ‘Peripherals’ и при пошаговом выполнении программы, происходит затирание предварительно введенного значения в поле TCCRn окна ‘Peripherals’ инструкцией “TCCR0A=0х00;”. Если же остановить запущенную программу и вручную ввести значение в поле TCCRn окна ‘Peripherals’, то после запуска программы прерывание происходит, но при этом флаг прерываня в регистре TIFR0 устанавливается не TOV0(бit0), а OCF0A(bit1). При рассмотрение файла
m48def.inc, из папки include VMLABa, имена битов и адр. регистров соответствуют Д.Ш.
Но если просматривать побитно поле TCCRn окна ‘Peripherals’ то получаешь ахинею из имен битов, которых в ДШ нет.
Вопрос, что означают имена битов в окне TCCRn окна ‘Peripherals’? В ДШ. есть TCCR0А и ТCCR0В и имена битов совсем другие.

Далее про PCINT. Выводы PORTB.1-3 сделал входами с подтяжкой. В VMLAB повешал на них кнопки ‘control panel’. При нажатии на любую кнопку флаг прерывания устанавливается (бит0 в регистре PCIFR), но сам обработчик не выполняется и флаг не обнуляется. Листинги для обоих пакетов привожу. Проверял работу прерывания таймер0 на 90S2313 все работает. Кто сталкивался с этим - пожалуйста объясните и если можно то подробней. Если проверки делаю в цикле While то все работает.

""МЫ ВСЕ КОГДА-ТО УЧИЛИСЬ ХОДИТЬ.""

Chip type : ATmega48
Clock frequency : 0,015625 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 128
*****************************************************/

#include <mega48.h>

// Pin change 0-7 interrupt service routine
interrupt [PCINT0] void pin_change_isr0(void)
{
// Place your code here
PORTD.2=~PIND.2;//если произошло прерывание, то сигнал на выходе порта инверти-я.
}

// Timer 0 overflow interrupt service routine
/*interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0xF0;//предварительная загрузка числа в счетный регистр таймера
// Place your code here
#asm("cli");
TIFR0=0x01;//стираю принудительно флаг, хотя по даташиту не нужно.
PORTD.3=~PIND.3;//по прерыванию сигнал на выходе порта инвертируется.
#asm("sei");
} */

// Declare your global variables here

void main(void)
{

// Crystal Oscillator division factor: 256
#pragma optsize-
CLKPR=0x80;
CLKPR=0x08;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Port B initialization
PORTB=0x0Е;
DDRB=0x00;

// Port D initialization
PORTD=0x1Е;
DDRD=0x1E;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 15,625 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x05;
TCNT0=0xF0;//предварительная загрузка таймера0
OCR0A=0x00;
OCR0B=0x00;


// Interrupt on any change on pins PCINT0-7: On

EICRA=0x00;
EIMSK=0x00;
PCICR=0x01;//включение прерывания на выводы порта РВ
PCMSK0=0x0E;//разрешение прерывания на линиях РВ3-1
PCIFR=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x01;

// Global enable interrupts
#asm("sei")

while (1)
{

}
}

Для VMLAB:
.MICRO "ATmega48"
.TOOLCHAIN "GENERIC"
.TARGET "1.hex" ; Proshivka na MK
.COFF "1.cof" ;
.SOURCE "1__.c"
.CLOCK 4meg
.POWER VDD = 5 VSS = 0
.STORE 2000m

; SW2-SW0 === K2-K0 on ControlPanal

K1 PB1 VSS ; кнопки с выхода порта на gnd.
K2 PB2 VSS ;
K3 PB3 VSS ;

; ===================================================
; Signals that will be ploted in SCOPE window

.plot V(PB1) V(PB2) V(PB3) V(PD2) V(PD3)
=GM=
Цитата(j_serg @ Jan 28 2008, 07:57) *
... про PCINT. Выводы PORTB.1-3 сделал входами с подтяжкой. В VMLAB повешал на них кнопки ‘control panel’. При нажатии на любую кнопку флаг прерывания устанавливается (бит0 в регистре PCIFR), но сам обработчик не выполняется и флаг не обнуляется.

Если проверки делаю в цикле While то все работает

Всё правильно, до цикла while у вас прерывания не разрешены, с какого припрыга будет выполняться обработчик pcint0?

В цикле while у вас прерывания разрешены, значит, обработчик может и должен выполняться.
j_serg
Спасибо, что хоть кто-то решил пообщаться. Но я не согласен с таким утверждением. Ведь до основного цикла while идет инициализация всех регистров и как таковая программа еще не выполняется. Значит и разрешать прерывания не имеет смысла. Как начинающий, я все таки опробовал этот совет, но "воз" иныне там. Я вставил аналогично pcint прерывание int0 и оно прекрасно работает. Создается впечатление, что vmlab по прерываниям timer0 и pcint не корректно работает. Неужели никто в начале своей карьеры не юзал ее? Или она такая кривая, что об этом и говорить не стоит?
УВАЖАЕМЫЕ AVRщики ДАВАЙТЕ ПООБЩАЕМСЯ, ВЫСКАЖИТЕ СВОЕ МНЕНИЕ.
P.S. Как начиныющий, не знал на каком пакете останавиться.
С CodeVision и VMLAB начал как с самых простых в освоении.
Судя по форумам, в Proteus тоже куча багов.
mdmitry
Проверьте функции прерывания по таймеру. Зачем флаг ставите? Посмотрите документацию по используемому контроллеру в плане организации прерываний: инициализация, установка разрешения конкретного прерывания, СБРОС прерывания и т.д. Очень много ошибок возникает из-за неправильной инициализации. С VMLAB дел не имел, поэтому конкретно помочь с кодом не смогу.
j_serg
Цитата(mdmitry @ Jan 29 2008, 10:08) *
Проверьте функции прерывания по таймеру. Зачем флаг ставите? Посмотрите документацию по используемому контроллеру в плане организации прерываний: инициализация, установка разрешения конкретного прерывания, СБРОС прерывания и т.д.

Извиняюсь, был процесс отладки и код перенес не убрав коментарии с обработчика прерывания по таймеру0. Но это не суть важно. Первоначальную инициализацию всех регистров производил с помощью CodeWizardAVR, да и потом разобравшись с ДШ. перепроверил не раз. Так-что здесь ошибки не должно быть. По поводу флага. Если я правильно понял, то вы имеете в виду строчку с кодом TIFR0=0x01 в обработчике прерывания по таймеру0? Но я наоборот сбрасываю флаг записывая туда единицу(неприятная особенность у AVR, пока не запомнишь). По ДШ. этот флаг сбрасывается аппаратно, если выполняется обработчик. Была отладка.
Ладно, пока мне хватит и INTx, а PCINTx-это так учеба. В дальнейшем наберусь опыта и сам пойму, если конечно кто-нибудь не подскажет конкретно. Но главный вопрос из-за которого я обратился на форум повис в воздухе. ЧТО ОЗНАЧАЮТ ИМЕНА БИТОВ РЕГИСТРА TCCRn В ОКНЕ Peripherals - в ДШ-те. совсем другое? И еще вопрос по AVRSstudio. Отладка программы идет по состоянию регистров или есть возможность как в протеусе посмотреть реальный сигнал на виртуальном оссцилографе?
=GM=
Цитата(j_serg @ Jan 29 2008, 06:54) *
Но я не согласен с таким утверждением. Ведь до основного цикла while идет инициализация всех регистров и как таковая программа еще не выполняется. Значит и разрешать прерывания не имеет смысла

Пишите более внятно, что у вас не так. Или поясните, что вы имели в виду
Цитата(j_serg @ Jan 28 2008, 07:57) *
При нажатии на любую кнопку флаг прерывания устанавливается (бит0 в регистре PCIFR), но сам обработчик не выполняется и флаг не обнуляется.
Если проверки делаю в цикле While то все работает

1) Непонятно, что у вас работает в цикле while?

2) Если флаг прерывания устанавливается при нажатии на кнопки, а прерывания нет - значит, это прерывание не разрешено, или адрес не тот, чудес не бывает.

3) Какие проверки вы делаете в цикле while?

4) Какие ещё и ГДЕ вы делали проверки, если у вас вся программа состоит из команды перехода на саму себя (инструкция while(1){})?
j_serg
Цитата(=GM= @ Jan 29 2008, 13:12) *
Пишите более внятно, что у вас не так. Или поясните, что вы имели в виду

1) Непонятно, что у вас работает в цикле while?

2) Если флаг прерывания устанавливается при нажатии на кнопки, а прерывания нет - значит, это прерывание не разрешено, или адрес не тот, чудес не бывает.

3) Какие проверки вы делаете в цикле while?

4) Какие ещё и ГДЕ вы делали проверки, если у вас вся программа состоит из команды перехода на саму себя (инструкция while(1){})?


Уточню сразу, программа учебная. Про цикл while вспомнил к слову. Первоначально изучал работу регистров флагов и проверки делал в цикле.
while (<проверка установки флага>)
{
<исполняемый код>
TIFR0=0x01;// сброс флага
}
Когда перешел на обработчики прерывания то цикл while сделал пустой.
Далее про прерывание PCINT0.
РС2-0 сделал входами с подтяжкой и вешаю на них кнопки с земли.
Флаг прерывания устанавливается.

ВОПРОС ПЕРВЫЙ- ПОЧЕМУ НЕТ ЗАХОДА В ОБРАБОТЧИК ПРЕРЫВАНИЯ?

ВОПРОС ВТОРОЙ (для тех кто юзал или юзает VMLAB).ЧТО ОЗНАЧАЮТ ИМЕНА БИТ РЕГИСТРА TCCRn В ОКНЕ Peripherals ДЛЯ ТАЙМЕРА0? По ДШ. есть рег. TCCR0A и TCCR0B и другие имена бит.
Прикрепляю листинги.
=GM=
Цитата(j_serg @ Jan 30 2008, 10:32) *
Далее про прерывание PCINT0.
РС2-0 сделал входами с подтяжкой и вешаю на них кнопки с земли. Флаг прерывания устанавливается.
ВОПРОС ПЕРВЫЙ- ПОЧЕМУ НЕТ ЗАХОДА В ОБРАБОТЧИК ПРЕРЫВАНИЯ?
Прикрепляю листинги

Ну и где они? И не надо так кричать...

Если захода в прерывание нет, то

1) Проверьте, разрешено ли глобальное прерывание.

2) Проверьте по листингу, тот ли адрес вектора прерывания установлен.
j_serg
Цитата(=GM= @ Jan 30 2008, 19:44) *
Ну и где они? И не надо так кричать...

Если захода в прерывание нет, то

1) Проверьте, разрешено ли глобальное прерывание.

2) Проверьте по листингу, тот ли адрес вектора прерывания установлен.



Мои извинения. Отправить отправил, а прикрепились ли ....
Закоментировал надеюсь понятно. "Костяк" создавал на Кодевизарде.
Ниже Си-шника дизасм по PCINT0.

Chip type : ATmega48
Clock frequency : 0,015625 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 128
*****************************************************/

#include <mega48.h>

// прерывание INT0
interrupt [EXT_INT0] void ext_int0_isr(void)
{
PORTD.4=~PORTD.4;
}

// прерывание PCINT
interrupt [PCINT0] void pin_change_isr0(void)
{
PORTD.5=~PORTD.5;
}

//прерывание таймер0 по переполнению
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0xF0;//предварительная загрузка таймера
PORTD.6=~PORTD.6;
}

void main(void)
{
// Crystal Oscillator division factor: 256
#pragma optsize-
CLKPR=0x80;
CLKPR=0x08;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Port B initialization
PORTB=0x07;//установка РВ2-0 на вход с подтяжкой
DDRB=0x00;

// Port D initialization
PORTD=0xFF;//установка РD3-0 на вход с подтяжкой, а остальные выводы на выход
DDRD=0xF0;

// Timer/Counter 0 initialization
TCCR0A=0x00;
TCCR0B=0x01;//коэффициент делителя для таймера0
TCNT0=0xF0;// предварительная загрузка таймера0
OCR0A=0x00;
OCR0B=0x00;

// External Interrupt(s) initialization
EICRA=0x00;//прерыван. по низкому уровню на INT0
EIMSK=0x01;//разрешение прерыван. на INT0
EIFR=0x01;//обнуление флага прерывания INT0(зачем-то поставил сам компилятор)
PCICR=0x01;//выбор выводов РС7-0 для прерываний
PCMSK0=0x07;//разрешение прерыван. для РС2-0
PCIFR=0x01;//обнуление флага прерывания

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x01;
// Timer/Counter 1 Interrupt(s) initialization
TIMSK1=0x00;
// Timer/Counter 2 Interrupt(s) initialization
TIMSK2=0x00;

// Analog Comparator initialization
ACSR=0x80;
ADCSRB=0x00;

// Global enable interrupts
#asm("sei")

while (1)
{
// Place your code here

};
}
По вашему совету проверить, а есть ли вектор и правильно ли сделан переход, засел за асм.
Коментариев нет, т.к. код простой. Но на мой не искушенный
взгляд все правильно. Есть вектор перехода и подпрограмма которая меняет бит в РD, но переход не выполняется. Может быть где-то стоит запрет, хотя тотже INT0 работает????

0001 rjamp ext_int0_isr
.
.
0003 rjamp pin_change_isr0
.
.
0054 ext_into_isr rcall 1_00b8
. clt
. sbis $05, 4
. set
. in r26, $0b
. bld r26, 4
. rcall 1_00bc
005b reti
005c pin_change_isr0 rcall 1_00b8
. clt
. sbis $0b, 5
. set
. in r26, $0b
. bld r26, 5
. rcall 1_00bc
0063 reti
.
.
00b8 1_00b8 st -Y, r26
. st-Y, r30
. in r30, $3f
00bb ret
00bc 1_00bc out $0b, r26
. out $3f, r30
. ld r30, Y+
. ld r26, Y+
. ret

Я нахожусь в другом часовом поясе и отвечаю как-бы с "утра".
PS. Не знаю почему, но дизасм отправляешь в нормальном виде, а он форматится и получается все в куче. По колонкам такая информация: | Addrr.. | Label | Disassemble |
GDI
Цитата
Не знаю почему, но дизасм отправляешь в нормальном виде, а он форматится и получается все в куче

Потому что надо использовать тэги
Код
[code]
[/code]
j_serg
Цитата(GDI @ Jan 31 2008, 11:26) *
Потому что надо использовать тэги
Код
[code]
[/code]


Cейчас разбераюсь с С, асмом, с ПО для AVR. Нахожу кучу сообщений о "багах" в протеусе, студии... И сразу становиться так тосклиВОО... Но все равно за совет огромное спасибо. Если не лопнет голова от пятилетки за два года, то по возможности залезу и в HTML.
GDI
Я больше скажу - баги даже в железе есть smile.gif что уж тут говорить о симуляторах. Мое имхо - не стоит увлекаться всякими симуляторами, а в особенности тем как они симулируют различную периферию, с периферией надо работать в железе. В симуляторе надо искать собственные баги(неверная инициализация, неправильный обработчик прерывания и т.п.) и никогда не полагаться на 100%-ную правильность симулятора.
j_serg
Цитата(GDI @ Jan 31 2008, 13:05) *
Я больше скажу - баги даже в железе есть smile.gif что уж тут говорить о симуляторах. Мое имхо - не стоит увлекаться всякими симуляторами, а в особенности тем как они симулируют различную периферию, с периферией надо работать в железе. В симуляторе надо искать собственные баги(неверная инициализация, неправильный обработчик прерывания и т.п.) и никогда не полагаться на 100%-ную правильность симулятора.


Полностью согласен. Пока сижу в симуляторе, чтобы изучить наглядно внутренности AVRов. Но уже столкнулся с тем, что работа таймеров по прерыванию не правильно симулируется. Если бы был уверен на 100% послал бы письмо с большим вопросом в тех. поддержку разработчикам. Но пока на форуме мне толком не помогли. Затыки из-за невнимательности у всех бывают, особенно когда "учишся ходить".
=GM=
Цитата(j_serg @ Jan 31 2008, 04:05) *
По вашему совету проверить, а есть ли вектор и правильно ли сделан переход, засел за асм.
Коментариев нет, т.к. код простой. Но на мой не искушенный
взгляд все правильно. Есть вектор перехода и подпрограмма которая меняет бит в РD, но переход не выполняется. Может быть где-то стоит запрет, хотя тотже INT0 работает????

0001 rjamp ext_int0_isr
.
.
0003 rjamp pin_change_isr0
.
.
0054 ext_into_isr rcall 1_00b8
. clt
. sbis $05, 4
. set
. in r26, $0b
. bld r26, 4
. rcall 1_00bc
005b reti
005c pin_change_isr0 rcall 1_00b8
. clt
. sbis $0b, 5
. set
. in r26, $0b
. bld r26, 5
. rcall 1_00bc
0063 reti
.
.
00b8 1_00b8 st -Y, r26
. st-Y, r30
. in r30, $3f
00bb ret
00bc 1_00bc out $0b, r26
. out $3f, r30
. ld r30, Y+
. ld r26, Y+
. ret

Какие-то у вас команды перехода поддельные(:-), таких команд перехода (rjamp) не бывает.

В остальном, вроде бы здесь всё на месте, не вижу только глобального разрешения прерываний.
j_serg
Цитата(=GM= @ Feb 1 2008, 13:56) *
Какие-то у вас команды перехода поддельные(:-), таких команд перехода (rjamp) не бывает.

В остальном, вроде бы здесь всё на месте, не вижу только глобального разрешения прерываний.


Действительно такой команды нет. Листинг дизасма у меня был как-бы виртуальный--только на экране. Через буфер я его вставить не смог. Поэтому я его набил тупо в ручную(чего не зделаешь ради истины) и естественно с ошибкой. Команда sei у меня есть, если посмотреть выше приведенный Си листинг то она стоит аккурат перед циклом while(1), в асме, для краткости, я привел только строчки векторов перехода и самих обработчиков.
С таймерами я уже разобрался, всем спасибо за советы, кое в чем видимо они меня надоумили, а с прерыванием PCINT пока большой вопрос.
aleksey_g
Да бросьте Вы этот VMLAB! Он только добавит непоняток на Вашу голову!
Если бы Вы взялись ладить проект в аврстудии, думаю, вопрсов стало бы НАМНОГО меньше!
Правда, т.к. прогамите в codevision, с коим не имел дела, то не знаю, умеет ли студия "ходить" при отладке по сишному коду codevision_а.
В ИАР_е - все пучком.
За неимением хардверных отладчиков - ладить в аврстудии - самое оно!
GDI
Цитата
не знаю, умеет ли студия "ходить" при отладке по сишному коду codevision_а

Умеет, только в студию надо загружать coff файл, впрочем ка и для ИАРа. Этот файл, если мне память не изменяет, генерируется автоматически.
j_serg
Чем прельщает VMLAB, так это виртуальным оциллографом. Давно собирался сесть за студию, но все сразу не охватишь. Кто мне подскажет, какая версия менее глюкнутая, а то в сети много разговоров особенно о четвертой? И чтоба она Си понимала, а то я слышал, что изначально студия была заточена под асм.
GDI
Она заточена под разработку на асме, но дебажит нормально по Си коду, а на глюках, имхо, не стоит заморачиваться - они есть и будут. Но поддержку Си в студию добавить можно, для этого надо установить пакет WinAVR(гугль в помощь), тогда вы получите абсолютно бесплатную среду разработки. А осциллограф лучше хардварный раздобыть где нибудь. И делать упор на отладку в железе, чтобы не задавать потом вопросов типа: "...а почему в VMLab(AVRStudio, Proteus и т.п.) все работало , а в железе не работает..."
j_serg
Полностью согласен на счет железа. Конечно хорошо бы иметь что-нибудь из Aтмеловских аппаратных отладок, но пока они прийдут на периферию обрастут тройной ценой. Поэтому и ищешь себе помошников хотя бы программных. Сел за Кодевижин, потому-что не нашед лекарство для ИАР, да и осваивать с нуля вижин оказалось проще. А WinAvr можно брать любой? И все таки повторюсь по поводу версии студии--какая лучше? Скачал себе четвертую, а потом наткнулся на форум. Думаю, что она пока сырая.
GDI
Цитата
Думаю, что она пока сырая.

Берите не глядя, другой все равно нет, да и 4я какая у вас? Последняя вроде была 4.13, вообще 4е версии студии выходят уже года четыре, я, признаться, других версий(3х, 2х) и не видел smile.gif
Цитата
да и осваивать с нуля вижин оказалось проще
Сам начинал с кодевижона... ИАР посложнее, но и код он генерит более плотный и оптимальный.

Цитата
А WinAvr можно брать любой?
Любой, но лучше последний, конечно. WinAvr - это известный линуксовый компилятор GCC портированный на виндовс и заточенный под АВР - и соответствующие ему "проблемы" - make файлы, которые с ходу не понятны после вижона и ИАРа, но зато если с ним разобраться, то можно вообще перейти на разработку в линуксе smile.gif

Цитата
Конечно хорошо бы иметь что-нибудь из Aтмеловских аппаратных отладок, но пока они прийдут на периферию обрастут тройной ценой.

На счет "обрастут" вам виднее, но отладочные платы у атмела не дороги, к тому же простейшую плату можно собрать самому, да и на форуме тут кто то предлагал уже платы собственной разработки. Из атмеловских плат мне нравится AVR Butterfly - в питерском ЭФО стоит около 600р, но к ней желателен программатор.
Vix
Симулятор VMLab не поддерживает режим PWM по регистру ICR1. Также что-то непонятное творится с таймерами в некоторых режимах PWM для контроллеров mega48/88/168.
И к сожалению VMLab давно уже не развивается.
ИМХО - из симуляторов - лучший! (Не сравниваю с Proteus - разные подходы).
j_serg
Цитата(Vix @ Feb 5 2008, 16:01) *
Симулятор VMLab не поддерживает режим PWM по регистру ICR1. Также что-то непонятное творится с таймерами в некоторых режимах PWM для контроллеров mega48/88/168.
И к сожалению VMLab давно уже не развивается.
ИМХО - из симуляторов - лучший! (Не сравниваю с Proteus - разные подходы).


Я думаю, что вся проблема в неправильных dll-ках. Когда я заморачивался с таймерами, то обратил внимание на то, что биты в регистрах не соответствуют ДШ(см выше). Я думаю, что они взяли шаблоны с прошлых версий и воткнули не глядя, т.к. заранее планировалася бесплатная версия. А инклуды я проверял -- они соответствуют ДШ. Нашел в сети перевод фирменного руководства по созданию dll-ки для симуляции собственного элемента. Но я пока в Си дуб и поэтому эта описаловка для меня темный лес. Но я думаю, что если освоить это, то получится мощный инструмент в руках, ведь что ни говори, а vmlab при его маленьких размерах обладает большими возможностями. Сегодня скачал WinAvr и буду щупать его со студией. Может быть действительно студия богаче для отладки.
Vix
Вчера ковырял (раз в полгода просматриваю прогресс, когда-то долго просидел на асме и студиях версий 3.5х) студию 4.13, до сих пор симулятор не в курсе, что аналаговый компаратор после сброса контроллера находится во включенном состоянии. Бросил ...

Ковыряю Rowley CrossStudio, впечатления намного более приятные (по симулятору и вообще).

VMLab - создавал примитивную dll. Возможность создавать свой компонент - супер! Но как-то в последнее время все больше приходиться использовать ШИМ именно в таких режимах, о которых симулятор VMLab-а не знает, и не узнает... Насчет поправить "главную AVR DLL" в VMLab - круто...

"Инклуды" живут в WinAVR и с VMLab не связаны. Потому они для более свежих процов правильные, а вот имена битов в симуляторе от "не свежих".

Кстати, в CrossStudio есть "JavaScript peripheral simulation" - не знаю пока, что это, но возможно это аналогия как "свой компонент в VMLab".
j_serg
Цитата(Vix @ Feb 6 2008, 09:33) *
Вчера ковырял (раз в полгода просматриваю прогресс, когда-то долго просидел на асме и студиях версий 3.5х) студию 4.13, до сих пор симулятор не в курсе, что аналаговый компаратор после сброса контроллера находится во включенном состоянии. Бросил ...

Ковыряю Rowley CrossStudio, впечатления намного более приятные (по симулятору и вообще).

VMLab - создавал примитивную dll. Возможность создавать свой компонент - супер! Но как-то в последнее время все больше приходиться использовать ШИМ именно в таких режимах, о которых симулятор VMLab-а не знает, и не узнает... Насчет поправить "главную AVR DLL" в VMLab - круто...

"Инклуды" живут в WinAVR и с VMLab не связаны. Потому они для более свежих процов правильные, а вот имена битов в симуляторе от "не свежих".

Кстати, в CrossStudio есть "JavaScript peripheral simulation" - не знаю пока, что это, но возможно это аналогия как "свой компонент в VMLab".


Я имел в виду dll-ки для элементов. Если я правильно понял из выше указанного руководства, то в этих dll-ках как раз и описывается поведение элемента при симуляции. А по поводу главной dll-ки это действительно круто. В VMLab тоже есть инклуды. Они расположены в папке inc и в них тоже описаны по ДШ. все регистры, названия битов, прерывания и т.д. По началу я думал, что VMLab руководствуется инками, а потом уже узнал про dll-ки. Ну, а по поводу различных пакетов типа Rowley CrossStudio голова идет кругом. Потому как одни хвалят, другие хаят. А мне как начинающему охота присесть на какой-нибудь не сильно глюкнутый пакет, потому как получается: не правильно понял работу железа+алгоритмическая ошибка в проге, к этому добавить глюк пакета и получается бег по замкнутому кругу. Пример с VMLab и прерываниями. Просидел больше двух недель, с таймерами вроде разобрался, а с PCINT нет, но думаю здесь дело уже не во мне. Поэтому прийдется идти стандартной дорогой начинающего - выискивать глюки собственным лбом и собирать инфу по форумам, т.к. в стидии и WinAVR сидит много народу.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.