Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 31.05.2019, 01:18  
Danil_2002
Прохожий
 
Регистрация: 31.05.2019
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Danil_2002 на пути к лучшему
По умолчанию Помогите разобраться с I2C на avr328p

Добрый день! Помогите разобраться с I2C.

Есть вот такой код.
Код:
void TWIInit(void)
{
    //set SCL to 400kHz
    TWSR = 0x00;
    TWBR = 0x0C;
    //enable TWI
    TWCR = (1‹‹TWEN);
}

void TWIStart(void)
{
    TWCR = (1‹‹TWINT)|(1‹‹TWSTA)|(1‹‹TWEN);
    while ((TWCR & (1‹‹TWINT)) == 0);
}
//send stop signal
void TWIStop(void)
{
    TWCR = (1‹‹TWINT)|(1‹‹TWSTO)|(1‹‹TWEN);
}
Мои вопросы:
1) Зачем в этих функциях устанавливается 1 ‹‹ TWEN, он же разрешает работу TWI модуля, то есть по идее его достаточно установить один раз с помощью функции TWIinit(), или нет?
2) Еще до меня не дойдет значения бита TWINT. Я прочитал что это флаг прерывания и он устанавливается после каждого действия модуля(start последовательность и тому подобное), чтобы его сбросить надо: 1 ‹‹ TWINT и дальше запускается TWI модуль. Зачем нужен цикл в TWIStart и почему этого цикла нет в TWIStop?

Буду рад примерам работы с I2C (на чистом Си) или какой либо инфе.
Моя цель: научиться читать значение регистров датчиков ардуино(в моем случае это BMP180)

P.S. Объясните пожалуйста более подробно, теорию читал, но на практике
Реклама:
Danil_2002 вне форума  
Непрочитано 31.05.2019, 02:43  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,170
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Помогите разобраться с I2C на avr328p

Danil_2002, поиск по нужному набору ключевых слов приведёт Вас ко множеству кода для изучения.
И сразу уточняйте чем и в какой версии Вы собираетесь с этим камнем работать, с какими библиотеками,…
Чистый C - это без asm или без ++?
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 31.05.2019, 03:16  
Danil_2002
Прохожий
 
Регистрация: 31.05.2019
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Danil_2002 на пути к лучшему
По умолчанию

Я на древней машине с 7 борюсь. Комп менять надо однако.

извиняюсь, не правильно выразился. под чистым си я имел ввиду что не хочу использовать сторонние библиотеки. Хочу более детально изучить I2C, все функции для работы с I2C самому реализовать.

Еще раз выложу код, а то в первый раз как-то криво получилось и не заметил даже
Код:
void TWI_init()
{
  TWSR = 0; // 
  TWBR = 72; // 100kHz
  TWCR = (1 ‹‹ TWIE); // 
}
void TWI_start() // 
{
  TWCR = (1 ‹‹ TWINT)|(1 ‹‹ TWSTA)|(1 ‹‹ TWEN); // 
  while(TWCR&(1 ‹‹ TWINT) == 0); 
}
void TWI_stop()
{
  TWCR = (1‹‹TWINT)|(1‹‹TWSTO)|(1‹‹TWEN);
}
int main()
{
  while(1)
  {
     
  }
}

Последний раз редактировалось mike-y-k; 31.05.2019 в 03:32.
Danil_2002 вне форума  
Непрочитано 31.05.2019, 03:32  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,170
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Помогите разобраться с I2C на avr328p

Danil_2002, таки выкладывать код лучше весь - никто не будет гадать про остатки снизу и сверху. Сам код в копии с расширением .txt через Расширенный режим-›Управление вложениями - в тексте от части глюков даже noparse не помогает.
Ну и про среду и целевое железо подробности пока забыли.

Писать всю программу одним файлом таки совсем не good practice. Библиотеки совсем не зря придумали. Сразу создайте I2C.c и I2C.h для возможности использовать их в будущем.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 31.05.2019, 04:09  
Danil_2002
Прохожий
 
Регистрация: 31.05.2019
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Danil_2002 на пути к лучшему
По умолчанию Re: Помогите разобраться с I2C на avr328p

на вашем форуме нельзя толком код выложить.
Danil_2002 вне форума  
Непрочитано 31.05.2019, 09:51  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,170
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Помогите разобраться с I2C на avr328p

Danil_2002, скопируйте свой код в файл с расширением .тхт
В окне Быстрый ответ нажмите Расширенный режим.
Снизу выберите Управление вложениями.
В верхнем окне выберите файл с текстом кода и с расширением .txt и загрузите его.
После успешной загрузки внизу Закрыть.
Добавьте ответы на вопросы по поводу использованной среды программирования и все.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…

Последний раз редактировалось mike-y-k; 31.05.2019 в 09:53.
mike-y-k вне форума  
Непрочитано 31.05.2019, 10:09  
sanya
Временная регистрация
 
Регистрация: 10.11.2016
Сообщений: 53
Сказал спасибо: 6
Сказали Спасибо 16 раз(а) в 13 сообщении(ях)
sanya на пути к лучшему
По умолчанию Re: Помогите разобраться с I2C на avr328p

Посмотри код для работы через I2C в прошивке для квадрокоптеров Multiwii (Sensors.cpp) 100% рабочий код (сам на ней летаю). + в ней куча примеров работы со всякими датчиками (guro,accel,baro...)
Вложения:
Тип файла: zip MultiWii.zip (164.5 Кб, 0 просмотров)
sanya вне форума  
Непрочитано 31.05.2019, 23:48  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Помогите разобраться с I2C на avr328p

Сообщение от Danil_2002 Посмотреть сообщение
1) Зачем в этих функциях устанавливается 1 ‹‹ TWEN, он же разрешает работу TWI модуля, то есть по идее его достаточно установить один раз с помощью функции TWIinit(), или нет?
Потому, что в коде использована конструкция TWCR = , то есть каждый раз регистр загружается полностью. Для установки отдельного бита в Си используется конструкция TWCR |= (1‹‹ bitname), для сброса TWCR &= ~(1‹‹ bitname).
Почитать об этом можно в учебнике, лучше от авторов языка.

Сообщение от Danil_2002 Посмотреть сообщение
2) Еще до меня не дойдет значения бита TWINT. Я прочитал что это флаг прерывания и он устанавливается после каждого действия модуля(start последовательность и тому подобное), чтобы его сбросить надо: 1 ‹‹ TWINT и дальше запускается TWI модуль.
Сбрасывать его нужно предварительно проанализировав причину его взвода, не было ли ошибок при передаче какой-либо части пакета. Об этом в секции "2-wire Serial Interface" даташита.

Сообщение от Danil_2002 Посмотреть сообщение
Зачем нужен цикл в TWIStart и почему этого цикла нет в TWIStop?
Это и есть цикл ожидания взвода флага.
Есть ли такой цикл в TWIStop мы не видим, ибо TWIStop как-то внезапно закончилась, так и не начавшись...
omercury вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Решено] Помогите разобраться с генератором igor1000 Электроника средств транспорта 10 05.07.2010 12:53
Помогите разобраться с импульсными стабилизаторами Vas2 Источники питания и свет 8 07.12.2007 17:27
[Решено] Помогите разобраться. didik-dog Отвлекитесь, эмбеддеры! 5 02.09.2007 21:09
Помогите разобраться с внешней памятью по I2C graham Микроконтроллеры, АЦП, память и т.д 3 16.12.2005 17:01
Помогите разобраться с транзисторами в Proteus`е EsterniTY Proteus 2 05.08.2004 00:18


Часовой пояс GMT +4, время: 17:31.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot