Помогите перейти с 90s1200 На Attiny23

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
srqemiko
Открыл глаза
Сообщения: 47
Зарегистрирован: Ср сен 26, 2007 10:30:45
Откуда: киев
Контактная информация:

Помогите перейти с 90s1200 На Attiny23

Сообщение srqemiko »

Доброго времени суток!!!! Вот на днях возникла проблема, нужно заменить 90S1200 на ATtiny2313. Есть код прошивки для 90S1200 который тактируется от внешнего генератора, как его переделать для ATtiny2313? Кроме замены первой строки .include "2313def.inc" на соответствующую. А далее не знаю, может еще что нужно поменять. какие выставить фузы? Подскажите пожалуйста. Очень хочу разобраться, но пока нет соответствующих навыков. Схему и исходник прилагаю. Очень расчитываю на вашу помощь. Заранее благодарю.
Вложения
asm – Clock.txt
(23 КБ) 235 скачиваний
Безымянный.JPG
(93.75 КБ) 529 скачиваний
Реклама
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Помогите перейти с 90s1200 На Attiny23

Сообщение akl »

Для начала перевести tiny2313 в режим работы от внутреннего Watchdog генератора переводом FUSE-бит CKSEL3...0 0110. При этом схема начнет работать примерно в 4 раза быстрее необходимого. Затем, когда убедитесь в ее работоспособности? нужно перевести в нормальный режим, установкой CKSEL3...0 0000.
Дополнение :oops:
CKDIV нужно перевести в 1

Ну и приведите в соответствие таблицу векторов.

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

.CSEG                  ;НАЧАЛО КОДОВОГО СЕГМЕНТА
.ORG 0
        RJMP RESET	;ПЕРЕХОД ПО reset
        NOP		;ПЕРЕХОД ПО int
;***************************************************************************
; для tiny2313 вектор переполнения TIM0
.ORG $06
	 INC SS		;НАРАСТИМ СЕКУНДУ (ПРЕРЫВАНИЕ ОТ TMR0)
	;NOP		;ПРЕРЫВАНИЕ ОТ compare
Реклама
borys
Держит паяльник хвостом
Сообщения: 927
Зарегистрирован: Вт сен 07, 2010 19:27:48
Откуда: Ташкент

Re: Помогите перейти с 90s1200 На Attiny23

Сообщение borys »

Как правило, hex-файл для AT90S1200 (AT90S2313) можно заливать в ATtiny2313 и будет рабо-
тать. Естественно, надо для ATtiny2313 правильно выставить фьюзы.
srqemiko
Открыл глаза
Сообщения: 47
Зарегистрирован: Ср сен 26, 2007 10:30:45
Откуда: киев
Контактная информация:

Re: Помогите перейти с 90s1200 На Attiny23

Сообщение srqemiko »

Сегодня попробывал перекомпелировать и залить прошивку в ATtiny2313 и оставить прерывания от внутреннего генератора. После включения индикаторы заработали но счета времени нет. Подскажите возможно это из-за того что в 90s1200 некоторые функции апаратные, а у ATtiny2313 програмные которые нужно правельно включить
Реклама
Эиком - электронные компоненты и радиодетали
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Помогите перейти с 90s1200 На Attiny23

Сообщение akl »

Скорее всего так и есть, а по сему
-чем компилируете
-чем программируете
-приведите состояние FUSE-бит
-что показывают индикаторы. Должна быть 00 01
90S1200 был стартовым контроллером семейства, а вот tiny2313 уже довольно много режимов тактирования, задаваемых пользователем при помощи FUSE-бит
Изображение
CKSEL3_0.GIF
Изображение
FUSE_L.GIF
И вообще, для более полных ответов давайте как можно больше информации
Реклама
srqemiko
Открыл глаза
Сообщения: 47
Зарегистрирован: Ср сен 26, 2007 10:30:45
Откуда: киев
Контактная информация:

Re: Помогите перейти с 90s1200 На Attiny23

Сообщение srqemiko »

компилирую avr studio, программирую внутрисхемным программатором skt-200/300, fuse-биты устанавлевал по вашему совету на внутренний генератор CKSEL3...0 0110 и CKDIV8 =1 индикаторы засветились со значением 00:01 и на это вся его работа прекращается. Так же пробывал устанавливать и от внешнего генератора установкой FUSE-битов в следующем порядко CKSEL3...0 0000 CKDIV8=1 результат остался прежним 00:01 и дальше никакого счета времени. И еще подскажите такую штуку вычитал в даташите что в 90s1200 есть такая апаратная штука как стек который я так понемаю смотрит за работой рабочего региста "А", а в ATtiny2313 он програмный и я так полагаю по умолчанию он отключет. Возможно ли из-за этого он и не хочет нормально работать зарание спасибо
Реклама
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Помогите перейти с 90s1200 На Attiny23

Сообщение akl »

Правильно, из-за этого и не работает.

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

;********************************************************************
;ИНСТАЛЯЦИЯ
;********************************************************************
RESET:	
	LDI	A,RAMEND
	OUT	SPL,A
Также студия не хочет писать в EEPROM, т.к.

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

	OUT EEAR,A	;УКАЖЕМ НОМЕР ЗАПИСЫВАЕМОЙ ЯЧЕЙКИ
 	OUT EEDR,DS	;ПОДГОТОВИМ ДАННЫЕ К ЗАПИСИ
 	
[color=#FF4000]	SBI	EECR,EEMWE ;!!!!!!!!!!!!этой команды нет[/color]

	SBI EECR,EEWE	;НАЧАТЬ ПРОЦЕДУРУ ЗАПИСИ
WERR:
srqemiko
Открыл глаза
Сообщения: 47
Зарегистрирован: Ср сен 26, 2007 10:30:45
Откуда: киев
Контактная информация:

Re: Помогите перейти с 90s1200 На Attiny23

Сообщение srqemiko »

Огромное спасибо за совет все получилось!!!!!!. И еще если вас не затруднит подскажите пожалуйста, я хотел бы еще добавить разделяющюю точку которая индицирует секунды реализовав её следующим образом:
перенести кнопку из порта РВ4 на порт РВ1 чтобы он индицировал и параллельно опрашивал кнопку так, как это сделано на порте РВ0. который индицирует и параллельно следит за напряжением от блока питания, а разделяющюю точку реализовать на порте РВ4. Если это возможно то как это реализовать програмно зарание спасибо.
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Помогите перейти с 90s1200 На Attiny23

Сообщение akl »

Вот и ладушки. :beer:
По вопросу: по мне, пока лучше ничего не менять, а воспользоваться тем, что tiny2313 работает от внешнего тактирования и лапа XTAL2/PA1 свободна и ей можно моргать сегментом h во время индикации единиц часов

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

.
.
.
       	LDI A,0B00000010
	OUT TIMSK,A		;РАЗРЕШИМ ПРЕРЫВАНИЯ ОТ ТАИМЕРА/СЧЕТЧИКА

;*************************************************
	CBI	PORTA,1		; ВЫВОД ПОГАСШЕГО СЕКУНДНОГО РАЗДЕЛИТЕЛЯ,
	SBI	DDRA,1		; ПОДКЛЮЧЕННОГО К XTAL2/PA1
;*************************************************
.
.
.
.
;********************************************************************
;ПРОЦЕДУРА ВЫВОДИТ НА ИНДИКАТОРЫ ТЕКУЩЕЕ ВРЕМЯ
;********************************************************************
CLOCK:
.
.
.
	MOV A,H		;ПОДГОТОВИМ К ОТОБРАЖЕНИЮ ЧАСЫ
	RCALL DECOD	;ПЕРЕКОДИРУЕМ ЧИСЛО
;***************************************************************************
	IN	A,TCNT0
	CPI	A,224+16
	CBI	PORTA,1
	BRCC	SEC_METKA
	SBI	PORTA,1
SEC_METKA:
;***************************************************************************
	CBI PORTB,1	;ВКЛЮЧИМ РАЗРЯД ЧАСОВ
	RCALL PAUSAA	;ЗАДЕРЖКА
	SBI PORTB,1	;ПОТУШИМ РАЗРЯД ЧАСОВ
	CBI	PORTA,1
;***************************************************************************
srqemiko
Открыл глаза
Сообщения: 47
Зарегистрирован: Ср сен 26, 2007 10:30:45
Откуда: киев
Контактная информация:

Re: Помогите перейти с 90s1200 На Attiny23

Сообщение srqemiko »

Огромное вам спасибо akl все работает :beer: вот тока мне не дает спокойствия еще то что при работе иногда подмигивают индикаторы и при нажатии одной из кнопок установок индикаторы так же подмигивают скажите в чем может быть проблема
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Помогите перейти с 90s1200 На Attiny23

Сообщение akl »

Возможно, играет роль особенность семейства AVR. В отличие от других семейств, при входе в прерывание состояние статус-регистра не запоминается в стеке аппаратно, а при выходе не восстанавливается. В этой программе нет синхронизации отсчета секундного интервала и всем остальным, что на фоне низкой тактовой частоты будет создавать описанные эффекты. Можно попробовать заменить обработчик секундного интервала тем, что ниже. В любом случае, хуже не будет.

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

; для tiny2313 вектор переполнения TIM0
.ORG $06
	IN	R13,SREG	; запомнить состояние флагов при входе в прерывание

	INC SS		;НАРАСТИМ СЕКУНДУ (ПРЕРЫВАНИЕ ОТ TMR0)
;********************************************************************
;ОБРАБОТКА ПРЕРЫВАНИЯ ОТ ТАЙМЕРА\СЧЕТЧИКА (ЧЕРЕЗ 1024х200 ТАКТА ГЕНЕРАТ.)
;********************************************************************
TMR0:	
	LDI B,224
	OUT TCNT0,B	;ТАЙМЕР СЧИТАЕТ ДО 32 (256-224=32)

	CPI SS,60	;SS=60?
	BREQ T2		;ЕСЛИ ДА ТОГДА ПЕРЕХОД НА Т2,ИНАЧЕ ИДЕМ ДАЛЕЕ
	OUT	SREG,R13	; вернуть состояние флагов при выходе из прерывания
	RETI		;ВЫХОД ИЗ ПРЕРЫВАНИЯ

T2:	CLR SS		;СБРОСИМ SS
	INC M		;УВЕЛИЧИМ МИНУТЫ
	CPI M,10	;МИНУТЫ ДОСТИГЛИ 10?
	BREQ T3		;ЕСЛИ ДА ТОГДА ПЕРЕХОД НА Т3,ИНАЧЕ ИДЕМ ДАЛЕЕ
	OUT	SREG,R13	; вернуть состояние флагов при выходе из прерывания
	RETI		;ВЫХОД ИЗ ПРЕРЫВАНИЯ
	
T3:	CLR M		;СБРОСИМ M
	INC MM		;УВЕЛИЧИМ ДЕСЯТКИ МИНУТ
	CPI MM,6	;ДЕСЯТКИ МИНУТ ДОСТИГЛИ 6?
	BREQ T4		;ЕСЛИ ДА ТОГДА ПЕРЕХОД НА Т4,ИНАЧЕ ИДЕМ ДАЛЕЕ
	OUT	SREG,R13	; вернуть состояние флагов при выходе из прерывания
	RETI

T4:	CLR MM		;СБРОСИМ ММ
	INC H		;УВЕЛИЧИМ ЧАСЫ
	CPI H,4		;ЧАСЫ ДОСТИГЛИ 4?
	BREQ T5		;ЕСЛИ ДА ТОГДА ПЕРЕХОД НА Т5,ИНАЧЕ ИДЕМ ДАЛЕЕ
	CPI H,10	;ЧАСЫ ДОСТИГЛИ 10?
	BREQ T9		;ЕСЛИ ДА ТОГДА ПЕРЕХОД НА Т9,ИНАЧЕ ИДЕМ ДАЛЕЕ

	OUT	SREG,R13	; вернуть состояние флагов при выходе из прерывания
	RETI		;ВЫХОД ИЗ ПРЕРЫВАНИЯ


T5: 	CPI HH,2	;ДЕСЯТКИ ЧАСОВ ДОСТИГЛИ 2?
	BREQ T6		;ЕСЛИ ДА ТОГДА ПЕРЕХОДИМ НА Т6,ИНАЧЕ ИДЕМ ДАЛЕЕ
	CPI H,10	;ЧАСЫ ДОСТИГЛИ 10?
	BREQ T7		;ЕСЛИ ДА ТОГДА ПЕРЕХОД НА Т7,ИНАЧЕ ИДЕМ ДАЛЕЕ
	OUT	SREG,R13	; вернуть состояние флагов при выходе из прерывания
	RETI		;ВЫХОД ИЗ ПРЕРЫВАНИЯ

	
T6:	CLR HH		;СБРОСИМ ДЕСЯТКИ ЧАСОВ
	CLR H		;СБРОСИМ ЧАСЫ
	INC D		;УВЕЛИЧИМ ДНИ
	MOV B,D
	CPI B,8		;ДНИ ДОСТИГЛИ 8?
	BREQ T8		;ЕСЛИ ДА ТОГДА ПЕРЕХОДИМ НА 	Т8,ИНАЧЕ ИДЕМ ДАЛЕЕ
	
	OUT	SREG,R13	; вернуть состояние флагов при выходе из прерывания
	RETI		;ВЫХОД ИЗ ПРЕРЫВАНИЯ

T7:	CLR H		;СБРОСИМ ЧАСЫ
	INC HH		;УВЕЛИЧИМ ДЕСЯТКИ ЧАСОВ

	OUT	SREG,R13	; вернуть состояние флагов при выходе из прерывания
	RETI		;ВЫХОД ИЗ ПРЕРЫВАНИЯ
	
T8:	LDI B,1
	MOV D,B
	OUT	SREG,R13	; вернуть состояние флагов при выходе из прерывания
	RETI		;УСТАНОВИТЬ ДНИ И ВЫХОД ИЗ ПРЕРЫВАНИЯ
	

T9:	CLR H		;СБРОСИМ ЧАСЫ
	INC HH		;УВЕЛИЧИТЬ  ДЕСЯТКИ ЧАСОВ
	OUT	SREG,R13	; вернуть состояние флагов при выходе из прерывания
	RETI		;ВЫХОД ИЗ ПРЕРЫВАНИЯ		
;********************************************************************
;ИНСТАЛЯЦИЯ
;********************************************************************
srqemiko
Открыл глаза
Сообщения: 47
Зарегистрирован: Ср сен 26, 2007 10:30:45
Откуда: киев
Контактная информация:

Re: Помогите перейти с 90s1200 На Attiny23

Сообщение srqemiko »

Проблема мерцания индикаторов при нажатии кнопок решилась путем удаления програмы задержки от дребезга и её элементов
;********************************************************************
;ЗАДЕРЖКА ОТ ДРЕБЕЗГА
;********************************************************************

PAUSA:
LDI A,100

PAU: DEC A
BREQ PAUS
RJMP PAU

PAUS: RET
;_______________________
и изменив обработчик секундного интервала тем, что вы посоветовали все стало работать как нужно
srqemiko
Открыл глаза
Сообщения: 47
Зарегистрирован: Ср сен 26, 2007 10:30:45
Откуда: киев
Контактная информация:

Re: Помогите перейти с 90s1200 На Attiny23

Сообщение srqemiko »

Добрый вечер. А подскажите еще по одному вопросу который заключается в следующем реализацией в них счета даты, месяца и года. Я так полагаю что их счет идет по аналогии самого времени но вот не могу понять, как он должен просчитывает количество дней месяца и высокосного года зарание благодарен
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»