Страница 15 из 132
Добавлено: Вс сен 21, 2008 15:24:49
tych
Гагарин писал(а):Внутренний генератор МК tiny2313 не работает. В чем дело ?
Обяно дело во фьзах - в их неверной установке. Фьюзы подробно описаны на стр. 2
в самом низу, а что делать на стр. 7 - там несколько вариантов - в домашней страничке под этим сообщением
нажмите домик.
Добавлено: Вс сен 21, 2008 17:24:39
Гагарин
Спасибо. Я так понимаю, что по умолчанию МК работает с внутреним генератором. После установки последней версии программатора Ponyprog, МК нормально почитался и записался.
Добавлено: Пт окт 03, 2008 23:12:05
Lestat
У меня проблема с тини2313, пишу и читаю ЕЕРром вот так:
Код: Выделить всё
eeprom unsigned char portinee=0;
...
unsigned char EEPROM_read(unsigned int uiAddress)
{
while(EECR & (1<<0b00000010));
EEAR = uiAddress;
EECR |= (1<<0b00000001);
return EEDR;
}
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
while(EECR & (1<<0b00000010));
EEAR = uiAddress;
EEDR = ucData;
EECR |= (1<<00000100);
EECR |= (1<<0b00000010);
}
...
EEPROM_write(0b00000002, (portinee=PINB));
...
EEPROM_read(0b00000002);
ф-ции с даташыта.
так если запишу число в ЕЕПРОМ, а потом выключу питания и подам, числа в памяти не станет, но если не выключать питание, число могу прочитать, где собака сидит?
Добавлено: Пт окт 03, 2008 23:34:39
biDE
Странные у вас конструкции: EECR |= (1<<0b00000001);
Может так EECR |= 0b00000001 или EECR |= (1<<EERE), как в даташите, ну и остальные тоже...
Добавлено: Пт окт 03, 2008 23:53:35
Lestat
CVAR не знает что такое EERE, сделал фу-ции через EECR |= 0b00000001, и работает, невнемательный я:(
спасибо.
Добавлено: Сб окт 04, 2008 00:04:22
biDE
Lestat писал(а):CVAR не знает что такое EERE и все остальное
это ему можно и насильно указать, например #define EERE 0, или использовать вариант EECR |= 0b00000001. Просто результат операции (1<<0b00000001) это 2 или 0b00000010. Надеюсь понятно намекнул?
Добавлено: Пн окт 13, 2008 12:41:24
Денис203
Здравствуйте!! очень прошу помогите....
пишу ШИМ на ассемблере для Тини2313 (текст прикреплен)..... вроде все работает в АВР студио....
а вот когда программирую.... не хочет.... моргает с постоянной частотой и все....... не меняет длительность... странно... как будто на начальной скважности шпарит... а в мою подпрограмму не заходит....
и ввообще у меня не первый раз такие проблемы... мож где чего надо включать...????? подскажите... ОЧЕНЬ ПРОШУ!!!
и еще... он не хочет в АВРСТУДИО заходить в подпрограмму...
все пишу как надо
rcall PP
затем
PP:
.......
ret
Добавлено: Пн окт 13, 2008 17:13:04
Денис203
Вообщем... я выяснил вот что...
на самом деле подпрограммы работают... проверил в протеусе... а вот в АВРке не хочет туда переходить... следовательно в АВРке не могу проверить программы...
и еще самый главный момент.... в вот та самая программа, которую выложил... там написано ШИМ с применением сразу же прерываний...
так вот на самао деле так не работает... и в протеусе тоже.....
но вот все в тойже АВке работает...
чтото не могу теперь понять...
Но вот могу понять одно... Протеус кажет правду... потому что тоже самое кажет что и в живую запрграмменный проц
Добавлено: Пн окт 13, 2008 18:48:45
YurkaM
Для начала надо было приводить точный исходник. В твоём файле 1111.txt во второй-же строке опечатка - tn23134def.inc Т.е. вообще не понятно, как у тебя чё-то компилировалось...
Дальше. Писать .device ATtiny2313 не нужно, т.к. эта строка уже есть в файле tn2313def.inc (открой в блокноте и глянь чего там для интересу...).
Дальше. Таблица векторов прерываний пишется не от фонаря, как у тебя. Каждое прерывание имеет вектор строго на своём месте. У Tiny2313 вот в таком порядке они:
; ***** INTERRUPT VECTORS ************************************************
.equ INT0addr = 0x001 ;External Interrupt0
.equ INT1addr = 0x002 ;External Interrupt1
.equ ICP1addr = 0x003 ;Input capture interrupt 1
.equ OC1Aaddr = 0x004 ;Timer/Counter1 Compare Match A
.equ OVF1addr = 0x005 ;Overflow1 Interrupt
.equ OVF0addr = 0x006 ;Overflow0 Interrupt
Ну и так далее, смотри в даташите.
Дальше. Первым вектором по адресу 0000 должен быть прыжок на начало программы, т.е. сразу после .org 0 должна быть команда RJMP RESET в твоём случае. А у тебя сразу после включения прыгаешь на INT1, оттуда возвращаешся по RETI неизвестно куда, т.к. в стеке адреса возврата нету, да и вообще указатель стека ещё не определён. В общем чёрте-что и сбоку бантик...
Ещё. Если у тебя не сильно древний АВР-студио, то лучше пользоваться ассемблером version2, и файлы xxxdef.inc соответственно брать из папки
...\Atmel\AVR Tools\AvrAssembler2\Appnotes\
Добавлено: Пн окт 13, 2008 19:15:25
Денис203
все это исправил.... все равно также... будто игнорирует прерывания таймера... с одной частотой ШИМ идет
Добавлено: Пн окт 13, 2008 21:26:16
smac
Денис203 писал(а):все это исправил.... все равно также... будто игнорирует прерывания таймера... с одной частотой ШИМ идет
Вот кусок кода вашей программы:
Код: Выделить всё
TIMER1_COMPA:
in r31,SREG ;запоминание SREG
Sbis PortB,3 ;eустановлен ли 3 бит порта в единицу
rjmp vozvrat ;если нет, то на возврат
ldi r28,6 ;если да, то добавляем в р26 число 6
add r18,r28 ;добавляем к скважности число 6
out OCR1AL,r18 ;записываем в регситр сравнения
cpi r18,0xFE ;сравниваем равен лим регистр сравнения FE
breq konec ;если да то в конец
out SREG,r31 ;выводим SREG
reti
vozvrat:
out SREG,r31
reti
konec:
inc r25 ;инкремент р25
ldi r18,0xFE загрузка в р18 числа FE
out OCR1AL,r18 ;устанавливаем скважность FE
out SREG,r31
reti
Я думаю дело вот в чем. В вашей подпрограмме прерываний происходит проверка состояния 3-его бита в регистре PortB.
Эта проверка в данном случае (когда выход устройства сравнения А таймера 1 подключен к порту - а именно к PortB.3) бессмыслена поскольку регистр PortB не участвует (именно в даном конкретном случае) в управлении выводом PB3 (15). Т.е. в этом регистре будет находится число, записанное туда ранеее. Поскольку ранее туда, по-моему ничего не записывалось, то там будет 0, следователько ваша проверка никогда не пройдет и программа будет прыгать на возврат. Вообще не понятен смысл этой проверки. Если вы хотите узнать что в данный момент на ножке контроллера, то проверять нужно PINB.3, а не PortB.3, ибо в PortB.3 будет бит, который вы туда записали.
Замечания: 1) при доступе к некоторым шестнадцатибитным регистрам (в данном случае OCR1A и TCNT1) нужно соблюдать порядок записи и чтения, описанный в даташите - а именно при записи: запрещать прерывания, затем сначала записывать старший байт, а потом младший и уже потом разрешать прерывания (если это нужно). Про порядок выполнения операции чтения - в даташите(хотя тоже ничего сложного).
2) стиль программирования у вас оставляет желать лучшего
например вместо
лучше записывать
и т.п.
3) лучше сначала обнулить таймер, а потом его запустить,
Код: Выделить всё
ldi r16,0
out TCNT1H,r16 ;обнуляем таймер
out TCNT1L,r16
ldi r16,(1<<CS10)
out TCCR1B,r16 ; запускаем таймер
а не наоборот как у вас
Код: Выделить всё
ldi r16,0b00000001
out TCCR1B,r16 ;запуск таймер СК/1
ldi r16,0
out TCNT1H,r16 ;обнуляем таймер
out TCNT1L,r16
Добавлено: Пн окт 13, 2008 21:41:35
YurkaM
Когда обновляешь регистр сравнения, пиши оба байта, даже если меняешь только один. И к тому же сначала старший, потом младший, а не наоборот! Т.е.
...
add r18,r28
cli r1
out OCR1AH,r1
out OCR1AL,r18
Не факт, что в этом причина, но стоит подправить.
И в начале там, где "загрузка начальной скважности в регистр", тоже сначала старший, потом младший (у тебя наоборот)
Непонятно, зачем это??:
Sbis PortB,3 ;eустановлен ли 3 бит порта в единицу
rjmp vozvrat
Ты зачем-то хочешь менять OCR1A только во время обратного хода таймера?? Нафига? ИМХО, тоже очень подозрительное место, надо проверять. А лучше вообще выкинуть эту проверку, тем более что проверять надо не PORT, а PIN.
Ещё. Где нибудь в начале запиши что-то в r25. Ну 0 хотя-бы. Не забывай, что при включении состояние этих регистров и SRAM неопределено, т.е. там может быть всё что угодно.
В общем куча мелких ошибочек, неточностей, странностей
Упс... Опоздал

Добавлено: Пн окт 13, 2008 21:53:52
YurkaM
smac писал(а):...при записи: запрещать прерывания, затем....
Согласен. Хотя в данном случае прерывания и так запрещены и с этим здесь всё нормально.
Добавлено: Вт окт 14, 2008 03:02:48
Денис203
ну вот мне надо менять OCR1A после каждого цикла...
т.е. счечтик прошел вперед, прошел назад... и тут вот мне надо добавить в него число и пойти заного.....
т.е. у меня сейчас получается когда он идет вперед,, т.е. в порте нолик, то он ничего не делает,, если единичка,, это значит он идет обратно, то мы подбавляем число в OCR1AL и следующий цикл идем с большим регистром сравнения...
ну а про все остальное понял... исправлю
Добавлено: Вт окт 14, 2008 03:54:04
Денис203
Люди, Спасибо Большое!!!
Очень благодарен!!!!!
Все заработало! Вы были правы.... ошибка была в том что я смотрел на Порте а не на Пине!!!
Добавлено: Сб окт 25, 2008 16:10:26
Тарас
привет, помогите пожалуйста советом прошиваю АТtiny2313 через програматор АВР910 не пашет пишет ошибку AVRprog error entering programing mode. Почему??? ведь АТмега8 прошиваеться супер а вот 2313 не хоче(( что делать
Добавлено: Вт ноя 11, 2008 14:05:53
maverick5334
Уважаемые электронщики, не откажите в любезности и посильной помощи, помогите в следующем вопросе - нашёл схему ДУ ИК светом в журнал Радио №2 2007г основанной на микроконтроллере AVR AT90S2313-4SC, на данный момент такой контроллер купить не могу, везде сообщают, что снят с производства, но есть Attyni2313, говорят, что взаимозаменяем, просто нужно перекомпилировать исходник.
Так вот к чему я, эта фраза "просто нужно перекомпилировать" меня прямо съедает (в косвенном смысле), для меня это практически не выполнимая задача на настоящий момент, так как я в микроконтроллерах абсолютный новичок.
Может кто сжалится над неискушённым в этом вопросе новичком и поможет создать так необходимый *.HEX файл прошивки под Attyni2313 исходя из того, что изначально он написан для AT90S2313-4SC.
Файл прилагаю.
Заранее благодарен.
P.S. Изучение материалов форума и другой документации не помогло, новичок я...

Добавлено: Вт ноя 11, 2008 14:48:02
tembl4
Уважаемые электронщики, не откажите в любезности и посильной помощи, помогите в следующем вопросе - нашёл схему ДУ ИК светом в журнал Радио №2 2007г основанной на микроконтроллере AVR AT90S2313-4SC, на данный момент такой контроллер купить не могу, везде сообщают, что снят с производства, но есть Attyni2313, говорят, что взаимозаменяем, просто нужно перекомпилировать исходник.
Так вот к чему я, эта фраза "просто нужно перекомпилировать" меня прямо съедает (в косвенном смысле), для меня это практически не выполнимая задача на настоящий момент, так как я в микроконтроллерах абсолютный новичок.
Может кто сжалится над неискушённым в этом вопросе новичком и поможет создать так необходимый *.HEX файл прошивки под Attyni2313 исходя из того, что изначально он написан для AT90S2313-4SC.
Файл прилагаю.
Заранее благодарен.
я бы наверно просто поменял в исходике первые строчки где написанно (#include "90s2313.h") на (#include "ATtiny2313.h") и попробовал скомпилировать так.

может я не прав конечно...может там какието ещё изменения надо делать..это даташыты сравнивать надо..

Добавлено: Пт ноя 14, 2008 16:54:03
DeltaQ
PROTOS 7.2 SP6 - увы компонента ATTiny2313 нет... Тока аналог его AT90S2313
Можно ли самому там создать компонент? На сколько это сложно?
Добавлено: Пт ноя 14, 2008 20:36:45
Aheir
Это лучше в теме про Протеус спрашивать.