реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> ATmega16 + DS18B20. Код на ассемблере не работает.
neurox
сообщение Dec 10 2008, 02:20
Сообщение #31


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 30-06-08
Пользователь №: 38 638



Хм.. поставил внешний кварц на 10 MHz ничего не изменилось - все та же проблема. Попробовал увеличить задержку для начального импульса в таймслотах. Теперь запись выглядит так:
Код
_ds_write:
   sbi DDRA, 6
  
   ldi  wr_counter, 8
  
       _start_wr:      
                sbrc     ds_cmd, 0
        rjmp    _wr_one
        rjmp    _wr_zero
    
    _wr_one:
        cbi        PORTA, PA6
        
        rcall    _delay_1us
        rcall    _delay_1us
        rcall    _delay_1us
        rcall    _delay_1us
    
        sbi    PORTA, PA6
        
        ldi    box, 5
        rcall    _ds_s_delay   ;задержка 10us * box
        
        rjmp    _end_wr
_wr_zero:
        cbi    PORTA, PA6

        ldi    box, 5
        rcall    _ds_s_delay

        sbi    PORTA, PA6

        rjmp    _end_wr

    _end_wr:
        
        lsr    ds_cmd

        ldi    box, 3
        rcall    _ds_s_delay
        
        dec    wr_counter
        brne    _start_wr
        ret


видимо ошибка именно в данном участке, потому что конвертация температуры не происходит.. как определил, что не происходит? очень просто - во время конвертации он должен выдавать лог. 0 в линию почти 700ms... мк проверяет уровень и если 0 то выдает "." в терминал и через 100 мс заново проверяет уровень... у меня в терминал приходит лишь одна точка.. а значит датчик не ковертирует Т...
что де делать то!? я в легком отчаянии..
Go to the top of the page
 
+Quote Post
neurox
сообщение Dec 13 2008, 03:28
Сообщение #32


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 30-06-08
Пользователь №: 38 638



А вот когда я ставлю PORTA на вход, как изменяется лог. уровень в линии?
Go to the top of the page
 
+Quote Post
ARV
сообщение Dec 13 2008, 06:17
Сообщение #33


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(neurox @ Dec 13 2008, 06:28) *
А вот когда я ставлю PORTA на вход, как изменяется лог. уровень в линии?
честно говоря, ваш код я не анализировал вдумчиво, но по паре команд SBI PORTA, PA6 и вашему вопросу предположил, что вы немного неверно работаете с шиной...

нормальный подход: заранее, раз и на всегда в нужный разряд вашего PORTх выводите 0 (можно ничего не выводить, после сброса там и так 0), а уровнем в 1-wire манипулируете только через DDRx. причем для "вывода" в шину высокого уровня пишите в DDRx 0, а для вывода низкого - 1. то есть по логике в вашем коде SBI PORTx, y быть не должно в принципе.

когда в этом случае порт переводится на ввод (DDRx=0), то уровень в шине поднимается к высокому за счет внешнего резистора подтяжки. когла порт переводится на вывод (DDRx=1), то в шине сразу устанавливается 0 (т.к. в PORTx уже 0).


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
fmdost
сообщение Dec 14 2008, 03:51
Сообщение #34


Местный
***

Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606



Цитата(ARV @ Dec 7 2008, 23:26) *
...хотите стоять на своем - не забудьте рассказать о результатах...

1111493779.gif Ню-ню.

Абсолютно правильная статья Прикрепленный файл  standard.pdf ( 848.41 килобайт ) Кол-во скачиваний: 624
.
Go to the top of the page
 
+Quote Post
Александр Куличо...
сообщение Dec 14 2008, 22:17
Сообщение #35


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 6-03-06
Из: Украина, г. Винница
Пользователь №: 15 017



Цитата(neurox @ Dec 10 2008, 04:20) *
видимо ошибка именно в данном участке, потому что конвертация температуры не происходит.. как определил, что не происходит? очень просто - во время конвертации он должен выдавать лог. 0 в линию почти 700ms...


Возможно я не прав, но мне кажется, что Вы еще и неверно проверяете состояние линии. Вернее, признак завершения конвертации температуры. Дело в том, что при преобразовании датчик не опускает линию в "0" на 700 мс. Это помешает работе других устройств на шине. А для определения окончания конца преобразования нужно опрашивать не линию на состояние лог.0, а датчик . Т.е. периодически формировать read time slot.

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

P.S. (В добавок к посту от ARV)
Для того, чтобы Вы не запутались в уровнях на линии, рекомендую объявить 2 дефайна:
#define CLR_1W sbi DDRA,PA6
#define SET_1W cbi DDRA,PA6
Go to the top of the page
 
+Quote Post
neurox
сообщение Dec 15 2008, 11:35
Сообщение #36


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 30-06-08
Пользователь №: 38 638



Цитата(Александр Куличок @ Dec 15 2008, 06:17) *
Возможно я не прав, но мне кажется, что Вы еще и неверно проверяете состояние линии. Вернее, признак завершения конвертации температуры. Дело в том, что при преобразовании датчик не опускает линию в "0" на 700 мс. Это помешает работе других устройств на шине. А для определения окончания конца преобразования нужно опрашивать не линию на состояние лог.0, а датчик . Т.е. периодически формировать read time slot.


А ведь верно, как я сам то не додумался... smile3046.gif

Программа заработала. Просто в логике была серьезная ошибка. Считывалось всегод два бита и при сдвиге один из битов терялся... Всем спасибо за интерес к данной теме и помощь в просвещении моего тёмного разума. =)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 15 2008, 11:43
Сообщение #37


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(neurox @ Dec 15 2008, 15:35) *
в просвещении моего тёмного разума. =)

А если датчик не один, то готовность надо проверять как раз обращением к нему по адресу и шшупать presence pulse. Вот тут уже темень... smile.gif
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 15:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01462 секунд с 7
ELECTRONIX ©2004-2016