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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> ATmega2561: соединить с ЦАПом ТС1230 по I2С, прописывание внешнего устройства по I2C
Slavast
сообщение Nov 12 2010, 08:29
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



Пытаюсь уже 3-й день в AVRStudio соединить AtMega 2561 с ЦАП ТС1320 по I2c! Но на выходе так ничего и не обнаруживаю.
Может что-то не так задаю(
Помогите советом!
Спасибо!

Кусок осн программы привожу ниже:

ldi r18, 0xD0
sts XMCRA, r18 ; Enable External Memory

ldi r18, 0x80
sts XMCRB, r18 ; Whole PortC for XRAM

ldi r16, 0x91
sts TWAR,r16 ; Slave address to TWAR

ldi START, 0xF8

;-----------------I2с sending -------------------------------------------

ldi r16,(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
sts TWCR, r16 ; Send s-t-a-r-t condition

wait1:
lds r16,TWCR
sbrs r16,TWINT
rjmp wait1 ; Wait for START bit to be transmitted

ldi r16, 0x90
sts TWDR,r16 ; Load Address in TWDR
ldi r16, (1<<TWINT)|(1<<TWEN)
sts TWCR, r16 ; Clear TWINT bit

wait2:
lds r16,TWCR
sbrs r16,TWINT
rjmp wait2 ; Wait for ADRESS to be transmitted

ldi r16, 0x00
sts TWDR,r16 ; Load 00h - command for TC1320 to send next byte as Data
ldi r16, (1<<TWINT)|(1<<TWEN)
sts TWCR, r16 ; Clear TWINT bit

wait5:
lds r16,TWCR
sbrs r16,TWINT
rjmp wait5 ; Wait for ADRESS to be transmitted

ldi r16, 0x3B
sts TWDR,r16 ; Load DATA in TWDR
ldi r16, (1<<TWINT)|(1<<TWEN)
sts TWCR, r16 ; Clear TWINT bit in TWCR to start transmittion of DATA


wait3:
lds r16,TWCR
sbrs r16,TWINT
rjmp wait3 ; Wait for DATA to be transmitted

ldi r16,(1<<TWINT)|(1<<TWEN)|(1<<TWSTO)
sts TWCR, r16 ; Send s-t-o-p condition

nop
Go to the top of the page
 
+Quote Post
kovigor
сообщение Nov 12 2010, 08:52
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Slavast @ Nov 12 2010, 12:29) *
Пытаюсь уже 3-й день в AVRStudio соединить AtMega 2561 с ЦАП ТС1320 по I2c! Но на выходе так ничего и не обнаруживаю. ...


Нескромный вопрос. Как электронщик электронщику. Вы хоть осциллографом на шину-то вставали ? Посылки пробовали захватить ? Что он показывает ?
А так - первым делом проверьте правильность адреса, по которому вы обращаетесь (помните, что младший разряд адреса задает режим доступа R/W), а также наличие PULLUPs на линиях шины ...
Go to the top of the page
 
+Quote Post
Slavast
сообщение Nov 12 2010, 10:04
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



Цитата(kovigor @ Nov 12 2010, 12:52) *
Нескромный вопрос. Как электронщик электронщику. Вы хоть осциллографом на шину-то вставали ? Посылки пробовали захватить ? Что он показывает ?
А так - первым делом проверьте правильность адреса, по которому вы обращаетесь (помните, что младший разряд адреса задает режим доступа R/W), а также наличие PULLUPs на линиях шины ...



Мне собственно нужен ЦАП вместе с инвертирующим Операц Усилителем для получения отрицательного аналог напряжения для управления контрастностью на LCD.

Осциллографом вставал на шину, посылки захватил: и адреса и данные. Видно четко.
Адрес устройства ТС 1320 1001 000 прописал, младший разряд адреса задает режим доступа R/W - т.е. 0, получилось 10010000 - (0х90h)
Pull up подвешены.
Но уровень на выходе не изменяется..(
Go to the top of the page
 
+Quote Post
kovigor
сообщение Nov 12 2010, 10:11
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Slavast @ Nov 12 2010, 14:04) *
Но уровень на выходе не изменяется..(


ЦАП подтверждает обращение к нему (ACK вводит) ?
Go to the top of the page
 
+Quote Post
Slavast
сообщение Nov 12 2010, 10:26
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



Цитата(kovigor @ Nov 12 2010, 14:11) *
ЦАП подтверждает обращение к нему (ACK вводит) ?


А вот это я не знаю как проверять.
Даташит Атмеги говорит после моего цикла проверки отправки адреса

wait2:
..
rjmp wait2 ; Wait for TWINT flag set. This indicates that the SLA+W has been transmitted, and ACK/NACK has been received

проверять ACK следущим:



lds r16, TWSR
andi r16,0xF8
cpi r16, MT_SLA_ACK
brne ERROR ; Check value of TWI Status Register. Mask Prescaler bits. If status different from MT_SLA_ACK go to the ERROR




Во первых не понял что же такое MT_SLA_ACK?
Во вторых подумал это лишнее,т.к. мой цикл wait2 и так оповещает меня установкой TWINT флага о том, что ACK передан.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Nov 12 2010, 10:34
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Slavast @ Nov 12 2010, 14:26) *
А вот это я не знаю как проверять. ...


А что же вы тогда осциллографом-то смотрели ???????
ЦАП должен подтвердить обращение к нему, опустив в ноль линию данных шины I2C в ответ на 9-й тактовый бит, вводимый вашей АТМЕГой. Если этого нет, говорить вообще не о чем. Поищите в даташите на ЦАП (или на любую ИС памяти вроде 24LC16) слово ACK или ACKNOWLEDGE, и разберитесь, что же все-таки должно быть на шине ...

P.S. Вот, я сегодня добрый:

"
3.5 Acknowledge
Each receiving device, when addressed, is obliged to
generate an acknowledge after the reception of each
byte. The master device must generate an extra clock
pulse which is associated with this acknowledge bit.
The device that acknowledges, has to pull down the
SDA line during the acknowledge clock pulse in such a
way that the SDA line is stable LOW during the HIGH
period of the acknowledge related clock pulse. Of
course, setup and hold times must be taken into
account. ...
"
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 12 2010, 10:38
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Не увидел вот это - есть?
;**************************************************
;* ;;/Init Bit Rate fot TWI;;* *
;**************************************************
ldi temp,SYSCLK/(2*SCL_Freq)-8 ;TWI Bit Rate Register - TWBR
sts TWBR,temp ;+ Частота TWI=384 Кгц

Да и протокол общения с DAC Вы не выполнили до конца , он не знает что ему делать и к тому же похоже вообще спит.
Разберитесь с командами , которые необходимо послать , что бы он заработал.

И вот это всё сведите в одну подпрограмму

XXXX:
lds r16,TWCR
sbrs r16,TWINT
rjmp XXXXX


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Slavast
сообщение Nov 12 2010, 10:58
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



Цитата(kovigor @ Nov 12 2010, 14:34) *
А что же вы тогда осциллографом-то смотрели ???????
ЦАП должен подтвердить обращение к нему, опустив в ноль линию данных шины I2C в ответ на 9-й тактовый бит, вводимый вашей АТМЕГой. Е


Осциллографом вижу четко посылку байта адреса, байта данных.
Значит ACK приходит по умолчанию. Все в том же цикле wait2.
Вопрос тогда в том - как мне это в программе задать, чтоб я в каком то порту или регистре увидел значение бита АСК? Нужно ли мне перенастраивать TWI на прием этого АСК, а потом снова на передачу?

Цитата(ILYAUL @ Nov 12 2010, 14:38) *
Не увидел вот это - есть?
;**************************************************
;* ;;/Init Bit Rate fot TWI;;* *
;**************************************************
ldi temp,SYSCLK/(2*SCL_Freq)-8 ;TWI Bit Rate Register - TWBR
sts TWBR,temp ;+ Частота TWI=384 Кгц


Есть, только TWI получается 490 кГц:
SCL = CPU(16 Мгц)/ (16+2*TWBR(0xFFh)*4в степени TWPS(задал 3))

Хотя пишут что больше 400кГц TWI не работает(..



Может через прерывания нужно осуществлять мою программу, где будет проводится проверка на окончание передачи данных?
Go to the top of the page
 
+Quote Post
kovigor
сообщение Nov 12 2010, 11:02
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Slavast @ Nov 12 2010, 14:42) *
Осциллографом вижу четко посылку байта адреса, байта данных.
Значит ACK приходит по умолчанию. Все в том же цикле wait2.


А кто его знает, что там приходит ? Посмотреть-то нетрудно. Зачем все эти исследования, если можно просто взять осциллограф и своими глазами все увидеть ?
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 12 2010, 11:08
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Slavast @ Nov 12 2010, 13:58) *
SCL = CPU(16 Мгц)/ (16+2*TWBR(0xFFh)*4в степени TWPS(задал 3))

Хотя пишут что больше 400кГц TWI не работает(..



Может через прерывания нужно осуществлять мою программу, где будет проводится проверка на окончание передачи данных?

А он и не работает , у него максимум 100 кгц. DATA SHEET читали?

ldi temp,SYSCLK/(2*SCL_Freq)-8 ;TWI Bit Rate Register - TWBR
sts TWBR,temp ;+ Частота TWI=384 Кгц

где в Вашем случае, введите эти две строчки в код , он сам посчитает

.EQU SYSCLK = 16000000 ;+ Системная частота
.EQU SCL_Freq = 100000 ;+ Частота TWI

И разберитесь с тем о чём написал в предыдущем посте т.е снова прочтите DS, а уж потом осциллограф


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Slavast
сообщение Nov 12 2010, 11:48
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



Цитата(ILYAUL @ Nov 12 2010, 15:08) *
А он и не работает , у него максимум 100 кгц. DATA SHEET читали?

ldi temp,SYSCLK/(2*SCL_Freq)-8 ;TWI Bit Rate Register - TWBR
sts TWBR,temp ;+ Частота TWI=384 Кгц

где в Вашем случае, введите эти две строчки в код , он сам посчитает

.EQU SYSCLK = 16000000 ;+ Системная частота
.EQU SCL_Freq = 100000 ;+ Частота TWI

И разберитесь с тем о чём написал в предыдущем посте т.е снова прочтите DS, а уж потом осциллограф



DS еще раз прочту. Может он в режиме Sleep по умолчанию?... И надо задавать отдельно еще в регистр управления DAC на пробуждение.
А вот по поводу частоты не совсем понятно.
В TWBR загоняю 11111111
A в биты TWPS1:TWPS0 регистра TWSR загоняю 1:1 - т.е. Prescaler bits равен 64. Вот и получаю свое число.
Формула из Даташита:

Формула в даташите ATMega:

Цитата(Slavast @ Nov 12 2010, 15:22) *
Формула в даташите ATMega:



С частотой разобрался! Получал то не 490кГц, а 490 Гц!!!! В голове явно опилки!

В TWPS 0:0. В TWBR (0x12h)
И ScL четко получается 100kHz.

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 12 2010, 12:06
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Slavast @ Nov 12 2010, 14:48) *
Формула в даташите ATMega:


Вам надо посчитать не частоту с которой Вы будете работать , Вы ее и так знаете , чего ее считать , а значение регистра TWBR , которое надо в него загнать , что бы получить Вашу частоту TWI при Вашей тактовой частоте.
Т.е приведённую в DS Atmel формулу надо преобразовать , для расчёта TWBR , вот ее то я Вам и дал - осталось только подставить Ваши значения - тоже написал, и всё вставить в код программы , где нибудь в инит
После, этого ради любопытсва , можете посмотреть значение TWBR- должно быть 0x48
Я насчитал очень поверхностно ( времени пока нет) , приблизительно 4 команды , которые необходимо загнать в DAC , что бы он начал работать.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Slavast
сообщение Nov 12 2010, 12:18
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



Цитата(ILYAUL @ Nov 12 2010, 16:06) *
Вам надо посчитать не частоту с которой Вы будете работать , Вы ее и так знаете , чего ее считать , а значение регистра TWBR , которое надо в него загнать , что бы получить Вашу частоту TWI при Вашей тактовой частоте.
Т.е приведённую в DS Atmel формулу надо преобразовать , для расчёта TWBR , вот ее то я Вам и дал - осталось только подставить Ваши значения - тоже написал, и всё вставить в код программы , где нибудь в инит
После, этого ради любопытсва , можете посмотреть значение TWBR- должно быть 0x48
Я насчитал очень поверхностно ( времени пока нет) , приблизительно 4 команды , которые необходимо загнать в DAC , что бы он начал работать.



Совершенно верно!
В конечном перерасчете у меня тоже получилось 0х48h!
Какие же команды надо загнать в DAC для его работы?
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 12 2010, 12:46
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Slavast @ Nov 12 2010, 15:18) *
Какие же команды надо загнать в DAC для его работы?

Вообще-то название микросхем принято писать англицкими буковками, на будущее


1. Command Set -01
2 Включить DAC
3. Command Set 00
4. Данные для Data register
приблизительно так



--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Slavast
сообщение Nov 12 2010, 13:16
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



Цитата(ILYAUL @ Nov 12 2010, 16:46) *
1. Command Set -01
2 Включить DAC
3. Command Set 00
4. Данные для Data register
приблизительно так


Спасибо огромное!)
Сейчас будем пробовать прописывать!

И еще вопрос - нужно ли ставить Микроконтроллер в режим Receiver, когда DAC свой выставляет девятый подтверждающий Acknowledgment бит ?

Цитата(Slavast @ Nov 12 2010, 17:06) *
И еще вопрос - нужно ли ставить Микроконтроллер в режим Receiver, когда DAC свой выставляет девятый подтверждающий Acknowledgment бит ?


Или просто проверяя регистр статуса TWSR проверять пришел ли этот бит (По идее вроде как только ACK бит приходит, статус меняется в TWSR на значение в таблице Даташита)?
Go to the top of the page
 
+Quote Post

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

 


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


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