Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: разочеровался в PROTEUSE
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2
*SERG
sad.gif
Работает только с маленькими програмками, не любит подпрограммы обработки прерывания (то работает то нет, так и не понял в чём проблемма)

AVRSTUDIO есть, но он програмный отладчик, лучше бы схемный. Может есть что нибудь аналогичное PROTEUSU, что б с COF файлами работал, или каким то образом Си понимал
haker_fox
Цитата(*SERG @ Jan 19 2006, 12:45) *
sad.gif
Работает только с маленькими програмками, не любит подпрограммы обработки прерывания (то работает то нет, так и не понял в чём проблемма)

AVRSTUDIO есть, но он програмный отладчик, лучше бы схемный. Может есть что нибудь аналогичное PROTEUSU, что б с COF файлами работал, или каким то образом Си понимал


Ну чтож... у меня тоже самое было... в железе все работало, а в Proteus'е - нет! Потом на Телесистемах мне сказали, что все эти софтовые отладчики - игрушки. Я их и не использовал ни разу, не Proteus, не Vmlab. Хотя вполне возможно, что где-то они могут и помочь.

А насчет схемной отладки - так лучше реально собранного железа ничего быть не может, а если еще Jtag прикрутить, то вообще жизнь медом кажется smile.gif Правда я и Jtag не использовал, я про него говорю со слов вполне компетентных людей, которым я доверяю.

P.S. Да вот еще... AVRStudio на мой взгляд работает вполне сносно, правда есть тоже глюки, но я ни разу не встречался с ними. В основном я на студии проверял ход првильности алгоритма и время выполнения "куска" кода.
*SERG
smile.gif
Сижу щас и собираю JTAG, посмотрю что получится
defunct
Цитата(*SERG @ Jan 19 2006, 06:45) *
AVRSTUDIO есть, но он програмный отладчик, лучше бы схемный. Может есть что нибудь аналогичное PROTEUSU, что б с COF файлами работал, или каким то образом Си понимал


Дык а зачем оно Вам? Эмуляторы тормозят.. на готовом железе куда приятней и полезней отлаживать. AvrStudio+ jtag+железо - лучшего отладчика для avr не найти.
DeXteR
Цитата(*SERG @ Jan 19 2006, 08:45) *
sad.gif
Работает только с маленькими програмками, не любит подпрограммы обработки прерывания (то работает то нет, так и не понял в чём проблемма)

AVRSTUDIO есть, но он програмный отладчик, лучше бы схемный. Может есть что нибудь аналогичное PROTEUSU, что б с COF файлами работал, или каким то образом Си понимал


Наверна проблемма твоя в версии Протеуса
У меня 6.73 СП3 ПРО -
Счас работаю с программой на 17к (атмега 32) + Прога на 4 К (атмега 8) + модель 24с04
Когда работал в 6.5 - проблеммы были.
Тоже говорят мне о Демо версиях переделаных в ПРО

Аналогов программы нету (развечто WMLAB но он корявый и неудобный)

Ищи проблеммы у себя
Для отладки советую отключить оптимизацию кода компиллером (если это возможно)

По крайне мере с отладкой формата IAR проблемм нету.

На саите производителя Протеуса есть форум
Может тебе там чтото подскажут.

Про эмуляторы:
1. Эмулятор останавливает процессор а вся переферия + обект управления проболжает безконтрольно работать.
2. Есть еще Реалтайм мониторы но они крадут быстродействие ....
*SERG
У меня то ж такая версия, но код в Си написан, может в этом и проблемма???
А на счёт ошибок....AWRSTUDIO работает как нада а Протеусу что то не нравится, вот элемнтарный пример:
Всё смотреть не надо, достаточно того, что есть подпрограмма обработки прерывания( interrupt [TWI] void twi_isr(void)) , все прерывания разрешены(#asm("sei")).........
формируем СТАРТ с разрешением последушего прерывания....
А после посылки старта, программа даже не переходит на подпрограмму прерывания, хотя все условия выполняются (смотрел регистры)............
Ну вот и не пойму в чём проблемма то?

/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.6 Standard
Automatic Program Generator
© Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
e-mail:office@hpinfotech.com

Project :
Version :
Date : 18.01.2006
Author : TeleSys Embedded
Company : FastmanSoft Inc.
Comments:


Chip type : ATmega16
Program type : Application
Clock frequency : 16,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/

#include <mega16.h>

#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// USART Receiver buffer
#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE<256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif

// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
};
};
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif

// USART Transmitter buffer
#define TX_BUFFER_SIZE 8
char tx_buffer[TX_BUFFER_SIZE];

#if TX_BUFFER_SIZE<256
unsigned char tx_wr_index,tx_rd_index,tx_counter;
#else
unsigned int tx_wr_index,tx_rd_index,tx_counter;
#endif

// USART Transmitter interrupt service routine
interrupt [USART_TXC] void usart_tx_isr(void)
{
if (tx_counter)
{
--tx_counter;
UDR=tx_buffer[tx_rd_index];
if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
};
}

#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
{
while (tx_counter == TX_BUFFER_SIZE);
#asm("cli")
if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
{
tx_buffer[tx_wr_index]=c;
if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
++tx_counter;
}
else
UDR=c;
#asm("sei")
}
#pragma used-
#endif

// Standard Input/Output functions
#include <stdio.h>

// 2 Wire bus interrupt service routine
interrupt [TWI] void twi_isr(void)
{
#asm
nop;
#endasm
// Place your code here

}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0xD8;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x67;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// 2 Wire Bus initialization
// Generate Acknowledge Pulse: On
// 2 Wire Bus Slave Address: 0h
// General Call Recognition: On
// Bit Rate: 400,000 kHz
TWSR=0x00;
TWBR=0x0C;
TWAR=0x01;
TWCR=0x45;

// Global enable interrupts
#asm("sei")
TWCR=0B10100101;//?????
while (1)
{
// Place your code here

};
}


Цитата(defunct @ Jan 19 2006, 11:50) *
Цитата(*SERG @ Jan 19 2006, 06:45) *

AVRSTUDIO есть, но он програмный отладчик, лучше бы схемный. Может есть что нибудь аналогичное PROTEUSU, что б с COF файлами работал, или каким то образом Си понимал


Дык а зачем оно Вам? Эмуляторы тормозят.. на готовом железе куда приятней и полезней отлаживать. AvrStudio+ jtag+железо - лучшего отладчика для avr не найти.


К этому пока всё и идёт smile.gif
DeXteR
Если хочеш - Скинь исходники в архиве с откомпилиным КОФом
Ато у мя нету твоего компиллера
И файл с можелью протеуса тоже пригодица
Разберемся вместе
Проект никому непродам =) Обещаю =)

У меня толькачто заработал ТВИ Слейв на атмеге 8 под протеусом =)
Но прирывания я неиспользовал.

ukrniisip@mail.ru

А протеус точно ПРО ???

Ты с диска ставил или демо ломал ??
bodja74
У меня на ПРОТЕУСЕ прекрасно работает мастер-приемник,мастер-передачик как по прерыванию так и без,Слейв-приемник и слейв-передатчик по прерыванию.Версия демо 6.73 SP0.
Так что ройтесь в своем коде.
Смотрел вашу инициализацию TWI в принципе верно.TWCR=$45 не нужно,лишнее.
Я в Си плох,так что скажите где у вас вектор на прерываение TWI,может быть там засада.
Кроме того в таблице векторов TWI почти последнее, и при таком количестве прерываний вполне
может "пасти хвосты"
*SERG
Цитата(bodja74 @ Jan 20 2006, 01:39) *
У меня на ПРОТЕУСЕ прекрасно работает мастер-приемник,мастер-передачик как по прерыванию так и без,Слейв-приемник и слейв-передатчик по прерыванию.Версия демо 6.73 SP0.
Так что ройтесь в своем коде.
Смотрел вашу инициализацию TWI в принципе верно.TWCR=$45 не нужно,лишнее.
Я в Си плох,так что скажите где у вас вектор на прерываение TWI,может быть там засада.
Кроме того в таблице векторов TWI почти последнее, и при таком количестве прерываний вполне
может "пасти хвосты"


На счёт TWCR=$45 - это понятно, т.к потом его всёравно писать, генератор CVAVR просто так генерит, да и собственно проблемма не в этом smile.gif

Подпрограмма прерывания начинеатся со строки interrupt [TWI] void twi_isr(void), там обна вставка на асме "nop" и всё. ПРОБЛЕММА ТО В ТОМ ЧТО ОН ДАЖЕ НЕ НА ПРЕРЫВАНИЕ НЕ ПЕРЕХОДИТ

Цитата(DeXteR @ Jan 19 2006, 17:05) *
Если хочеш - Скинь исходники в архиве с откомпилиным КОФом
Ато у мя нету твоего компиллера
И файл с можелью протеуса тоже пригодица
Разберемся вместе
Проект никому непродам =) Обещаю =)

У меня толькачто заработал ТВИ Слейв на атмеге 8 под протеусом =)
Но прирывания я неиспользовал.

ukrniisip@mail.ru

А протеус точно ПРО ???

Ты с диска ставил или демо ломал ??


ОК сегодня что нибудь элементарное напишу и скину, проектом не особо охото раскидываться smile.gif blush.gif
*SERG
Proteus качнул из интернета, но ничего неломал, при установке кнопки понажимал, где я так понял надо было вводить фаил лецензии, у меня там перепрыгнуло что то из одного окошка в другое. Нажал отмена и вперёд всё установилось.
При входе в HELP->ABOUT ISIS такая вот картина. Может дествительно ломать ещё дополнительно как то надо. Или если есть у тебя с диска скинь пожалуста на ISQSERG@YANDEX.RU
*SERG
Вот ещё одина непонятка, кусок из вс ей программы

while (!(col_pered_bait_simvola==0))//
{
mass_i2_peredan=0;
pered_bait_mass_i2=0;
mas_peredachi_i2[0]=0b10100000;
mas_peredachi_i2[2]=*ukaz_m_hl;
mas_peredachi_i2[1]=*++ukaz_m_hl;
mas_peredachi_i2[3]=*++ukazatel[prinat_ussap-delta_hex];
col_simv_pered_bait_mass_i2=4;
TWCR=0B10100101;

while (mass_i2_peredan==0)
{
};
TWCR=0B10010101;
delay_us(400);
col_pered_bait_simvola--;
adres_m++;
*--ukaz_m_hl;
};

Когда первый раз заходит в цикл "mass_i2_peredan=0;" понимает и зацикливается на этом "while (mass_i2_peredan==0) { };", а при входе второй раз просто игнорирует и проскакивает этот цикл. angry.gif
Чесно говоря уже неделю или две БАДАЮСЬ с этим протеусом и кроме "СЮРПРИЗОВ" ничего хорошего sad.gif

Протеус качал от сюда http://www.rivstech.ru/downloads/index.php...c2988398337701a


Что то такое ощущение либо протеус не полный какойто, либо его всё таки крякать надо. Таких же элементарных ошибок быть не доложно!!!
DeXteR
Протеус качал от сюда http://www.rivstech.ru/downloads/index.php...c2988398337701a


Это демоверсия половина файлов которой заменино на про и заставлино работать =)
Глючить такая штука должна по определению. smile.gif

Фулл версия весит 300 метров
К сожалению немогу залить сюда
Инет слабенький.

Если есть знакомые в Одессе - присылайте =)
*SERG
Цитата(DeXteR @ Jan 20 2006, 12:46) *
Протеус качал от сюда http://www.rivstech.ru/downloads/index.php...c2988398337701a


Это демоверсия половина файлов которой заменино на про и заставлино работать =)
Глючить такая штука должна по определению. smile.gif

Фулл версия весит 300 метров
К сожалению немогу залить сюда
Инет слабенький.

Если есть знакомые в Одессе - присылайте =)


ohmy.gif ohmy.gif ohmy.gif УПС........................материца не охота, вотблин а........................столько времени............эх........... sad.gif
Ну хорошо хоть выяснилось что к чему, всё что не делается всё к лучшему. smile.gif
Огроменное спасибо!!!
Буду искать

А на ftp есть полная версия???

Ой сорри, я и не заметил что меня в "свои" перевели. УРААААААААААААААААААААА товарищчи!!! biggrin.gif biggrin.gif biggrin.gif
Спасибо модерам и админам!!!
bodja74
Цитата(*SERG @ Jan 20 2006, 06:15) *
Подпрограмма прерывания начинеатся со строки interrupt [TWI] void twi_isr(void), там обна вставка на асме "nop" и всё. ПРОБЛЕММА ТО В ТОМ ЧТО ОН ДАЖЕ НЕ НА ПРЕРЫВАНИЕ НЕ ПЕРЕХОДИТ


Ну я это понял ,я просто спрашивал по какому адрессу у вас находиться вектор на это прерывание,
вполне возможно он расположен не по тому адрессу.Кроме того есть ограничение на использование
команды относительного перехода в пределах 2048 байт,вполне возможно ваша подпрограмма
находиться за этим пределом.

300 кБ ПРОТЕУС это прога с пдфками (документацией на компоненты)
То что демка слабовата на хелп это не секрет.
Начиная с 6.2 также урезали SDK для создания своих моделей.
Скорее всего Вы наложили версию поновее поверх и перетащили ключи в ЛИЦЕНЗЕ.ЭХЭ
Если у Вас проект сохраняется а также можете делать трассировку плат и сохранять,считайте
что у Вас прога работает.

Ну а заморочки в любой проге есть,не стоит так растраиваться,что ПРОТЕУС не может ткнуть
пальцем на Ваши ошибки в проге.
*SERG
Да вроде получилось что то, на железе проверю сегодня и выложу. TWI по прерываниям
James D.
От себя добавлю: после того, как вы изменили свою прогу в AVRStudio, в Proteus'е не забывайте выполнить команду Build All, потому что Proteus будет использовать старый вариант вашей чудо-программы wink.gif
_Diman_
Кстати в PROTEUS некоторые модели AVR глючные, например, в меге 8 нет прерывания по завершении преобразования АЦП в режиме уменьшения шумов. PROTEUS больше подходит для отладки PICов.
*SERG
DeXteR
Проверь файл пожалуста на своём протеусе.
Интересно как будет работать
DeXteR
Цитата(*SERG @ Jan 23 2006, 12:50) *
DeXteR
Проверь файл пожалуста на своём протеусе.
Интересно как будет работать


Код
+00000000:   940C1C00    JMP     0x00001C00       Jump
+00000002:   0000        NOP                      No operation
+00000003:   0000        NOP                      No operation
+00000004:   0000        NOP                      No operation
+00000005:   0000        NOP                      No operation
+00000006:   0000        NOP                      No operation
+00000007:   0000        NOP                      No operation
+00000008:   0000        NOP                      No operation
+00000009:   0000        NOP                      No operation
+0000000A:   0000        NOP                      No operation
+0000000B:   0000        NOP                      No operation
+0000000C:   0000        NOP                      No operation
+0000000D:   0000        NOP                      No operation
+0000000E:   0000        NOP                      No operation
+0000000F:   0000        NOP                      No operation
+00000010:   0000        NOP                      No operation
+00000011:   0000        NOP                      No operation
+00000012:   0000        NOP                      No operation
+00000013:   0000        NOP                      No operation
+00000014:   0000        NOP                      No operation
+00000015:   0000        NOP                      No operation
+00000016:   0000        NOP                      No operation
+00000017:   0000        NOP                      No operation
+00000018:   0000        NOP                      No operation
+00000019:   0000        NOP                      No operation
+0000001A:   0000        NOP                      No operation
+0000001B:   0000        NOP                      No operation
+0000001C:   0000        NOP                      No operation
+0000001D:   0000        NOP                      No operation
+0000001E:   0000        NOP                      No operation
+0000001F:   0000        NOP                      No operation
+00000020:   0000        NOP                      No operation
+00000021:   0000        NOP                      No operation
+00000022:   0000        NOP                      No operation
+00000023:   0000        NOP                      No operation
+00000024:   0000        NOP                      No operation
+00000025:   0000        NOP                      No operation
+00000026:   0000        NOP                      No operation
+00000027:   0000        NOP                      No operation
+00000028:   0000        NOP                      No operation
+00000029:   0000        NOP                      No operation
+0000002A:   0000        NOP                      No operation
+0000002B:   0000        NOP                      No operation
+0000002C:   0000        NOP                      No operation
+0000002D:   0000        NOP                      No operation
+0000002E:   0000        NOP                      No operation
+0000002F:   0000        NOP                      No operation
+00000030:   0000        NOP                      No operation
+00000031:   0000        NOP                      No operation
+00000032:   0000        NOP                      No operation
+00000033:   0000        NOP                      No operation
+00000034:   0000        NOP                      No operation
+00000035:   0000        NOP                      No operation
+00000036:   0000        NOP                      No operation
+00000037:   0000        NOP                      No operation
+00000038:   0000        NOP                      No operation
+00000039:   0000        NOP                      No operation
+0000003A:   0000        NOP                      No operation
+0000003B:   0000        NOP                      No operation
+0000003C:   0000        NOP                      No operation
+0000003D:   0000        NOP                      No operation
+0000003E:   0000        NOP                      No operation


Прирывания непроисходит потомучто нету вектора =)

S A0 A 00 A 02 A 01 A P
S A0 A 00 A 02 A Sr A1 A 01 N

Это то что видно в I2C мониторе
*SERG
Цитата(DeXteR @ Jan 23 2006, 13:22) *
Цитата(*SERG @ Jan 23 2006, 12:50) *

DeXteR
Проверь файл пожалуста на своём протеусе.
Интересно как будет работать


Код
+00000000:   940C1C00    JMP     0x00001C00       Jump
+00000002:   0000        NOP                      No operation
+00000003:   0000        NOP                      No operation
+00000004:   0000        NOP                      No operation
+00000005:   0000        NOP                      No operation
+00000006:   0000        NOP                      No operation
+00000007:   0000        NOP                      No operation
+00000008:   0000        NOP                      No operation
+00000009:   0000        NOP                      No operation
+0000000A:   0000        NOP                      No operation
+0000000B:   0000        NOP                      No operation
+0000000C:   0000        NOP                      No operation
+0000000D:   0000        NOP                      No operation
+0000000E:   0000        NOP                      No operation
+0000000F:   0000        NOP                      No operation
+00000010:   0000        NOP                      No operation
+00000011:   0000        NOP                      No operation
+00000012:   0000        NOP                      No operation
+00000013:   0000        NOP                      No operation
+00000014:   0000        NOP                      No operation
+00000015:   0000        NOP                      No operation
+00000016:   0000        NOP                      No operation
+00000017:   0000        NOP                      No operation
+00000018:   0000        NOP                      No operation
+00000019:   0000        NOP                      No operation
+0000001A:   0000        NOP                      No operation
+0000001B:   0000        NOP                      No operation
+0000001C:   0000        NOP                      No operation
+0000001D:   0000        NOP                      No operation
+0000001E:   0000        NOP                      No operation
+0000001F:   0000        NOP                      No operation
+00000020:   0000        NOP                      No operation
+00000021:   0000        NOP                      No operation
+00000022:   0000        NOP                      No operation
+00000023:   0000        NOP                      No operation
+00000024:   0000        NOP                      No operation
+00000025:   0000        NOP                      No operation
+00000026:   0000        NOP                      No operation
+00000027:   0000        NOP                      No operation
+00000028:   0000        NOP                      No operation
+00000029:   0000        NOP                      No operation
+0000002A:   0000        NOP                      No operation
+0000002B:   0000        NOP                      No operation
+0000002C:   0000        NOP                      No operation
+0000002D:   0000        NOP                      No operation
+0000002E:   0000        NOP                      No operation
+0000002F:   0000        NOP                      No operation
+00000030:   0000        NOP                      No operation
+00000031:   0000        NOP                      No operation
+00000032:   0000        NOP                      No operation
+00000033:   0000        NOP                      No operation
+00000034:   0000        NOP                      No operation
+00000035:   0000        NOP                      No operation
+00000036:   0000        NOP                      No operation
+00000037:   0000        NOP                      No operation
+00000038:   0000        NOP                      No operation
+00000039:   0000        NOP                      No operation
+0000003A:   0000        NOP                      No operation
+0000003B:   0000        NOP                      No operation
+0000003C:   0000        NOP                      No operation
+0000003D:   0000        NOP                      No operation
+0000003E:   0000        NOP                      No operation


Прирывания непроисходит потомучто нету вектора =)

S A0 A 00 A 02 A 01 A P
S A0 A 00 A 02 A Sr A1 A 01 N

Это то что видно в I2C мониторе


ohmy.gif чудеса какието, если в Си написано (загрузить coff), то при отладке программы она прыгает на прерывание, это видно в отладчике, а из выше написанного на асме следует что прерываний нет huh.gif
Ни чего не понимаю!!!
DeXteR
=) Просто отладка в Сишном отладчике идет както нетак Может не через Кофф
Этот кусок я вырезал из АСТУДИО
Вообще полезно дизасемблить сишный код
чтоб посотреть что получается =)

Такчто протеус тут непричем
Вовсем виноват человеческий фактор =) + Глюкавость Всяких компиляторов =)

Я сам выбирал компиляторы так
Выбор стоял Между IAR и WinAVR
Я скомпилил в обоих одну и туже прогу и сделал измерилку быстродецствия
Прога работала по прирывпанию таимера
По входу в прирывание - выставлят бит на порте по выходу из него - снимал

Так вот оказалось что IAR делает WINAVR почти в 2 раза.
(пробывал с разной оптимизацией - ну раза в полтора - точно).

С тех пор стал осваивать IAR =)

Дело в том что восновном разрабатываб приложения реального времени - поэтому и обращал внимание толька на быстродействие Думаю по компактности кода ситуация иная.

Удачи с Протеусом

De}{teR
*SERG
Вовсем виноват человеческий фактор =) + Глюкавость Всяких компиляторов =)

Хе, больше просто некому smile.gif

Буду бится дальше.
А так то интересный результат...............

По этому наверно и аврстудио на прерывания не реагирует, потомучто его нат в асме, придётся асм вставку писать наверно
DeXteR
Лучше проконсультируйся по настройкам Линкера для твоего компилятора с тем кто им пользуеться

Там вектора есть но они находяться на Огромном расстоянии от адреса 0x0000 =)

Чтото нетак ты делаеш и файл иначе формируется
*SERG
А какой ты прогой воспользовался и какой файл там открыл, чтоб в таком виде код получить???

Токрыл файл с расширение obj (в AVRSTUDIO), пишет что вектор есть
;INTERRUPT VECTORS
JMP __RESET
JMP 0x00
JMP 0x00
JMP 0x00
JMP 0x00
JMP 0x00
JMP 0x00
JMP 0x00
JMP 0x00
JMP 0x00
JMP 0x00
JMP 0x00
JMP 0x00
JMP 0x00
JMP 0x00
JMP 0x00
JMP 0x00
JMP _twi_isr - вот он
JMP 0x00
JMP 0x00
JMP 0x00

И если там же открыть файл асм, то всё ок, по этой ссылке и начинается программа обработки прерывания huh.gif
DeXteR
Я использовал КОФ и пробывал ХЕКС
Там тожесамое.
Тоесть компилер нормально компилит а вот линкер линкит криво.
ОБЖ файл нормальный а Кофф - хреновый
*SERG
А что такое линкер??? И с чем его едят???

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


Щас на железе попробую, посмотрю что делает
DeXteR
В железе будет хуже чем в протеусе - вектора нетам
Или ты их уже переставил наместо
Линкер - То что делает из скомпиленого ОБЖ файла ХЕКС и КОФ
Входит в состав твоего Си компилятора

У тебя ОБЖ нормальный А КОФФ и ХЕКС - кривой
*SERG
Цитата(DeXteR @ Jan 23 2006, 16:36) *
В железе будет хуже чем в протеусе - вектора нетам
Или ты их уже переставил наместо
Линкер - То что делает из скомпиленого ОБЖ файла ХЕКС и КОФ
Входит в состав твоего Си компилятора

У тебя ОБЖ нормальный А КОФФ и ХЕКС - кривой


Так и есть, ерунда какаято, то ж также делает, только с одной ячейкой работает и всё.............
а потом ерунда какаято
А как в этот линкер залесть и изменить там что нибудь реально или нет???
DeXteR
Этого к сожалению незнаю
Никогда непользовался твоим Си

А вот тему попроси модераторов переименовать -
нельзя мокать в грязь программу которой многие обязаны быстро
сделаными и вполне рабочими проэктами =)
*SERG
Цитата(DeXteR @ Jan 23 2006, 19:10) *
Этого к сожалению незнаю
Никогда непользовался твоим Си

А вот тему попроси модераторов переименовать -
нельзя мокать в грязь программу которой многие обязаны быстро
сделаными и вполне рабочими проэктами =)


Слово РАЗОЧЕРОВАЛСЯ помоему не равно МОКНУЛ В ГРЯЗЬ, зачем такие громкие словаsmile.gif

А за помощь спасибо огромное a14.gif
bodja74
+00000000: 940C1C00 JMP 0x00001C00 Jump

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

Кстати нашел где можно подключить в протеусе внешний файл ЕЕПРОМ,в том же списке где
указываются фузы.
*SERG
Цитата(bodja74 @ Jan 24 2006, 00:24) *
+00000000: 940C1C00 JMP 0x00001C00 Jump

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

Кстати нашел где можно подключить в протеусе внешний файл ЕЕПРОМ,в том же списке где
указываются фузы.


С настройками всё ок.
Но возможно что прогу которую прикрепил - для бутлоадера, но помоему она должна работать и там и там
*SERG
ДЕЙСТВИТЕЛЬНО, прога записанна в сектор бутлоадера и поэтому прерываний нет, щас перекомпилил, вектор появился.
СПАСИБО bodja74

0000000A: 940C0000 JMP 0x00000000 Jump
+0000000C: 940C0000 JMP 0x00000000 Jump
+0000000E: 940C0000 JMP 0x00000000 Jump
+00000010: 940C0000 JMP 0x00000000 Jump
+00000012: 940C0000 JMP 0x00000000 Jump
+00000014: 940C0000 JMP 0x00000000 Jump
+00000016: 940C0000 JMP 0x00000000 Jump
+00000018: 940C0000 JMP 0x00000000 Jump
+0000001A: 940C0000 JMP 0x00000000 Jump
+0000001C: 940C0000 JMP 0x00000000 Jump
+0000001E: 940C0000 JMP 0x00000000 Jump
+00000020: 940C0000 JMP 0x00000000 Jump
+00000022: 940C005B JMP 0x0000005B Jump - вот он, адрес совпадает
+00000024: 940C0000 JMP 0x00000000 Jump
+00000026: 940C0000 JMP 0x00000000 Jump
+00000028: 940C0000 JMP 0x00000000 Jump
*SERG
Вот файл с векторм (расширение txt замените на rar и всё распакуется, почемуто не разрешает с расширением rar прикреплять), старый файл удалил.
DEXTER ПРОВЕРЬ ПОЖАЛУСТА в ПРОТЕУСЕ.
Сорри за назойливойсть blush.gif

ЗЫ Или кто нибудь, проверьте на рабочей версии протеуса
DeXteR
Твоя версия Протеуса похоже рабочая.
Вектора стоят наместе Прирывания происходят.
Но вот с памятью ты работаеш нетак как хочет она.

ПОСЛЕ ПРИЕМА N от памяти Мастер должен сделать Стоп и расслабиться

Мастер приемник должен сделать так.

S-(SLA-R)-A-Adres-A-RS-(SLA_R) + A + Data + NA + STOP

Тебе осталось толька стоп сделать =)
S A0 A 00 A 02 A Sr A1 A 01 N
Это то что пишет твой протеус


Почитай Датащит на нее и пользуйся логом Памяти в протеусе.
Она цикл записи считает за чтение
Наверна потомучто у нее адреса на запись - чтение разные.

Датащит можно скачать с сайта атмел.

Слишком локальные проблеммы мы обсуждаем.
Давай воспользуемся ICQ лучше =)
bodja74
Если прогу пишете для бутлоадера попробуйте поменять соответствующие фузы
в ПРОТЕУСЕ,по идее тож должно работать.
*SERG
Всё.......................... наконецто получилось с помощью DEXTERa

Распаковывается так же как выше прикреплённый
DeXteR
Поздравляю =)
В железе тоже пашет ??
san822
Я смотрю тут много "Протеусников" собралось. В связи с этим не могу не задать вам пару вопросов, которые меня интересуют:
1) Из каких источников вы предпочитаете брать модели для Протеуса ?
Я понимаю, что можно набрать
в поисковике запрос " модели для Протеуса" и найти что-то,
но меня
интересует именно ваша оценка(мнение) различных сайтов.
2) Насколько правдоподобно моделируются в Протеусе
интерфейсы(CAN,USB и др.)?
ROC
Цитата(san822 @ Jan 25 2006, 16:24) *
Я смотрю тут много "Протеусников" собралось. В связи с этим не могу не задать вам пару вопросов, которые меня интересуют:
1) Из каких источников вы предпочитаете брать модели для Протеуса ?
Я понимаю, что можно набрать
в поисковике запрос " модели для Протеуса" и найти что-то,
но меня
интересует именно ваша оценка(мнение) различных сайтов.

Я конечно дико извиняюсь, а что, есть большой выбор? blink.gif Мне в свое время пришлось весьма долго копать интернет, пока нашел единственную не особо глючную модель для DS18B20.

Цитата(san822 @ Jan 25 2006, 16:24) *
2) Насколько правдоподобно моделируются в Протеусе
интерфейсы(CAN,USB и др.)?

А они там моделируются? Про CAN вроде видел модели каких-то процессоров с CAN на борту, USB вообще не встречал.
san822
И где же удалось найти ?
Какие сайты пришлось перекопать ?
Какие из них показались самыми лучшими ?
Подробнее, пожалуйста...
DeXteR
НиКАкиХ =)

Для моих задачь пока прикрасно подходят стандартные библиотеки 6.7 версии.
Про САН пока недумаю УСБ - тоже зачастую работает в полоборота
(конечно если вы нехотите хост спаять =) ).

Саиты с моделями есть но очень немного
Часто модели довольно таки корявые и неидут сразу.

Единственное что Очень хочиться отковырять от версии 6.9 демо модель АРМ процессора и попробывать как она. Если кому удасться - Напишите =)
*SERG
Цитата(DeXteR @ Jan 25 2006, 11:13) *
Поздравляю =)
В железе тоже пашет ??

Это малекнькая но нужна часть в моей проге. Конкретно то что прикрепил на железе не проверял. Но в свою основную прогу добавил stop:) и всё заработало как надо.
Протеус работает довольно "ПРАВИЛЬНО" на счёт этого протокола.
Что заметил...........протеус не любит присвоение байтовых переменных, в основной программе вреде "ест" (main - Си), а в подпрограммах (процедурах, функциях, и т.д. и т.п.) любит только инверсию ('~' -Си).
ИМХО. НЕ хочет работать с большими программами!!!
bodja74
Да согласен DeXter , моделей вполне навалом для того чтобы собрать несложный девайс.
Искать то особо и не нужно.

To Serg

Протеус работает по факту от прошивки ,а не от исходников,поэтому ему
все равно какое имя переменной Вы присвоите,эта задача относиться к компиллеру.
Я присваивал более 50 одно и двухбайтовых переменных-нормально.
А большие программы Вы и не делайте,разбивайте на куски и отлаживайте,А уже всю прогу
отлаживайте в железе.
У меня в реальном железе было переполнение стека через 12 секунд,
на протеусе я бы этот глюк долго дожидался бы.
*SERG
Цитата(bodja74 @ Jan 25 2006, 20:31) *
Да согласен DeXter , моделей вполне навалом для того чтобы собрать несложный девайс.
Искать то особо и не нужно.

To Serg

Протеус работает по факту от прошивки ,а не от исходников,поэтому ему
все равно какое имя переменной Вы присвоите,эта задача относиться к компиллеру.
Я присваивал более 50 одно и двухбайтовых переменных-нормально.
А большие программы Вы и не делайте,разбивайте на куски и отлаживайте,А уже всю прогу
отлаживайте в железе.
У меня в реальном железе было переполнение стека через 12 секунд,
на протеусе я бы этот глюк долго дожидался бы.


А в какой програмее пишите?

Блииииииииииииииииин опять ошибочно написал, не БАЙТОВЫХ, а БИТОВЫХ т.е. флагов...!!!
А с байтовыми дружит вроде.
ROC
Цитата(bodja74 @ Jan 25 2006, 20:31) *
Да согласен DeXter , моделей вполне навалом для того чтобы собрать несложный девайс.
Искать то особо и не нужно.


Да? Некие общие модели есть, а вот конкретный девайс зачастую бывает весьма непросто сэмулировать. Например, модели для х51 есть, а для AT89C4051? Поискать и набегаться....

Цитата(bodja74 @ Jan 25 2006, 20:31) *
[some bytes skipped]
А большие программы Вы и не делайте,разбивайте на куски и отлаживайте,А уже всю прогу
отлаживайте в железе.
У меня в реальном железе было переполнение стека через 12 секунд,
на протеусе я бы этот глюк долго дожидался бы.

У меня было веселее. В эмуляторе - работает, код написан вроде правильно. В железе - ни в какую, беда да и только. Отправляю в девайс 0хFF, доходит только 0хEF. Достал у ребят железный эмулятор от Nohau, после буквально первого прогона стало понятно - 5-й бит отсох напрочь, не меняется никак и никогда, долго и нудно пропаивал всё "по пути следования", таки нашел неконтакт!
Так вот, сколько бы это пришлось ловить в Proteus'e? И поймалось ли бы оно вообще? Нужно быть полностью уверенным, что железо спаяно и работает как следует, что в Proteuse модели не глючат, тогда - да, отлаживаемся, моделируем и радуемся, ибо экономим ресурс отладочного кристалла на лишних и бесполезных прошивках и наблюдаем свой аппарат во всей красе - с лампочками, индикаторами, дисплеями и переключателями всякими.
Это я к чему, собственно? Ни один Proteus не отловит плохую пайку, сдохший электролит или обрыв дорожки, соответственно - если модель вдруг глючит в "нужную сторону", в железе этот глюк, увы, не воспроизвести никогда. А хардварные эмуляторы таких денег стОят....
bodja74
Цитата(ROC @ Jan 25 2006, 22:40) *
Да? Некие общие модели есть, а вот конкретный девайс зачастую бывает весьма непросто сэмулировать. Например, модели для х51 есть, а для AT89C4051? Поискать и набегаться....

Ну это лишнее,с таким же самым успехом можно например пообижаться на AVRstudio за то что у нее
нет поддержки PIC.
Протеус начинал свою карьеру с ПИКов,поэтому расчитывать на всю линейку от атмела как бы и не стоит.
Цитата
У меня было веселее. В эмуляторе - работает, код написан вроде правильно. В железе - ни в какую, беда да и только. Отправляю в девайс 0хFF, доходит только 0хEF. Достал у ребят железный эмулятор от Nohau, после буквально первого прогона стало понятно - 5-й бит отсох напрочь, не меняется никак и никогда, долго и нудно пропаивал всё "по пути следования", таки нашел неконтакт!
Так вот, сколько бы это пришлось ловить в Proteus'e? И поймалось ли бы оно вообще? Нужно быть полностью уверенным, что железо спаяно и работает как следует, что в Proteuse модели не глючат, тогда - да, отлаживаемся, моделируем и радуемся, ибо экономим ресурс отладочного кристалла на лишних и бесполезных прошивках и наблюдаем свой аппарат во всей красе - с лампочками, индикаторами, дисплеями и переключателями всякими.

Ну никто отладочное железо не отменял юзать,я об этом не раз говорил.
Протеус бы не нашел подобную неисправность.
А может ли Nohau провериль согласованную работу СРАЗУ нескольких контроллеров?
Цитата
Это я к чему, собственно? Ни один Proteus не отловит плохую пайку, сдохший электролит или обрыв дорожки, соответственно - если модель вдруг глючит в "нужную сторону", в железе этот глюк, увы, не воспроизвести никогда. А хардварные эмуляторы таких денег стОят....


Ну что я могу сказать в ответ?
Ни один железный отладчик "не отходя от кассы" не нарисует Вам принципиальную схему и разведет
печатку.

Я к чему веду?
Нет смысла сравнивать работу фундаментально разных вещей,здесь уж каждому свое.
DeXteR
Присоединяюсь к bodja74

+ скажу от себя
То что работает в Протеусе на 99.99999 % заработает в железе - проверено =)
Может и наоборот и невсегда .....

Если в железе непашет то что в протеусе - Это проблеммы быстродействия переферии + помех =)

Поэтому эту прогу УВАЖАЮ a14.gif
ROC
Цитата(bodja74 @ Jan 26 2006, 00:21) *
Ну никто отладочное железо не отменял юзать,я об этом не раз говорил.
Протеус бы не нашел подобную неисправность.
А может ли Nohau провериль согласованную работу СРАЗУ нескольких контроллеров?

Нет. Не думаю.
Можно попинать slave, чтобы говорил, что надо, потом master'a, чтобы слушал, что надо.
Но без Nohau было бы еще сложнее разбираться...
Цитата(bodja74 @ Jan 26 2006, 00:21) *
Ну что я могу сказать в ответ?
Ни один железный отладчик "не отходя от кассы" не нарисует Вам принципиальную схему и разведет
печатку.

Orcad, Pcad, Protel & целая куча всего остального (тот же Eagle, etc.) уже не в кассу? sad.gif
А Proteus сам мне и не нарисует ничего, это в нем надо долго и нудно все это рисовать, проверять и т.д. Тем более - сильно сомневаюсь, что хоть одна лавочка по производству PCB возьмет Proteus'овский файл. Не помню, он Gerber-то хоть генерит?
А еще "железные отладчики" не умеют варить кофе, гладить шнурки и бегать за сигаретами/пивом.. smile.gif smile.gif

Какой-то беспредметный разговор получается... sad.gif

Цитата(DeXteR @ Jan 26 2006, 13:41) *
Присоединяюсь к bodja74

+ скажу от себя
То что работает в Протеусе на 99.99999 % заработает в железе - проверено =)
Может и наоборот и невсегда .....

Если в железе непашет то что в протеусе - Это проблеммы быстродействия переферии + помех =)

Поэтому эту прогу УВАЖАЮ a14.gif

Да не наезжаю я на Proteus! Мне тоже эта софтина нравится, я считаю её полезной, но нельзя безоговорочно верить симуляторам. В конце концов - там только модель компонента. Errata всякие никогда не читали? Да что далеко ходить, в соседних ветках люди вон баги в ядре Tiny26 ловят. А если в Proteuse такая же модель реализована?
"Никому нельзя верить" (С) smile.gif
osnwt
Цитата(*SERG @ Jan 25 2006, 21:38) *
Блииииииииииииииииин опять ошибочно написал, не БАЙТОВЫХ, а БИТОВЫХ т.е. флагов...!!!


В свое время при отладке кусков программы работы с графическим LCD на протеусе (где чистая логика, а потому использование симулятора вполне оправдано) и при переходе к регистровым переменным тоже обнаружил, что, как минимум, одна инструкция проверки битов (не помню, какая) не работает для битов с номером >0, а IAR активно эту команду использовал. Размещал в регистре битовые флаги и нарвался. Пришлось добавить для симулятора условную компиляцию. Это было в ATmega32.

Что касается моделей, то некоторые несложные цифровые модели можно писать самим. Информации по их написанию достаточно мало, но кое-что удалось найти. Результаты того, что получилось у меня, выкладывал на телесистемах (дублирую ниже - может, пригодится кому).

А на самом деле действительно интересно, можно ли как-то прикрутить новую модель AVR.DLL к Proteus 6.73? Размер заметно вырос, могли появиться новые варианты устройств и поправиться баги старых. А прямая замена вешает симулятор.

-------

О моделях протеуса:

Привет всем!

Потратил определенное время на поиск информации по написанию моделей цифровых компонентов для Proteus. Нашел ссылку на модели Андрея, написавшего статью про создание DLL. К сожалению, самой статьи не нашел (убрана по требованию Labcenter), и ответить на письмо автор не пожелал. Ладно, спасибо и на этом. Его модель счетчика послужила толчком к освоению VSM DSIM SDK (с аналоговыми моделями не разбирался, там серьезная теория).

В итоге выкладываю на общее пользование в рапидшару SDK (взят из Proteus 6.3 Pro - не крякнутое демо) и пример модели 74LS670 (регистровый файл 4 на 4 с тристабильным выходом и независимой записью-чтением) с исходниками. По отношению к счетчику добавлена интерпретация пинов как шин (сильно упрощает код), тристабильные выходы, задержка записи и чтения (согласно типичным параметрам из data sheet), индикация всплывающего окна с содержимым регистровой памяти при остановленной симуляции.

Компилировано с помощью VCToolkit от Microsoft (бесплатный C++ компилятор командной строки, совместимый с .NETовским) и утилиты nmake.exe того же производителя. Можно использовать и другие среды разработки (Visual Studio, VS.NET).

Может, кому-то пригодится.

А если кто-то разберется с тем, как с минимумом затрат создать смешанную модель (скажем, АЦП с цифровым интерфейсом, где от аналога нужно-то только чтение входного потенциала из модели) - буду рад получить весточку на мыло.

VSM SDK with sample digital model
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.