ВСЁ по прошивке и программированию AT90S2313/ATTiny2313

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Гагарин писал(а):Внутренний генератор МК tiny2313 не работает. В чем дело ?
Обяно дело во фьзах - в их неверной установке. Фьюзы подробно описаны на стр. 2 в самом низу, а что делать на стр. 7 - там несколько вариантов - в домашней страничке под этим сообщением нажмите домик.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Гагарин
Встал на лапы
Сообщения: 111
Зарегистрирован: Вс сен 09, 2007 12:59:18

Сообщение Гагарин »

Спасибо. Я так понимаю, что по умолчанию МК работает с внутреним генератором. После установки последней версии программатора Ponyprog, МК нормально почитался и записался.
Аватара пользователя
Lestat
Встал на лапы
Сообщения: 111
Зарегистрирован: Сб мар 31, 2007 13:53:07
Откуда: Lviv
Контактная информация:

Сообщение 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);

ф-ции с даташыта.
так если запишу число в ЕЕПРОМ, а потом выключу питания и подам, числа в памяти не станет, но если не выключать питание, число могу прочитать, где собака сидит?
Аватара пользователя
biDE
Встал на лапы
Сообщения: 84
Зарегистрирован: Пн ноя 12, 2007 20:53:05
Откуда: Одесса

Сообщение biDE »

Странные у вас конструкции: EECR |= (1<<0b00000001);

Может так EECR |= 0b00000001 или EECR |= (1<<EERE), как в даташите, ну и остальные тоже...
Аватара пользователя
Lestat
Встал на лапы
Сообщения: 111
Зарегистрирован: Сб мар 31, 2007 13:53:07
Откуда: Lviv
Контактная информация:

Сообщение Lestat »

CVAR не знает что такое EERE, сделал фу-ции через EECR |= 0b00000001, и работает, невнемательный я:(
спасибо.
Последний раз редактировалось Lestat Сб окт 04, 2008 00:20:35, всего редактировалось 2 раза.
Аватара пользователя
biDE
Встал на лапы
Сообщения: 84
Зарегистрирован: Пн ноя 12, 2007 20:53:05
Откуда: Одесса

Сообщение biDE »

Lestat писал(а):CVAR не знает что такое EERE и все остальное

это ему можно и насильно указать, например #define EERE 0, или использовать вариант EECR |= 0b00000001. Просто результат операции (1<<0b00000001) это 2 или 0b00000010. Надеюсь понятно намекнул?
Денис203
Открыл глаза
Сообщения: 51
Зарегистрирован: Вт авг 28, 2007 10:53:49
Контактная информация:

Сообщение Денис203 »

Здравствуйте!! очень прошу помогите....
пишу ШИМ на ассемблере для Тини2313 (текст прикреплен)..... вроде все работает в АВР студио....
а вот когда программирую.... не хочет.... моргает с постоянной частотой и все....... не меняет длительность... странно... как будто на начальной скважности шпарит... а в мою подпрограмму не заходит....
и ввообще у меня не первый раз такие проблемы... мож где чего надо включать...????? подскажите... ОЧЕНЬ ПРОШУ!!!


и еще... он не хочет в АВРСТУДИО заходить в подпрограмму...
все пишу как надо
rcall PP


затем
PP:
.......
ret
Вложения
1111.txt
(2.67 КБ) 350 скачиваний
Денис203
Открыл глаза
Сообщения: 51
Зарегистрирован: Вт авг 28, 2007 10:53:49
Контактная информация:

Сообщение Денис203 »

Вообщем... я выяснил вот что...
на самом деле подпрограммы работают... проверил в протеусе... а вот в АВРке не хочет туда переходить... следовательно в АВРке не могу проверить программы...
и еще самый главный момент.... в вот та самая программа, которую выложил... там написано ШИМ с применением сразу же прерываний...
так вот на самао деле так не работает... и в протеусе тоже.....
но вот все в тойже АВке работает...
чтото не могу теперь понять...
Но вот могу понять одно... Протеус кажет правду... потому что тоже самое кажет что и в живую запрграмменный проц
YurkaM
Нашел транзистор. Понюхал.
Сообщения: 151
Зарегистрирован: Пн сен 01, 2008 14:49:03
Откуда: Казахстан

Сообщение 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\
Денис203
Открыл глаза
Сообщения: 51
Зарегистрирован: Вт авг 28, 2007 10:53:49
Контактная информация:

Сообщение Денис203 »

все это исправил.... все равно также... будто игнорирует прерывания таймера... с одной частотой ШИМ идет
Вложения
2222.txt
(3.11 КБ) 401 скачивание
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение 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) стиль программирования у вас оставляет желать лучшего
например вместо

Код: Выделить всё

ldi r16,0b00000001
out TCCR1B,r16

лучше записывать

Код: Выделить всё

ldi r16,(1<<CS10)
out TCCR1B,r16 

и т.п.
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
YurkaM
Нашел транзистор. Понюхал.
Сообщения: 151
Зарегистрирован: Пн сен 01, 2008 14:49:03
Откуда: Казахстан

Сообщение 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 неопределено, т.е. там может быть всё что угодно.

В общем куча мелких ошибочек, неточностей, странностей

Упс... Опоздал :)
YurkaM
Нашел транзистор. Понюхал.
Сообщения: 151
Зарегистрирован: Пн сен 01, 2008 14:49:03
Откуда: Казахстан

Сообщение YurkaM »

smac писал(а):...при записи: запрещать прерывания, затем....
Согласен. Хотя в данном случае прерывания и так запрещены и с этим здесь всё нормально.
Денис203
Открыл глаза
Сообщения: 51
Зарегистрирован: Вт авг 28, 2007 10:53:49
Контактная информация:

Сообщение Денис203 »

ну вот мне надо менять OCR1A после каждого цикла...
т.е. счечтик прошел вперед, прошел назад... и тут вот мне надо добавить в него число и пойти заного.....
т.е. у меня сейчас получается когда он идет вперед,, т.е. в порте нолик, то он ничего не делает,, если единичка,, это значит он идет обратно, то мы подбавляем число в OCR1AL и следующий цикл идем с большим регистром сравнения...
ну а про все остальное понял... исправлю
Денис203
Открыл глаза
Сообщения: 51
Зарегистрирован: Вт авг 28, 2007 10:53:49
Контактная информация:

Сообщение Денис203 »

Люди, Спасибо Большое!!!
Очень благодарен!!!!!
Все заработало! Вы были правы.... ошибка была в том что я смотрел на Порте а не на Пине!!!
Аватара пользователя
Тарас
Встал на лапы
Сообщения: 89
Зарегистрирован: Ср июн 04, 2008 01:20:54
Откуда: Украина, Винница
Контактная информация:

Сообщение Тарас »

привет, помогите пожалуйста советом прошиваю АТtiny2313 через програматор АВР910 не пашет пишет ошибку AVRprog error entering programing mode. Почему??? ведь АТмега8 прошиваеться супер а вот 2313 не хоче(( что делать
Мяу-у-у-у-у
Аватара пользователя
maverick5334
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Сб апр 05, 2008 07:59:10
Откуда: Луганск
Контактная информация:

Сообщение maverick5334 »

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

P.S. Изучение материалов форума и другой документации не помогло, новичок я... :cry:
Вложения
dimmer.c
(11.38 КБ) 461 скачивание
Аватара пользователя
tembl4
Открыл глаза
Сообщения: 53
Зарегистрирован: Вт янв 15, 2008 21:18:36
Откуда: МО г.Фрязино-Щёлково
Контактная информация:

Сообщение tembl4 »

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

я бы наверно просто поменял в исходике первые строчки где написанно (#include "90s2313.h") на (#include "ATtiny2313.h") и попробовал скомпилировать так. :)) может я не прав конечно...может там какието ещё изменения надо делать..это даташыты сравнивать надо.. :)
DeltaQ
Открыл глаза
Сообщения: 45
Зарегистрирован: Чт окт 30, 2008 13:26:18

Сообщение DeltaQ »

PROTOS 7.2 SP6 - увы компонента ATTiny2313 нет... Тока аналог его AT90S2313
Можно ли самому там создать компонент? На сколько это сложно?
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Это лучше в теме про Протеус спрашивать.
Оптимизм х (Опыт + Знания) = const
Ответить

Вернуться в «AVR»