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

 
 
19 страниц V  « < 2 3 4 5 6 > »   
Reply to this topicStart new topic
> Проблема с TWI
beer_warrior
сообщение Nov 9 2005, 16:32
Сообщение #46


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Неа, я имел в виду прерывание по TWI т.е. гарантированую хардварную проверку срабатывания TWINT.
Но в любом случае это показало, что девайс работоспособен
и проблема вероятнее всего состоит в неправильном отлове TWINT

Прерывания не зря придумали.

Вот пример проверенный. switсh это проверка условия, case это то, что делаеться по условию.
Обрабатываються все возможные ситуации. Изучайте логику перекладывайте на асм.
Прикрепленные файлы
Прикрепленный файл  twi.zip ( 2 килобайт ) Кол-во скачиваний: 100
 


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
James D.
сообщение Nov 9 2005, 17:03
Сообщение #47


Местный
***

Группа: Участник
Сообщений: 315
Регистрация: 10-10-05
Пользователь №: 9 466



Я так и подумал, что надо задействовать прерывание TWI, но из вашего сообщения толком не понял какое прерывание вы имели в виду, поэтому решил попробовать сначала так. И заработало. Попробую переделать основную прогу, если не получится, тогда буду мудрить с прерываниями TWI.
Go to the top of the page
 
+Quote Post
_artem_
сообщение Nov 10 2005, 03:14
Сообщение #48


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



James , voobse to etot Atmel nado povesit ).
Vot prostudiroval ego datasheet na atmega16 i on govorit chto :
To initiate the Slave Transmitter mode, TWAR and TWCR must be initialized as follows:

TWAR (kak obychno u tebya v programme)
TWCR TWINT TWEA TWSTA TWSTO TWWC TWEN – TWIE
Value 0 1 0 0 0 1 0 X

To est v samom nachale TWINT obnulyaetsya. Esli isxodit iz logiki veshey , to srazu posle zapisi v TWCR - v TWINT dolzna zapisatsya edinica po apparatnoy initializacii I2C slave mode. Et ya predpolagayu . Inache TWINT ne budet funkcionirovat kak dolzen .
Xoroso by proverit eto . Esli eto deystvitelno imeet mesto to tebe nezachem aktivizirovat preryvanie - dostatochno sledovat etoy procedure . Dlya spravki posmotri na stranicu 189 mega16.pdf (datasheet).

Krome togo u Atmela est application note dlya TWI I2C slave mode. Tam code na C pravda i rabota s preryvaniyami no dumayu chto vzglyanut ne pomesaet.


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
James D.
сообщение Nov 10 2005, 08:38
Сообщение #49


Местный
***

Группа: Участник
Сообщений: 315
Регистрация: 10-10-05
Пользователь №: 9 466



По прерыванию TWI что-то не работает... Прошу не бить меня ногами, но пинание в нужном направлении приветствуется.
При инициализации я сделал так:

1. Настроил прерывания:

.CSEG
.org $000 rjmp RESET ;Сброс вектор
.org $022 rjmp From_м32 ;Обработчик TWI ATmega16

2. Настроил TWI:

ldi temp,$04 ;Инициализация режима "Приемник"
out TWAR,temp
ldi temp,(1<<TWINT)|(1<<TWEA)|(1<<TWEN)|(1<<TWIE)
out TWCR,temp

потом разрешил общие прерывания:

sei

;********************
Обработчик TWI:

From_м32: in temp,TWSR
andi temp,$F8
cpi temp,$60 ;Проверка принятого адреса от м32
breq Pr_data ;Если адрес совпал - прием данных, иначе - выход из прерывания

ldi temp,(1<<TWINT)|(1<<TWEA)|(1<<TWEN)
out TWCR,temp

reti

Pr_data: здесь идет прием данных
Go to the top of the page
 
+Quote Post
James D.
сообщение Nov 10 2005, 09:01
Сообщение #50


Местный
***

Группа: Участник
Сообщений: 315
Регистрация: 10-10-05
Пользователь №: 9 466



artem, насчет повесить - за мной будешь, сначала он мой! maniac.gif
Go to the top of the page
 
+Quote Post
James D.
сообщение Nov 10 2005, 11:34
Сообщение #51


Местный
***

Группа: Участник
Сообщений: 315
Регистрация: 10-10-05
Пользователь №: 9 466



Тихо шифером шурша ...

Ситуация такая. Слэйв м16 восстановил так, как было вчера - TWI работает не по прерыванию (зациклено в основной программе), по прерыванию мигает диод.
Мастер м32 вначале (сразу после инициализации контроллера) передает данные на слэйв м32.
Потом, по прерыванию (по переполнению) таймера, мастер м32 постоянно передает данные на слэйв м32, и после этого (в этом же обработчике прерыв.) передает данные на слэйв м16.
Такая комбинация при передаче на слэйв м32 работает, а на слэйв м16 не работает.
Но если убрать в проге мастера м32 вначале и в обработчике прерыв. передачу на слэйв м32, то передача на слэйв м16 работает.
Может там как-то с сигналами START, повторный START и STOP надо порядок навести? Но я перебрал уже разные варианты - ничего не помогает.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Nov 10 2005, 12:35
Сообщение #52


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Артем, запись 1 в TWINT сбрасывает триггер, а прервывание его взводит.
James, если м16 слэйв работает нормально, при отключенном м32слэйв. Значит предыдущая сессия обмена не закрывалась.
Вообще в отличии от большинства меговской перефирии TWI живет
как конечный автомат с кучей состояний.
Внимательно просмотрите таблицы с кодами TWSTA, в последней колонке список предлагаемых дествий после каждого этапа передачи. Т.е. тупая линейная программа - дали команду ждем завершения не катит, особенно если на линии больше двух устройств.
Т.е. мы отлавливаем каждый код возврата и ждем не только
ожидаемого исхода, но и обрабатываем возможные Nack, arbitration lost итд.
По этому коду принимаем решение о продолжении обмена, рестарте,
аварийном завершении итп.
Насколько я вижу картину, автомат сейчас заносит в какоето состояние которое не обрабатываеться. После чего невозврат ACK
и вечный цикл в ожидании TWINT который уже не придет.

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


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
James D.
сообщение Nov 10 2005, 16:34
Сообщение #53


Местный
***

Группа: Участник
Сообщений: 315
Регистрация: 10-10-05
Пользователь №: 9 466



Хорошо, если можно запустить программу обработки ошибок (знать бы еще как ее сделать), а если зацикливается в цикле ожидания wait1 (такое иногда бывает, только сейчас не вспомню при каких условиях - я их столько перебрал, вспомнить страшно)? Как тогда быть?

ldi temp,$00 ;Установка скорости передачи = 100 kHz
out TWSR,temp
ldi temp,12
out TWBR,temp

Pusk_St:ldi temp,(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
out TWCR,temp ;Посылка сигнала "START"

wait1: in temp,TWCR ;Ожидаем ответа от слэйв контроллера
sbrs temp,TWINT
rjmp wait1
Go to the top of the page
 
+Quote Post
_artem_
сообщение Nov 10 2005, 18:17
Сообщение #54


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



2 beer_warrior, ya s samogo nachala zametil chto po 1 TWINT sbrasyvaetsya , no etot data sheet v tom meste kotoroe ya ukazal govorit drugoe, mozet byt ya chtoto nepravilno ponyal iz napisannogo v DS . Erratu dlya atmegi 16 ne nasel.
Yesli tebe ne trudno, mozes li posmotret na stranicu 189 v data shite atmega16 ?


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Nov 10 2005, 18:41
Сообщение #55


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



to artem:

• Bit 7 – TWINT: TWI Interrupt Flag
This bit is set by hardware when the TWI has finished its current job and expects application
software response. If the I-bit in SREG and TWIE in TWCR are set, the MCU will
jump to the TWI Interrupt Vector. While the TWINT Flag is set, the SCL low period is
stretched.
The TWINT Flag must be cleared by software by writing a logic one to it.

Страница 179 описание TWCR

to James:
Не хочеться раздувать топик, на выходных склепаю заметочку с подробным разбором этой
темы и выложу у себя на страничке.
Я тоже очень долго воевал c TWI, в моем случае был multimaster да еще на очень кривом железе,
поэтому опыта поднабрался немало <_<


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
James D.
сообщение Nov 10 2005, 20:41
Сообщение #56


Местный
***

Группа: Участник
Сообщений: 315
Регистрация: 10-10-05
Пользователь №: 9 466



Я очень благодарен вам за помощь. Буду ждать подробного разбора полетов, но и со своей стороны приложу максимум усилий для решения этой проблемы.
Go to the top of the page
 
+Quote Post
James D.
сообщение Nov 11 2005, 07:37
Сообщение #57


Местный
***

Группа: Участник
Сообщений: 315
Регистрация: 10-10-05
Пользователь №: 9 466



Маленький вопрос.
Если писать программы на Си, можно ли для AVR-контроллеров написать программы рассчета тригонометрических функций, возведение в степень, извлечение корней, операций с плавающей запятой и прочей математики? С какой скоростью МК AVR будет рассчитывать такие функции?
Можно ли где-то найти обучение программированию на С для AVR?
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Nov 11 2005, 08:16
Сообщение #58


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



http://www.nongnu.org/avr-libc/user-manual/index.html
modules->mathematics


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
James D.
сообщение Nov 11 2005, 09:46
Сообщение #59


Местный
***

Группа: Участник
Сообщений: 315
Регистрация: 10-10-05
Пользователь №: 9 466



Нашел на диске обучение языку С. Что-то типа книги, правда там уклон на написание программ для компьютера. В качастве компилятора использую - "CodeVisionAVR C Compiler". Попробую применить этот С для написания прог для МК...
Go to the top of the page
 
+Quote Post
bbg
сообщение Nov 11 2005, 17:23
Сообщение #60


Участник
*

Группа: Свой
Сообщений: 63
Регистрация: 25-06-04
Пользователь №: 179



Цитата(James D. @ Nov 11 2005, 12:46) *
Попробую применить этот С для написания прог для МК...


Весьма похвально. Но имейте ввиду, что CVAVR-овский компайлер,
так сказать, имеет много гитик, то есть девиаций, иногда полезных,
от стандартного C. Да и кто их не имеет.. Но все равно могу
предсказать вам радость от сокращения в десятки разов, если не
в сотни, времени разработки. Я вас даже зауважал, писать для
32-й меги на авээровском асме - это да!
Go to the top of the page
 
+Quote Post

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

 


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


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