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

 
 
> 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
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 31)
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
ILYAUL
сообщение Nov 12 2010, 13:59
Сообщение #16


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

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



Цитата(Slavast @ Nov 12 2010, 16:16) *
Спасибо огромное!)
Сейчас будем пробовать прописывать!

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



Или просто проверяя регистр статуса TWSR проверять пришел ли этот бит (По идее вроде как только ACK бит приходит, статус меняется в TWSR на значение в таблице Даташита)?

Вы запустите DAC , а уж потом разберёмся , что и как проверять , Вам пока TWINT - хватит


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

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


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(Slavast @ Nov 12 2010, 13:04) *
Мне собственно нужен ЦАП вместе с инвертирующим Операц Усилителем для получения отрицательного аналог напряжения для управления контрастностью на LCD.
я как бы дико извиняюсь, что не совсем в тему лезу... но не шибко ли круто - ЦАПом да еще с ОУ впридачу контрастность регулировать? может, я чего-то не понимаю, но регулируемое отрицательное напряжение в пределах 0...-5В легко получается при помощи ШИМ и конденсатора с парой диодов...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
Slavast
сообщение Nov 15 2010, 07:39
Сообщение #18


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

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



Цитата(ARV @ Nov 12 2010, 19:03) *
регулируемое отрицательное напряжение в пределах 0...-5В легко получается при помощи ШИМ и конденсатора с парой диодов...


Иидея хорошая. Но схема уже готова и я не могу ее изменить.

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


Получается совсем что-то непонятное. Соблюдая правила пакета TC1320 и вышеуказанный совет:

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

т.е. отсылая 2 пакета, в первом из которых мы разрешаем Normal Mode, a во втором собственно отсылая данные - на выходе ничего нет.

А если использовать один пакет в котором мы сразу заносим Command Set 00 и данные для Data register (т.е. подразумевая что изначально TC1320 НЕ в спящем режиме) на выходе имеем немного пониженный уровень сигнала с малыми синусоидальными колебаниями (может их вносит Операц усилит??).

В каком режиме TC1320 изначально - в даташите не указывается.

help!?!?!
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 15 2010, 12:30
Сообщение #19


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

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



Цитата(Slavast @ Nov 15 2010, 10:39) *
Иидея хорошая. Но схема уже готова и я не могу ее изменить.



В каком режиме TC1320 изначально - в даташите не указывается.

help!?!?!

А ,если прочитать конфиг и посмотреть в каком он состоянии изначально. Хотя это и не надо
И Ваш код в архивном виде ,плиз

А этот проверьте.


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

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


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

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



QUOTE (ILYAUL @ Nov 15 2010, 16:30) *
И Ваш код в архивном виде ,плиз


Пардон, а что это за код?

TC1320+Atmega2561: Наблюдается очень интересная но совсем непонятная вещь, из-за которой уже 5-й день бьюсь головой о стенку. Первый байт - старт бит отсылается нормально, видно на осциллографе; второй байт - адрес отсылается тоже нормально( но если туда прописать не 0x90, т.е. адрес TC1320 - ТС1320 поднимает SDA в высокий уровень и не воспринимает вообще ничего!!!!!!); а вот в начале пересылки 3 байта данных после приема от ТС1320 ACK идет маленький скачек в пол высокого уровня и что бы я ни записывал, на осциллографе получается сООвсем не та цифра которую я заношу.

Что это может быть за скачок и почему он препятствует мне продолжать дальше?
спасибо.
CODE
.include "m2561def.inc"
.device ATMEGA2561


;--çàäàåì èìåíà ðåãèñòðàì------------------
.def temp = r22 ;ðàáî÷àÿ ïåðåìåííàÿ


; ---------------Inizialization ------

ldi r16,high(RAMEND) ; Íà÷àëî
out SPH,r16 ; îñíîâíîé ïðîãðàììû
ldi r16,low(RAMEND)
out SPL,r16




;------ Port Init--------

ldi r17, 0x00
out PINE, r17 ; äåàêòèâèðóåì Pull-up ðåçèñòîðû

ldi r17, 0x08
out DDRE, r17 ; ïîðò íà âûâîä äëÿ àêòèâàöèè SHDN íà ADM222

ldi r17, 0x00
out PINB, r17 ; äåàêòèâèðóåì Pull-up ðåçèñòîðû

ldi r17, 0x60
out DDRB, r17 ; ïîðò íà âûâîä äëÿ ñâåòîäèîäîâ

ldi r17, 0x00
out PINA, r17 ; äåàêòèâèðóåì Pull-up ðåçèñòîðû

ldi r17, 0xFF
out DDRA, r17 ; ïîðò íà âûâîä äëÿ ñâåòîäèîäîâ

ldi r17, 0xFF
out PINC, r17 ; äåàêòèâèðóåì Pull-up ðåçèñòîðû

ldi r17, 0xFF
out DDRC, r17 ; ïîðò íà âûâîä äëÿ ñâåòîäèîäîâ


ldi r17, 0x00 ; âñå îñòàëüíûå íà ââîä
out DDRD, r17
out DDRF, r17
out DDRG, r17


ldi r26,0x40
ldi r27,0x20


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 r18, 0xC6
sts TWBR, r18 ; Bit Rate 0x48 - 100khz , 0xC6 - 10kHz

ldi r18, 0x00
sts TWSR, r18 ; Prescaler bits



;-------------1 Start packet-------------------------------------------------------

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


lds r16, TWSR
andi r16,0xF8
cpi r16, 0x08
brne wait1 ; Check TWSR if START was sent



;------------2 send Address-----------------


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
break ; Wait for ADRESS to be transmitted



lds r16, TWSR
andi r16,0xF8
cpi r16, 0x18
brne wait2 ; Check TWSR if ADRESS was sent


out PORTB, r27


;----------------3 send Command--------------------------------

lds r16, 0x01
sts TWDR,r16 ; Load 00 Command
ldi r16, (1<<TWINT)|(1<<TWEN)
sts TWCR, r16 ; Clear TWINT bit


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


lds r16, TWSR
andi r16,0xF8
cpi r16, 0x28
brne wait77 ; Check TWSR if Command was sent


;----------------4 send Data---------------------------------------
jmp error


lds r16, 0x00
sts TWDR,r16 ; Load 1F to DAC as Data
ldi r16, (1<<TWINT)|(1<<TWEN)
sts TWCR, r16 ; Clear TWINT bit

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

lds r16, TWSR
andi r16,0xF8
cpi r16, 0x28
brne wait88 ; Check TWSR if ADRESS was sent

;out PORTB, r26



error:
out PORTB, r27

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


Сообщение отредактировал IgorKossak - Nov 16 2010, 17:02
Причина редактирования: Когда научитесь тэгами пользоваться?
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 16 2010, 13:18
Сообщение #21


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

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



Цитата(Slavast @ Nov 16 2010, 16:01) *
Пардон, а что это за код?


Я Вам написал

Цитата(Slavast @ Nov 16 2010, 16:01) *
;----------------4 send Data---------------------------------------
jmp error


lds r16, 0x00
sts TWDR,r16 ; Load 1F to DAC as Data
ldi r16, (1<<TWINT)|(1<<TWEN)
sts TWCR, r16 ; Clear TWINT bit

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

lds r16, TWSR
andi r16,0xF8
cpi r16, 0x28
brne wait88 ; Check TWSR if ADRESS was sent

;out PORTB, r26



error:
out PORTB, r27

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



НЕ правильно - не по протоколу
И выкладывайте в архивах коды - так проще смотреть


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

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


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

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



Цитата(ILYAUL @ Nov 16 2010, 17:18) *
НЕ правильно - не по протоколу


Почему не по протоколу?
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 16 2010, 13:37
Сообщение #23


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

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



Цитата(Slavast @ Nov 16 2010, 16:21) *
Почему не по протоколу?

Потому, что согласно DS любое обращение к регистрам начинается со START-SLAVEADRESS-CommandBYTE-DATA


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

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


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

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



Еще не ас в библиотеках:
а что означает
.include "macros_v1.72.asm"
и
.include "1Init_MCU.asm"

Цитата(ILYAUL @ Nov 16 2010, 17:37) *
Потому, что согласно DS любое обращение к регистрам начинается со START-SLAVEADRESS-CommandBYTE-DATA


Так у меня ж тоже в принципе те же 4 операции - START-SLAVEADRESS-CommandBYTE-DATA?


P.S. Спасибо за код. Разбираю.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 16 2010, 13:50
Сообщение #25


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

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



Цитата(Slavast @ Nov 16 2010, 16:45) *
Еще не ас в библиотеках:
а что означает
.include "macros_v1.72.asm"
и
.include "1Init_MCU.asm"



Так у меня ж тоже в принципе те же 4 операции - START-SLAVEADRESS-CommandBYTE-DATA?


P.S. Спасибо за код. Разбираю.


1 Библиотека макросов
2. Файл для инит любого процессора - вершину стека определяет сам-и чистит регистры и память SRAM, что бы в сторону не вильнуло


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

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


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

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



Цитата(ILYAUL @ Nov 16 2010, 17:50) *
1 Библиотека макросов

А где можно найти состав этой библиотеки макросов?
В инете macros_v1.72.asm нет подробного описания. Интересно ведь, все же настолько многие команды облегчают задачу.

P.S. Пока еще разбираю.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 16 2010, 13:57
Сообщение #27


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

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



Цитата(Slavast @ Nov 16 2010, 16:53) *
А где можно найти состав этой библиотеки макросов?
В инете macros_v1.72.asm нет подробного описания. Интересно ведь, все же настолько многие команды облегчают задачу.

P.S. Пока еще разбираю.


У Вас в архиве полный проект для STUDIO , там же и находятся все файлы в том числе и о которых идёт речь. Достаточно просто запусть *.aps и проверить


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

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


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

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



ААААААААААААААААААААА!!!!!!!!!!!!!!!
РАБОТАЕТ!!!!!!!!!!!
На выходе осциллографа вижу бегущие плавно изменяющиеся уровни отрицательного напряжения (как я понял потому как у нас массив этих значений!!!)
Спасибо огромное, что столько времени потратили с моей задачей!! Для меня же это неделя упорного но безрезультатного труда!

Но почему же мой алгоритм не работает? Ведь по идее - все те же операции START-SLAVEADRESS-CommandBYTE-DATA??
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 16 2010, 16:44
Сообщение #29


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

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



Цитата(Slavast @ Nov 16 2010, 17:49) *
Но почему же мой алгоритм не работает? Ведь по идее - все те же операции START-SLAVEADRESS-CommandBYTE-DATA??

Потому, что согласно DS любое обращение к регистрам начинается со START-SLAVEADRESS-CommandBYTE-DATA- вчитайтесь, что у Вас есть, только правильное обращение к config регистру, а чего нет , нет ни start и slave ни command при обращении к data регистру....

Цитата
плавно изменяющиеся уровни отрицательного напряжения (как я понял потому как у нас массив этих значений!!!)
Да , просто "пила", загнал как тест

Цитата
На выходе осциллографа
Скорее всё таки на экране biggrin.gif


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

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


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

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



Цитата(ILYAUL @ Nov 16 2010, 20:44) *
Потому, что согласно DS любое обращение к регистрам начинается со START-SLAVEADRESS-CommandBYTE-DATA- вчитайтесь, что у Вас есть, только правильное обращение к config регистру, а чего нет , нет ни start и slave ни command при обращении к data регистру....


Теперь Понял!

У меня такой вопрос. Я на UART хочу вывести слово "Привет Комсомолу" на Терминал компьютера (Использую программу Win Term). Но выводит всё, кроме первых 2-х букв. Вместо них какие-то квадраты. В чем загвоздка? В цикле вывода массива? И как правильно проверять конец строки (Я проверяю по точке)?



файл:

Прикрепленные файлы
Прикрепленный файл  UART5.RAR ( 8.03 килобайт ) Кол-во скачиваний: 19
 
Go to the top of the page
 
+Quote Post
Slavast
сообщение Nov 18 2010, 11:24
Сообщение #31


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

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



Порядок!!!

Сообщение отредактировал Slavast - Nov 18 2010, 11:51
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 18 2010, 12:16
Сообщение #32


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

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



Цитата(Slavast @ Nov 18 2010, 14:24) *
Порядок!!!

laughing.gif


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

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post

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

 


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


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