7 Segment Display и 18B20
|
|
ivan_fd |
Дата: Вт, 25.08.2009, 19:00 | Сообщение # 16 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Ясно, спасибо!
|
|
|
|
Dmitry |
Дата: Вт, 25.08.2009, 22:40 | Сообщение # 17 |
Группа:
Пользователи
Ранг:
Могу и подсказать
Сообщений:
157
Замечания:
±
На сайте с 12.05.2009
Статус:
Offline
|
Quote (ivan_fd) через интервал за который происходит прерывание, дисплей подмигивает. Знакомо, знакомо. Тоже спотыкался об это. Связано с тем, что софтверное прерывание (on interrupt) выполняется только после окончания очередного оператора. И если оператор длительный по времени, то... В моем случае вылечилось переписыванием прерывания на асме, но это на любителя. Код не выкладываю, там без 100 грамм не разберешься. Посмотрел ваш код, да нету там вроде длинных операторов в рамках disable...enable. Вызывает сомнения вот этот кусок: Disable ' OWrite dq, 1, [$CC, $44]'Отправляем запрос на очередное измерение (команда Convert T) OWrite dq, 1, [$CC, $BE] 'Считываем результат предыдущего измерения (команда Read ScratchPad) ' DelayMS 1 ORead dq, 2,[Temp_read.LowByte, Temp_read.HighByte] Enable Чего то мне кажется, что после ConvertT ds-ка будет заниматься конверсией ( в течение указанного в даташите времени), а не отвечать на запросы. А спустя те самые 750 мс можно ее читать. Т.е. надо отправить convertT, разрешить прерывания, подождать секунду, снова запретить и читать ds-ку. ИМХО.
|
|
|
|
demanik |
Дата: Вт, 25.08.2009, 23:00 | Сообщение # 18 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
448
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Quote (Dmitry) Чего то мне кажется, что после ConvertT ds-ка будет заниматься конверсией ( в течение указанного в даташите времени) В программе точно так и есть. Посмотрите внимательно строчка которая вас смутила выделена как комментарий. А рабочая команда Convert T чуть выше и там ожидание прибл. секунду.
Попробуй всё и вся... может быть пол...
|
|
|
|
Dmitry |
Дата: Вт, 25.08.2009, 23:15 | Сообщение # 19 |
Группа:
Пользователи
Ранг:
Могу и подсказать
Сообщений:
157
Замечания:
±
На сайте с 12.05.2009
Статус:
Offline
|
Точно, торможу. Зато вот, нашел свой код с 7-seg и ds1820 (sorry, PBP). Прерывание, правда ассемблерное, но оно тоже запрещается. При чтении ds-ки ничего не моргает АБСОЛЮТНО. (Моргает чу-у-точку, но при записи в ЕЕПРОМ. Ну там деваться некуда, 10 мс изволь сидеть и не рыпаться) : Code tmp = CurDig ' Curdig - номер цифры на семисегментнике, которая светится в данный момент. ' CurDig крутится по кругу в обработчике прерывания while tmp = CurDig ' ждем, пока переключится очередная цифра (т.е. обработчик прерывания wend ' изменит переменную CurDig) TMR0IE = 0 ' запрет прерывания OWOut DQ1, 1, [$CC, $44] ' Start temperature conversion TMR0IE = 1 ' можно прерываться waitloop: tmp = CurDig while tmp = CurDig ' опять ждем переключения очередной цифры wend TMR0IE = 0 ' запрет прерывания OWIn DQ1, 4, [converted] ' Check for still busy converting TMR0IE = 1 if converted = 0 Then waitloop ' ждем окончания конверсии tmp = CurDig while tmp = CurDig ' опять ждем переключения очередной цифры wend TMR0IE = 0 ' запрет прерывания OWOut DQ1, 1, [$CC, $BE] ' Read the temperature TMR0IE = 1 tmp = CurDig while tmp = CurDig ' опять ждем переключения очередной цифры wend TMR0IE = 0 ' запрет прерывания ' наконец, читаем скретчпад с вожделенной температурой OWIn DQ1, 0, [Dsdat[0],Dsdat[1],Dsdat[2],Dsdat[3],Dsdat[4],Dsdat[5],Dsdat[6],Dsdat[7], dsdat[8]] TMR0IE = 1
Сообщение отредактировал
Dmitry - Вт, 25.08.2009, 23:26
|
|
|
|
ivan_fd |
Дата: Чт, 27.08.2009, 00:08 | Сообщение # 20 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Спасибо! Начал делать на АСМ. прерывании. Сейчас пока со временем туго, о результатах отпишу.
|
|
|
|
ivan_fd |
Дата: Пн, 31.08.2009, 16:54 | Сообщение # 21 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Сделал на АСМ прерывании, все супер работает. Прилагаю файл кому интересно. Добавлено (31.08.2009, 16.54.07) --------------------------------------------- Еще немного поексперементировал, взял этот код, только вставил OWrite, ORead и вновь есть помигивания.
Сообщение отредактировал
ivan_fd - Пн, 31.08.2009, 16:55
|
|
|
|
Dmitry |
Дата: Пн, 31.08.2009, 20:32 | Сообщение # 22 |
Группа:
Пользователи
Ранг:
Могу и подсказать
Сообщений:
157
Замечания:
±
На сайте с 12.05.2009
Статус:
Offline
|
Ну так правильно. В коде нет ожидания переключения очередной цифры на семисегментнике. Т.е. тупо запретили прерывания и давай за onewire дергать. А если в это время пора очередную цифру рисовать? Еще раз посмотрите код в сообщении №19. Фишка в том, что перед командами oread и owrite надо подождать момента когда происходит переключение катодов. Тогда до следующего переключения у вас есть сколько-то миллисекунд (зависит от частоты переключения катодов), когда можно спокойно запретить прерывания и заниматься шиной onewire.
|
|
|
|
ivan_fd |
Дата: Вт, 01.09.2009, 13:51 | Сообщение # 23 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Quote (Dmitry) Ну так правильно. В коде нет ожидания переключения очередной цифры на семисегментнике. Т.е. тупо запретили прерывания и давай за onewire дергать. А если в это время пора очередную цифру рисовать? Еще раз посмотрите код в сообщении №19. Фишка в том, что перед командами oread и owrite надо подождать момента когда происходит переключение катодов. Тогда до следующего переключения у вас есть сколько-то миллисекунд (зависит от частоты переключения катодов), когда можно спокойно запретить прерывания и заниматься шиной onewire. Спасибо. Код, тот что сверху, работает нормально, без миганий. Они появляются только тогда, когда вставляю команды oread и owrite, а в том коде нету этих команд.
|
|
|
|
Dmitry |
Дата: Вт, 01.09.2009, 23:04 | Сообщение # 24 |
Группа:
Пользователи
Ранг:
Могу и подсказать
Сообщений:
157
Замечания:
±
На сайте с 12.05.2009
Статус:
Offline
|
Странно. Получается, если запретить перывания и вручную посылать/принимать биты по шине 1-wire (как в вышеприведенном коде), то не моргает, а если эту же задачу поручить oread/owritе, то моргает. Непонятно. Наверное, чего-то лишнего в oread/owrite напихали.
|
|
|
|
ivan_fd |
Дата: Вт, 01.09.2009, 23:20 | Сообщение # 25 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Quote (Dmitry) Странно. Получается, если запретить перывания и вручную посылать/принимать биты по шине 1-wire (как в вышеприведенном коде), то не моргает, а если эту же задачу поручить oread/owritе, то моргает. Непонятно. Наверное, чего-то лишнего в oread/owrite напихали. smile Спасибо! Сделал по вашей рекомендации, тоесть сделал ожидание переключения очередной цифры, и все стало норма. А с oread/owritе я думаю ситуация такая, если писать 1-Wire вручную то инициализация проходит за 1.2мс, чтение-запись за 620мкс. А oread-owrite? инициализация ~1мс, чтение-запись ~2.3мс Но счас все норма и с тем, и с тем вариантом. p.s: Хорошо если есть кому посоветовать.
|
|
|
|
ivan_fd |
Дата: Чт, 03.09.2009, 00:22 | Сообщение # 26 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Так прикладываю немного почищенный проект с протеусом, может кому нибудь будет полезен.
|
|
|
|
vovan16384 |
Дата: Вт, 02.03.2010, 19:15 | Сообщение # 27 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
3
Замечания:
±
На сайте с 30.12.2008
Статус:
Offline
|
Quote (ivan_fd) Так прикладываю немного почищенный проект с протеусом, может кому нибудь будет полезен у меня не компилируется пишет ошибку при компиляции asmДобавлено (02.03.2010, 19.15.10) --------------------------------------------- compiler version 3.4.0.8
|
|
|
|
terrarus |
Дата: Ср, 03.03.2010, 08:49 | Сообщение # 28 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
451
Замечания:
±
На сайте с 21.08.2008
Статус:
Offline
|
Quote (ivan_fd) Так прикладываю немного почищенный проект с протеусом И у меня не компилируется... Есть ошибки! Жаль, ведь проект интересный и был бы полезен для анализа начинающим. Нужно их устранить. Пытался вчера вечером сам найти их, но сходу не удалось.
Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
Сообщение отредактировал
terrarus - Ср, 03.03.2010, 08:51
|
|
|
|
ivan_fd |
Дата: Ср, 03.03.2010, 10:19 | Сообщение # 29 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
В процедуре инициализации заменить на это: Code Asm mvi ADDRESS,Cifra6 ;Заносимо в ADDRESS адресу комірки з першою виводимою цифрою mvi Cifra6, 0x40 ;Показуємо "-OFF-" mvi Cifra5, 0x71 mvi Cifra4, 0x71 mvi Cifra3, 0x3f mvi Cifra2, 0x40 mvi Cifra1, 0x00 EndAsm Этот код работает нормально, но когда я его дописал, прикрутил часи и т д. то начались проблемы с прериваниями. Поетому я прерывания переписал полностью на АСМе, что и здесь не мешало бы сделать.
Сообщение отредактировал
ivan_fd - Ср, 03.03.2010, 15:10
|
|
|
|
vovan16384 |
Дата: Ср, 03.03.2010, 17:30 | Сообщение # 30 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
3
Замечания:
±
На сайте с 30.12.2008
Статус:
Offline
|
Quote (ivan_fd) Поетому я прерывания переписал полностью на АСМе, что и здесь не мешало бы сделать. если не секрет хотелось бы посмотреть на такой вариант
|
|
|
|