*SERG 0 19 января, 2006 Опубликовано 19 января, 2006 · Жалоба :( Работает только с маленькими програмками, не любит подпрограммы обработки прерывания (то работает то нет, так и не понял в чём проблемма) AVRSTUDIO есть, но он програмный отладчик, лучше бы схемный. Может есть что нибудь аналогичное PROTEUSU, что б с COF файлами работал, или каким то образом Си понимал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 19 января, 2006 Опубликовано 19 января, 2006 (изменено) · Жалоба :( Работает только с маленькими програмками, не любит подпрограммы обработки прерывания (то работает то нет, так и не понял в чём проблемма) AVRSTUDIO есть, но он програмный отладчик, лучше бы схемный. Может есть что нибудь аналогичное PROTEUSU, что б с COF файлами работал, или каким то образом Си понимал Ну чтож... у меня тоже самое было... в железе все работало, а в Proteus'е - нет! Потом на Телесистемах мне сказали, что все эти софтовые отладчики - игрушки. Я их и не использовал ни разу, не Proteus, не Vmlab. Хотя вполне возможно, что где-то они могут и помочь. А насчет схемной отладки - так лучше реально собранного железа ничего быть не может, а если еще Jtag прикрутить, то вообще жизнь медом кажется :) Правда я и Jtag не использовал, я про него говорю со слов вполне компетентных людей, которым я доверяю. P.S. Да вот еще... AVRStudio на мой взгляд работает вполне сносно, правда есть тоже глюки, но я ни разу не встречался с ними. В основном я на студии проверял ход првильности алгоритма и время выполнения "куска" кода. Изменено 19 января, 2006 пользователем haker_fox Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
*SERG 0 19 января, 2006 Опубликовано 19 января, 2006 · Жалоба :) Сижу щас и собираю JTAG, посмотрю что получится Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 19 января, 2006 Опубликовано 19 января, 2006 · Жалоба AVRSTUDIO есть, но он програмный отладчик, лучше бы схемный. Может есть что нибудь аналогичное PROTEUSU, что б с COF файлами работал, или каким то образом Си понимал Дык а зачем оно Вам? Эмуляторы тормозят.. на готовом железе куда приятней и полезней отлаживать. AvrStudio+ jtag+железо - лучшего отладчика для avr не найти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DeXteR 0 19 января, 2006 Опубликовано 19 января, 2006 · Жалоба :( Работает только с маленькими програмками, не любит подпрограммы обработки прерывания (то работает то нет, так и не понял в чём проблемма) AVRSTUDIO есть, но он програмный отладчик, лучше бы схемный. Может есть что нибудь аналогичное PROTEUSU, что б с COF файлами работал, или каким то образом Си понимал Наверна проблемма твоя в версии Протеуса У меня 6.73 СП3 ПРО - Счас работаю с программой на 17к (атмега 32) + Прога на 4 К (атмега 8) + модель 24с04 Когда работал в 6.5 - проблеммы были. Тоже говорят мне о Демо версиях переделаных в ПРО Аналогов программы нету (развечто WMLAB но он корявый и неудобный) Ищи проблеммы у себя Для отладки советую отключить оптимизацию кода компиллером (если это возможно) По крайне мере с отладкой формата IAR проблемм нету. На саите производителя Протеуса есть форум Может тебе там чтото подскажут. Про эмуляторы: 1. Эмулятор останавливает процессор а вся переферия + обект управления проболжает безконтрольно работать. 2. Есть еще Реалтайм мониторы но они крадут быстродействие .... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
*SERG 0 19 января, 2006 Опубликовано 19 января, 2006 · Жалоба У меня то ж такая версия, но код в Си написан, может в этом и проблемма??? А на счёт ошибок....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:[email protected] 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 }; } AVRSTUDIO есть, но он програмный отладчик, лучше бы схемный. Может есть что нибудь аналогичное PROTEUSU, что б с COF файлами работал, или каким то образом Си понимал Дык а зачем оно Вам? Эмуляторы тормозят.. на готовом железе куда приятней и полезней отлаживать. AvrStudio+ jtag+железо - лучшего отладчика для avr не найти. К этому пока всё и идёт :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DeXteR 0 19 января, 2006 Опубликовано 19 января, 2006 · Жалоба Если хочеш - Скинь исходники в архиве с откомпилиным КОФом Ато у мя нету твоего компиллера И файл с можелью протеуса тоже пригодица Разберемся вместе Проект никому непродам =) Обещаю =) У меня толькачто заработал ТВИ Слейв на атмеге 8 под протеусом =) Но прирывания я неиспользовал. [email protected] А протеус точно ПРО ??? Ты с диска ставил или демо ломал ?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bodja74 0 19 января, 2006 Опубликовано 19 января, 2006 · Жалоба У меня на ПРОТЕУСЕ прекрасно работает мастер-приемник,мастер-передачик как по прерыванию так и без,Слейв-приемник и слейв-передатчик по прерыванию.Версия демо 6.73 SP0. Так что ройтесь в своем коде. Смотрел вашу инициализацию TWI в принципе верно.TWCR=$45 не нужно,лишнее. Я в Си плох,так что скажите где у вас вектор на прерываение TWI,может быть там засада. Кроме того в таблице векторов TWI почти последнее, и при таком количестве прерываний вполне может "пасти хвосты" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
*SERG 0 20 января, 2006 Опубликовано 20 января, 2006 · Жалоба У меня на ПРОТЕУСЕ прекрасно работает мастер-приемник,мастер-передачик как по прерыванию так и без,Слейв-приемник и слейв-передатчик по прерыванию.Версия демо 6.73 SP0. Так что ройтесь в своем коде. Смотрел вашу инициализацию TWI в принципе верно.TWCR=$45 не нужно,лишнее. Я в Си плох,так что скажите где у вас вектор на прерываение TWI,может быть там засада. Кроме того в таблице векторов TWI почти последнее, и при таком количестве прерываний вполне может "пасти хвосты" На счёт TWCR=$45 - это понятно, т.к потом его всёравно писать, генератор CVAVR просто так генерит, да и собственно проблемма не в этом :) Подпрограмма прерывания начинеатся со строки interrupt [TWI] void twi_isr(void), там обна вставка на асме "nop" и всё. ПРОБЛЕММА ТО В ТОМ ЧТО ОН ДАЖЕ НЕ НА ПРЕРЫВАНИЕ НЕ ПЕРЕХОДИТ Если хочеш - Скинь исходники в архиве с откомпилиным КОФом Ато у мя нету твоего компиллера И файл с можелью протеуса тоже пригодица Разберемся вместе Проект никому непродам =) Обещаю =) У меня толькачто заработал ТВИ Слейв на атмеге 8 под протеусом =) Но прирывания я неиспользовал. [email protected] А протеус точно ПРО ??? Ты с диска ставил или демо ломал ?? ОК сегодня что нибудь элементарное напишу и скину, проектом не особо охото раскидываться :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
*SERG 0 20 января, 2006 Опубликовано 20 января, 2006 · Жалоба Proteus качнул из интернета, но ничего неломал, при установке кнопки понажимал, где я так понял надо было вводить фаил лецензии, у меня там перепрыгнуло что то из одного окошка в другое. Нажал отмена и вперёд всё установилось. При входе в HELP->ABOUT ISIS такая вот картина. Может дествительно ломать ещё дополнительно как то надо. Или если есть у тебя с диска скинь пожалуста на [email protected] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
*SERG 0 20 января, 2006 Опубликовано 20 января, 2006 (изменено) · Жалоба Вот ещё одина непонятка, кусок из вс ей программы 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) { };", а при входе второй раз просто игнорирует и проскакивает этот цикл. :angry2: Чесно говоря уже неделю или две БАДАЮСЬ с этим протеусом и кроме "СЮРПРИЗОВ" ничего хорошего :( Протеус качал от сюда http://www.rivstech.ru/downloads/index.php...c2988398337701a Что то такое ощущение либо протеус не полный какойто, либо его всё таки крякать надо. Таких же элементарных ошибок быть не доложно!!! Изменено 20 января, 2006 пользователем *SERG Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DeXteR 0 20 января, 2006 Опубликовано 20 января, 2006 · Жалоба Протеус качал от сюда http://www.rivstech.ru/downloads/index.php...c2988398337701a Это демоверсия половина файлов которой заменино на про и заставлино работать =) Глючить такая штука должна по определению. :) Фулл версия весит 300 метров К сожалению немогу залить сюда Инет слабенький. Если есть знакомые в Одессе - присылайте =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
*SERG 0 20 января, 2006 Опубликовано 20 января, 2006 · Жалоба Протеус качал от сюда http://www.rivstech.ru/downloads/index.php...c2988398337701a Это демоверсия половина файлов которой заменино на про и заставлино работать =) Глючить такая штука должна по определению. :) Фулл версия весит 300 метров К сожалению немогу залить сюда Инет слабенький. Если есть знакомые в Одессе - присылайте =) :ohmy: :ohmy: :ohmy: УПС........................материца не охота, вотблин а........................столько времени............эх........... :( Ну хорошо хоть выяснилось что к чему, всё что не делается всё к лучшему. :) Огроменное спасибо!!! Буду искать А на ftp есть полная версия??? Ой сорри, я и не заметил что меня в "свои" перевели. УРААААААААААААААААААААА товарищчи!!! Спасибо модерам и админам!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bodja74 0 20 января, 2006 Опубликовано 20 января, 2006 · Жалоба Подпрограмма прерывания начинеатся со строки interrupt [TWI] void twi_isr(void), там обна вставка на асме "nop" и всё. ПРОБЛЕММА ТО В ТОМ ЧТО ОН ДАЖЕ НЕ НА ПРЕРЫВАНИЕ НЕ ПЕРЕХОДИТ Ну я это понял ,я просто спрашивал по какому адрессу у вас находиться вектор на это прерывание, вполне возможно он расположен не по тому адрессу.Кроме того есть ограничение на использование команды относительного перехода в пределах 2048 байт,вполне возможно ваша подпрограмма находиться за этим пределом. 300 кБ ПРОТЕУС это прога с пдфками (документацией на компоненты) То что демка слабовата на хелп это не секрет. Начиная с 6.2 также урезали SDK для создания своих моделей. Скорее всего Вы наложили версию поновее поверх и перетащили ключи в ЛИЦЕНЗЕ.ЭХЭ Если у Вас проект сохраняется а также можете делать трассировку плат и сохранять,считайте что у Вас прога работает. Ну а заморочки в любой проге есть,не стоит так растраиваться,что ПРОТЕУС не может ткнуть пальцем на Ваши ошибки в проге. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
*SERG 0 21 января, 2006 Опубликовано 21 января, 2006 · Жалоба Да вроде получилось что то, на железе проверю сегодня и выложу. TWI по прерываниям Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться