AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
14.03.2021, 18:43
|
|
Временная регистрация
Регистрация: 05.10.2010
Сообщений: 68
Сказал спасибо: 12
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Библиотека INA226 или как с ней работать
Добрый вечер форумчане! Народ есть у кого библиотека для INA 226,или хотя бы пару строк как с неё прочитать банальные регистры Vbus и ShuntVolt. Инфы в сети только под ардуино, или смт32, для авр кот наплакал( Можно даже на примере INA 219.
|
|
|
|
14.03.2021, 19:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 11.06.2006
Адрес: 51° 46′ 0″ N, 55° 6′ 0″ E
Сообщений: 1,975
Сказал спасибо: 370
Сказали Спасибо 1,726 раз(а) в 707 сообщении(ях)
|
Re: Библиотека INA226 или как с ней работать
Сообщение от neid_nnov
|
Инфы в сети только под ардуино, или смт32, для авр кот наплакал( Можно даже на примере INA 219.
|
Какая разница?
https://www.ccsinfo.com/forum/viewto...ghlight=ina219
Вот под PIC.
Есть же даташит, есть примеры работы. Если разберетесь как работает INAxxx. то сможете применить любой подходящий МК.
|
|
|
Сказали "Спасибо" welcome61
|
|
|
14.03.2021, 20:39
|
|
Временная регистрация
Регистрация: 05.10.2010
Сообщений: 68
Сказал спасибо: 12
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Библиотека INA226 или как с ней работать
Сообщение от welcome61
|
Какая разница?
Есть же даташит, есть примеры работы. Если разберетесь как работает INAxxx. то сможете применить любой подходящий МК.
|
Для меня есть разница пока, я пытаюсь правильно думать в этом направление. для смт вообще не воспринимается пока, примеры для ардуин полно, но библиотечные функии сидишь высматриваешь что и куда... тяжко из аз того что много приходится перечитывать и додумывать что там написано, по это причине и написал здесь на форуме.
Даже ваш пример вроде нагляднее намного чем в ардуиновских))
вот что я пытался написать за сегодняшний день:
Код:
|
unsigned int readByte(unsigned char addr, unsigned char deviceAddr){ // чтение 2 байта по адресу I2C
unsigned char data, MSB, LSB;
i2c_start(); //Кидаем команду "Cтарт" на шину I2C
i2c_write(deviceAddr); //Кидаем на шину адрес INA226
i2c_write(addr); //Кидаем какой регистр хотим читать
i2c_stop();
delay_us(10);
i2c_start();
i2c_write(deviceAddr+1); //Обращаемся к INA226 в режиме чтения, т.е. по адресу 1b1000001
MSB=i2c_read(0x00); //старший байт
LSB=i2c_read(0x01); //младший байт
i2c_stop(); //Посылаем команду "Cтоп"
data=MSB;
data = (data ‹‹ 8)+LSB;
return data; //Возвращаем значение прочитанного
} |
Последний раз редактировалось neid_nnov; 14.03.2021 в 20:44.
|
|
|
|
19.03.2021, 10:20
|
|
Временная регистрация
Регистрация: 05.10.2010
Сообщений: 68
Сказал спасибо: 12
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Библиотека INA226 или как с ней работать
Сижу ковыряюсь дальше с INA226. Не могу правильно считать старший и младший байт, на логическом анализаторе после чтения старшего байта видно что NACK - как я понимаю нет подтверждения но мастера. Что не так делаю? Особо примеров перед глаза не нашлось...
Код:
|
//Функция чтения
int16_t read2Byte(uint8_t addr, uint8_t deviceAddr){ // чтение 2 байта по адресу I2C
int16_t data; //16-bit
uint8_t MSB, LSB; //8-bit
i2c_start(); //Кидаем команду "Cтарт" на шину I2C
i2c_write(deviceAddr‹‹1); //Кидаем на шину адрес INA226 = 10000000
i2c_write(addr); //Кидаем какой регистр хотим читать
i2c_stop();
delay_us(10);
i2c_start();
i2c_write((deviceAddr‹‹1)+1); //Обращаемся к INA226 в режиме чтения = 10000001
MSB=i2c_read(0); //читаем старший байт
LSB=i2c_read(1); //читаем младший байт
i2c_stop(); //Посылаем команду "Cтоп"
data=MSB;
data = (data ‹‹ 8)+LSB; //Склеиваем data= data ‹‹ 8/LSB; или data= word(MSB, LSB);
return data; //Возвращаем значение прочитанного
} |
Перфое фото нет ACK, мой код
Второе как отвечает работает библиотека ардуино, данные принимаются адекватные
Последний раз редактировалось neid_nnov; 19.03.2021 в 10:25.
|
|
|
|
19.03.2021, 11:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,054
Сказал спасибо: 3,042
Сказали Спасибо 3,213 раз(а) в 2,183 сообщении(ях)
|
Re: Библиотека INA226 или как с ней работать
Сообщение от neid_nnov
|
Перфое фото нет ACK, мой код
|
[не даёт ACK на первом-же байте]
Сообщение от neid_nnov
|
Код:
|
MSB=i2c_read(0); //читаем старший байт
LSB=i2c_read(1); //читаем младший байт |
|
Значит надо с пристрастием рассматривать i2c_read(NNN). "0" и "1" - должны определять выдавать или нет ACK? Поменять их местами?
Код:
|
MSB=i2c_read(1); //читаем старший байт
LSB=i2c_read(0); //читаем младший байт |
__________________
Экзорцист 40-го уровня.
Последний раз редактировалось ForcePoint; 19.03.2021 в 11:10.
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
19.03.2021, 11:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,365
Сказал спасибо: 85
Сказали Спасибо 625 раз(а) в 377 сообщении(ях)
|
Re: Библиотека INA226 или как с ней работать
PHP код:
|
data = (data ‹‹ 8)+LSB;
return data;
|
вот это не будет работать, т.к. unsigned char data.
либо сделать int16_t data;
Либо:
PHP код:
|
return (((int16_t )data) ‹‹ 8)+LSB;
|
|
|
|
|
19.03.2021, 11:44
|
|
Временная регистрация
Регистрация: 05.10.2010
Сообщений: 68
Сказал спасибо: 12
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Библиотека INA226 или как с ней работать
Сообщение от pambaru
|
вот это не будет работать, т.к. unsigned char data.
либо сделать int16_t data;
|
это почти сразу переделал, чуть ниже код с исправлениями
|
|
|
|
19.03.2021, 11:48
|
|
Временная регистрация
Регистрация: 05.10.2010
Сообщений: 68
Сказал спасибо: 12
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Библиотека INA226 или как с ней работать
Сообщение от ForcePoint
|
Значит надо с пристрастием рассматривать i2c_read(NNN). "0" и "1" - должны определять выдавать или нет ACK? Поменять их местами?
Код:
|
MSB=i2c_read(1); //читаем старший байт
LSB=i2c_read(0); //читаем младший байт |
|
можете на пальцах объяснить почему так надо делать? по сухой теории сколько не читал, мало где встречается и обычно о записи идет речь, а не о чтение... мои рассуждения и привели к чтению старшего и младшего, но как именно их записать правильно пока не знаю? доберусь до дома, попробую вашу подсказку испытать!
|
|
|
|
19.03.2021, 12:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,054
Сказал спасибо: 3,042
Сказали Спасибо 3,213 раз(а) в 2,183 сообщении(ях)
|
Re: Библиотека INA226 или как с ней работать
Сообщение от neid_nnov
|
можете на пальцах объяснить почему так надо делать? по сухой теории .....
|
Оригинальную спецификацию интерфейса читали или только перепевки?
https://www.nxp.com/docs/en/user-guide/UM10204.pdf
Сообщение от I2C-bus specification and user manual UM10204
|
3.1.6 Acknowledge (ACK) and Not Acknowledge (NACK)
The acknowledge takes place after every byte. The acknowledge bit allows the receiver to signal the transmitter that the byte was successfully received and another byte may be sent. ..... There are five conditions that lead to the generation of a NACK:
.....
5. A master-receiver must signal the end of the transfer to the slave transmitter.
|
Кратко: при приёме от ведомого - мастер подтверждает каждый байт, кроме последнего. После передачи NACK - мастер должен выполнить STOP или repeated START.
__________________
Экзорцист 40-го уровня.
|
|
|
|
19.03.2021, 12:27
|
|
Временная регистрация
Регистрация: 05.10.2010
Сообщений: 68
Сказал спасибо: 12
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Библиотека INA226 или как с ней работать
Сообщение от ForcePoint
|
Оригинальную спецификацию интерфейса читали или только перепевки?
Кратко: при приёме от ведомого - мастер подтверждает каждый байт, кроме последнего. После передачи NACK - мастер должен выполнить STOP или repeated START.
|
нет, перепевки... уроки и примеры по тематике...
перевел datasheet INA226 по чтению и записи байта. Сказано следующее:
мастер генерирует условие запуска и отправляет байт адреса подчиненного устройства с высоким битом R / W, чтобы инициировать команду чтения. Следующий байт передается ведомым устройством и является старшим байтом регистра, указанного указателем регистра. За этим байтом следует подтверждение от мастера; затем ведомое устройство передает младший байт. Мастер подтверждает получение байта данных. Мастер может прекратить передачу данных, не генерируя подтверждение после получения любого байта данных или генерируя условие запуска или остановки. Получается тож самое что и вы сказали, но вот на реализации этого у меня не хватает))))
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:43.
|
|