FLProg
Вход на сайт
Логин:
Пароль:
Поиск
...
Статистика
Понедельник, 20.11.2017, 00:35
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 2 из 4«1234»
Модератор форума: support, Сергей, Олег, Anydy 
Форум » Основной » Спросить у знатоков » Пользовательский блок ( Помощь )
Пользовательский блок ( Помощь )
Sancho Дата: Понедельник, 10.07.2017, 14:33 | Сообщение # 16
Генерал-майор
Группа: Проверенные
Сообщений: 519
Награды: 14
Репутация: 16
Статус: Offline
pan,
Библиотека Write.h
Простые команды: запись
одного

Wire.beginTransmission(address);
Wire.write( byte ); // адрес регистра
Wire.write( byte ); // значение
Wire.endTransmission();

несколько
Wire.beginTransmission(address);
Wire.write(first byte);
Wire.write(byte);
Wire.write(byte);
Wire.write(byte);
Wire.endTransmission();

чтение одного

Wire.beginTransmission(address);
Wire.write( byte ); // адрес регистра

Wire.endTransmission();
Wire.requestFrom(address, (uint8_t) 1);
rezultat = Wire.read();

несколько, в примере 3

Wire.beginTransmission(address);
Wire.write( first byte );  // адрес первого регистра 
Wire.endTransmission();
Wire.requestFrom(address, (uint8_t) 3);
rez_1 = Wire.read();
rez_2 = Wire.read();
rez_3 = Wire.read();

Добавлено (10.07.2017, 14:33)
---------------------------------------------
Необходимо учитывать семибитную систему адресации, где правый, младший разряд в восьмибитном слове - это служебный символ запись/чтение.
То, как определяет сканер FLPRog, можно вставлять напрямую и ничем не заморачиваться.


Если не получится на контроллере - сделаю на тразисторах и 155/176...

Сообщение отредактировал Sancho - Понедельник, 10.07.2017, 14:24
 
pan Дата: Понедельник, 10.07.2017, 14:44 | Сообщение # 17
Генерал-полковник
Группа: Проверенные
Сообщений: 1003
Награды: 38
Репутация: 35
Статус: Offline
как будет выглядеть аналогия железного i2c  Wire.requestFrom(X,Y,); ?

Добавлено (10.07.2017, 14:44)
---------------------------------------------
блин проглядел. сори

 
Sancho Дата: Понедельник, 10.07.2017, 14:48 | Сообщение # 18
Генерал-майор
Группа: Проверенные
Сообщений: 519
Награды: 14
Репутация: 16
Статус: Offline
Не совсем понял вопрос.
I2c в ардуино на А4,А5 аналогична в работе serial0, также в setup Wire.begin(); как и Serial.begin(115200);
Глубже не копал...


Если не получится на контроллере - сделаю на тразисторах и 155/176...

Сообщение отредактировал Sancho - Понедельник, 10.07.2017, 14:57
 
pan Дата: Понедельник, 10.07.2017, 14:51 | Сообщение # 19
Генерал-полковник
Группа: Проверенные
Сообщений: 1003
Награды: 38
Репутация: 35
Статус: Offline
Sancho, для особо одаренных( я про себя) , как пины назначить

Сообщение отредактировал pan - Понедельник, 10.07.2017, 14:52
 
Sancho Дата: Понедельник, 10.07.2017, 14:55 | Сообщение # 20
Генерал-майор
Группа: Проверенные
Сообщений: 519
Награды: 14
Репутация: 16
Статус: Offline
При "изготовлении" пользовательских блоков указанные выше "наборы" лучше определять в функции и потом делать к ним обращения с аргументами. Не запутаешься.

Добавлено (10.07.2017, 14:54)
---------------------------------------------
Например, название
uint ReadRegister(uint8_t address , uint8_t offset)

внутри
Wire.beginTransmission(address);
Wire.write(offset);
Wire.endTransmission();
Wire.requestFrom(address, (uint8_t) 1);
return Wire.read();

Добавлено (10.07.2017, 14:55)
---------------------------------------------
Пины на ардуинке я не пробовал переназначать, не было необходимости.
По умолчанию А4 А5. Сори, исправил


Если не получится на контроллере - сделаю на тразисторах и 155/176...

Сообщение отредактировал Sancho - Понедельник, 10.07.2017, 14:57
 
pan Дата: Понедельник, 10.07.2017, 14:57 | Сообщение # 21
Генерал-полковник
Группа: Проверенные
Сообщений: 1003
Награды: 38
Репутация: 35
Статус: Offline
я сделал блок с физическим i2c  там с микрухи считывается 2 байта, адреса регистра нет.
Wire.requestFrom(adr,2,true);
data1=Wire.read();
data2=Wire.read();

хочу посадить на программный i2c с выбором пинов


Сообщение отредактировал pan - Понедельник, 10.07.2017, 14:57
 
Sancho Дата: Понедельник, 10.07.2017, 15:00 | Сообщение # 22
Генерал-майор
Группа: Проверенные
Сообщений: 519
Награды: 14
Репутация: 16
Статус: Offline
Надо глянуть библиотеку Wire.h
Сейчас посмотрю.


Если не получится на контроллере - сделаю на тразисторах и 155/176...
 
pan Дата: Понедельник, 10.07.2017, 15:01 | Сообщение # 23
Генерал-полковник
Группа: Проверенные
Сообщений: 1003
Награды: 38
Репутация: 35
Статус: Offline
для программного случайно не другая библиотека нужна?
 
Sancho Дата: Понедельник, 10.07.2017, 15:07 | Сообщение # 24
Генерал-майор
Группа: Проверенные
Сообщений: 519
Награды: 14
Репутация: 16
Статус: Offline
Посмотрел. Ничего о пинах нет.
Цитата pan ()
для программного случайно не другая библиотека нужна?
Думаю, да. 
Как и для второго уарта...


Если не получится на контроллере - сделаю на тразисторах и 155/176...
 
Dev1 Дата: Понедельник, 10.07.2017, 16:35 | Сообщение # 25
Генерал-лейтенант
Группа: Проверенные
Сообщений: 627
Награды: 12
Репутация: 17
Статус: Offline
Цитата с форума амперки smok 

Цитата
Программно можно сделать и SPI, и serial, и все остальное. Разница только в количестве времени, требуемого для выполнения пересылки. В случае аппаратного интерфейса можно запустить передачу и продолжать выполнять другие задачи, а об окончании передачи можно узнать по прерыванию либо периодически проверяя флаги в статусном регистре. В случае же программного формирования сигналов контроллер занят в течение всей пересылки и других действий в это время выполнять не может.


Win7/10-64 FLProg v2.5.1 (Beta v2.5.4) external IDE 1.8.5

 
pan Дата: Суббота, 15.07.2017, 13:19 | Сообщение # 26
Генерал-полковник
Группа: Проверенные
Сообщений: 1003
Награды: 38
Репутация: 35
Статус: Offline
Dev1, это я и без амперки знаю. согласен не самая нужная вещь, но вдруг понадобится.

Добавлено (14.07.2017, 10:55)
---------------------------------------------
появилась проблемка с блоком. методом тыка выяснилось что из за кода в блоке такого вида
 pinMode(CAP_PIN, OUTPUT);
pinMode(CAP_PIN, INPUT);

отдельно блок работает а другим не дает.
эти строчки выполняются в цикле. может ли это влиять на работу остальной программы? или глюк в другом?

Добавлено (14.07.2017, 11:19)
---------------------------------------------
вопрос снят. всё работает. видимо был глюк где то

Добавлено (15.07.2017, 13:19)
---------------------------------------------
еще один вопрос)
 что то затупил вроде на простом . сть код
for(Count = 1; Count <= 16; Count++)
  {
    digitalWrite(SCL_PIN, LOW); 
    if (!digitalRead(SDO_PIN))
     Key_State = Count; 
     digitalWrite(SCL_PIN, HIGH);
  }  
по последовательному порту ногодрыгом смотрит какая кнопка нажата (из 16) и возвращает номер нажатой кнопки (при чем судя по коду если нажата не одна, то вернет значение кнопки с большим порядковым номером.
 как правильно принять не номер а все 16 бит ?

 
Dev1 Дата: Суббота, 15.07.2017, 14:52 | Сообщение # 27
Генерал-лейтенант
Группа: Проверенные
Сообщений: 627
Награды: 12
Репутация: 17
Статус: Offline
Цитата pan ()
как правильно принять не номер а все 16 бит ?
Операции с битами - дешифратор не пойдет? 

Цитата
Блок служит для выдачи высокого логического уровня на выход с номером соответствующим значению, подаваемому на вход блока. При подаче на вход блока значения 0, на всех выходах будет низкий логический уровень.
В редакторе блока можно настроить количество выходов.


Win7/10-64 FLProg v2.5.1 (Beta v2.5.4) external IDE 1.8.5

 
pan Дата: Суббота, 15.07.2017, 14:57 | Сообщение # 28
Генерал-полковник
Группа: Проверенные
Сообщений: 1003
Награды: 38
Репутация: 35
Статус: Offline
Dev1, можно конечно подать на стандартный дешифратор. но это не то. если принять все биты то можно будет отслеживать одновременно нажатие любой комбинации кнопок.
так правильно?
for(int Count = 0; Count < 16; Count++)
{
digitalWrite(SCL_PIN, LOW); 
if (digitalRead(SDO_PIN)) { Key_State |= 1 << Count);}
digitalWrite(SCL_PIN, HIGH);
}
 
Sancho Дата: Суббота, 15.07.2017, 16:55 | Сообщение # 29
Генерал-майор
Группа: Проверенные
Сообщений: 519
Награды: 14
Репутация: 16
Статус: Offline
pan, просто идея...
EPRST = 1;
Key_2_Byte = 0; // unsigned int два байта состояния клавиатуры
for(int Count = 0; Count < 16; Count++)
{
Key_2_Byte =Key_2_Byte + Key_Stat * EPRST; // Key_Stat - Нажата клавиша - 1, нет - 0
EPRST = EPRST * 2;

}

Добавлено (15.07.2017, 16:55)
---------------------------------------------
Что это ты такое мудришь? Что и откуда считываешь?


Если не получится на контроллере - сделаю на тразисторах и 155/176...
 
pan Дата: Воскресенье, 16.07.2017, 17:03 | Сообщение # 30
Генерал-полковник
Группа: Проверенные
Сообщений: 1003
Награды: 38
Репутация: 35
Статус: Offline
Sancho, ни чего не мудрю. нужно считать 2 байта по последовательному порту. программно , ногодрыгом

Добавлено (16.07.2017, 12:52)
---------------------------------------------
ни кто не знает чтоли?

Добавлено (16.07.2017, 17:03)
---------------------------------------------
ребят , ну давайте осилим вместе . помогите )

 
Форум » Основной » Спросить у знатоков » Пользовательский блок ( Помощь )
Страница 2 из 4«1234»
Поиск:

FLProg © 2017
Яндекс.Метрика