реклама на сайте
подробности

 
 
> USI типа I2C на Tiny45, просто не работает
alux
сообщение Feb 22 2010, 13:22
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Необходимо организовать связь между Tiny45 (Slave) и Mega324P(Master). Мега должна считывать данные с Тини и передать на ЖКИ (i2c TIC154). Попробовал использовать аппнот avr312 (USI -> I2C Slave) для Тини45, но не удается получить ответ от Тини. ЖКИ при этом тоже не работает. Анализ исходника avr312 показал, что у Тини вывод SCL настроен на выход и удерживается в низком состоянии. Настройка вывода SCL (Tiny45) на вход не решила проблему.
Есть ли у кого положительный опыт работы с данным примером?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Nuts_
сообщение Apr 1 2010, 11:15
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 1-07-09
Пользователь №: 50 799



код для принимающего утройтва
принимает 6 байт
ну еще широковещательный пакет обрабатываеться

рабоатет по прерываниям

CODE
.include "tn45def.inc"

.def temp =r16
.def USIcnt =r19
.def USIstate =r20



.org 0
RJMP reset;RESET External Pin, Power-on Reset, Brown-out
RJMP reset;INT0 External Interrupt Request 0
RJMP reset;PCINT0 External Interrupt Request 1
RJMP reset;TIMER1 COMPA Timer/Counter1 Compare Match A
RJMP reset;TIMER1 OVF Timer/Counter1 Overflow
RJMP reset;TIMER0 OVF Timer/Counter0 Overflow
RJMP reset;EE_RDY EEPROM Ready
RJMP reset;ANA_COMP Analog Comparator
RJMP reset;ADC ADC Conversion Complete
RJMP reset;TIMER1 COMPB Timer/Counter1 Compare Match B
RJMP reset;TIMER0 COMPA Timer/Counter0 Compare Match A
RJMP reset;TIMER0 COMPB Timer/Counter0 Compare Match B
RJMP reset;WDT
RJMP USIstart;USI - start
RJMP USIofl;USI - Overflow
;-----------------------
USIstart:
push temp

ldi temp,1
mov USIstate,temp


in temp,USICR;(Enable USI Counter overflow interrupt)
sbr temp,0b01000000
out USICR,temp
rcall ClearACK
pop temp
reti

USIofl:
push temp


mov temp,USIstate
cpi temp,1
breq I2Cadr
cpi temp,2
breq I2Cack
cpi temp,3
breq I2Cbyte

rjmp USIend

I2Cadr:
in temp,USIDR
cpi temp,0b11111110
breq I2Calladr
cpi temp,0b00000100
brne I2Cbadadr

; cbi portb,1

ldi xl,low(0x80);Set pointer on the first received byte
ldi xh,high(0x80);адрес буфера дл япримеа

rcall SetACK

ldi temp,2
mov USIstate,temp
clr USIcnt
rjmp USIend

I2Cack:
rcall ClearACK

inc USIcnt
mov temp,USIcnt
cpi temp,6; сколько приянть байтов
breq I2Call

ldi temp,3
mov USIstate,temp
rjmp USIend


I2Cbyte:

in temp,USIDR
st X+,temp; прияняли очередной байт
rcall SetACK

ldi temp,2
mov USIstate,temp
rjmp USIend

I2Calladr:
; пришел шыроковещательный пакет

rjmp I2Cbadadr
I2Call:
; sbi portb,1
; прияны все данные!

I2Cbadadr:
rcall StopDetected

USIend:
pop temp
reti
;--------
SetACK:
sbi DDRB,0
sbi PortB,2
sbi DDRB,2

in temp,USISR
cbr temp,0b00000001;(Set counter to 0xE)
sbr temp,0b11101110;(Enable new interrupts. Releasing SCL)
out USISR,temp
ret


StopDetected:

in temp,USICR;(Disable USI Counter overflow interrupt)
cbr temp,0b01000000
out USICR,temp

ClearACK:

cbi DDRB,0
cbi PortB,2
cbi DDRB,2

in temp,USISR
cbr temp,0b00001111;(Clear counter)
sbr temp,0b11100000;(Enable new interrupts. Releasing SCL)
out USISR,temp
ret
;------------------
reset:

ldi temp,high(RAMEND);High byte only required if
out SPH,temp ;RAM is bigger than 256 Bytes
ldi temp,low(RAMEND)
out SPL,temp

ldi temp,0b00000010
out PORTB,temp
ldi temp,0b00000010
out DDRB,temp

ldi temp,(1<<USISIE)+(1<<USIWM1)+(1<<USIWM0)+(1<<USICS1)
out USICR,temp
ldi temp,0xf0
out USISR,temp

ldi Zh,HIGH(reset)
ldi Zl,LOW(reset)

ldi temp, 0b00100000
out MCUCR,temp

sei

clr USIstate


loop:
sleep
rjmp loop


Сообщение отредактировал IgorKossak - Apr 1 2010, 16:38
Причина редактирования: Неправильное оформление длинного текста


--------------------
Go to the top of the page
 
+Quote Post
stells
сообщение Apr 1 2010, 11:20
Сообщение #3


внештатный сотрудник
******

Группа: Участник
Сообщений: 2 458
Регистрация: 10-05-08
Из: МО, Медвежьи озера
Пользователь №: 37 401



Цитата(Nuts_ @ Apr 1 2010, 15:15) *
код для принимающего уcтройcтва

спасибо! попробовать правда в ближайшее время не получится, но как только результат будет, отпишусь. может свой вариант предложу
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- alux   USI типа I2C на Tiny45   Feb 22 2010, 13:22
- - AHTOXA   Помнится, мы нашли какой-то глюк в AVR312. Но глюк...   Feb 22 2010, 16:13
|- - alux   Вывод SCL у Тини должен быть выходом? Тогда осталь...   Feb 22 2010, 16:31
|- - AHTOXA   Да, выходом. Но не нулём: Кодvoid i2c_init(u08...   Feb 22 2010, 16:49
|- - SysRq   Цитата(alux @ Feb 22 2010, 19:31) Вывод S...   Feb 22 2010, 16:57
|- - alux   Притянуты внешними 10кОм к +5В. Должен по специфик...   Feb 22 2010, 19:06
|- - AHTOXA   ЦитатаНе получается прочитать байт от Тини, хоть ...   Feb 22 2010, 19:39
|- - alux   Ни привета, ни ответа. В слейве даже по условию Ко...   Feb 22 2010, 19:52
|- - AHTOXA   Ну тогда странно... Я сейчас и проверить-то не мо...   Feb 22 2010, 20:37
|- - alux   Нашел одну ошибку: адрес слейв устройства в тини н...   Feb 23 2010, 08:41
|- - SysRq   Цитата(alux @ Feb 23 2010, 11:41) Нашел о...   Feb 23 2010, 15:22
|- - alux   Цитата(SysRq @ Feb 23 2010, 19:22) Разбер...   Feb 24 2010, 09:28
- - alux   Попробовал использовать USI (Tiny45) в режиме SPI ...   Feb 25 2010, 13:53
- - SysRq   Цитата(alux @ Feb 24 2010, 12:28) И где я...   Feb 26 2010, 22:57
- - alux   SPIF = SPIF; в данном случае ни при чем. Проблема...   Feb 27 2010, 14:39
- - Александр Куличок   ЦитатаА вообще, логично было бы назвать вывод MISO...   Feb 28 2010, 10:00
|- - alux   Вот именно, с точностью до наоборот. Мне, например...   Feb 28 2010, 14:47
- - alux   С USI(SPI) работает, но нужно организовывать прото...   Mar 1 2010, 06:34
- - alux   Чтобы отправить от Slave(Tiny45) длинный байт Код ...   Mar 2 2010, 09:23
- - Nuts_   Если надо то есть реальный проверенный код на ASM ...   Mar 30 2010, 11:07
|- - stells   Цитата(Nuts_ @ Mar 30 2010, 15:07) Если н...   Mar 30 2010, 13:48
- - Cursedsmite   Скажите, а примера реализации похожей задачи на ас...   Jan 24 2013, 11:31


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 16:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01388 секунд с 7
ELECTRONIX ©2004-2016