v-vovchek 0 24 февраля, 2014 Опубликовано 24 февраля, 2014 · Жалоба Попробовал зашить программу в ATtiny13А. Выдает ошибку. При этом в ATtiny13 шьется без проблем. В чем загвоздка? Для справки, заливаю с помощью STK600 из под AtmelStudio6,0 в высоковольтном режиме (в ISP режиме данная связка STK600 -AtmelStudio6,0 не видит ATtiny13). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RabidRabbit 0 24 февраля, 2014 Опубликовано 24 февраля, 2014 · Жалоба Может, нюансы в схеме подключения ISP интерфейса? У меня ATtiny13A прекрасно прошиваются связкой avrdude/der-Hammer по ISP. Высоковольтную часть der-Hammer'а использовал только раз для "воскрешения" ATtiny2313V. Хотя странно, что обычные тиньки (без А) прошиваются, тем более что идентификационные сигнатуры у них совпадают... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
caig 0 25 февраля, 2014 Опубликовано 25 февраля, 2014 (изменено) · Жалоба может в 13А уже что-то зашито? У меня такое было, когда в контроллер была зашита программа, работающая на низкой частоте. Я сначала выставлял скорость 5 кб/с, затем делал стирание, а после этого на нормальной скорости прошивал новую программу. Изменено 25 февраля, 2014 пользователем Игoрь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
v-vovchek 0 25 февраля, 2014 Опубликовано 25 февраля, 2014 · Жалоба может в 13А уже что-то зашито? У меня такое было, когда в контроллер была зашита программа, работающая на низкой частоте. Я сначала выставлял скорость 5 кб/с, затем делал стирание, а после этого на нормальной скорости прошивал новую программу. Все нормально с микросхемой. Перед заливкой делаю стирание чипа. Но... в 13 все проходит хорошо, а в 13А - выдает ошибку при верификации. Однако попробую Ваш совет на счет низкой скорости. А еще я заказал 13А в другом месте (с другой партии). Поэкспериментирую на них. Ну и вопрос по ходу:" А какие программы (и их версии) поддерживают STK600" У меня есть еще CodeVision, но версия 2.05 STK600 не видит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mmor 0 26 июня, 2014 Опубликовано 26 июня, 2014 · Жалоба Есть проблемка с Attiny13. Стал пробывать сделать прерывание от INT0, прерывание должно срабатывать от низкого уровня на ножке. Программа на ассемблере в AVR Studio 4.16. При симуляции в Simulator 2 прерывание INT0 срабатывает постоянно. Независимо от того что на выводе. В моделировании в протеусе таже беда. Переписал программу на СИ, тоже самое. живьем микросхемы пока нет. Подскажите что это может быть, ошибка в коде, глюк AVR. Будет ли нормально работать на железе. Вот кусочек кода: ldi r16, (0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(1<<1)|(0<<0); out DDRB, r16; ldi r16, (0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(1<<1)|(1<<0); out PORTB, r16; .... //инициализация прерываний ldi r16, (0<<PUD)|(0<<SE)|(0<<SM1)|(0<<SM0)|(0<<ISC01)|(0<<ISC00); out MCUCR, r16; ldi r16, (0<<INT0)|(1<<PCIE);//01 out GIMSK, r16; ldi r16, (0<<PCINT5)|(0<<PCINT4)|(0<<PCINT3)|(1<<PCINT2)|(0<<PCINT1)|(0<<PCINT0); out PCMSK, r16; ..... //прерывание INT0 INT0_vect: nop reti; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RabidRabbit 0 26 июня, 2014 Опубликовано 26 июня, 2014 · Жалоба У Вас вывод INT0(PB1/PCINT1) настроен на выход и на нём 1. Причём прерывания от INT0 Вы отключили (GIMSK.INT0 = 0). А включено у Вас прерывание по изменению состояния вывода PCINT2(PB2) (PCMSK.PCINT2 = 1, GIMSK.PCIE = 1). И если вывод PB2 (вход без "подтяжки") висит в воздухе и метка INT0_vect располагается по адресу 0x0001, то вы можете постоянно попадать на команду reti (адрес 0x0002) из-за неопределённости состояния вывода PB2. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mmor 0 27 июня, 2014 Опубликовано 27 июня, 2014 (изменено) · Жалоба Прошу прощения. Вчера что то так неважно себя чувствовал сам не понял что написал. Код привел ошибочный. Прерывание INT0 это я потом запретил после экспериментов. Так конечно должно быть: ldi r16, (1<<INT0)|(1<<PCIE);//01 out GIMSK, r16; Выводы PB0 и PB2 подтянуты к питания через резистор 10кОм. Еще я пробовал включатьбит PUD В регистре MCUCR. Это никак не влияет. INT0 срабатывает постоянно. Установка вывода PB0 на вход или выход так же никак не влияет. Изменено 27 июня, 2014 пользователем mmor Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RabidRabbit 0 27 июня, 2014 Опубликовано 27 июня, 2014 · Жалоба Вы всё же приведите полный текст программы (в теге codebox, например) и желательно ссылку на схему. Не то у Вас подтянуты PB0 и PB2, а INT0 - это PB1. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mmor 0 27 июня, 2014 Опубликовано 27 июня, 2014 · Жалоба Вот полный код на настоящий момент. прерывание INT0 срабатывает постоянно в симулинке в AVR. программа вобщем ничего не делает, просто пытаюсь на ассемблере запустить прерывания по инт0. Прерывания от порта PB2 стал делать в качестве альтернативы, отключив прерывание по инт0. Без инт0 прерывание от PB2 срабатывает нормально. Пробовал и в протеусе, и в симулинке установкой и снятием третьего бита (бит 2 если от нуля). Схема самая простая в протеусе. Контроллер, на вывода PB0 И PB2 через резисторы 10 кОм подведено питание 5 В. И на эти же выводы по кнопке button. Нажал кнопку - на выводе 0. Отжал - лог. 1. .include "tn13def.inc" .org 0 rjmp init .org 1 rjmp INT0_vect .org 2 rjmp PCI0_vect init: //--------------------------------------------------------------------- //установка вершины стека ldi r16,$DF ; загружаем константу в регистр общего пользования r16 out SPL,r16 ; указываем верхнюю границу стэка //--------------------------------------------------------------------- //инициализация выводов //--------------------------------------------------------------------- //направление вывода "ног": 1 - вывод, 0 - ввод ldi r16, (0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0); out DDRB, r16; ldi r16, (0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0); out PORTB, r16; //--------------------------------------------------------------------- //инициализация таймера ldi r16, $00; out TCNT0, r16; ldi r16, $15; out OCR0A, r16 ldi r16, $5; out OCR0B, r16 ldi r16, $12; out TCCR0A, r16; ldi r16, $03; //$04 out TCCR0B, r16; //--------------------------------------------------------------------- //инициализация прерываний ldi r16, (1<<PUD)|(0<<SE)|(0<<SM1)|(0<<SM0)|(0<<ISC01)|(0<<ISC00);//01 out MCUCR, r16; ldi r16, (1<<INT0)|(1<<PCIE);//01 out GIMSK, r16; ldi r16, (0<<PCINT5)|(0<<PCINT4)|(0<<PCINT3)|(1<<PCINT2)|(0<<PCINT1)|(0<<PCINT0);//04 out PCMSK, r16; //--------------------------------------------------------------------- //разрешаем прерывания ldi r16, $80; out SREG, r16; main: ; тело цикла nop; ; команда, которая ничего не делает nop; rjmp main; ; переход на метку main //--------------------------------------------------------------------- //прерывание INT0 INT0_vect: nop reti; //--------------------------------------------------------------------- //прерывание PCIN4 PCI0_vect: nop reti; еще не понял почему INT0 - это PB1? И ведь правда PB1!!!! только сейчас разглядел!!! Вот что значит замыленный взгляд. Привык тчо на атмегах это 0-й пин. Звиняйте за беспокойство, сейчас буду переделывать! а PB1 у меня как раз таймер дергает! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mmor 0 27 июня, 2014 Опубликовано 27 июня, 2014 · Жалоба Да, теперь все работает правильно. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться