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

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

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

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

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

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

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 12.12.2018, 12:01  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,888
Сказал спасибо: 2,959
Сказали Спасибо 3,144 раз(а) в 2,133 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: USI - есть проскилованные?

Могу послать ассемблерный код, который крутился на tiny2313. Там даже комментарии кое-где есть.
Реклама:
__________________
Экзорцист 40-го уровня.
ForcePoint на форуме  
Непрочитано 12.12.2018, 14:31  
parovoZZ
Почётный гражданин KAZUS.RU
 
Регистрация: 15.11.2010
Сообщений: 2,379
Сказал спасибо: 338
Сказали Спасибо 328 раз(а) в 253 сообщении(ях)
parovoZZ на пути к лучшему
По умолчанию Re: USI - есть проскилованные?

Сообщение от ForcePoint Посмотреть сообщение
Могу послать ассемблерный код,
Зачем посылать? Может здесь выложить? Нам, как говорится, ничто человеческое ни чуждо=)

Я тут поприкидывал на коленке по энергобюджету для тини 24А/44А/84А. В активном режиме она кушает от 250 uA до 500 uA. Timer0 кушает всего 4.4 uA (странно то, что 16-ти битный Timer1 ест в три раза меньше о_О), модуль USI примерно столько же. Поэтому гораздо выгоднее тактироваться от Timer0, а проц загнать в Idle Mode. И даже без разницы, какая частота получиться - чухаем и чухаем потихонечку =)
parovoZZ вне форума  
Непрочитано 12.12.2018, 19:35  
parovoZZ
Почётный гражданин KAZUS.RU
 
Регистрация: 15.11.2010
Сообщений: 2,379
Сказал спасибо: 338
Сказали Спасибо 328 раз(а) в 253 сообщении(ях)
parovoZZ на пути к лучшему
По умолчанию Re: USI - есть проскилованные?

А вот еще что)))
Про USI очень мало в сети, то в тех исходниках, которые вижу (в том числе и AN 310), прием квитанции осуществляется сдвиговым регистром с переводом последнего на прием. А почему они не хотят принимать квитанцию регистром PIN? И не надо делать туда-сюда )))
parovoZZ вне форума  
Непрочитано 13.12.2018, 11:52  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,888
Сказал спасибо: 2,959
Сказали Спасибо 3,144 раз(а) в 2,133 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: USI - есть проскилованные?

Это что-то типа моста UART-SPI/I2C было... Заголовки:
Код:
;**** Позиции флагов в stat    ****
.equ	SPI =	0		; SPI / !I2C

;* 	Имена регистров		*
.def	temp1	= r17
.def	temp2	= r18
.def	u_data	= r19		; Данные УАПП

.def	usi_data= r24		; Данные USI (SPI/I2C)
.def	usi_stat= r25		; Регистр статуса USI
.def	speed_L	= r26		; Скорость USI
.def	speed_H = r27		; Скорость USI

;* 	Задействованные выводы			*
.equ	LED	= 0		; Номер разряда порта, подключенного к СИД
.equ	LED_PORT= portb

.equ	I2CPORT	= portb		; Регистр данных порта, используемого для I2C
				; Номера выводов, используемых как:
.equ	SCLP	= 7		; SCL
.equ	SDAP	= 5		; SDA
.equ	CE	= 6		; !CE
.equ	OE	= 4		; Reset/!OE
.equ	SER_EN	= 0		; !SER_EN

;* Interrupt Vectors *
.CSEG
;.....
;.....
.org	USI_OVFaddr
	rjmp	usi_ovf
;.....
;.....
Низкоуровневая работа с USI:
Код:
;**** Позиции флагов usi_stat    ****

.equ	i2c_ack_get = 2
.equ	i2c_complete = 1
.equ	spi_complete = 0		; Завершена передача 4-х байт

.cseg
usi_ovf:			; Обработчик прерывания "Передача через USI завершена"
	sbi	usisr,USIOIF		; Сброс флага переполнения USI
	sbrc	stat,SPI
	rjmp	usi_spi			; SPI
	sbr	usi_stat,1 ‹‹ i2c_complete
	reti

usi_spi:	; Под спойлером - кусок обработчика для SPI
            
            
Нажмите, чтобы открыть спойлер
sei push temp1 in temp1,SREG push temp1 ;; sbrs stat,SPI ;; rjmp usi_i2c ; I2C in temp1,usidr ; Считать данные и сохранить st Y+,temp1 cpi YL,25 ; Счётчик/указатель исчерпан? (17) brne do_spi sbr usi_stat,1 ‹‹ spi_complete end_usi_ovf: pop temp1 out SREG,temp1 pop temp1 reti do_spi: ld temp1,Y out usidr,temp1 ; Новые данные для передачи (21) rjmp end_usi_ovf
;* Тактирование USI через таймер0 * usi_clock: sbi usicr,USITC ; Тактирование USI out tcnt0,speed_L wait_usi_clock: in temp1,tifr sbrs temp1,TOV0 ; ПРОИЗОШЛО ПЕРЕПОЛНЕНИЕ? rjmp wait_usi_clock out tifr,temp1 ; СБРОС ФЛАГА ret ;* Настройка порта для обмена по I2C. seep_init: ldi temp1,(1 ‹‹ USIWM1)|(1 ‹‹ USICS1)|(1 ‹‹ USIOIE) out usicr,temp1 ; Разрешение USI/I2C ldi temp1,0xFF out usidr,temp1 in temp1,i2cport ; Регистры данных и направления ori temp1,(1 ‹‹ SDAP)|(1 ‹‹ SCLP) in temp2,i2cport-1 ori temp2,(1 ‹‹ SDAP)|(1 ‹‹ SCLP) rcall getc cpi u_data,2 breq mode_2 cpi u_data,3 breq mode_3 cpi u_data,4 brne set_port ; mode_1, OE, CE = Z ori temp1,(1 ‹‹ OE) ; mode_4, OE=1, CE=1 mode_3: ori temp1,(1 ‹‹ CE) ; mode_3, OE=0, CE=1 mode_2: ori temp2,(1 ‹‹ OE)+(1 ‹‹ CE) ; OE, CE - выходы ; mode_2, OE=0, CE=0, выходы set_port: out i2cport,temp1 out i2cport-1,temp2 ; SDAP,SCLP - ODoutputs sbi usisr,USISIF ; Release SCL by "Start" detector rcall put_ret rjmp waitcmd ;* Ожидание освобождения линии SCL ведомым устройством wait_SCL_high: sbis I2CPORT-2,SCLP rjmp wait_SCL_high small_delay: ret ;* Передача повторного условия СТАРТ и адреса ведомого. i2c_rep_start: cbi I2CPORT,SCLP ; SCL = 0 sbi I2CPORT,SDAP ; SDA = Z sbi I2CPORT,SCLP ; SCL = Z rcall wait_SCL_high ; Ожидание освобождения SCL rcall small_delay cbi I2CPORT,SDAP ; SDA = 0 ( старт ) rcall small_delay ;* Передача байта по I2C i2c_write: out usidr,usi_data ldi temp1,0xF0 ; Release SCL by "Start" out usisr,temp1 ; detector and clear counter cbr usi_stat,(1 ‹‹ i2c_complete) i2c_clock: cbi I2CPORT,SCLP ; Тактирование USI sbi I2CPORT,SDAP ; Release SDA by port - set data by USIDR rcall small_delay sbi I2CPORT,SCLP rcall wait_SCL_high sbrs usi_stat,i2c_complete ; Обмен завершён? rjmp i2c_clock in usi_data,usidr i2c_ack: cbi I2CPORT,SCLP ; SCL = 0 sbrc usi_stat,i2c_ack_get ; Если чтение - выдать rjmp get_ack ; если передача - получить "ACK" brcs i2c_put_ack_high ; если C=1 cbi I2CPORT,SDAP ; иначе SDA = 0 get_ack: i2c_put_ack_high: ldi temp1,0xFF ; Release SDA by USIDR out usidr,temp1 rcall small_delay sbi I2CPORT,SCLP ; SCL = Z rcall wait_SCL_high ; Ожидание освобождения SCL clc sbic I2CPORT-2,SDAP ; если SDA = 1 sec ; установить "С" ret ;* Передача условия СТОП. seep_stop: cbi I2CPORT,SCLP ; SCL = 0 cbi I2CPORT,SDAP ; SDA = 0 rcall small_delay sbi I2CPORT,SCLP ; SCL = Z rcall wait_SCL_high ; Ожидание освобождения SCL rcall small_delay sbi I2CPORT,SDAP ; SDA = Z ret ;* Освобождение порта после обмена по I2C. seep_rel: ldi temp1,0x0 out usicr,temp1 ; Запрещение USI/I2C ldi temp1,(1 ‹‹ SER_EN) out i2cport-1,temp1 ; Отключить все, кроме LED in temp2,i2cport and temp2,temp1 out i2cport,temp2 ; Всё, кроме LED, в Z rcall put_ret rjmp waitcmd
Работа с I2C EEPROM:
Код:
;*	Передача условия СТАРТ и адреса ведомого.
seep_start:
	rcall	getc		; Получить адрес ведомого
	mov	usi_data,u_data
	sbr	usi_stat,1 ‹‹ i2c_ack_get
	rcall	i2c_rep_start	; Передать "старт" и адрес ведомого

answer:	brcs	far_answer
	rcall	put_ret		; КОНЕЦ
	rjmp	waitcmd
far_answer:
	rjmp	put_err		; Ошибка

;*	Передача данных.
seep_write:
	rcall	getc		; Получить данные
	mov	usi_data,u_data
	sbr	usi_stat,1 ‹‹ i2c_ack_get
	rcall	i2c_write	; Передать данные
	rjmp	answer		; КОНЕЦ

;*	Чтение данных ( с подтверждением или без него ).
seep_rnack:
	sec			; NO_ACK
	rjmp	far_read
seep_rack:
	clc			; ACK
far_read:
	ser	usi_data
	cbr	usi_stat,1 ‹‹ i2c_ack_get
	rcall	i2c_write	; Считать данные
	mov	u_data,usi_data
	rcall	putc		; Передать данные
	rjmp	waitcmd		; КОНЕЦ
__________________
Экзорцист 40-го уровня.

Последний раз редактировалось ForcePoint; 13.12.2018 в 11:57. Причина: съезжало форматирование на двойном меньше операции сдвига.
ForcePoint на форуме  
Непрочитано 13.12.2018, 14:45  
tat_1605
Частый гость
 
Регистрация: 28.02.2008
Сообщений: 19
Сказал спасибо: 1
Сказали Спасибо 19 раз(а) в 12 сообщении(ях)
tat_1605 на пути к лучшему
По умолчанию Re: USI - есть проскилованные?

AVR312_TWI_slave.pdf, AVR310.pdf + Saleae Logic Analyzer
И будет Вам счастье!
tat_1605 вне форума  
 

Закладки

Метки
abdurino must die
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прикупил пирометр Fluke 62 MAX - есть вопросы sobyninsk Измерительное оборудование 16 29.11.2018 12:43
Анекдот, анекдот ... (часть 2 - 3) Chelovek-OM Отвлекитесь, эмбеддеры! 6906 20.08.2014 23:45
Интеллектуалы, есть задача по ТБ - помогите. Rishelie2 Автоматика и аппаратура связи 15 05.11.2008 20:29
Вы родом из 70-80х если: baskervil Отвлекитесь, эмбеддеры! 163 23.10.2008 22:26


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


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