Konoplj2010, пришёл, пришёл
Последний *.exe "com_1wave2.rar" запускали, работает? У меня закралось подозрение, что может я переворачиваю байты, надо бы проверить "СОМ терминалом", подать одинаковые команды с вашей программы и с последней и сравнить на одинаковость
Этот топик читают: Гость
Ответов: 8921
Рейтинг: 823
|
|||
карма: 19 |
|
Ответов: 70
Рейтинг: 0
|
|||
Леонид писал(а): Сейчас попробую. ------------ Дoбавленo в 14.40: Вот так выдаёт 100% рабочая программа: http://forum.hiasm.com/xf/attach/share/%D0%A1%D0%BE%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_1.jpg И вот так выдаёт то что у Вас получилось: http://forum.hiasm.com/xf/attach/share/%D0%A1%D0%BE%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_2.jpg ------------ Дoбавленo в 14.41: К сожалению дети требуют компьютер, нужно отдать позднее смогу продолжить. |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Леонид, зато у нас светодиод зелёный !
|
|||
карма: 25 |
|
Ответов: 8921
Рейтинг: 823
|
|||
Konoplj2010, да, и при передаче и при приёме первым идёт младший бит а я делал первый старший бит -- я ещё тыкву чесал, как делать. Кроме того датчик при выдаче температуры бит "0" передаёт не "00", как программа при командах, а "CF" Что-то неправильно или с синхронизацией или со скоростью. Рисунки с расшифровкой:
1w_on_com.jpg com_1w_homemade.jpg |
|||
карма: 19 |
| ||
файлы: 2 | 1w_on_com.jpg [44.3KB] [754], com_1w_homemade.jpg [25.3KB] [728] |
Ответов: 70
Рейтинг: 0
|
|||
Леонид писал(а): К стати да, это Вы верно подметили, а я сам разобрать, к сожалению, не смог. Хорошо, какого чёрта датчик вместо 0 говорить FC (а вернее CF)??? Надо глубже копнуть... Я как что ни буть разузнаю обязательно сообщу. ------------ Дoбавленo в 18.16: Блин, как же я забыл??? http://avr.ru/beginer/understand/1wire Сигнал "Чтение". Ведущий устанавливает низкий уровень в течение 1…15 мкс. После этого подчинённый, если хочет передать 0, удерживает шину в низком состоянии до 60 мкс; если же подчинённых хочет передать 1, то он просто освобождает линию. Ведущий обычно сканирует состояние шины по истечении 15 мкс после установки низкого уровня на шине. Так, ведомый удерживает линию к земле, если хочет передать "0", и просто отпускает линию, если хочет передать "1". Таким образом при чтении получаем следующие диаграммы. Основные проблемы, которые возникают при реализации чтения-записи – это проблемы со временем, то есть "невыдерживание", или наоборот, "передерживание" временных задержек при чтении линии. Возникают эти проблемы из-за того, что часто не делают поправку на медленность языков программирования высокого уровня. Особенно это касается различных "дополнительных" функций и ништяков. Блин вот оно что! Я когдато раньше писал программку на С для AVR-ки и там было ток: void receive_ds1820(void){//Функция приема битов от DS1820 cli(); for(unsigned char i=0;i<16;i++) { //Прием 2 байт с температурой и знаком DDRD|=_BV(DT); //Вывод порта настраеваем как выход _delay_us(6); //Задержка на 6 мкс DDRD&=~_BV(DT); //Вывод порта настраеваем как вход _delay_us(9); //Задержка на 9 мкс if (PIND & (1<<DT)) {//Проверка состояния вывода grand_temperature|=_BV(i);} //Запись лог. 1 else {grand_temperature&=~_BV(i); } //Запись лог. 0 _delay_us(55);} //Задержка на 55 мкс des_temperature=grand_temperature&0b00001111; des_temperature=(des_temperature*5)/8; temperature=(grand_temperature>>4); temperature=(temperature*10)+des_temperature;//Значение температуры х10 для обработки sei(); } Понимаете как это? То есть для чтения нужно в линию сказать 0 в течении 1-15 мс (или 6 как я делал раньше) только потом после этого датчик если говорит 0 то в течении 60 мс на линии 0, а если говорит 1 то в течении 60 мс в линии 1. Вот оно что, вот от куда берётся 0хFC (а вернее CF) это датчик отвечает. В течении того времени как терминал уже отчситал 0b111111 только потом датчик говорит своё 0b00 что хотел сказать. |
|||
карма: 0 |
|
Ответов: 8921
Рейтинг: 823
|
|||
Konoplj2010, попытка номер три изменил порядок следования бит и считывание "0" с ответа. com_1wave3.rar Надо проверять
nesco, в конвертере в моде BinToInt нет свойства Forward/Reverse, хотя в логике в компоненте IntToBin такая точка есть |
|||
карма: 19 |
| ||
файлы: 1 | com_1wave3.rar [48.4KB] [337] |
Ответов: 16884
Рейтинг: 1239
|
|||
Хоть кто-нибудь читал http://voron.ua/files/pdf/maxim/ds18b20-rus.pdf ? Там описано и порядок передачи бит и байт, и много чего полезного.
Или Ваш метод - метод тыка ? |
|||
карма: 25 |
|
Ответов: 8921
Рейтинг: 823
|
|||
Tad, даже коллега
Rysik писал(а): Самому допереть до чего либо, бесценно! |
|||
карма: 19 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Леонид, "допираете" уже 5-ю страницу.
Рекомендация автора из [url http://voron.ua/files/pdf/maxim/ds18b20-rus.pdf[/url]] |
|||
карма: 25 |
| ||
файлы: 1 | Леонид6.gif [5.5KB] [802] |
Ответов: 70
Рейтинг: 0
|
|||
Tad писал(а): Я этот мануал читал ещё лет 5 назад. С этим мануалом я написал библиотеку к AVR-ке которую я привёл выше. Только проблема в том что ногами МК я могу дёргать как я хочу, а вот портом с UART не так то и просто происходит (как оказалось). Леонид писал(а): Я вечером смогу попробовать, я вечером отпишусь. |
|||
карма: 0 |
|
Ответов: 70
Рейтинг: 0
|
|||
карма: 0 |
|
Ответов: 8921
Рейтинг: 823
|
|||
Konoplj2010, т. е. наконец-то правильные сигналы выходят? Ну а диалог с датчиком в ручном режиме, команды и его ответы ? (на картинке последние четыре нулевых байта -- это что?)
|
|||
карма: 19 |
|
Ответов: 70
Рейтинг: 0
|
|||
Леонид писал(а): Konoplj2010, т. е. наконец-то правильные сигналы выходят?Не совсем, я пробовал полный пакет но без результата. Леонид писал(а): на картинке последние четыре нулевых байта -- это что?Мне тоже интересно, на ответ датчика не похоже уж очень длинный. Ответ датчика должен быть не длиннее команды RESET, а если быть точным то короче. Я думал что это программа выдаёт эти 0х00 (хотя без датчика не додумался попробовать). Давайте сравним пакет от рабочей программы и от Вашей? |
|||
карма: 0 |
|
Ответов: 8921
Рейтинг: 823
|
|||
Konoplj2010 писал(а): ..сравним пакет от рабочей программы и от Вашей.. |
|||
карма: 19 |
|
Ответов: 70
Рейтинг: 0
|
|||
Леонид писал(а): Вот что у меня получилось. http://forum.hiasm.net/xf/attach/share/27.01.2016.JPG ------------ Дoбавленo в 08.41: Как я понимаю нет команды RESET в начале кадра (0х00 две штуки). В целом если подсчитать то в Вашем кадре получается 16 байт (16=2*8 и всё), а в другой программе 18 (2 RESET + 16=2*8). ------------ Дoбавленo в 08.42: А в остальном должно быть всё правильно. |
|||
карма: 0 |
|