Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 18.07.2009, 14:04  
svv11
Временная регистрация
 
Регистрация: 20.11.2005
Сообщений: 52
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
svv11 на пути к лучшему
По умолчанию Не включаются подтягивающие резисторы Atmega8515

Проблема, не включаются подтягивающие резистотры PORTD на Atmega8515. Вот часть кода где настраиваются регистры перферии:
Код:
START1: ;*************************************************  *********************
	ldi r16,0
	out GICR,r16  ; запретить прерывания INTn		
	out MCUCR,r16 ; запретить прерывания
	out SFIOR,r16 ; чтобы можно было использовать подтяг резисторы

	ldi  r16,(1‹‹TOIE0)	; 
	out TIMSK,r16 ; разрешение прерывания по переполнению T0 остальные запрещены
	ldi	r16,(0‹‹FOC0)|(0‹‹COM01)|(0‹‹COM00)|(1‹‹CS02)|(0‹‹CS01)|(0‹‹CS00)
	out	TCCR0,r16 ; OC0 незавтсит от T0, предделитель T0 =clk/256
	ldi r16,0
	out	TCCR1A,r16 ; OC1A и OC1B не зависят от таймеров
	ldi	r16,(1‹‹CS12)|(0‹‹CS11)|(1‹‹CS10)
	out	TCCR1B,r16 ; предделитель T1 =clk/1024
; Настройка портов
	ldi	r16,0b11111111
	out	DDRA,r16			
	out	DDRB,r16
	out	DDRC,r16

	ldi	r16,0b11000101	;
	out	DDRD,r16
			;
	ldi	r16,0b11111110
	out	DDRE,r16
	
	sbi	PORTD,1	;вкл подтяг резистор
	sbi	PORTD,3	;вкл подтяг резистор
	sbi	PORTD,4	;вкл подтяг резистор
	sbi	PORTD,5	;вкл подтяг резистор

	ldi	r16,0b00000000
	out	PORTE,r16	
; Отключение неиспользуемой перферии
	ldi r16,0
	out	SPCR,r16 	; SPI отключить
	out	UCSRB,r16 	; USART отключить
	out	UCSRB,r16	; Компаратор отключить
	sei	; разрешить глобальное прерывание
	ret	;-----------› Возврат из подпрограммы
Вот фьюзы:
CkSel =0100 (внутренний генератор 8 мГц)
Bod =On (вкл сброс по снижению напряжения)
VB =4.0v (порог для Bod)
WdtOn =ON (WDT – включён, программное отключение запрещено)
М85с =OFF (совместимость с AT90S8515 отключена)
CP = L1 (защита кода отключена )
SUT =10 (65мкс – задержка запуска при включении)
BRst =OFF (вектор сброса в начале памяти программ (не во внешнем ОЗУ))
BSize =00 (размеры адресуемой внешней памяти под загручик самопрограммированиия и ОЗУ )
EES = OFF (отключено сохранение содержимого EEPROM при стирании памяти программ)
Ckopt =OFF
SPI = ON (последовательное программирование разрешено)
BLB0 = 2 (запрещена запись во внешнее ОЗУ)
BLB1 =3 (запрещено размещение загрузчика и таблицы векторов во внешнем ОЗУ)
Помогите решить проблемму.
Реклама:
svv11 вне форума  
Непрочитано 18.07.2009, 15:16  
woroba
Гражданин KAZUS.RU
 
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
woroba на пути к лучшему
По умолчанию

А как вы определили,что не включаются?
__________________
Не ошибается лишь тот, кто ни чего не делает!
woroba вне форума  
Непрочитано 18.07.2009, 17:05  
svv11
Временная регистрация
 
Регистрация: 20.11.2005
Сообщений: 52
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
svv11 на пути к лучшему
По умолчанию

Сообщение от woroba
А как вы определили,что не включаются?
На пинах PD1,P3,P4,P5 ноль вольт. Причём указанные пины точно не нагружены. Да ещё пробовал подтягивать резистором 10k к 5В - подтягиваются. Не сомневайтесь - точно пдтягивающие резисторы не включены.
svv11 вне форума  
Непрочитано 18.07.2009, 17:13  
woroba
Гражданин KAZUS.RU
 
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
woroba на пути к лучшему
По умолчанию

Сообщение от svv11
Сообщение от woroba
А как вы определили,что не включаются?
На пинах PD1,P3,P4,P5 ноль вольт. Причём указанные пины точно не нагружены. Да ещё пробовал подтягивать резистором 10k к 5В - подтягиваются. Не сомневайтесь - точно не подтягиваются.
Ну тогда проект в студию, будем смотреть, ваш кусок кода в AVRStudio симулируется нормально.
__________________
Не ошибается лишь тот, кто ни чего не делает!
woroba вне форума  
Непрочитано 18.07.2009, 17:27  
svv11
Временная регистрация
 
Регистрация: 20.11.2005
Сообщений: 52
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
svv11 на пути к лучшему
По умолчанию

Вот он пока весь проект, компилируется нормально передёт идикацю, и она отображается нормально. Т.е. уже дышит на железе.
Код:
;*************************************************  *******************
.include "m8515def.inc"

.equ PERIOD	=53	;	определяет период обмена (константа уменьшает период счёта T0)

.equ g0 =0b01110111
.equ g1 =0b00110000
.equ g2 =0b01101011
.equ g3 =0b01111010
.equ g4 =0b00111100
.equ g5 =0b01011110
.equ g6 =0b01011111
.equ g7 =0b01110000
.equ g8 =0b01111111
.equ g9 =0b01111110
.equ gE =0b01001111
.equ gr =0b00001001
.equ gF =0b01001101
.equ gP =0b01101101
.equ g_ =0b00000010	 ; подчёркивание
.equ g_t =0b00001000 ; тире 

.def event	=r18	; регистр событий
			; 0- =1 если обмен был необходимо стек уст в исх значение
			; 1-
			; 2- 
.def ind_0	 =r0	; регистр сегментов 0-р
.def ind_1	 =r1	; регистр сегментов 1-р
.def ind_2	 =r2	; регистр сегментов 2-р
.def ind_d	 =r19 	; регистр № разряда цифры
.def ind_dig =r3 	; регистр № текущего разряда цифры
.def ind_seg =r20	; регистр текущих сегментов
.def key2	 =r21 	;
.def key1	 =r4	;
.def key	 =r5 	;

.def kv_L	 =r6 	;
.def kv_S	 =r7 	; 
.def c_int	 =r8 	; 
.def c_wdt	 =r9	; 

.CSEG		;Программный сегмент
.ORG 0x00	;;Уcтaновкa cчётчикa пpогpaмм c нyля
	rjmp START ;RESET
	rjmp START ;1	INT0
	rjmp START ;2	INT1
	rjmp START ;3	Захват Т/С T1
	rjmp START ;4	Совпадение "A" Т/С T1
	rjmp START ;5	Совпадение "B" Т/С T1
	rjmp START ;6	Переполнение Т/С T1
	rjmp TIMER0_OVF ;7	Переполнение Т/С T0
	rjmp START ;8	Передача по SPI завершена
	rjmp START ;9	USART, приём завершён
	rjmp START ;10	Регистр данных USART пуст
	rjmp START ;11	USART, передачазавершена
	rjmp START ;12	Аналоговый компаратор
	rjmp START ;13	INT2
	rjmp START ;14	Совпадение Т/С T0
	rjmp START ;15	EEPROM, готово
	rjmp START ;16	Готовность SPM
;*************** Исходные установки **********************************
START:
	cli	;запретить все прерывания
	wdr ; сброс WDT	
; Начальная установка портов
	ldi	r16,0b11111111
	out	DDRA,r16			
	out	DDRB,r16
	out	DDRC,r16

	ldi	r16,0b11000101	;
	out	DDRD,r16		;

	ldi	r16,0b11111110
	out	DDRE,r16

	ldi	r16,0b11111111
	out	PORTA,r16
	ldi	r16,0b11110011
	out	PORTB,r16
	ldi	r16,0
	out	PORTC,r16	
	ldi	r16,0b00111010
	out	PORTD,r16
	ldi	r16,0b11111110
	out	PORTE,r16
; Установка периода WDT (больше ни где не надо устанавливать)
	ldi  r16,(1‹‹WDCE)|(1‹‹WDE)
	out  WDTCR, r16 ; разрешить процедуру
	ldi  r16,(1‹‹WDCE)|(1‹‹WDE)|(0‹‹WDP2)|(1‹‹WDP1)|(1‹‹WDP0);максимальный тайм аут WDT (2.1с
	out  WDTCR, r16 ; завершить процедуру
; установка начала стека
	ldi	r16,HIGH(RAMEND);начало стека
	out	SPH,r16			;RAMEND, SPL, SPH определено в файле m8515def.inc
	ldi	r16,LOW(RAMEND)	; 
	out	SPL,r16			; т.о. SP‹-025F
	eor r16,r16	 ; Очистить r16
	out	TCNT0,r16	; Сбросить таймер T0
	eor r16,r16	 ; Очистить r16
	out	TIFR,r16 ; сбросить флаги таймеров
	eor ind_d,ind_d  ; =0 (при пуске все разряды выключить)	
	rcall START1

	sbr event,0 ; признак - "стек можно переустановить в исходное"
	ldi	r16,$FF
	mov	c_wdt,r16 ; (для условия сброса WDT)
	rcall WDT_servis ; (в этой п/п глобальное разреш прерываний и уст стек)
	rcall SAUND_SHORT
	rjmp Start_up
START1: ;*************************************************  *********************
	ldi r16,0
	out GICR,r16  ; запретить прерывания INTn		
	out MCUCR,r16 ; запретить прерывания
	out SFIOR,r16 ; чтобы можно было использовать подтяг резисторы

	ldi  r16,(1‹‹TOIE0)	; 
	out TIMSK,r16 ; разрешение прерывания по переполнению T0 остальные запрещены
	ldi	r16,(0‹‹FOC0)|(0‹‹COM01)|(0‹‹COM00)|(1‹‹CS02)|(0‹‹CS01)|(0‹‹CS00)
	out	TCCR0,r16 ; OC0 незавтсит от T0, предделитель T0 =clk/256
	ldi r16,0
	out	TCCR1A,r16 ; OC1A и OC1B не зависят от таймеров
	ldi	r16,(1‹‹CS12)|(0‹‹CS11)|(1‹‹CS10)
	out	TCCR1B,r16 ; предделитель T1 =clk/1024
; Настройка портов
	ldi	r16,0b11111111
	out	DDRA,r16			
	out	DDRB,r16
	out	DDRC,r16

	ldi	r16,0b11000101	;
	out	DDRD,r16
			;
	ldi	r16,0b11111110
	out	DDRE,r16
	
	sbi	PORTD,1	;вкл подтяг резистор
	sbi	PORTD,3	;вкл подтяг резистор
	sbi	PORTD,4	;вкл подтяг резистор
	sbi	PORTD,5	;вкл подтяг резистор

	ldi	r16,0b00000000
	out	PORTE,r16	
; Отключение неиспользуемой перферии
	ldi r16,0
	out	SPCR,r16 	; SPI отключить
	out	UCSRB,r16 	; USART отключить
	out	UCSRB,r16	; Компаратор отключить
	sei	; разрешить глобальное прерывание
	ret	;-----------› Возврат из подпрограммы
;*************************************************  ****************************
SAUND_SHORT: ;дописать позже
	ret	;-----------› Возврат из подпрограммы
SAUND_LONG: ;дописать позже
	ret	;-----------› Возврат из подпрограммы
;*************************************************  ****************************
Start_up: 	;Запуск 

; Здесь надо написать программу проверки условий 

	rjmp	MAIN
	;*************************************************  ********************
; Подпрограмма обслуживания WDT и установки стека
WDT_servis:	
; установка начала стека
	sbrs event,0 ; пропустить если ‹0›=1, стек надо установить
	rjmp rs
	ldi	r16,HIGH(RAMEND);начало стека
	out	SPH,r16			;RAMEND, SPL, SPH определено в файле m8515def.inc
	ldi	r16,LOW(RAMEND)	; 
	out	SPL,r16			; т.о. SP‹-025F
	cbr  event,0	; запрет установки стека
rs:	nop 
;---СБРОС WDT-------------------------------------------------
	tst	c_wdt	; проверить на ноль
	breq M0		; перейти если равно нулю
	dec	c_wdt	; -1
	wdr ; сброс WDT
M0:	rcall START1
;---Er--------------------------------------------------
	tst	key2	; проверить на ноль
	brne M1		; перейти если не равно (ответ от клавиатуры есть)
	ldi	r16,0   ; (младший разряд пустой)
	mov ind_0,r16
 	ldi	r16,gr
	mov ind_1,r16
	ldi	r16,gE
	mov ind_2,r16
;	rjmp M0	 ; если нет ответа от клавиатуры то WDT не обнулять
M1:	ret	;возврат из подпрограммы -------------›
;*************************************************  *********************
TIMER0_OVF: ;Обработка обмена (по прерыванию переполнения TIMER0)
; сохранение котекста
	push R16
	push R17
	in	R16,SREG
	push R16 ;Сохранить регистр состаяния в стеке
;_________________________________________________  __
	ldi	r16,PERIOD
	out TCNT0,r16 ; (до переполнения 6.5 мс)
;_________________________________________________  __
	mov ind_dig,ind_d ; записать текущее значение разряда
; Выбрать текущие сегменты
	sbrc ind_dig,2	; пропустить если бит в регистре очищен
	mov ind_seg,ind_0 ;
	sbrc ind_dig,1	; пропустить если бит в регистре очищен
	mov ind_seg,ind_1 ;	
	sbrc ind_dig,0	; пропустить если бит в регистре очищен
	mov ind_seg,ind_2 ;	
; Установить номер разряда для следующего обмена
	lsl ind_d	; ‹- сдвиг
	andi ind_d,0b00000111 ; выделить 3 младших разряда
	brbc SREG_Z,S1	; пропустить если не =0 (Z=0)
	inc ind_d	; +1 - записать 1 в рег  
S1:	rcall TX
	rcall TX
	rcall TX
	rcall TX
	rcall TX
	rcall TX
	rcall TX
	rcall TX
	rcall TX
	rcall TX
	rcall TX
	inc c_int	; счёт циклов обмена
	sbr event,0 ; признак - стек можно переустановить в исходное
	ldi	r16,$FF
	mov	c_wdt,r16 ; Если в течении 255 циклов MAIN c_wdt не будет устанавлен
				  ; то WDT перестанет обнулятся
; востановление котекста
	pop r16
	out	SREG,r16
	pop r17
	pop r16
	reti	;возврат из прерывания -------------›
;*************************************************  *******************
; Подпрограмма передачи импульса TX
TX:	sbi	PORTD,0 ; установить PD0
	ldi r17,9
	rcall wait1
	sbrc ind_dig,2	; пропустить если бит в регистре очищен
	cbi	PORTD,0 ; очистить PD0
; подготовка содержимого для следующего импульса
	rol ind_seg ; ‹-c‹- сдвинуть через перенос
	rol ind_dig ; ‹-c‹- сдвинуть через перенос
	ldi r17,10
	rcall wait1
	cbi	PORTD,0 ; очистить PD0
;_____________________________
	ldi r17,15
	rcall wait1 ; пауза до приёма
; обработка приёма
	ror key2 ; -›c-› сдвинуть через перенос
	ror key1 ; -›c-› сдвинуть через перенос
	andi key2,0b00000111
	sbis PIND,1 ; пропустить если PD1=1 (чтение на 22-ой мкс)
	sbr key2,3 ; ‹3› =1 (импульс есть)
	ldi r17,37
	rcall wait1
	ret	;возврат из подпрограммы -------------›
;_________________________________________________  ____
wait1:	eor r16,r16	; Очистить r16
t1: 	inc r16		;+1 
		cp r16,r17   ; Сравнить r16 с r17
		brne t1    ; Перейти если r16 =не r17
		ret	;возврат из подпрограммы -------------›

;*************** Основная пограмма ***********************************
MAIN:
	rcall WDT_servis

	ldi	r16,g3
	mov ind_0,r16
 	ldi	r16,0
	mov ind_1,r16
	ldi	r16,0
	mov ind_2,r16
	rjmp	MAIN
svv11 вне форума  
Непрочитано 18.07.2009, 19:57  
woroba
Гражданин KAZUS.RU
 
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
woroba на пути к лучшему
По умолчанию

Для начала, заглушки на неиспользуемые прерывания нужно ставить в виде RETI( для того чтобы вернуться на место), а у вас переход на START(бардак получается).
__________________
Не ошибается лишь тот, кто ни чего не делает!
woroba вне форума  
Непрочитано 18.07.2009, 20:06  
svv11
Временная регистрация
 
Регистрация: 20.11.2005
Сообщений: 52
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
svv11 на пути к лучшему
По умолчанию

Работает Приношу свои извинения , просто после посленденй правки (а она устраняла проблемму) возник нюанс с программатором. Ещё раз приношу свои извинения !
svv11 вне форума  
Непрочитано 18.07.2009, 20:16  
svv11
Временная регистрация
 
Регистрация: 20.11.2005
Сообщений: 52
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
svv11 на пути к лучшему
По умолчанию

Сообщение от woroba
Для начала, заглушки на неиспользуемые прерывания нужно ставить в виде RETI( для того чтобы вернуться на место), а у вас переход на START(бардак получается).
Идея такая: если на эти вектора попадает (а в норме не должно), то что-то криво пошло - сбой - и тогда переинициализация всего что используется. Это против некоректной работы. Единственно может быть что-то ещё добавить в START, как вы считаете?
svv11 вне форума  
Непрочитано 18.07.2009, 20:16  
woroba
Гражданин KAZUS.RU
 
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
woroba на пути к лучшему
По умолчанию

Далее компаратор запрещается 0х80, а не 0х00 как у вас.
А ваши манипуляции со стеком вообще не понятны!
Стек инициализируется один раз в начале программы а у вас???
__________________
Не ошибается лишь тот, кто ни чего не делает!
woroba вне форума  
Непрочитано 18.07.2009, 20:57  
svv11
Временная регистрация
 
Регистрация: 20.11.2005
Сообщений: 52
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
svv11 на пути к лучшему
По умолчанию

Сообщение от woroba
Далее компаратор запрещается 0х80, а не 0х00 как у вас.
А ваши манипуляции со стеком вообще не понятны!
Стек инициализируется один раз в начале программы а у вас???
За компаратор спасибо, там ещё и имя регистра написано неправильно должно быть: ACSR. А на счёт стёка не согласен, переустановить его по крайней мере не вредно. Делаться это будет в первом проходе основной программы после прерывания. И в это время в нём ничего не будет храниться. Кроме этого это нужно исходя из дальнейшего алгоритма программы: там программа будет делать условный переход (не всегда) на начало программы прямо из подпрограмм и всё что было в стёке при этом не будет иметь значения. Хотя можно было пойти и стандартным путём, но это немного сложнее и длиннее. Спасибо за помощь.
svv11 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
UART не принимает в ATmega8515 Don_Ambrosio Микроконтроллеры, АЦП, память и т.д 1 25.04.2008 18:57
Замена AT90S8515 на Atmega8515 Mkaka Микроконтроллеры, АЦП, память и т.д 3 04.02.2008 09:25
внутренние подтягивающие резисторы у МК dimonbest Микроконтроллеры, АЦП, память и т.д 16 18.05.2007 11:09
Прошивка atmega8515 bit1987 Микроконтроллеры, АЦП, память и т.д 3 05.02.2007 14:22
AT90S8515 и ATmega8515 R_V_A Микроконтроллеры, АЦП, память и т.д 6 12.09.2006 18:22


Часовой пояс GMT +4, время: 16:03.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot