azatsh 0 30 апреля, 2008 Опубликовано 30 апреля, 2008 · Жалоба Hex файл который скомпилирован на ассемблере без проблем шьет микро-лер, а hex файл скомпилированный на С не хочет. При попытке стартовать пишет: the contents of the HEX file does not fit in the selected device Может в коде надо какой нибудь файл сделать include ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tazik 0 30 апреля, 2008 Опубликовано 30 апреля, 2008 · Жалоба Hex файл который скомпилирован на ассемблере без проблем шьет микро-лер, а hex файл скомпилированный на С не хочет. При попытке стартовать пишет: the contents of the HEX file does not fit in the selected device Может в коде надо какой нибудь файл сделать include ? В опциях компилятора или в make-файле необходимо задать соответствующий тип контроллера. У Вас какой компилятор? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
azatsh 0 30 апреля, 2008 Опубликовано 30 апреля, 2008 · Жалоба В опциях компилятора или в make-файле необходимо задать соответствующий тип контроллера. У Вас какой компилятор? Компилятор WinAvr. А МК ATmega8515. А как задать эти опции не подскажите?! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tazik 0 30 апреля, 2008 Опубликовано 30 апреля, 2008 (изменено) · Жалоба Компилятор WinAvr. А МК ATmega8515. А как задать эти опции не подскажите?! Утилита MFile меню Makefile->MCU type Или ручками в самом make-файле - секция # MCU name Прошу прощения, возможно, немного Вам наврал и программа просто "не влазит" в МК. Но сначала, желательно, убедиться, что тип соответствует Поправьте, если что не так... А что за попытка "стартовать"? Что именно стартует? Изменено 30 апреля, 2008 пользователем tazik Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
azatsh 0 30 апреля, 2008 Опубликовано 30 апреля, 2008 · Жалоба Все исправил. Спасибо!:) Теперь возникла другая проблема, программа которую я написал не работает. Не работает даже банальная программа - перемигивание светодиодов. А шить надо во флеш или в eeprom? В eeprom шью ноль эмоций (два светодиода постоянно горят). Во флеш шью программа странно работает. В чем разница зашить во флеш и зашить в eeprom, можно ли одновременно в оба? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tazik 0 30 апреля, 2008 Опубликовано 30 апреля, 2008 (изменено) · Жалоба Все исправил. Спасибо!:) Теперь возникла другая проблема, программа которую я написал не работает. Не работает даже банальная программа - перемигивание светодиодов. А шить надо во флеш или в eeprom? В eeprom шью ноль эмоций (два светодиода постоянно горят). Во флеш шью программа странно работает. В чем разница зашить во флеш и зашить в eeprom, можно ли одновременно в оба? Пожалуйста :) Flash - память программ. Т.е. шить нужно в нее Eeprom - энергонезависимая память для пользовательских данных (для каких-нибудь Ваших калибровочных констант, переменных счетчиков и т.п.) SRAM - энергозависимая память для пользовательских данных. сразу в оба не надо )) Приведите текст программы, плиз Изменено 30 апреля, 2008 пользователем tazik Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
azatsh 0 30 апреля, 2008 Опубликовано 30 апреля, 2008 · Жалоба Пробовал только во флеш, все равно не работает... Ну вот например такая программка: #include <avr/io.h> #include <avr/delay.h> int main(void) { DDRB = 0; DDRD = 0xFF; int i; i = 0x1; PORTD = i; while(1) { i = i*2; if (i>255) i=0x1; PORTD = i; _delay_loop_2(1000); } } или из книжки к STK500: ;программка должна при нажатии на кнопку высветить соответствующий светодиод .include "m16def.inc" .def Temp =r16 ; Регистр хранения временных данных .def Delay =r17 ; Переменная 1 для генерации задержки .def Delay2 =r18 ; Переменная 2 для генерации задержки ;***** Инициализация RESET: ser temp out DDRB, temp ; Настройка порта В (PORTB) на вывод ;**** Тестирование ввода/вывода LOOP: out PORTB,temp ; Обновление состояния светодиодов sbis PIND,0x00 ; Если PortD.0 = 0, inc temp ; то уменьшение на 1 двоичного кода, формируемого свечением светодиодов sbis PIND,0x01 ; Если PortD.1 = 0, dec Temp ; то увеличение на 1 двоичного кода, формируемого свечением светодиодов sbis PIND,0x02 ; Если PortD.2 = 0, ror Temp ; то циклический сдвиг состояния светодиодов на 1 вправо sbis PIND,0x03 ; Если PortD.3 = 0, rol Temp ; то циклический сдвиг состояния светодиодов на 1 влево sbis PIND,0x04 ; Если PortD.4 = 0, com Temp ; то инверсия состояния всех светодиодов sbis PIND,0x05 ; Если PortD.5 = 0, neg Temp ; то инверсия состояния и прибавление 1 sbis PIND,0x06 ; Если PortD.6 = 0, swap Temp ; то обмен тетрадами светодиодов ;**** Далее необходима задержка, чтобы сделать проделанные изменения видимыми DLY: dec Delay brne DLY dec Delay2 brne DLY rjmp LOOP ; Повторение цикла заново Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tazik 0 30 апреля, 2008 Опубликовано 30 апреля, 2008 · Жалоба #include <avr/io.h> #include <avr/delay.h> int main(void) { DDRB = 0; DDRD = 0xFF; int i; i = 0x1; PORTD = i; while(1) { i = i*2; if (i>255) i=0x1; PORTD = i; _delay_loop_2(1000); } } Ну так а какая именно программа работает "не так"? В чем именно заключается эта "нетаковость"? Проверьте, соответствует ли частота работы МК, указанная в make-файле, реальному кварцу. Бегущий огонь? Ничего не перепутал? Все светодиоды светятся? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
azatsh 0 30 апреля, 2008 Опубликовано 30 апреля, 2008 · Жалоба Не работают обе программы! После включения платы постоянно горят два правых светодиода. И все! А что частоты должны обязательно совпадать? Какую частоту нужно ставить? Вы правильно заметили это бегущий огонь.. должен был быть :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tazik 0 30 апреля, 2008 Опубликовано 30 апреля, 2008 (изменено) · Жалоба Не работают обе программы! После включения платы постоянно горят два правых светодиода. И все! А что частоты должны обязательно совпадать? Какую частоту нужно ставить? Вы правильно заметили это бегущий огонь.. должен был быть :) Частота, для которой компилируется программа (указанная в makefile) должна соответствовать частоте кварца, установленного на Вашей плате. Т.к. она используется, например, при "расчете" компилятором необходимого времени задержки. В общем, есть подозрение, что 1-ая программа-то у Вас работает. Только слишком быстро - и на глаз этого не видно. По поводу второй программы. У Вас применяется контроллер mega16? Изменено 30 апреля, 2008 пользователем tazik Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fpmoleg 0 30 апреля, 2008 Опубликовано 30 апреля, 2008 · Жалоба По умолчанию winAVR ставит частоту кварца 8 МГц (F_CPU = 8000000 - это в makefile-e). Есть вариант что у тебя программа "виснет" - не инициализирован сторожевой таймер. DDRB = 0; DDRD = 0xFF; int i; Если пишешь на С то в начале инициализация переменных, а потом операции с ними. Какой у тебя кварц стоит ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 30 апреля, 2008 Опубликовано 30 апреля, 2008 · Жалоба Проверьте FUSE, правильно ли они стоят? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
azatsh 0 1 мая, 2008 Опубликовано 1 мая, 2008 · Жалоба По умолчанию winAVR ставит частоту кварца 8 МГц (F_CPU = 8000000 - это в makefile-e). Есть вариант что у тебя программа "виснет" - не инициализирован сторожевой таймер. DDRB = 0; DDRD = 0xFF; int i; Если пишешь на С то в начале инициализация переменных, а потом операции с ними. Какой у тебя кварц стоит ? А как инициализировать сторожевой таймер? Я объявляю i а потом использую ее, что не так? Кварц вижу а частоту нет. Написано 737*8 звездочка это непонятный символ я не разобрал ) Проверьте FUSE, правильно ли они стоят? Не подскажите как должно быть правильно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tazik 0 1 мая, 2008 Опубликовано 1 мая, 2008 (изменено) · Жалоба А как инициализировать сторожевой таймер? Я объявляю i а потом использую ее, что не так? Кварц вижу а частоту нет. Написано 737*8 звездочка это непонятный символ я не разобрал ) Не подскажите как должно быть правильно Так а железо у Вас какое? STK500? Может быть не 737*8, а 32768? Изменено 1 мая, 2008 пользователем tazik Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
azatsh 0 2 мая, 2008 Опубликовано 2 мая, 2008 · Жалоба Так а железо у Вас какое? STK500? Может быть не 737*8, а 32768? Нет. Точно начинается с этих цифр. Но возможно то что я имел ввиду под кварцем вовсе не кварц. Просто других похожих нет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться