Форум программистов, компьютерный форум, киберфорум
Электроника для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.94/68: Рейтинг темы: голосов - 68, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 321

Проблемы с TWI

17.05.2012, 06:05. Показов 13813. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Купил я недавно PCA9633, такой себе ШИМ контроллер для светодиодов. Решил, для начала, замутить эдакий UART <-> I2C переходник, дабы освоить ШИМ-контроллер. Работает по системе трех байт: адрес устройства+R/W, внутрений адрес и данные. Первой миной, как оказалось, да оно и неудивительно , стал итерфейс. Писал быстро, получился быдлокод, пардон =) Проблема: не работает И2Ц ! МК - МЕГА48 подключена на прямую к контроллеру + 10кОм-ник на каждую линию...

Инициализация(приведу только И2Ц, так как УАРТ работает на ура):

По скоростям долго не заморачивался, написал что называется "пальцем в небо":
Code
1
2
ldi      temp, 150
sts      TWBR, temp
Прерывание УАРТ:

Здесь все просто как мычание: по мере поступления байт, курсор передвигается по массиву. Как только придут все три он перескочит в начало и выставить флаг Т.

Мэин:

Code
1
2
3
4
5
6
7
8
9
10
11
12
MAIN:   sei
START:      brtc   START                      #Зырим флаг Т
 
clt                                    #Сброс флага, мол прочитали
 
ldi      temp, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)|(1<<TWIE)
sts      TWCR, temp        #Стартовый хлопок на шине И2Ц ...
 
ldi      temp, >             #... и стукачим по УАРТу что скачки начались !
sts      UDR0, temp
 
rjmp   START
Прерывание И2Ц:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
IIC:      lds      temp,TWSR           # Зырим причину прерывания
 
cpi      temp, 0x08            #Удачный старт ? Посылаем адрес + запись,
то есть первый байт принятый по УАРТу
brne    I1
 
lds      temp, BUFFER
sts      TWDR, temp
 
ldi      temp, (1<<TWINT)|(1<<TWEN)|(1<<TWIE)
sts      TWCR, temp
 
ldi      temp, 1                 #стукачим по УАРТу.
sts      UDR0, temp
 
reti
 
I1:      cpi      temp, 0x18              #Письмо пришло по адресу. Гуд. Отправляем второе...
brne   I2
 
lds      temp, BUFFER+1
sts      TWDR, temp
 
ldi      temp, (1<<TWINT)|(1<<TWEN)|(1<<TWIE)
sts      TWCR, temp
 
ldi      temp, 2                     #...и снова стукачим по УАРТу.
sts      UDR0, temp
 
reti
 
I2:      cpi      temp, 0x28                   #Динный переданы, финишная полоса аля стоп бит
brne   I3
 
lds      temp, BUFFER+2
sts      TWDR, temp
 
ldi      temp, (1<<TWINT)|(1<<TWEN)|(0<<TWIE)|(1<<TWSTO)
sts      TWCR, temp                  #Глушим И2Ц
 
ldi      temp, 3                        #...и стукачим...
sts      UDR0, temp
 
reti
 
I3:      sts      UDR0, temp                    #Это - пожарный выход на случий если что-то случилось...
 
ldi      temp, (1<<TWINT)|(1<<TWEN)|(0<<TWIE)|(1<<TWSTO)
sts      TWCR, temp                  #Глушим И2Ц
 
reti
Друзъя ! В очередной раз нужна ваша помощь ! Как обычно, всем спасибо !

P.S. В терминалке приходит только ">", как я понял прерывание не происходит...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2012, 06:05
Ответы с готовыми решениями:

TWI
Всем привет) Подскажите, пожалуйста, ошибку. Сразу скажу, сам искал, читал, ни чего не нашел, только на Вас надежда))) Пишу в Atmel Studio6...

TWI+ds1621
Доброго времени суток! Подскажите как вытащить значение температуры с ds1621, может кто готовым решение поделиться, или мой код...

Модуль TWI
Привет всем. Копаюсь с TWI в ATmega8, с этим модулем опыта у меня нет, поэтому закопался в начале. Работа с модулем, как я понимаю,...

44
0 / 0 / 0
Регистрация: 12.06.2011
Сообщений: 74
01.06.2012, 23:12
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от tyzord66
Для СТАРТ надо еще установить TWSTA
Да, эт я в курсе, просто внимание именно на те два флага хотел обратить.
Цитата Сообщение от tyzord66
Прерывание не сработает пока программно не будет сброшен TWINT записью в него «1»
То есть основная программа может сколь угодно выполняться, не сбрасывая флаг TWINT и тем самым прижимая все это время SCL?

Цитата Сообщение от tyzord66
Это где Вы такой пример видели? Надо TWINT проверять.
аппнот AVR315.
0
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
01.06.2012, 23:41
Цитата Сообщение от Bottti
То есть основная программа может сколь угодно выполняться, не сбрасывая флаг TWINT и тем самым прижимая все это время SCL?
Именно! Пока не сформируется СТОП
Цитата Сообщение от Bottti
Цитата Сообщение от tyzord66
Это где Вы такой пример видели? Надо TWINT проверять.
аппнот AVR315.
В этой апноте драйвер TWI ожидает от основного приложения разрешения работы самого контроллера TWI. Как только TWIE будет установлен, драйвер заполняет TWI буфер и начинает передачу с команды СТАРТ с установкой всех служебных семафоров.
0
0 / 0 / 0
Регистрация: 12.06.2011
Сообщений: 74
01.06.2012, 23:58
Цитата Сообщение от tyzord66
Как только TWIE будет установлен, драйвер заполняет TWI буфер и начинает передачу с команды СТАРТ с установкой всех служебных семафоров.
Во, перед каждым действием ожидается сброс TWIE.

http://www.gaw.ru/im/doc/micros/avr/avr315/fig6.gif
Выходит, грубо говоря, по TWIE отслеживается, закончилась ли предыдущая передача.
0
0 / 0 / 0
Регистрация: 12.06.2011
Сообщений: 74
02.06.2012, 00:01
Благодарю за помощь. Как-то после простого 1-wire TWI кажется чудовищем.
0
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
02.06.2012, 09:45
Цитата Сообщение от Bottti
Во, перед каждым действием ожидается сброс TWIE.
http://www.gaw.ru/im/doc/micros/avr/avr315/fig6.gif
Выходит, грубо говоря, по TWIE отслеживается, закончилась ли предыдущая передача.
При получении от слэйва NACK и формировании СТОП обработчик сам сбрасывает TWIE, запрещая прерывание от TWI, это и является признаком конца передачи
Code
1
2
3
4
 TWCR = (1<<TWEN)|                                 // TWI Interfosi enabtid
(0<<TWIE)|(1<<TWINT)|                      // Dysable TWI Ymtirrupt omd clear the flag
(0<<TWEA)|(0<<TWSTA)|(1<<TWSTO)|           // Initiate a STOP condition.
(0<<TWWC);                                 //
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.06.2012, 09:45

SPI v.s. TWI
Задумался об организации совместной работы 2-х платок на атмегах-сестрах (48 и 168). Рассматривал сначала самое тупое взаимодействие: через...

USI as TWI slave
понадобилось подключить тиньку в качестве слэйва. Первое конечно это AN --AVR312. поключил--балалайка. Углубился.На avrfrioks некий Don...

Не проходит инициализация TWI
Добрый день! Мучаюсь с TWI Хочу в учебных целях подключить внешнюю память типа 24C64a Взял текст программы из уроков DI-Halta. ...

CodeVisionAVR функции TWI
Здравствуйте! Есть у кого нибудь, или, если знаете, где взять подскажите ссылку на описание функций TWI в CodeVisionAVR. Это более менее...

Atmega8 & TWI/I2C
День добрый. Уже пару часов ковыряюсь, не могу разобраться, почему не заводится TWI? Линии подтянуты резисторами в 10К. Слейвом сидит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru