Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.68/108: Рейтинг темы: голосов - 108, средняя оценка - 4.68
Vtod777
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 107
1

Не проходит инициализация TWI

12.02.2010, 14:00. Просмотров 19552. Ответов 30
Метки нет (Все метки)

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

Взял текст программы из уроков DI-Halta.

Процессор МЕГА32
частота - вн. кварц - 8Мгц
Код
         ldi  temp,0x1c
out  TWBR,temp
Потом переходим на START
Код
IIC_START:   OUTI   TWCR,1<<TWINT|1<<TWSTA|1<<TWEN|0<<TWIE

IIC_S:      IN   temp,TWCR
ANDI   temp,1<<TWINT
BREQ   IIC_S      ; Ждем пока передатчик IIC выполнит старт
RET
В результате все вертится между BREQ и IIC_S

Что делать дальше? Ничего не пойму!!!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2010, 14:00
Ответы с готовыми решениями:

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

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

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

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

TWI не хочет работать
ATmego328p, код следующий. После старта он по идее должен выключить лампочку. #define F_CPU...

30
Vtod777
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 107
12.02.2010, 22:25 21
Сейчас выдрал микросхему памяти,
запись все равно проскакивает, а вот на чтении зацикливается...
Попробую параллельным программатором ее зашить и поглядеть что читается...
0
Гарнист
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
12.02.2010, 22:34 22
И читаться тоже не должно. Чтение как-то так выполняется
старт-sla/w-адрес-старт-sla/R-читаем-читаем-читаем... нак-читаем-стоп
0
Vtod777
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 107
13.02.2010, 00:26 23
Поборол, но не до конца!
Вот така конструкция РАБОТАЕТ!!!
Но только под Джитагом в пошаговом режиме.
В реале... то совсем не пишет и не читает, то пишет, но не читает!!!
Где-то надо задержки ставить!!!!

Код
RTC_WRITE:   RCALL   IIC_START   ; Старт
LDI   temp,0b10100010      ; Загрузили Адрес приемника 0x01 и 0 на запись
RCALL   IIC_BYTE      ; Отослали адрес приемника на запись
LDI   temp, 0x00         ; Загрузили старший адрес ячейки памяти
RCALL   IIC_BYTE      ; Отослали
LDI   temp, 0x00         ; Загрузили младший адрес ячейки памяти
RCALL   IIC_BYTE      ; Отослали
LDi   temp,0x55         ; Загрузили байт 1
RCALL   IIC_Byte      ; Отослали байт 1
LDi   temp,0x77         ; Загрузили байт 2
RCALL   IIC_Byte      ; Отослали байт 2
IIC_WErr:   RCALL   IIC_STOP           ; Стоп
nop
RTC_READ:   RCALL   IIC_START           ; Отослали старт
LDI   temp,0b10100010      ; Адрес приемника 0x01 и 0 на запись
RCALL   IIC_BYTE      ; Отослали
LDI   temp, 0x00         ; Загрузили старший адрес ячейки памяти
RCALL   IIC_BYTE      ; Отослали
LDI   temp, 0x00         ; Загрузили младший адрес ячейки памяти
RCALL   IIC_BYTE      ; Отослали
RCALL   IIC_START      ; Повторный старт
LDI   temp,0b10100011      ; Адрес  приемника, но уже на чтение
RCALL   IIC_BYTE      ; Отослали
RCALL   IIC_RCV      ; Считали  байт 1
IN   tmp1,TWDR         ; Забрали из регистра TWIDR
RCALL   IIC_RCV2      ; Считали  ПОСЛЕДНИЙ байт 2
IN   tmp2,TWDR         ; Забрали из регистра TWIDR
IIC_RErr:   RCALL   IIC_STOP           ; Дали STOP и освободили линию.
0
Vtod777
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 107
13.02.2010, 00:50 24
Все, окончательно определился!
Читает слету, прямо в железе, а вот пишет - только если блока записи поставить Брейк, а потом нажать F5.
Причем процедура Delay, сделанная на 3-х регистрах и вычитании, если я ее вставляю между блоком записи и чтения, даже на 1с. - не помогает.
Вот здесь уже без Гуру не обойтись!
Заранее спасибо!!!
0
13.02.2010, 00:50
Гарнист
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
13.02.2010, 00:56 25
Цитата Сообщение от Vtod777
Все, окончательно определился!
Читает слету, прямо в железе, а вот пишет - только если блока записи поставить Брейк, а потом нажать F5.
Причем процедура Delay, сделанная на 3-х регистрах и вычитании, если я ее вставляю между блоком записи и чтения, даже на 1с. - не помогает.
Цитата Сообщение от ArkusB
Ой, а даташит на память кто читать будет????
{}данные-данные-данные...стоп. Потом поллинг, пока там внутри синхронизация происходит, делать ничего нельзя.
Вот здесь уже без Гуру не обойтись!
Заранее спасибо!!!

Дзэнский гуру вам всем на нужен. Чтобы демонстрировал хлопок одной ладонью, и почаще, на.
А если серьёзно, то надо научиться читать.
Читать всё, что написано, а не избирательно, то что понятно.

Даташит тебе нужен а не Гуру.
0
Vtod777
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 107
13.02.2010, 01:00 26
Мне конечно стыдно.... Но поллинг это что??? Типа задержки???
А как ее реализовать????
0
Гарнист
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
13.02.2010, 01:06 27
Ди, расскажи товарищу. Я уже спёкся на. Я больше не могу этого вынести, у меня руки на клавиши не попадают.
0
Vtod777
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 107
13.02.2010, 01:13 28
Извините за дурацкие вопросы, больше не буду Вам морочить голову.
0
THI BIOST
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
13.02.2010, 03:32 29
Запись длится доолго. Надо либо задержку, либо опрашивать готовность (поллинг) Если есть, что опрашивать. Например на термометр с памятью опрашивать нечего - нужна задержка 10 мс.
0
Vtod777
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 107
13.02.2010, 11:27 30
Цитата Сообщение от THI BIOST
Запись длится доолго. Надо либо задержку, либо опрашивать готовность (поллинг) Если есть, что опрашивать. Например на термометр с памятью опрашивать нечего - нужна задержка 10 мс.
Разобрался! Ночь длинная!!! -)))
Все работает!
Последний вопрос:
Если я вывожу несколько байтов данных подряд на запись,
мне паузу делать после вывода каждого байта или по окончании всей записи 1 раз???
0
THI BIOST
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
13.02.2010, 13:27 31
Это в даташите. У всех EEPROM по разному. Кто-то умеет по одному байту, кто-то страницу. Размер и адреса страниц - там же. Я из-за этого геморроя от EEPROM отказался.
0
13.02.2010, 13:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2010, 13:27

Stop состояние TWI
Ребята, а можно ли как-то без введения флага определить что произошло стоп-состояние шины TWI?...

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

Не проходит инициализация
Приветствую! Изучаю урок https://youtu.be/CpIoHPUyu8s по написанию игры, и тут столкнулся с...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru