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

 
 
 
Reply to this topicStart new topic
> TWI + 24CXX, Не пойму как прочитать
pavel-pervomaysk
сообщение Nov 25 2008, 17:20
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



Всем привет ! Вопрос в названии темы , запись происходит нормально
ниже код , а вот в послежовательности чтения вкурить не могу 01.gif , пробовал подавать старт / адрес чипа / адрес ячейки / а вот в TWDR нужного значения после чтения получить не смог , пните в путь истенный , буду рад .

WRITE_EE: // REC_BYTEI2C
ldi tmp, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
out TWCR,tmp // start
wait_st: // Ожидание старта
in tmp,TWCR //
sbrs tmp,TWINT //
jmp wait_st //

ldi tmp,0xAE // ADRESS CHIP
out TWDR,tmp //
ldi tmp, (1<<TWINT)|(1<<TWEN)
out TWCR,tmp //
wait_chip: //
in tmp,TWCR //
sbrs tmp,TWINT //
jmp wait_chip //

mov tmp,tmp1 // Скопировать данные адреса из tmp1
out TWDR,tmp // DATA ADRESS BYTE
ldi tmp, (1<<TWINT)|(1<<TWEN)
out TWCR,tmp //
wait_ad: //
in tmp,TWCR //
sbrs tmp,TWINT //
jmp wait_ad //

mov tmp,tmp2 // Скопировать данные из регистра tmp2
out TWDR,tmp // DATA BYTE
ldi tmp, (1<<TWINT)|(1<<TWEN)
out TWCR,tmp //
wait_data: //
in tmp,TWCR //
sbrs tmp,TWINT //
jmp wait_data //
ldi r16, (1<<TWINT)|(1<<TWEN)|(1<<TWSTO)
out TWCR,tmp // STOP I2C
ret //
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 26 2008, 13:42
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Нужна следующая последовательность:
старт\адрес чипа + W\адрес ячейки\старт\адрес чипа + R\читаем байты...\стоп.
В документации читайте внимательно.

И пользуйтесь форматированием при вставке текста программы, читать не очень то приятно.
Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Dec 22 2008, 17:45
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



Цитата(IgorKossak @ Nov 26 2008, 15:42) *
Нужна следующая последовательность:
старт\адрес чипа + W\адрес ячейки\старт\адрес чипа + R\читаем байты...\стоп.
В документации читайте внимательно.

И пользуйтесь форматированием при вставке текста программы, читать не очень то приятно.


Спасибо , все получилось , конечно не без сторонней помощи .

CODE

long_code_here = ';

READ_EE: // READ_BYTEI2C
clr tmp // tmp -> 0
ldi tmp, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
out TWCR,tmp // start
wait_rst: // WAIT READ START TWI
in tmp,TWCR //
sbrs tmp,TWINT //
jmp wait_rst // ожидание сброса TWINT
in tmp,TWSR // читаем статус регистр
andi tmp,0xf8 // убираем лишнее
cpi tmp,0x08 // если старт прошел успешно , если нет то стоп
breq adr_chip // идем дальше
jmp stop_i2c // идем на стоп

adr_chip: // SEND ADRESS CHIP 0xAE
ldi tmp,0xAE //
out TWDR,tmp //
ldi tmp, (1<<TWINT)|(1<<TWEN)
out TWCR,tmp //
wait_ad1: // WAIT SEND ADRESS CHIP
in tmp,TWCR //
sbrs tmp,TWINT // ожидание сброса TWINT
jmp wait_ad1 // ожидание сброса TWINT
in tmp,TWSR // читаем статус регистр
andi tmp,0xf8 // убираем лишнее
cpi tmp,0x18 // если SLA+W прошло успешно , если нет то стоп
breq ad_read // идем дальше
jmp stop_i2c // идем на стоп

ad_read: // Адрес ячейки которую нужно считать из памяти
ldi tmp,0x00 // передаем адрес ячейки которую нужно считать из памяти
out TWDR,tmp //
ldi tmp, (1<<TWINT)|(1<<TWEN)
out TWCR,tmp //
wait_ad_read: //
in tmp,TWCR //
sbrs tmp,TWINT //
jmp wait_ad_read //
in tmp,TWSR // читаем статус регистр
andi tmp,0xf8 // убираем лишнее
cpi tmp,0x28 // если SLA+W прошло успешно , если нет то стоп
breq restart // идем дальше
jmp stop_i2c // идем на стоп


restart: // повстарт
ldi tmp, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
out TWCR,tmp // start
wait_restart: //
in tmp,TWCR //
sbrs tmp,TWINT //
jmp wait_restart //
in tmp,TWSR // читаем статус регистр
andi tmp,0xf8 // убираем лишнее
cpi tmp,0x10 // если повстарт прошел успешно , если нет то стоп
breq ad_read2 // идем дальше
jmp stop_i2c // идем на стоп


ad_read2: //
ldi tmp,0xAF //
out TWDR,tmp // Посылаем посылку SLA+R
ldi tmp, (1<<TWINT)|(1<<TWEN)
out TWCR,tmp //

wait_ad_read2:
in tmp,TWCR //
sbrs tmp,TWINT //
jmp wait_ad_read2 //
in tmp,TWSR // читаем статус регистр
andi tmp,0xf8 // убираем лишнее
cpi tmp,0x40 // если SLA+R прошло успешно , если нет то стоп
breq read_b // идем дальше
jmp stop_i2c // идем на стоп

read_b: //
ldi tmp, (1<<TWINT)|(1<<TWEN)
out TWCR,tmp //
wait_readb:
in tmp,TWCR //
sbrs tmp,TWINT //
jmp wait_readb //
in tmp,TWSR // читаем статус регистр
andi tmp,0xf8 // убираем лишнее
cpi tmp,0x58 // если старт прошел успешно , если нет то стоп
breq read_byte // идем дальше
jmp stop_i2c // идем на стоп

read_byte: //
in ZL,TWDR //
stop_i2c: // STOP I2C
ldi r16, (1<<TWINT)|(1<<TWEN)|(1<<TWSTO)
out TWCR,tmp //
ret //


Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 11:27
Рейтинг@Mail.ru


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