Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > OpenWRT/LEDE

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.10.2015, 15:47   #21
Viktor1984
Junior Member
 
Регистрация: 07.11.2014
Сообщений: 3
Вес репутации: 0
Viktor1984 is an unknown quantity at this point
По умолчанию Re: Расширитель gpio (ввода/вывода) TP-LINK TL-MR3020 по i2c на PCF8574

Не подгружается модуль 44780:

insmod hd44780
failed to insert /lib/modules/4.1.6/hd44780.ko
___________________________________
Прошивка у меня самосборная. В чём может быть проблема?
Может ещё каких-то модулей ядра не хватает?
В исходниках подправил соответствие GPIO:
#define HD_RS 56
#define HD_RW 57 // not used if LCD is write-only (typical)
#define HD_E 58
#define HD_DB4 60
#define HD_DB5 61
#define HD_DB6 62
#define HD_DB7 63

Пробовал Ваш готовый модуль подсовывать, таже ситуация.
Viktor1984 вне форума   Ответить с цитированием
Старый 06.10.2015, 02:04   #22
khseal
Senior Member
 
Регистрация: 19.09.2014
Сообщений: 220
Вес репутации: 0
khseal is a glorious beacon of lightkhseal is a glorious beacon of lightkhseal is a glorious beacon of lightkhseal is a glorious beacon of lightkhseal is a glorious beacon of lightkhseal is a glorious beacon of light
По умолчанию Re: Расширитель gpio (ввода/вывода) TP-LINK TL-MR3020 по i2c на PCF8574

Что нибудь еще в логах пишет? Модуль сами собирать пробовали или чужой использовали?
khseal вне форума   Ответить с цитированием
Старый 06.10.2015, 09:53   #23
Viktor1984
Junior Member
 
Регистрация: 07.11.2014
Сообщений: 3
Вес репутации: 0
Viktor1984 is an unknown quantity at this point
По умолчанию Re: Расширитель gpio (ввода/вывода) TP-LINK TL-MR3020 по i2c на PCF8574

Цитата:
Сообщение от khseal Посмотреть сообщение
Что нибудь еще в логах пишет? Модуль сами собирать пробовали или чужой использовали?
Собирал свой и включал его сразу в прошивку, отдельно от прошивки тоже собирал. Так же пробовал готовый модуль из первого поста.
Ниже скриншот, и файл с подправленным исходником.
Может можно какой-то код добавить в исходник для того, чтоб понять почему он не подгружается?
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок экрана от 2015-10-06 12:34:33.jpg
Просмотров: 328
Размер:	86.2 Кб
ID:	3127  
Вложения
Тип файла: txt hd44780.c.txt (5.4 Кб, 175 просмотров)
Viktor1984 вне форума   Ответить с цитированием
Старый 08.02.2016, 01:55   #24
melsem
Moderator
 
Регистрация: 19.10.2013
Сообщений: 479
Вес репутации: 599
melsem has much to be proud ofmelsem has much to be proud ofmelsem has much to be proud ofmelsem has much to be proud ofmelsem has much to be proud ofmelsem has much to be proud ofmelsem has much to be proud ofmelsem has much to be proud of
По умолчанию Re: Расширитель gpio (ввода/вывода) TP-LINK TL-MR3020 по i2c на PCF8574

Тута есть i2c_hd44780 модуль.
А с этой темы использовать только как расширитель количества свободных gpio-выводов.
melsem вне форума   Ответить с цитированием
Старый 13.05.2016, 14:44   #25
CAHTEXHIK
Junior Member
 
Регистрация: 27.04.2016
Сообщений: 7
Вес репутации: 0
CAHTEXHIK is an unknown quantity at this point
По умолчанию 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
, где 0x27 - код устройства, далее адрес и состояние.

Извиняюсь если оффтопнул, но в соседней теме у меня так ничего и не вышло со связкой роутер-UART-atmega. Зато вот получилось сделать роутер-i2c-atmega.
Код скоперфильдил отсюда
CAHTEXHIK вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

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

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

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


Текущее время: 19:48. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика