RabidRabbit 0 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба Это шутка? Если да, то обозначьте ее смайликом, если нет- то дайте развернутый ответ, включающий определение понятий "ядрёные", "высококачественные", "плесневеют" и прочих перлов, не имеющих общепринятой расшифровки применительно к передаче данных. Ну Вы же пишете "В крайнем случае можно и только RX/TX оставить, но качество сильно пострадает." без всяких смайлов и расшифровки. Считаю мой совет ничем не хуже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 168 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба перепроверил, точно PIC12F629 А нам приходится в который раз переспрашивать — зачем для домашней поделки в единственном числе нужна программная возня с МК без нужного аппаратного порта, тогда как сейчас практически в любом магазине этого добра вёдрами на любой вкус. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 16 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба Блин, перепроверил, точно PIC12F629. Не очень хороший выбор- там UART нету. Почему именно он? Намучаетесь сильно, лучше возьмите что-нибудь с аппаратным UART, сэкономите кучу времени и сил. А в Вашем случае- лучше с двумя портами, так как у Вас два канала связи: с USB и с ИК приемником. Правда, ПИКи с двумя аппаратными UART начинаются с 20 ножек (PIC24F08KA101, $2.40 в розницу на DigiKey). Кстати, в далеком прошлом для похожих развлечений хватало ИК приемника (пластмассовое трехногое из телевизора), подключенного к RS-232 порту и нескольких деталек. Может быть, и сейчас что-то похожее сделать, но уже подключившись подобным приемником к RX/TX входам этого USB преобразователя? Тогда процессор вообще не нужен, а все программирование сосредотачивается на разборках пакетов данных в компьютере. А еще интереснее, только сейчас увидел: MCP2150 На входе IRDA, на выходе- UART с расшифрованными данными :) Подозреваю, что подобного товара много, я уж не говорю про готовые стики USB-IRDA. Ну Вы же пишете "В крайнем случае можно и только RX/TX оставить, но качество сильно пострадает." без всяких смайлов и расшифровки. Считаю мой совет ничем не хуже. Пожалуйста, научитесь читать сообщение целиком, там еще есть три строчки. Понимаю что много, но попытайтесь. Там написано, какие дополнительные усилия нужны, чтобы качество все-таки не пострадало. Из чего следует (это довольно простой логический вывод), что если эти аппаратные или программные приемы не применять, то качество будет хуже. Под "качеством" подразумевается передача данных без потерь и искажений. Под передачей данных без потерь и искажений я имею в виду такую передачу данных, во время которой все единицы передаваемой передатчиком информации принимаются приемником в неискаженном виде и полностью. Так понятнее? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба В нём нет аппаратного UART'а, так что придётся софтово. А это - не более 4-6 kBps. А у Вас процессор ещё и декодированием ИрДы должен заниматься. Можно, конечно, увеличить частоту, поставив внешний кварц, но это две ноги дополнительные. Если более никаких входов не использовать, то, вроде хватает. Делать UART на устройстве с RC генератором бессмысленно. Либо кварц либо керамический резонатор обязательны. В середине 90х делал коммерческий продукт, который до сих пор на рынке на PIC16C71. У него при системном клоке 1 мегагерц без особого напряга было 9600. Правда, ПИКи с двумя аппаратными UART начинаются с 20 ножек (PIC24F08KA101, $2.40 в розницу на DigiKey). DigiKey присылают в Россию? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RabidRabbit 0 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба Под "качеством" подразумевается передача данных без потерь и искажений. Под передачей данных без потерь и искажений я имею в виду такую передачу данных, во время которой все единицы передаваемой передатчиком информации принимаются приемником в неискаженном виде и полностью. Хм, а если нули принимаются в искажённом виде и не полностью - то это на качество не влияет? Множество образцов промышленной аппаратуры содержит неполную реализацию RS232 в виде всего двух линий TX/RX и вполне себе стабильно работает. А заботу о каком-то качестве передачи единиц, да даже и нулей, путём добавления аппаратного контроля потока, в домашней наколенной разработке лично я считаю ничем не обоснованным излишеством. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Cosmojam 0 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба DigiKey присылают в Россию? Только на юр.лицо с растаможкой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 16 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба Хм, а если нули принимаются в искажённом виде и не полностью - то это на качество не влияет? Мда. случай запущенный. Я имел в виду единицу информации, а не логический уровень (единица или ноль). Множество образцов промышленной аппаратуры содержит неполную реализацию RS232 в виде всего двух линий TX/RX и вполне себе стабильно работает. Это хорошо, что Вы понимаете разницу между "Вполне стабильно" и "стабильно." И, кстати, что это за аппаратура? неужели действительно "промышленная" ? Хоть пример приведите, где в "промышленной" аппаратуре такое. А заботу о каком-то качестве передачи единиц, да даже и нулей, путём добавления аппаратного контроля потока, в домашней наколенной разработке лично я считаю ничем не обоснованным излишеством. Это два противоположных подхода к одной задаче. Вы изначально считаете надежную конструкцию извращением, я же извращением считаю необоснованное уменьшение надежности. Как я уже писал в моем первом посте, надобность в сигналах управления потоком я прочуствовал на собственной шкуре, причем именно при конвертировании USB-RS232. А так как из MAX232 два конвертера не выкинешь, то так и развожу 4 сигнала, а не два практически всегда. Раз в пару лет это вдруг становится востребованным (при подключении к каналообразующей аппаратуре, например). DigiKey присылают в Россию? Ну, это как ориентир. Понятно, что исходить нужно из окружения. Есть Гамма/Тритон, наверное Терраэлектроника, еще куча всяких продаванов. Про дижикей: извиняюсь, постараюсь не сыпать соль на рану. Но наверняка есть конторы которые в Россию доставляют, да и внутри России, уверен, много чего достать можно. МайкрочипДирект в Россию шлет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба Делать UART на устройстве с RC генератором бессмысленно. Либо кварц либо керамический резонатор обязательны. В середине 90х делал коммерческий продукт, который до сих пор на рынке на PIC16C71. У него при системном клоке 1 мегагерц без особого напряга было 9600. Значит я одна такая бестолковая? Всегда думала, что допуска на частоту около пары процентов достаточно для такой короткой посылки... Как-то работает у меня до 115200. Просто везет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vovken1997 0 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба Ребят, я просто спросил, как реализовать ПРОГРАМНО передачу по UART в 11 посте!!! Прочитав всё, я так и не увидел ответа... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
O.L. 0 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба Ребят, я просто спросил, как реализовать ПРОГРАМНО передачу по UART в 11 посте!!! Давно говнокодил на PIC12. Так что ежели что, ногами не пинайте. #define serial_out 0x20 /// --- 4 MHz CPU Fosc definition ----------------------------------- // #ifdef CPU_FOSC_4MHZ //#define FOSC 4000000L #define XMIT_DELAY (((FOSC/4)/19200)-12) // for 4mHz internal oscillator unsigned char delayus_variable; #define DelayDivisor 4 #define WaitFor1Us asm("nop") #define Jumpback asm("goto $ - 2") #define DelayUs(x) { \ delayus_variable=(unsigned char)(x/DelayDivisor); \ WaitFor1Us; } \ asm("decfsz (_delayus_variable)&0ffh,f"); \ Jumpback; #endif /// --- 8 MHz CPU Fosc definition ----------------------------------- // #ifdef CPU_FOSC_8MHZ //#define FOSC 8000000L #define XMIT_DELAY (((FOSC/4)/19200)-18) // for 8mHz internal oscillator unsigned char delayus_variable; #define DelayDivisor 4 #define WaitFor1Us asm("nop"); asm("nop") #define Jumpback asm("goto $-3") #define DelayUs(x) { \ delayus_variable=(unsigned char)(x/DelayDivisor)-3; \ WaitFor1Us; \ WaitFor1Us; } \ asm("decfsz (_delayus_variable)&0ffh,f"); \ Jumpback; #endif /// --- init software COM hardware ------------------------------------------- // void InitComms(void) { TRISIO &= ~serial_out; // Tris GP2 - set as output cTmpSerial = GPIO; cTmpSerial |= serial_out; GPIO = cTmpSerial; } /// --- putchar ----------------------------------------------------- // void putbyte(unsigned char byte) { static bit bGIE_Save = 0; unsigned char bit_count; /// InitComms(); __wdt_reset(); if(GIE) // Test GIE bit { // IF GIE bit is SET! GIE = 0; // Disabled GLIBAL Interrupt bGIE_Save = 1; // Set GIE Temporary bit } // asm("nop"); bit_count = 11; // Send S 8bit N P cTmpSerial &= ~serial_out; // Send Start bit GPIO = cTmpSerial; WaitFor1Us; WaitFor1Us; do{ DelayUs(XMIT_DELAY); if(byte & 0x01) { cTmpSerial |= serial_out; GPIO = cTmpSerial; } else { cTmpSerial &= ~serial_out; GPIO = cTmpSerial; } byte = (byte >> 1) | 0x80; }while (--bit_count); // if(bGIE_Save) GIE = 1; // restore GIE bit asm("nop"); DelayUs(XMIT_DELAY/2); } /// --- bin to HEX convertor ---------------------------------------- // Send Binary to ACII convert // void sendBYTE( unsigned char data ) { /* putbyte (0x30); putbyte ('x'); */ //Send high nibble if( (data>>4) > 9 ) putbyte( 'A' - 10 + (data>>4) ); else putbyte( '0' + (data>>4) ); //Send low nibble if( (data&0x0F) > 9 ) putbyte( 'A' - 10 + (data&0x0F)); else putbyte( '0' + (data&0x0F) ); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба Значит я одна такая бестолковая? Всегда думала, что допуска на частоту около пары процентов достаточно для такой короткой посылки... Как-то работает у меня до 115200. Просто везет? А вы попробуйте посылать пакеты по 200 байт или длиннее, да так, чтобы после стоп бита сразу шел старт бит и чтобы был один стопбит, а не два. В одном случае и при определенной температуре это может и заработает, но с перебоями. Я всегда отвергал решения непригодные для массового производства. Ребят, я просто спросил, как реализовать ПРОГРАМНО передачу по UART в 11 посте!!! Прочитав всё, я так и не увидел ответа... А UART надо делать программно? На какой скорости? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vovken1997 0 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба O.L., спасибо за код! Хоть до этого пока даликовата, но общие представления я получил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slavka012 0 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба Делать UART на устройстве с RC генератором бессмысленно. Либо кварц либо керамический резонатор обязательны. Та ладно вам людей пугать. Серийный порт спокойно работает на пиках без кварца и керамики. Проверено собвственноручно на многих тысячах устройств. максимальная скорость 100000. Если вы спокойно посчитаете погрешность допустимую для нормальной работы уарта, вы увидите, что 1% точности встроенного RC в 3-4 раза лучше чем надо. Передачу на bit-bang сделать на пике элементарно. Прием тоже делал, немного сложнее но тоже реально. А вы попробуйте посылать пакеты по 200 байт или длиннее, да так, чтобы после стоп бита сразу шел старт бит и чтобы был один стопбит, а не два. А зачем делать 1 стоп бит, а не два? Длина пакетов роли не играет, они синхронизируются в начале каждого байта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 3 октября, 2013 Опубликовано 3 октября, 2013 (изменено) · Жалоба Та ладно вам людей пугать. Серийный порт спокойно работает на пиках без кварца и керамики. Проверено собвственноручно на многих тысячах устройств. максимальная скорость 100000. Если вы спокойно посчитаете погрешность допустимую для нормальной работы уарта, вы увидите, что 1% точности встроенного RC в 3-4 раза лучше чем надо. Передачу на bit-bang сделать на пике элементарно. Прием тоже делал, немного сложнее но тоже реально. 1% точности позволяет на 100 битной последовательности сделать ошибку в 1 бит. Если считать стартовый и стоповый биты, то это случится через 10 байт переданных подряд. На 100 байтах это будет ошибка в 10 бит. Синхронизация вначале байта осуществляется если есть пауза между байтами. В моих устройствах это не было позволено почти никогда. Представьте, что передатчик работает на 1% быстрее приемника. А зачем делать 1 стоп бит, а не два? Разные бывают системы. Зачастую надо выжать как можно более высокую скорость передачи, а периферийное устройство достигло уже своего потолка в 115200, а лишний стоп бит отнимает 10% времени. Длина пакетов роли не играет, они синхронизируются в начале каждого байта. даже когда байты идут подряд и передатчик передает быстрее чем принимает приемник? Изменено 3 октября, 2013 пользователем Tarbal Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A. Fig Lee 0 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба даже когда байты идут подряд и передатчик передает быстрее чем принимает приемник? А там старт и стоп бит между байтами. которые имеют разную полярность. Как только выполз за фрейм, вместо старта получишь стоп или наоборот. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться