Перейти к содержанию

Помогите перейти на аппаратный TWI


Гость химик

Рекомендуемые сообщения

:smile: :smile: :smile: :smile:

Добрый, уже вечер. Вот сижу уже четыре часа, ломаю голову. В некоторых разработках использую шину i2c, програмную, полученую от штатного Генератора кода. Оказалось что на линии SCL идет корявый строб. Попытался перейти на аппаратный TWI через тот же CodeWizard, после пробывал левые библиотеки и програмного, и аппаратного i2c, во всех случаях одна и та же картина.

post-2789-1321028553_thumb.jpg

Кто знает в чем загвоздка? Подскажите пожалуйста.

RTC.rar

Изменено пользователем химик
Ссылка на комментарий
Поделиться на другие сайты

  • Ответов 29
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

Программа на ассемблере? Если да, то у меня есть код для аппаратного TWI.

Нет прога на Си. Просто ошибка выскакивает не при компиляции, а при построении проекта. Сначала появляется вот этоpost-2789-1321030837_thumb.jpg

а после то что в первом посту.

Ссылка на комментарий
Поделиться на другие сайты

В Си не силен, может ошибка в переменных?

Нет. Написано что неопределенный символ. Но помоему быть такого не может. Убедите в противоположном.

Ссылка на комментарий
Поделиться на другие сайты

Серег, внизу есть вкладка Errors.

Дай картинку или скопируй текстом, чего там прога тебе пишет при ошибках.

Ссылка на комментарий
Поделиться на другие сайты

А где происходит объявление символа __i2c_port? Ассемблер по какой-то причине не находит его, поэтому не может провести объявление __scl_bit и __sda_bit и выдает ошибки по всем 3-м символам.

Ссылка на комментарий
Поделиться на другие сайты

Серег, внизу есть вкладка Errors.

Дай картинку или скопируй текстом, чего там прога тебе пишет при ошибках.

Игорь, в первом посту на картинке в окне Code Navigatore , видно все ошибки. Тоже самое и в Errors отображается.

Ссылка на комментарий
Поделиться на другие сайты

А где происходит объявление символа __i2c_port? Ассемблер по какой-то причине не находит его, поэтому не может провести объявление __scl_bit и __sda_bit и выдает ошибки по всем 3-м символам.

Я не силен в

асемблере, но мне кажется что этих

символов вообще не должно быть. В аппаратном вроде бы должны быть сплошные адреса регистров, не так ли? А как видно на первой картинке, там помимо бит _SDA, _SCL есть еще и delay. Помоему этот кусок, на который ругается Код Вижен, программная реализация. И почему то при построении проекта она не хочет ликвидироваться. И как я уже писал выше, при компиляции не каких проблем не возникает, только при построении.

Ссылка на комментарий
Поделиться на другие сайты

Я не силен в асемблере, но мне кажется что этих символов вообще не должно быть. В аппаратном вроде бы должны быть сплошные адреса регистров, не так ли?

Нет, ассемблеры допускают использование символов, для этого как раз предназначена директива .equ (в чем-то аналог сишного #define).

А как видно на первой картинке, там помимо бит _SDA, _SCL есть еще и delay.

Ты про __i2c_delay1 и т.д.? Это метки - они обозначают участки программы (адреса команд) и служат для организации условных переходов, циклов и т.д. На них компиллятор не ругается, т.к. они все видимо определены верно.

И как я уже писал выше, при компиляции не каких проблем не возникает, только при построении.

Просто в сишной части прошивки всё написано корректно, а когда ассемблер начинает обрабатывать код в файлах .asm - вылезают непонятные ему символы.

 

Кстати, я вижу, у тебя определены символы __i2c_dir, __i2c_pin, и на них ассемблер не ругается. Поищи, где они определены, и определи аналогично port. Тогда все формальные ошибки должны исчезнуть. Вопрос только в том, а действительно ли тебе нужен этот участок кода.

Ссылка на комментарий
Поделиться на другие сайты

Так, начну попорядку. Сделал новый проект только с включением аппаратного TVI. Скомпилил обрал, все ок. Далее копирую все с предидущего проекта ( с файла в первом посту). Все повторяется по новой. И еще в Code Navigator я заметил i2c.h . Для чего он там?post-2789-1321103669_thumb.jpg

После я взял и закоментировал файл ds1307.h и все что с ним связано. Проблема исчезла. Получается что библиотека реальных часов работает с програмным i2c. Можно как-то поправить?

Ссылка на комментарий
Поделиться на другие сайты

Я так понимаю, на I2C в твоей реализации сидят 2 слейва - RTC и еще что-то? Конечно, их обоих можно дергать по аппаратной реализации TWI, повесив параллельно на аппаратные выводы SDA и SCL. Надо выбрать частоту шины, поддерживаемую обоими девайсами, и убедиться, что у них разные адреса на шине.

Управление аппаратной реализацией очень подробно описано в даташитах на МК.

 

Добавлено после раздумий:

Посмотрел исходники из первого поста - там нет i2c.h. Судя по скриншоту из последнего поста, это программная реализация I2C, и её надо удалить из проекта.

Из первого поста:

My_I2C.h - тоже программная реализация.

twi.h - аппаратная реализация, лучше использовать её.

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...