|
Магазин Arduino | WIKI | Регистрация | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
13.05.2016, 14:44 | #1 |
Junior Member
Регистрация: 27.04.2016
Сообщений: 7
Вес репутации: 0 |
Re: Расширитель gpio (ввода/вывода) TP-LINK TL-MR3020 по i2c на PCF8574
То же, только вместо PCF8574 atmega8 (и тд)
Код:
#include <avr/io.h> #include <compat/twi.h> #include <avr/interrupt.h> #define I2CSLAVE_ADDR 0x4E #define PORT_DDR 0xB0 // PORTB Settings #define PORT_IN 0xB1 // Get PINB #define PORT_OUT 0xB2 // Set PORTB unsigned char regaddr; // Store the Requested Register Address unsigned char regdata; // Store the Register Address Data void i2c_slave_action(unsigned char rw_status) { switch(regaddr) { // PORTB ^= 0x03; // PORT case PORT_DDR: if (rw_status == 0) // read regdata = DDRB; else // write DDRB = regdata; break; case PORT_IN: if (rw_status == 0) // read regdata = PINB; break; case PORT_OUT: if (rw_status == 1) // write PORTB = regdata; break; } } ISR(TWI_vect) { static unsigned char i2c_state; unsigned char twi_status; // Disable Global Interrupt cli(); // Get TWI Status Register, mask the prescaler bits (TWPS1,TWPS0) twi_status=TWSR & 0xF8; switch(twi_status) { case TW_SR_SLA_ACK: // 0x60: SLA+W received, ACK returned i2c_state=0; // Start I2C State for Register Address required break; case TW_SR_DATA_ACK: // 0x80: data received, ACK returned if (i2c_state == 0) { regaddr = TWDR; // Save data to the register address i2c_state = 1; } else { regdata = TWDR; // Save to the register data i2c_state = 2; } break; case TW_SR_STOP: // 0xA0: stop or repeated start condition received while selected if (i2c_state == 2) { i2c_slave_action(1); // Call Write I2C Action (rw_status = 1) i2c_state = 0; // Reset I2C State } break; case TW_ST_SLA_ACK: // 0xA8: SLA+R received, ACK returned case TW_ST_DATA_ACK: // 0xB8: data transmitted, ACK received if (i2c_state == 1) { i2c_slave_action(0); // Call Read I2C Action (rw_status = 0) TWDR = regdata; // Store data in TWDR register i2c_state = 0; // Reset I2C State } break; case TW_ST_DATA_NACK: // 0xC0: data transmitted, NACK received case TW_ST_LAST_DATA: // 0xC8: last data byte transmitted, ACK received case TW_BUS_ERROR: // 0x00: illegal start or stop condition default: i2c_state = 0; // Back to the Begining State } // Clear TWINT Flag TWCR |= (1<<TWINT); // Enable Global Interrupt sei(); } int main(void) { // TWI Pull UP PORTC |= ((1<<PINC4) | (1<<PINC5)); // Initial I2C Slave TWAR = I2CSLAVE_ADDR & 0xFE; // Set I2C Address, Ignore I2C General Address 0x00 TWDR = 0x00; // Default Initial Value // Start Slave Listening: Clear TWINT Flag, Enable ACK, Enable TWI, TWI Interrupt Enable TWCR = (1<<TWINT) | (1<<TWEA) | (1<<TWEN) | (1<<TWIE); // Enable Global Interrupt sei(); // Initial Variable Used regaddr=0; regdata=0; while (1) { } } Код:
# i2cset -y 0 0x27 0xB0 0xff # i2cset -y 0 0x27 0xB2 0xff # i2cset -y 0 0x27 0xB2 0x00 # i2cset -y 0 0x27 0xB2 0x01 # i2cget -y 0 0x27 0xB1 0x01 # i2cset -y 0 0x27 0xB2 0x03 # i2cget -y 0 0x27 0xB1 0x03 Извиняюсь если оффтопнул, но в соседней теме у меня так ничего и не вышло со связкой роутер-UART-atmega. Зато вот получилось сделать роутер-i2c-atmega. Код скоперфильдил отсюда |
01.06.2015, 23:44 | #2 |
Senior Member
Регистрация: 15.07.2014
Сообщений: 939
Вес репутации: 989 |
Re: Расширитель gpio (ввода/вывода) TP-LINK TL-MR3020 по i2c на PCF8574
Ошибся немного, i2c-0 появиться после insmod i2c-gpio-custom bus0=0,*,*
А вот как должно по команде root@OpenWrt:~# insmod i2c-dev module is already loaded - i2c-dev P.S. Роутер какой? Последний раз редактировалось sakatgg; 01.06.2015 в 23:58. |
02.06.2015, 01:08 | #3 |
Senior Member
Регистрация: 05.10.2014
Сообщений: 190
Вес репутации: 0 |
Re: Расширитель gpio (ввода/вывода) TP-LINK TL-MR3020 по i2c на PCF8574
MR3020 прошивка CyberWrt
Делаю как в первом сообщении Код:
root@CyberWrt:/www/> opkg update && opkg install i2c-tools Downloading http://cyberwrt.ru/application/packages/TL-MR3020/1_4/Packages.gz. Updated list of available packages in /var/opkg-lists/cyberwrt_pack. Installing i2c-tools (2013-12-15-1) to root... Downloading http://cyberwrt.ru/application/packages/TL-MR3020/1_4/i2c-tools_2013-12-15-1_ar71xx.ipk. Installing libi2c (2013-12-15-1) to root... Downloading http://cyberwrt.ru/application/packages/TL-MR3020/1_4/libi2c_2013-12-15-1_ar71xx.ipk. Configuring libi2c. Configuring i2c-tools. Код:
root@CyberWrt:/www/> opkg install kmod-i2c-gpio-custom Installing kmod-i2c-gpio-custom (3.10.4-2) to root... Downloading http://cyberwrt.ru/application/packages/TL-MR3020/1_4/kmod-i2c-gpio-custom_3.10.4-2_ar71xx.ipk. Installing kmod-i2c-core (3.10.4-1) to root... Downloading http://cyberwrt.ru/application/packages/TL-MR3020/1_4/kmod-i2c-core_3.10.4-1_ar71xx.ipk. Installing kmod-i2c-gpio (3.10.4-1) to root... Downloading http://cyberwrt.ru/application/packages/TL-MR3020/1_4/kmod-i2c-gpio_3.10.4-1_ar71xx.ipk. Installing kmod-i2c-algo-bit (3.10.4-1) to root... Downloading http://cyberwrt.ru/application/packages/TL-MR3020/1_4/kmod-i2c-algo-bit_3.10.4-1_ar71xx.ipk. Configuring kmod-i2c-core. Configuring kmod-i2c-algo-bit. Configuring kmod-i2c-gpio. Configuring kmod-i2c-gpio-custom. Код:
root@CyberWrt:/www/> insmod i2c-dev insmod: can't insert 'i2c-dev': File exists |
19.08.2015, 15:32 | #4 |
Junior Member
Регистрация: 13.08.2015
Сообщений: 5
Вес репутации: 0 |
Re: Расширитель gpio (ввода/вывода) TP-LINK TL-MR3020 по i2c на PCF8574
Прошивка CyberWrt
Китайский модуль I2C на чипе PCF8574T Ставим CyberWrt. Заходим через Putty под root'ом Доустанавливаем пакеты: opkg install kmod-i2c-core opkg install kmod-i2c-gpio-custom opkg install i2c-tools добавляем эти строчки в /etc/rc.local rmmod gpio_button_hotplug insmod i2c-gpio-custom bus0=0,18,20 echo pcf8574 0x27 > /sys/bus/i2c/devices/i2c-0/new_device echo 56 > /sys/class/gpio/export echo 57 > /sys/class/gpio/export echo 58 > /sys/class/gpio/export echo 59 > /sys/class/gpio/export echo 60 > /sys/class/gpio/export echo 61 > /sys/class/gpio/export echo 62 > /sys/class/gpio/export echo 63 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio56/direction echo out > /sys/class/gpio/gpio57/direction echo out > /sys/class/gpio/gpio58/direction echo out > /sys/class/gpio/gpio59/direction echo out > /sys/class/gpio/gpio60/direction echo out > /sys/class/gpio/gpio61/direction echo out > /sys/class/gpio/gpio62/direction echo out > /sys/class/gpio/gpio63/direction перезагружаемся Последний раз редактировалось Voffka; 19.08.2015 в 16:51. |
11.09.2015, 20:35 | #5 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1030 |
Re: Расширитель gpio (ввода/вывода) TP-LINK TL-MR3020 по i2c на PCF8574
Сегодня пришла ко мне сия платка (заказывал в апреле!) в связи с чем нубские вопросы (не бейте ногами):
1. Зачем джампер сбоку? 2. Синяя крутилка под крестовую отвертку (в интернетах нашел, что она регулирует контрастность при подключении дисплея) на что-нибудь влияет? 3. К земле ноги можно притягивать или только к +5V? 4. Я насчитал 16 ног в гребенке, а в /sys/class/gpio/export отправляют только 8, почему? |
11.09.2015, 22:03 | #6 |
Senior Member
Регистрация: 15.07.2014
Сообщений: 939
Вес репутации: 989 |
Re: Расширитель gpio (ввода/вывода) TP-LINK TL-MR3020 по i2c на PCF8574
1. Отключает подсветку, если к дисплею цепляешь
2. Контрастность дисплея 3. Запитывать от 3.3В лучше, так как sda, slc подвязаны через 4.7kOm к питанию. Если к 5В, то лучше делитель сделать и подвязать к земле 10kOm. Возможно gpio уже подвязатны в роутере к земле 4. Картинка в помощь, возможны небольшие отличия Последний раз редактировалось sakatgg; 11.09.2015 в 22:15. |
17.09.2015, 16:13 | #7 |
Junior Member
Регистрация: 02.09.2015
Сообщений: 11
Вес репутации: 0 |
Re: Расширитель gpio (ввода/вывода) TP-LINK TL-MR3020 по i2c на PCF8574
Как исправить в модуле SDA и SLC на свои gpio (SDA - 3, SLC - 4)?
|
18.09.2015, 10:22 | #8 |
Senior Member
Регистрация: 15.07.2014
Сообщений: 939
Вес репутации: 989 |
Re: Расширитель gpio (ввода/вывода) TP-LINK TL-MR3020 по i2c на PCF8574
insmod i2c-gpio-custom bus0=0,3,4
|
18.09.2015, 16:19 | #9 |
Junior Member
Регистрация: 02.09.2015
Сообщений: 11
Вес репутации: 0 |
Re: Расширитель gpio (ввода/вывода) TP-LINK TL-MR3020 по i2c на PCF8574
Имею в наличии dir-320A1, прошитый Openwrt
подключен дисплей с YwRobot Adruino LCM1602 IIC V1 дальше insmod i2c-gpio-custom bus0=0,3,4 установлены модули: i2c_gpio i2c_gpio_custom i2c_algo_bit i2c_dev i2c_core root@OpenWrt:~# cat /sys/kernel/debug/gpio GPIOs 0-15, bcm47xx: gpio-3 (sda ) in hi gpio-4 (scl ) in hi root@OpenWrt:~# i2cdetect -y i2c-gpio0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- а дальше тупик, файл из первого поста не ставиться. Собрал пакет из исходников по умолчанию, все установилось в папке /dev помимо прочего появились i2c-0 и hd44780, но при попытке послать какую нибудь команду типа echo -n 'hello world' > /dev/hd44780 терминал зависает, что делать? Последний раз редактировалось Flom; 18.09.2015 в 16:37. |
18.09.2015, 16:47 | #10 | ||
Senior Member
Регистрация: 15.07.2014
Сообщений: 939
Вес репутации: 989 |
Re: Расширитель gpio (ввода/вывода) TP-LINK TL-MR3020 по i2c на PCF8574
Цитата:
Цитата:
|
||
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|