Монтажник рэа задаёт вопросы программисту и результаты их беседы.

Клапауций
Offline
Зарегистрирован: 10.02.2013

 

///////////////////////////////////////////////////////////////////////////////////
Начало темы отсюда.
Дабы не зафлуживать чужие темы - буду вопрошать здесь и публиковать результаты.
прим. модераторам и остальным, ратующим за обзывание тем по феншую: название темы полностью соответвует содержанию.
///////////////////////////////////////////////////////////////////////////////////
 
Итак: результатом ответа на первый вопрос явилось создание прототипа модульного устройства.
Основной модуль(Atmega16*) и дополнительный модуль, датчик, обработчик сырых данных(Atmega8*), обмениваются информацией по линии последовательной передачи данных (UART, Serial, RX TX), Atmega8 принимает код нажатой кнопы IR-пульта, отправляет данные Atmega16 , где значение кода записывается в переменную и выводится на экран LCD.
 
Зачем нужна модульная структура устройства?:
1. Что-бы освободить основной модуль от занятий тяжёлой ерундой по сбору, обработке сырых данных, индикации результатов своей работы, приведения результатов своей работы в исполнение и позволить заниматься чем-то более интересным или, просто, ничегонеделанием и присмотром за работой дополнительных модулей.
2. Т.к. дополнительные модули, представляют из себя перепрограммируемые интеллектуальные датчики/индикаторы/приводы устройств, то это позволяет более гибко подходить к конструированию новых устройств, используя готовые наработки, а так же возможность наращивания мощностей конечного устройства, не ограничиваясь аппаратными ресурсами одного камня.**
3. Кому не нужно - согласен, вам не нужно.
 
*марки камней не принципиальны и приведены в качестве практического примера.
Atmega16 пользуется лоадером USBaspLoader.
Atmega8 без лоадера, фьюзы шить: avrdude -p atmega8 -c stk500v2 -U hfuse:w:0xc1:m -U lfuse:w:0x9f:m
**т.к. подключение по UART тупиковый путь, ограничивающий количество подключаемых дополнительных модулей количеством линий, то следующие варианты дополнительных модулей будут ориентированы на подключение по шине I2C.
 
Код:
IR_RX_TX_ATMEGA8_transmitter
#include <IRremote.h>

IRrecv irrecv(2);
decode_results results;

unsigned long ir;

byte bytes[4];

void setup() {
Serial.begin(302400);
irrecv.enableIRIn();
}

void loop() {
if (irrecv.decode(&results)) {
if ((results.value > 0) && (results.value < 0xFFFFFFFF)) {
unsigned long nir = results.value;
if (nir != ir) {
ir = nir;
bytes[0] = ir & 0xFF;
bytes[1] = (ir & 0xFF00) >> 8;
bytes[2] = (ir & 0xFF0000) >> 16;
bytes[3] = (ir & 0xFF000000) >> 24;
Serial.write(bytes, 4);
}
}
irrecv.resume();
}
}
IR_RX_TX_ATMEGA16_receiver
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

unsigned long ir;

void setup() {

lcd.begin(16, 2);
Serial.begin(302400);

}

void loop() {
if (Serial.available() > 3) {
byte ir8[] = {Serial.read(), Serial.read(), Serial.read(), Serial.read()};
unsigned long *ir32 = (unsigned long*)&ir8;
ir = ir32[0];
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("DEC:"); lcd.print(ir, DEC);
lcd.setCursor(0, 1);
lcd.print("HEX:"); lcd.print(ir, HEX);
}
}

 

leshak
Offline
Зарегистрирован: 29.09.2011

 

Клапауций пишет:

прим. модераторам и остальным, ратующим за обзывание тем по феншую: название темы полностью соответвует содержанию.

 
примечание (незнаю кому, то ли програмисту,  то ли програмеру): название темы полностью не соответсвует содержанию. Причем настолько что первым позывом было унести ее в отвлеченные темы. Честно говоря открывая ее ожидал прочитать какую-то классную историю с анекдот.ру. Какую-то вариацию противостояния "физики - лирики", в ипостасе "железячники - програмеры".
 
В раздел "программирование?". Есть сомнение, ну да ладно... IMHO раздел "общие" - был бы более подходящим. Так как затронутые вопросы как раз "на стыке".
 
Далее "модульная архитектура", повторное использование наработок? Ну дык, а что в этом нового? В конце, концов половина шилдов на этом построена. Библиотеки на этой идее возникли.  Да у нее есть плюсы (и вы перечислили), но - есть и минусы. Открыли ее для себя? Замечательно. Поделились кодом и описали для тех кто не знает? Тоже хорошо (всегда есть те для кого это вновинку и будет полезно), но... чисто на мой вкус "слишком много пафоса", не соотвествующего глубине проработки темы. 
 
А теперь "по теме":
1. Выбор Serial в качестве шины для "универсальных модулей" - очень сомнительно. Банально скетчи заливать - уже неудобно. Я не говорю про многомодульсть.  Вообщем-то именнодля для организации внутрмодульного общения изобретались SPI и I2C. Так что "прежде чем делать открытие - загляни в справочник. К. Прутков. Инженер. Советы начинающему гению".
 
2. Весь кусок 
bytes[0] = ir & 0xFF;
bytes[1] = (ir & 0xFF00) >> 8;
bytes[2] = (ir & 0xFF0000) >> 16;
bytes[3] = (ir & 0xFF000000) >> 24;
Serial.write(bytes, 4);

Можно заменить одной строкой, без промежуточных массивов и  проч. мдени.

Serial.write((byte *)&ir,sizeof(ir));

И чтение - аналогично одной сторокой сделать. И в той ветке где вы спрашивали - я показывал вам этот вариант.

Конечно "как делать" - дело вкуса. Но... "уровень пафоса" вспоминается. Плюс с использованием библиотеки IRRemote места в оперативке 8-мой атмеги - очень мало остается. Каждый байт там на счету.

А еще вы забыли обработать или передать главному контроллеру results->decode_type . То есть у главного узнать был-ли это "какой-то мусор не декодируемый" или "код кнопки" - шансов нет.

А еще у вас под нож пошли пульты/кодеки которые удержание кнопки кодируют не сменой одного бита, а тупо повтором, или посылкой кода REPEAT

А еще у вас абсолютно "не помехо защищенно". Никаких отслеживаний хотя-бы "начало пакета".  Если где-то один байт потерялся, или случайно затесался мусорный в момент включения, все, синхронизация сбилась. 

А еще скорость 302400 скажем мягко - весьма не традициона. И тоже может доставить много приятных моментов. Особенно учитывая предыдущий пункт.

Вообщем как на частное решение, частной задачи, на статью типа "как сделать IR управление внешней ATMEGA8" - вполне годный материал. А вот на описание подхода который "позволяет более гибко подходить к конструированию новых устройств" - не тянет. "Претензия на новизну" - есть. Новизны - нет.

P.S. Да, я не в настроении. Укушу.
P.S.S Если довести до ума, то может выйти "IR-шилд". Только вначале до ума довести. Плюс как минимум - схему подключения.

 
Клапауций
Offline
Зарегистрирован: 10.02.2013

Кто тут?

Если модератор, то пишите в личку... хотя, не наблюдаю ея здесь.

Раздел "Программирование" самый подходящий - мне лично подходящий, т.к. тема создана исключительно ради личных эгоистичных интересов, что набегут программеры и начнут исправлять мой быдлокод.

Конструктивные исправления/поправки принимаются - с остальной критикой, идите в пень.

leshak
Offline
Зарегистрирован: 29.09.2011

Клапауций пишет:

Конструктивные исправления/поправки принимаются - с остальной критикой, идите в пень.

А по каким критерям будете определять что  конструктивно, а что нет? Уверены что определялка не глючит?

И с посыланиями в пень - осторожней. Не один вы умеете посылать - по назначенью.  Да, как показывает практика, чем больше топик-стартер хорохорится и объясняет другим что им делать - тем больше флуда и веселухи. Больше желания просто потрепать языком. Не далее как вчера - вы сами в таком "тро-ло-ло" принимали участие. Причем были одним из закоперщиков.  Когда топик-стартер завел тему "ни о чем". Чем больше возмущался - тем больше развлекались. 

Также не забывайте, что если ваши "эгоистичные интересы", а есть чужие. Тоже эгоэстичные. И они могут не совпадать с вашими.

Так что давайте, не призывайте к конструктиву, а сами в это русло рулите.  Я вам указал на конкретные проблемы/недосмотры в вашем решении. Пока никаких попыток их решить - от вас не видно. Только "бла-бла" на тему "лички", "куда разместили", "что делать с критикой". То есть - вы сами явно тяготеете к поговорить "на отвлеченные темы", а не про суть. Так что не обижайтесь если тема сорвется во флуд. Что опять-таки говорит что мое первое чувтсво "она должна была быть в отвлеченных" - верное. Вы уже названием задали ей такой тон. "Как вы яхту назовете...",

либо выгребайте против течения.

 

Клапауций
Offline
Зарегистрирован: 10.02.2013

Почему не потрепаться - я ведь написал, что эта тема для этого и создана.

Итак: оптимизация первого варианта IR_RX_TX_ATMEGA8_transmitter


#include <IRremote.h>

IRrecv irrecv(2);
decode_results results;

unsigned long ir;


void setup() {
Serial.begin(302400);
irrecv.enableIRIn();
}

void loop() {
if (irrecv.decode(&results)) {
if ((results.value > 0) && (results.value < 0xFFFFFFFF)) {
unsigned long nir = results.value;
if (nir != ir) {
ir = nir;

Serial.write((byte*)&ir,sizeof(ir));

}
}
irrecv.resume();
}
}

IR_RX_TX_ATMEGA16_receiver - где-то я пропускаю в объявлении переменных


#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

unsigned long ir;

void setup() {

lcd.begin(16, 2);
Serial.begin(302400);

}

void loop() {
if(Serial.available()) {Serial.readBytes(byte*)&ir,sizeof(ir);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("DEC:"); lcd.print(ir, DEC);
lcd.setCursor(0, 1);
lcd.print("HEX:"); lcd.print(ir, HEX);
}

говорит, что

 

build/IR_RX_TX_ATMEGA16_receiver.ino.cpp:16: error: expected primary-expression before '*' token
build/IR_RX_TX_ATMEGA16_receiver.ino.cpp:16: error: expected primary-expression before ')' token
leshak
Offline
Зарегистрирован: 29.09.2011

Клапауций пишет:

Почему не потрепаться - я ведь написал, что эта тема для этого и создана.

Тогда почему не в отвлеченных?  Ох, чую что это была попытка/аллюзия на Сократовские беседы.  Как бы нам на Ксантиппу не нарватся :)

>говорит, что

Ну ведь, речью про * уже намекнуло где траблу искать.

Смотрим на 

Serial.readBytes(byte*)&ir,sizeof(ir)

И ищем 10-ть различий с

Serial.write((byte*)&ir,sizeof(ir));

Различие 1-вое: write/readBytes - все правильно. Нужное различие.
Различие 2-тое:????
Различие 3-тое:????

И это... начинайте/привыкайте форматировать код отступами. Для начала хоть CTRL-T нажмите в IDE. (но лучше изначально руками все отбивать. в момент написания. отступы - отражают мысль).

А то во втором скетче не ясно. То ли вы изначально хотели выводить на LCD даже когда ничего не пришло, то ли уже трех-соснах и 5-ти скобках запутались.

Клапауций
Offline
Зарегистрирован: 10.02.2013

Отсутсвие скобок я увидел, двух остальных различий в упор не наблюдаю - просто использовал ваш пример, откуда я могу знать, внезапно, в отсутсвии скобок имеется тайный смысл.

Говорит, что 

 

build/IR_RX_TX_ATMEGA16_receiver.ino.cpp:16: error: invalid conversion from 'byte*' to 'char*'
build/IR_RX_TX_ATMEGA16_receiver.ino.cpp:16: error:   initializing argument 1 of 'size_t Stream::readBytes(char*, size_t)'
 
Форматирование нормальное - могу большой кусок кода глазом окинуть, а не наблюдать сетку странных символов.
 
зы
Тогда почему не в отвлеченных?  Ох, чую что это была попытка/аллюзия на Сократовские беседы.  Как бы нам на Ксантиппу не нарватся :)
Аха - ...почему в шапке?
leshak
Offline
Зарегистрирован: 29.09.2011

>invalid conversion from 'byte*' to 'char*'

Ну хочет оно char*, скажите ему что это char*

Serial.readBytes((char*)&ir,sizeof(ir));

Ну если вот это

}
}
irrecv.resume();
}
}

или это

 

if(Serial.available()) {Serial.readBytes(byte*)&ir,sizeof(ir);
}

Нормально форматирование, то я трамвай на повороте. Боюсь представить что же тогда не нормальное форматирование в вашем понимании. Вообщем боюсь вам опять поспортить хочется больше чем конструктив. Думаю если бы я в монтаже все провода ложил перепутывая как угодно, плюя на стандарты цветового кодирования и завязывая узелочками на память, со словами "а мне так видней", что бы вы мне сказали?

P.S. "Аха - ...почему в шапке?" ну что же вы так? Нифига себе плавный переход от Философа к советскому прапорщику.

Клапауций
Offline
Зарегистрирован: 10.02.2013

Оптимизация первого варианта IR_RX_TX_ATMEGA16_receiver


#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

unsigned long ir;

void setup() {

lcd.begin(16, 2);
Serial.begin(302400);

}

void loop() {
if(Serial.available()) {Serial.readBytes((char*)&ir,sizeof(ir));
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("DEC:"); lcd.print(ir, DEC);
lcd.setCursor(0, 1);
lcd.print("HEX:"); lcd.print(ir, HEX);
}
}

зы

Оно хотело char... оказывается - почему ему кормили byte?

зы

По поводу форматирования.

leshak, - вы трамвай на повороте.

Спасибо за подсказки.

leshak
Offline
Зарегистрирован: 29.09.2011

Клапауций пишет:

Оно хотело char... оказывается - почему ему кормили byte?

Давайте наверное разберемся "почему небыло круглых скобок?".  Я думаю потому, что вы не осознали что "скетч пишете вы". Кто-то на форуме - дает вам только подсказки/направление. Но принимать решение - брать эти подсказки, доводить их до ума - это ваша задача. Если вы не понимаете что фигова туча текста пишится на бегу и не всегда есть возможно прогнать/проверить через компилятор - вы сам себе злобный буратино. И если, даже после того как компилятор ругнулся, вас не смущает что у функции параметры не обернуты в круглые скобки - значит рано еще заниматся модульными архитектурами, а нужно про базовый синтаксис читать. Одно дело опечатка при копи-пастах, другое дело не понимание этого когда "уже компилятор завопил".

Кстати по поводу "прогрнать через компилятор". Вы, к примеру используете библиотеку. Значит ваши скетчи, проверить/прогнать - я не могу. Не буду же я ставить ради вас библиотеку. А если бы и захотел ставить, то ссылки на нее - нет. А если у кого-то есть экран, но не такой как у вас? У вас как-то вывод отделен от остальной логики? Модульность и повторное использование кода - она не только в железе бывает, но и в коде. Слабосвязанный код - это тоже то к чему нужно стремится. Иначе полезность того что вы выкладываете для других - стремится к нулю. Полезно будет только в тех редких случаях когда у кого-то будет в точности такое же железо как у вас. Но и то... не факт что челвоек нагуглит ту же версию либы что и у вас и у него все заработает.

Возвращаемся к " почему ему кормили byte?". Как, надеюсь, уже поняли - код писался из головы.  Логично предположить что функция readBytes принимает массив байтов, а не чаров? IMHO логично. Почему автор функции поступил не логично - лично я могу только гадать, но думаю тоже были на это причины (возможно тоже просто копи-пастал откуда-то). Да можно было не гадать  по имени о типе параметров, а пойти посмотреть в документацию. Но... а я должен? Это не заказной код (там я конечно, перед тем как отдавать заказчику проверю/протещу), а.... вообщем "даренному коню - в зубы не смотрят". А вот почему вы, раз возникла проблема, не пошли и не сверелись с документацией - мне не понятно. Лично я, когда в чужом коде вижу функцию с которой не знаком, просто из любопытсва читаю про нее, что-бы знать на будущие что это за зверь. А у вас же выходит, при малейшей трудности "А...ааа! Мама, ничего не выходит...". Брать за ручку и водить вас? Так даже когда ведешь - еще какие-то претензии. 

Клапауций пишет:

По поводу форматирования.

leshak, - вы трамвай на повороте.

А предположить что когда я писал эти слова - я был уверен в том что код некачественный слабо?  Ну вот просто банально, как вы думаете у кого из нас лучше разбирается какой код качественный/читабельный? Ну понимаю что "все субъективно", но.. есть же все-таки какие-то стандарты. Конечно - я не бог. И мой код можно критиковать за качество. И есть програмеры лучше меня. Но я уверен, что если скормить вот ЭТОТ код любому статическому анализатору (да, преставте себе есть и такие програмы, которые автоматически позволяют следить за стилем кода) - они скажут что такое форматирование - говно. Как бы вы не убеждали что "свое не пахнет".

Вообщем похоже "не в коня корм" идет. Слишком много сил приходится тратить что-бы доказать вам что-то на ровном месте. Причем не из-за непонимания/незнания, а из-за ЧСВ. Нет, у вас, конечно, не клинический случай, "упирательство" - вполне умеренное. На самом деле я тоже очень частно веду себя точно-также или хуже, когда мне что-то втолковывают/учат. Тоже любил "подкуснуть" учителей в школе :) . Так что про вас как личность - я не хочу сказать ничего плохого.  Да только мне эти бодания - нафиг упали :) Как-то скучно и не дают положительных эмоций.

 

 

Клапауций
Offline
Зарегистрирован: 10.02.2013

 

leshak пишет:
Давайте наверное разберемся "почему небыло круглых скобок?"
Если не желаете писать по три простыни текста, смысл которого можно выразить в одной строке, то просто укажите на явную ошибку и всё.
leshak пишет:
Иначе полезность того что вы выкладываете для других - стремится к нулю.
Я не выкладываю ничего "для других" - я отчитываюсь перед теми, кто мне ответил по делу, как были применены их рекомендации.
 
leshak пишет:
Возвращаемся к " почему ему кормили byte?"
Пойду утоплюсь от безысходности...
Чего делать то?
 
leshak пишет:
А предположить что когда я писал эти слова - я был уверен в том что код некачественный слабо?
Почему я должен делать, то что мне не подходит ни по каким критериям?
Мне код в виде:
if (EEPROM.read(e0) != ee) {if (EEPROM.read(0) != 0) {if (EEPROM.read(0) != 1) {EEPROM.write(e0, ee); BIP_0(); LED_BUTTON();}}}

более понятен по смыслу, чем в разодранном по всему монитору виде.

Хотите автоформатирования - просите админов сайта, пусть сделают дополнительную кнопу.
 
leshak пишет:
Но я уверен, что если скормить вот ЭТОТ код любому статическому анализатору.
...если носки зажать в тиски.
Смысл?
 
 
tsostik
Offline
Зарегистрирован: 28.02.2013

Клапауций пишет:

Почему я должен делать, то что мне не подходит ни по каким критериям?

Мне код в виде:
if (EEPROM.read(e0) != ee) {if (EEPROM.read(0) != 0) {if (EEPROM.read(0) != 1) {EEPROM.write(e0, ee); BIP_0(); LED_BUTTON();}}}

более понятен по смыслу, чем в разодранном по всему монитору виде.

 

Это утверрждение примерно такое же по уровню, как примерно следующее:

Цитата:

Если я кладу проводку, то фаза должна быть в черном проводе (потому что как шарахнет, так почернеешь), земля красная (потому что у меня на даче глина красная), а ноль белый (потому что если круглое, значит оранжевое).

Автору такая логика, может будет понятна. Сегодня. Ну и через год, если не забудет. Хорошему профессиональному электрику она просто пофиг, потому что он перед работой все равно все прозвонит, а вот остальным может выйти боком.

Стандарты их придумывают не для того, чтобы бессмысленно напрягать исполнителей и следование им приносит гораздо больше дивидендов, чем неудобств.

Клапауций
Offline
Зарегистрирован: 10.02.2013

Цитата:
Если я кладу проводку, то фаза должна быть в черном проводе (потому что как шарахнет, так почернеешь), земля красная (потому что у меня на даче глина красная), а ноль белый (потому что если круглое, значит оранжевое).

Хехе... вы второй уже, кто пытается мне оппонировать, приводя странные примеры из жизни проводов.

Примеры неудачны, т.к. я радиомонтажник, а не разработчик/конструктор/технолог рэа.

Т.е., как в сборочной/монтажной документации прописано, так всё и будет сделано - и цвет проводов, и способы укладки... так сказать "из того же материала", хоть всё розовым кабелем обмотать.

Тема стандартизации компьютерного кода? - впервые о таком слышу, и тем более, встречаю таких ярых последователей сего каргокульта.

tsostik
Offline
Зарегистрирован: 28.02.2013

Просто цветовая маркировка проводки 220В така штука, что всем понятно, зачем ее соблюдать и к чему может привести ее несоблюдение.

Програмный код же (точнее даже не сам код, а стиль написания этого кода) на первый взгляд позволяет творить над собой все, чот угодно.

А вот потом оказывается, что этот код изредка надо сопровождать. И неожиданно выясняется, что сопровождние кода, написанного с жестким соблюдением style guide стоит (не только по деньгам) на порядки дешевле, чем кода, написанного как попало. И глбюки иногда вылезают такие, что запоминаются потом на всю жизнь. Есть у меня две любивых истории, из собственного опыта - про закрыва.щую фигурную скобку в лиспе и про переменные ttttt, tttt, iii и jjj в фортране-77, рассказывать долго, но поучительные аж жуть.

Впрочем, код Ваш, как хотите, так и пишите, просто потом не удивляйтесь последствиям -)

Snubist
Offline
Зарегистрирован: 18.02.2013

Клапауций пишет:

Тема стандартизации компьютерного кода? - впервые о таком слышу, и тем более, встречаю таких ярых последователей сего каргокульта.

Дело в том что если ты пишешь прогу, или делаешь проводку для себя, то делай как хочешь. 

Но если ты работаешь в команде, или как в данном случае выносишь код на форум. Где с твоим кодом будут разбираться, а может даже использовать в дальнейшем другие. То лучше приводить все к обще принятым нормам. Тогда человек увидев стандартное решение не будет терять время разбирая что куда идет и что откуда выходит. А даст совет, или станет использовать данное решения сам.

С цветовой маркировкой проводов тоже самое :)

leshak
Offline
Зарегистрирован: 29.09.2011

Клапауций пишет:

Тема стандартизации компьютерного кода? - впервые о таком слышу, 

Что говорит о вашем невежестве. Не "не знании", а именно невежестве. Так как еще и упорный. 

Плюс к тому однозначно указывает на то что вы никогда не работали в реальных больших проектах или в команде. И если не оставите подобных подход - то и не будете. Да возможно вам оно не нужно, но... участие в форуме - это тоже в некотором роде командная работа.  Но вы видимо из тех, кто и машину любит парковать "как мне удобно и чхать на всех".  Я конечно не знаю какой вы радиомонтажник, может и замечательный, но паттерны поведения - они дают себя знать.

Клапауций пишет:

и тем более, встречаю таких ярых последователей сего каргокульта.

Я вас удивлю - в серьезных фирмах есть еще и внутренний правила оформления кода. А если админ грамотный, то подобный кошмар просто закоммитить в репозиторий не даст. Даже не человек- робот нафиг пошлет.

Авторы ArduinoIDE тоже видимо, последователи сего странного культа - аж не поленились встроить этот функционал. Специально для чайников, которые "не знали, но хотят свой код в порядок привести". При все аскетичности ArduinoIDE - почему-то это реализовано было с самых ранних версий. Да откройте любой серьезный/зрелый OpenSource проект и посмотрите в него, будет там такое форматирование как у вас? Или такая простая мысль что полезно смотреть в чужой код что-бы поднять свои навыки это слишком трудная мысль?

Конечно,  вы правы никто вас не заставит писать не так как вам хочется. Вернее, если будете писать/поддерживать серьезный код - куда вы денетесь. Рано или поздно прийдете к необходимости придерживатся какого-нибудь стиля. Хотя... похоже вы любитель жевать кактусы, может и не прийдете.

Вообщем устраивает вас что ваш код незримую метку "быдло-кода", устраивает что "код воняет" - ну ваше дело. Пишите как хотите. Только не нужно теор.базу под это подводить. Вам просто лень и дух.противоречия силен.

 По крайней мере для себя я понял - вам чихать на то удобно или нет другим читать ваш код. Позвольте в ответ чихнуть на вас.

P.S. И чего это я так разошелся? Можно подумать мне вам зарплату за этот код платить нужно или я потом буду его поддерживать. Ну да ладно, могу позволить себе в дальнейшем даже не смотреть на него, что-бы не расстраиватся :)
P.S.S. А бардак в коде, кстате, говорит еще и о бардаке в голове.... по крайней мере "алгоритмическом бардаке"

Клапауций
Offline
Зарегистрирован: 10.02.2013

Господа, пишите петицию админам форума - пусть делают кнопу "Автоформатирование" в форумном редакторе кода или запретят правилами отступление от стандартов форматирования кода.

Переход на личности, какой я радиомонтажник и прочие высказывания - более, чем странны и бессмысленны в контексте полного отсутсвия проблемы с моей стороны, меня всё устраивает.

Не нравится вам мой код? - проходите мимо.

leshak
Offline
Зарегистрирован: 29.09.2011

На зло маме - попу отморожу.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Пришел в чужой дом. Вот козлы, скатерти светлые, вилки не красивые, сами уроды. Вот хозяева придурки.
Вам уже всё объяснили, мне добавить нечего. Да, я троль, большой и зеленый. Да не парьтесь, я уже прошел мимо и ушел, у меня своих дел море

alex_r61
Offline
Зарегистрирован: 20.06.2012

Разговор слепого с глухонемым :)

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Клапауций пишет:

Оптимизация первого варианта IR_RX_TX_ATMEGA16_receiver

Раскоментировать не лишним было бы, и пини там же указать...В целом тема полезная ;)

Клапауций
Offline
Зарегистрирован: 10.02.2013

hugoboss317 пишет:
Раскоментировать не лишним было бы, и пини там же указать...В целом тема полезная ;

Не начинай - Лешак тут всем рассказал "как, нужно кот писать, что бы не быть трамваем".

Поэтому, кто понимает смысл опубликованного, тому комментарии не нужны, а кто не понимает - комментарии не помогут.

зы

Что такое "пини"?

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Вот спасибо что "помогли"((( Зачем было рекомендовать тему, чтоб просто отмахнуться?

Клапауций пишет:

Что такое "пини"?

Ну как же, вы не знаете? Это синхронизация субмоллекулярного карборасщепителя с гоперполитронным диатомизатором...

Клапауций
Offline
Зарегистрирован: 10.02.2013

hugoboss317 пишет:
Вот спасибо что "помогли"((( Зачем было рекомендовать тему, чтоб просто отмахнуться?

А, ты просил помощи?

Ну, извини...

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Да, просил, с кодом уже разберусь как-нибудь, меня интересует к каким пинам подключать контроллеру друг к другу, на сколько я понимаю это должны быть TX RX. Будет просто супер если скажете что то вроде Атмега8 выход пин"х" Атмега 16 вход"у". Ну или что то в этом роде...

Клапауций
Offline
Зарегистрирован: 10.02.2013

Что бы не метаться со странными вопросами в гугле ищешь документацию на свои контроллеры, смотришь, на каких контактах обитает аппаратный UART, соединяешь RX первого с TX второго, TX первого с RX второго.

Аппаратно - всё.

По коду объяснять нечего - первый пишет себе в порт данные, второй читает эти данные уже со своего порта.

По поводу магии разборки посылаемых в порт символов на байты и последующей сборки байтов в символы

(byte*)&ir,sizeof(ir)

(char*)&ir,sizeof(ir)

- к Лешаку обращайся, это он мне предложил надёжный и изящный вариант.

 

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Принято, спасибо!

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Ну вобщем работает...ну как работает, через 10 на 11-й раз срабатывает, видимо виной всему эта часть кода

(results.value < 0xFFFFFFFF)

не раскоментировано же, хрен его знает...

Клапауций
Offline
Зарегистрирован: 10.02.2013

hugoboss317 пишет:

Ну вобщем работает...ну как работает, через 10 на 11-й раз срабатывает, видимо виной всему эта часть кода

(results.value < 0xFFFFFFFF)

не раскоментировано же, хрен его знает...

Ну, я не знаю, что здесь комментировать - теорию и практику применения чисел в повседневной жизни тебе вписать в комментарии кода из десяти строк?

По сабжу (results.value < 0xFFFFFFFF) - это значит, что значения переменной больше или равные 0xFFFFFFFF нам не нужны.

Почему не нужны - переведи шестнадцатиричное FFFFFFFF в десятичное и почитай в гугле о волшебных свойствах числа 4294967295 и зачем некоторые пульты шлют код FFFFFFFF.

Это всё теоретическая фигня в которую нет смысла заморачиваться, если ты всё правильно сделал на уровне железа.

Как у тебя реализовано на уровне железа?

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Клапауций пишет:
Как у тебя реализовано на уровне железа?

Атм8 и Атм32. Всё заработало. реагирует на пульт 99,9%

дело в том, что Атм8 реагировала чтолько если код с пульта посылылся  с FFFFFFFF.

Долго рассказывать но я разобрался. Ещё раз мои слова благодарности.

Сравнивани е правельно делаю?

if (ir == 1188865572) {b = 25, sound();} //Т уст = 25'C

может есть варианты попроще?

Клапауций
Offline
Зарегистрирован: 10.02.2013

hugoboss317 пишет:

Атм8 и Атм32. Всё заработало. реагирует на пульт 99,9%

дело в том, что Атм8 реагировала чтолько если код с пульта посылылся  с FFFFFFFF.

Долго рассказывать но я разобрался. Ещё раз мои слова благодарности.

Ты бы рассказал, что сделал - что такого с мега8-й, надеюсь, она у тебя не на 1-м мегагерце работает?

Там, конечно, нужно смотреть, что шлёт пульт - в моём случае на одном пульте, сначала слался код, а затем вдогонку FFFFFFFF. Для срабатывания общего кода оно без разницы, но у меня индикация кода на LCD, поэтому FFFFFFFF нафиг не нужен.

hugoboss317 пишет:
Сравнивани е правельно делаю?

if (ir == 1188865572) {b = 25, sound();} //Т уст = 25'C

может есть варианты попроще?

А, проще чего?

У меня так, допустим, эмуляция кнопки, проверяется было ли включено/выключено, если "да", то не нажимается

if (ir == 50168445) {if (digitalRead(14) != HIGH) {digitalWrite(14, HIGH);}}
if (ir == 50156205) {if (digitalRead(14) != LOW) {digitalWrite(14, LOW);}}

 

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Клапауций пишет:
Ты бы рассказал, что сделал - что такого с мега8-й, надеюсь, она у тебя не на 1-м мегагерце работает?

Нет, я сразу раскачал её до 16. Кварцу больше доверяю и лишних 6 "дырочке" уж просверлю, тем более что мега8 не в Дипе, там тупо лень было 28 штук сверлить, да и длинная она как сарган (места хватает на всё)

Клапауций пишет:
Там, конечно, нужно смотреть, что шлёт пульт...

Да вот в том то и дело что есть одна кнопка, которая мне в общем то и не нужна, но вот она и слала

Клапауций пишет:
слался код, а затем вдогонку FFFFFFFF

 и "работало" только после ёё первого нажатия( почему "работало" в кавычках позже скажу).

После сборки сначала проверил работу ИК на меге8 в целом, повесил на резервновыведеный пин порта светик.

Клапауций пишет:
у меня индикация кода на LCD, поэтому FFFFFFFF нафиг не нужен.

Вот потом подключил к Атмаге32 чтоб узнать нашли ли они общий язык и что выведет мега32 на LCD. А LCD то у меня на u8glib работает...да да, с которым я ссамого начала не подружился но светодиод на меге8 остался и вот моя ошибка, включение его в коде:







  ....................  
     if (nir != ir) {    
       ir = nir;

        Serial.write((byte*)&ir,sizeof(ir));
        LED_On; 
        delay(500);
        LED_Off; 
      }
    }
    irrecv.resume();
.........................

Когда за кодом летели "Эфки" LCD печатал код и диод блинькал даже если несколько кнопок подряд нажимал ну и т.д....если FFFFFF не было, ничего не светилось и не печатало..

Уже после того как внимательно поразглядывал ваши коды для обеих контроллеров, вписал данные DEK в свой скетч и загрузил.  Атм32 стал чётко реагировать на пульт.

Непонял ещё одного момента, Атм32 что то посылает Атм8? На сколько я вижу - нет. Диод загорался при нажатии на кнопку( на долю секунды,  delay(500) игнорировал, частота работы МК проверено, всё в норме) и после секундного отображения кода с пульна на LCD, ещё раз включался на ещё меньшее время. Так что до конца твои коды я не разгадал хоть их там жменька, одного и другого. 

Клапауций
Offline
Зарегистрирован: 10.02.2013

hugoboss317 пишет:
Непонял ещё одного момента, Атм32 что то посылает Атм8?

Согласно коду - ничего не посылает.

Вернее, "ничего задекларированного тобой", а на уровне программной реализации функции Serial - не вникал.

hugoboss317 пишет:
Диод загорался при нажатии на кнопку( на долю секунды,  delay(500) игнорировал, частота работы МК проверено, всё в норме) и после секундного отображения кода с пульна на LCD, ещё раз включался на ещё меньшее время. Так что до конца твои коды я не разгадал хоть их там жменька, одного и другого. 

Я так и не понял, зачем ты на 8-й атмеге вообще код менял - на 32-й можно было чуть изменить вывод переменной не на LCD, а вкуда тебе желается - светодиодом моргать или в компьютерный порт вывести значение переменной.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Клапауций пишет:
Я так и не понял, зачем ты на 8-й атмеге вообще код менял - на 32-й можно было чуть изменить вывод переменной не на LCD, а вкуда тебе желается - светодиодом моргать или в компьютерный порт вывести значение переменной.

На Меге8!? ну так мне надо было знать посылает ли мега что-то, такой был план, если мега посылает, диод мигает. Тоже на меге32, если принимает - мигает.Только изначально было так: 8 послала что-то - мигнула, 32 приняла что то.....и непонятно приняла или нет. Потом на ЖКИ вывел, через пятый на шестой раз срабатывание уже означало что аппаратно всё верно. На 32меге стал срабатывать диод только тогда, когда полученый код сравнивался и идентифицировался и  при этом также "послушно" мигал на 8-й меге. Вот я и подумал что 32 отвечает ещё что-то, но в коде 32-й намёка на посыл не видно...

Клапауций
Offline
Зарегистрирован: 10.02.2013

hugoboss317 пишет:
На Меге8!? ну так мне надо было знать посылает ли мега что-то, такой был план,

Понятно.