Обяно дело во фьзах - в их неверной установке. Фьюзы подробно описаны на стр. 2 в самом низу, а что делать на стр. 7 - там несколько вариантов - в домашней страничке под этим сообщением нажмите домик.Гагарин писал(а):Внутренний генератор МК tiny2313 не работает. В чем дело ?
ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- Lestat
- Встал на лапы
- Сообщения: 111
- Зарегистрирован: Сб мар 31, 2007 13:53:07
- Откуда: Lviv
- Контактная информация:
У меня проблема с тини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);
ф-ции с даташыта.
так если запишу число в ЕЕПРОМ, а потом выключу питания и подам, числа в памяти не станет, но если не выключать питание, число могу прочитать, где собака сидит?
- Lestat
- Встал на лапы
- Сообщения: 111
- Зарегистрирован: Сб мар 31, 2007 13:53:07
- Откуда: Lviv
- Контактная информация:
CVAR не знает что такое EERE, сделал фу-ции через EECR |= 0b00000001, и работает, невнемательный я:(
спасибо.
спасибо.
Последний раз редактировалось Lestat Сб окт 04, 2008 00:20:35, всего редактировалось 2 раза.
-
Денис203
- Открыл глаза
- Сообщения: 51
- Зарегистрирован: Вт авг 28, 2007 10:53:49
- Контактная информация:
Здравствуйте!! очень прошу помогите....
пишу ШИМ на ассемблере для Тини2313 (текст прикреплен)..... вроде все работает в АВР студио....
а вот когда программирую.... не хочет.... моргает с постоянной частотой и все....... не меняет длительность... странно... как будто на начальной скважности шпарит... а в мою подпрограмму не заходит....
и ввообще у меня не первый раз такие проблемы... мож где чего надо включать...????? подскажите... ОЧЕНЬ ПРОШУ!!!
и еще... он не хочет в АВРСТУДИО заходить в подпрограмму...
все пишу как надо
rcall PP
затем
PP:
.......
ret
пишу ШИМ на ассемблере для Тини2313 (текст прикреплен)..... вроде все работает в АВР студио....
а вот когда программирую.... не хочет.... моргает с постоянной частотой и все....... не меняет длительность... странно... как будто на начальной скважности шпарит... а в мою подпрограмму не заходит....
и ввообще у меня не первый раз такие проблемы... мож где чего надо включать...????? подскажите... ОЧЕНЬ ПРОШУ!!!
и еще... он не хочет в АВРСТУДИО заходить в подпрограмму...
все пишу как надо
rcall PP
затем
PP:
.......
ret
- Вложения
-
- 1111.txt
- (2.67 КБ) 350 скачиваний
-
Денис203
- Открыл глаза
- Сообщения: 51
- Зарегистрирован: Вт авг 28, 2007 10:53:49
- Контактная информация:
Вообщем... я выяснил вот что...
на самом деле подпрограммы работают... проверил в протеусе... а вот в АВРке не хочет туда переходить... следовательно в АВРке не могу проверить программы...
и еще самый главный момент.... в вот та самая программа, которую выложил... там написано ШИМ с применением сразу же прерываний...
так вот на самао деле так не работает... и в протеусе тоже.....
но вот все в тойже АВке работает...
чтото не могу теперь понять...
Но вот могу понять одно... Протеус кажет правду... потому что тоже самое кажет что и в живую запрграмменный проц
на самом деле подпрограммы работают... проверил в протеусе... а вот в АВРке не хочет туда переходить... следовательно в АВРке не могу проверить программы...
и еще самый главный момент.... в вот та самая программа, которую выложил... там написано ШИМ с применением сразу же прерываний...
так вот на самао деле так не работает... и в протеусе тоже.....
но вот все в тойже АВке работает...
чтото не могу теперь понять...
Но вот могу понять одно... Протеус кажет правду... потому что тоже самое кажет что и в живую запрграмменный проц
-
YurkaM
- Нашел транзистор. Понюхал.
- Сообщения: 151
- Зарегистрирован: Пн сен 01, 2008 14:49:03
- Откуда: Казахстан
Для начала надо было приводить точный исходник. В твоём файле 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\
Дальше. Писать .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 писал(а):все это исправил.... все равно также... будто игнорирует прерывания таймера... с одной частотой ШИМ идет
Вот кусок кода вашей программы:
Код: Выделить всё
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
- Откуда: Казахстан
Когда обновляешь регистр сравнения, пиши оба байта, даже если меняешь только один. И к тому же сначала старший, потом младший, а не наоборот! Т.е.
...
add r18,r28
cli r1
out OCR1AH,r1
out OCR1AL,r18
Не факт, что в этом причина, но стоит подправить.
И в начале там, где "загрузка начальной скважности в регистр", тоже сначала старший, потом младший (у тебя наоборот)
Непонятно, зачем это??:
Sbis PortB,3 ;eустановлен ли 3 бит порта в единицу
rjmp vozvrat
Ты зачем-то хочешь менять OCR1A только во время обратного хода таймера?? Нафига? ИМХО, тоже очень подозрительное место, надо проверять. А лучше вообще выкинуть эту проверку, тем более что проверять надо не PORT, а PIN.
Ещё. Где нибудь в начале запиши что-то в r25. Ну 0 хотя-бы. Не забывай, что при включении состояние этих регистров и SRAM неопределено, т.е. там может быть всё что угодно.
В общем куча мелких ошибочек, неточностей, странностей
Упс... Опоздал
...
add r18,r28
cli r1
out OCR1AH,r1
out OCR1AL,r18
Не факт, что в этом причина, но стоит подправить.
И в начале там, где "загрузка начальной скважности в регистр", тоже сначала старший, потом младший (у тебя наоборот)
Непонятно, зачем это??:
Sbis PortB,3 ;eустановлен ли 3 бит порта в единицу
rjmp vozvrat
Ты зачем-то хочешь менять OCR1A только во время обратного хода таймера?? Нафига? ИМХО, тоже очень подозрительное место, надо проверять. А лучше вообще выкинуть эту проверку, тем более что проверять надо не PORT, а PIN.
Ещё. Где нибудь в начале запиши что-то в r25. Ну 0 хотя-бы. Не забывай, что при включении состояние этих регистров и SRAM неопределено, т.е. там может быть всё что угодно.
В общем куча мелких ошибочек, неточностей, странностей
Упс... Опоздал
-
Денис203
- Открыл глаза
- Сообщения: 51
- Зарегистрирован: Вт авг 28, 2007 10:53:49
- Контактная информация:
ну вот мне надо менять OCR1A после каждого цикла...
т.е. счечтик прошел вперед, прошел назад... и тут вот мне надо добавить в него число и пойти заного.....
т.е. у меня сейчас получается когда он идет вперед,, т.е. в порте нолик, то он ничего не делает,, если единичка,, это значит он идет обратно, то мы подбавляем число в OCR1AL и следующий цикл идем с большим регистром сравнения...
ну а про все остальное понял... исправлю
т.е. счечтик прошел вперед, прошел назад... и тут вот мне надо добавить в него число и пойти заного.....
т.е. у меня сейчас получается когда он идет вперед,, т.е. в порте нолик, то он ничего не делает,, если единичка,, это значит он идет обратно, то мы подбавляем число в OCR1AL и следующий цикл идем с большим регистром сравнения...
ну а про все остальное понял... исправлю
- maverick5334
- Мучитель микросхем
- Сообщения: 491
- Зарегистрирован: Сб апр 05, 2008 07:59:10
- Откуда: Луганск
- Контактная информация:
Уважаемые электронщики, не откажите в любезности и посильной помощи, помогите в следующем вопросе - нашёл схему ДУ ИК светом в журнал Радио №2 2007г основанной на микроконтроллере AVR AT90S2313-4SC, на данный момент такой контроллер купить не могу, везде сообщают, что снят с производства, но есть Attyni2313, говорят, что взаимозаменяем, просто нужно перекомпилировать исходник.
Так вот к чему я, эта фраза "просто нужно перекомпилировать" меня прямо съедает (в косвенном смысле), для меня это практически не выполнимая задача на настоящий момент, так как я в микроконтроллерах абсолютный новичок.
Может кто сжалится над неискушённым в этом вопросе новичком и поможет создать так необходимый *.HEX файл прошивки под Attyni2313 исходя из того, что изначально он написан для AT90S2313-4SC.
Файл прилагаю.
Заранее благодарен.
P.S. Изучение материалов форума и другой документации не помогло, новичок я...
Так вот к чему я, эта фраза "просто нужно перекомпилировать" меня прямо съедает (в косвенном смысле), для меня это практически не выполнимая задача на настоящий момент, так как я в микроконтроллерах абсолютный новичок.
Может кто сжалится над неискушённым в этом вопросе новичком и поможет создать так необходимый *.HEX файл прошивки под Attyni2313 исходя из того, что изначально он написан для AT90S2313-4SC.
Файл прилагаю.
Заранее благодарен.
P.S. Изучение материалов форума и другой документации не помогло, новичок я...
- Вложения
-
- dimmer.c
- (11.38 КБ) 461 скачивание
- tembl4
- Открыл глаза
- Сообщения: 53
- Зарегистрирован: Вт янв 15, 2008 21:18:36
- Откуда: МО г.Фрязино-Щёлково
- Контактная информация:
Уважаемые электронщики, не откажите в любезности и посильной помощи, помогите в следующем вопросе - нашёл схему ДУ ИК светом в журнал Радио №2 2007г основанной на микроконтроллере AVR AT90S2313-4SC, на данный момент такой контроллер купить не могу, везде сообщают, что снят с производства, но есть Attyni2313, говорят, что взаимозаменяем, просто нужно перекомпилировать исходник.
Так вот к чему я, эта фраза "просто нужно перекомпилировать" меня прямо съедает (в косвенном смысле), для меня это практически не выполнимая задача на настоящий момент, так как я в микроконтроллерах абсолютный новичок.
Может кто сжалится над неискушённым в этом вопросе новичком и поможет создать так необходимый *.HEX файл прошивки под Attyni2313 исходя из того, что изначально он написан для AT90S2313-4SC.
Файл прилагаю.
Заранее благодарен.
я бы наверно просто поменял в исходике первые строчки где написанно (#include "90s2313.h") на (#include "ATtiny2313.h") и попробовал скомпилировать так.