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

 
 
> Задержки в мкс на WinAVR. Нужно для 1-wire. Как?
asf
сообщение Dec 1 2006, 22:32
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 19-12-05
Пользователь №: 12 407



Пробовал _delay_us , однако на малых значениях просто никак
Что я только не мудрил, считал фронты, пытался понять закономерность, получилось только detect presents, делал циклы, пытался понять как компилятор переводит в асм цикл задержки...
в общем результат 0. Помогайте. Все путем дергания ногой МК т.к. порт уже используется.
Есть мысль сделать селектор и т.о. повесить на один порт USART два устройства, в т.ч. и 1-wire.....
Но у кого-то ведь получалось.... Вроде скажем на 8 Мгц проц Atmega16 делает 8 тактов, далее хз как winAvr компилирует цикл типа while(time--); вроде по фронтам получается порядка 3х циклов подобной задержки на 1-ну мкс.... но пишу далее 0х33 и читаю одни 0хFF .... виимо не попал в таймслоты.... может у кого есть четкое понятие как сделать на winavr понятную задержку в мкс?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
asf
сообщение Dec 3 2006, 10:25
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 19-12-05
Пользователь №: 12 407



спасибо, буду пробовать, вот только как именно (по какой методике) подбирали задержки?
Go to the top of the page
 
+Quote Post
prottoss
сообщение Dec 3 2006, 10:46
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(asf @ Dec 3 2006, 14:25) *
спасибо, буду пробовать, вот только как именно (по какой методике) подбирали задержки?


Если вы ко мне обращаетесь: Вы исходники читали? Там написанно по каким аппнотам сделаны задержки...Вообще, рекомендую, при написании чего то, сначала проверить, не изобретен ли это велосипед УЖЕ. Больше времени на пиво остается)))


--------------------
Go to the top of the page
 
+Quote Post
singlskv
сообщение Dec 3 2006, 15:43
Сообщение #4


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



to prottoss
Посмотрел Ваш код на предмет задержек и был слегка удивлен:
Код
#define    CPU_CYCLE        408// длительность командного цикла МК в нс для частоты 2.4576MHz

#define COMM_PER_MCS    (1000 / CPU_CYCLE) // количество команд CPU за микросекунду
#define    OW_DEL_A        6   * COMM_PER_MCS
#define    OW_DEL_B        64  * COMM_PER_MCS
#define    OW_DEL_C        60  * COMM_PER_MCS
#define    OW_DEL_D        10  * COMM_PER_MCS
#define    OW_DEL_E        9   * COMM_PER_MCS
#define    OW_DEL_F        55  * COMM_PER_MCS
#define    OW_DEL_G        0   * COMM_PER_MCS
#define    OW_DEL_H        480 * COMM_PER_MCS
#define    OW_DEL_I        70  * COMM_PER_MCS
#define    OW_DEL_J        410 * COMM_PER_MCS


ИТОГО:
COMM_PER_MCS=2
OW_DEL_H=960 // тактов, или 960/2.4576=390,625 мкс
Ну и остальные задержки соответственно.

Э...Э...Э Ну, то есть такой код работать не должен sad.gif

А если и работает, то это нам говорит, лишь о том, что продукция Dallas
умеет хорошо подстраиваться под длительности импульсов которые ей посылаешь.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Dec 3 2006, 19:40
Сообщение #5


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата
Думаю, что с
Код
#define COMM_PER_MCS    ((1000 / CPU_CYCLE) + 1)

Будет лучше


Мне кажется что лучше вот так:
Код
#define    CPU_CYCLE        408// длительность командного цикла МК в нс для частоты 2.4576MHz

#define COMM_PER_MCS    (1000000 / CPU_CYCLE) // количество команд CPU за  милисекунду
#define    OW_DEL_A      (6   * COMM_PER_MCS)/1000
#define    OW_DEL_B        (64  * COMM_PER_MCS)/1000
#define    OW_DEL_C        (60  * COMM_PER_MCS)/1000
#define    OW_DEL_D        (10  * COMM_PER_MCS)/1000
#define    OW_DEL_E        (9   * COMM_PER_MCS)/1000
#define    OW_DEL_F     (55  * COMM_PER_MCS)/1000
#define    OW_DEL_G        (0   * COMM_PER_MCS)/1000
#define    OW_DEL_H    (480 * COMM_PER_MCS)/1000
#define    OW_DEL_I     (70  * COMM_PER_MCS)/1000
#define    OW_DEL_J     (410 * COMM_PER_MCS)/1000


А для коротких интервалов можно еще уточнить:
#define OW_DEL_A (6 * COMM_PER_MCS)/1000 -1 // или -2 надо проверить в симуляторе
#define OW_DEL_E (9 * COMM_PER_MCS)/1000 -1
чтобы учесть время выдачи бита на пин.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Dec 3 2006, 19:49
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(singlskv @ Dec 3 2006, 23:40) *
Мне кажется что лучше вот так:
Код
...
Да, так точнее получится...
Цитата(singlskv @ Dec 3 2006, 23:40) *
А для коротких интервалов можно еще уточнить:
#define OW_DEL_A (6 * COMM_PER_MCS)/1000 -1 // или -2 надо проверить в симуляторе
#define OW_DEL_E (9 * COMM_PER_MCS)/1000 -1
чтобы учесть время выдачи бита на пин.
Зачем еще извращаться то? Таймслоты довольно широкие, минимум от максимума от двух до четырех раз отличается


--------------------
Go to the top of the page
 
+Quote Post
singlskv
сообщение Dec 3 2006, 20:02
Сообщение #7


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(prottoss @ Dec 3 2006, 19:49) *
Зачем еще извращаться то? Таймслоты довольно широкие, минимум от максимума от двух до четырех раз отличается

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

Сообщений в этой теме
- asf   Задержки в мкс на WinAVR. Нужно для 1-wire. Как?   Dec 1 2006, 22:32
- - dvm11111111   Лови, мож поможет. Сразу хочу сказать, что задержк...   Dec 2 2006, 03:12
- - defunct   Цитата(asf @ Dec 1 2006, 22:32) Вроде ска...   Dec 2 2006, 03:15
- - prottoss   делал как то ради любопытства...Для DS1821 правда,...   Dec 2 2006, 19:52
|- - prottoss   Цитата(singlskv @ Dec 3 2006, 19:43) to p...   Dec 3 2006, 16:58
- - SasaVitebsk   Для IAR C (DS1820/18B20) у меня автоматически счит...   Dec 3 2006, 16:23
- - asf   так в том-то и дело, что на winavr не все так прос...   Dec 3 2006, 19:35
- - aesok   Цитата(asf @ Dec 3 2006, 20:35) так в том...   Dec 3 2006, 19:42
|- - asf   Цитата(aesok @ Dec 3 2006, 19:42) Цитата(...   Dec 4 2006, 09:41
|- - aesok   Цитата(asf @ Dec 4 2006, 10:41) Цитата(ae...   Dec 4 2006, 10:24
|- - asf   Цитата(aesok @ Dec 4 2006, 10:24) Цитата(...   Dec 4 2006, 10:38
|- - aesok   Цитата(asf @ Dec 4 2006, 11:38) Цитата(ae...   Dec 4 2006, 11:05
|- - asf   Цитата(aesok @ Dec 4 2006, 11:05) Цитата(...   Dec 4 2006, 11:23
|- - asf   Работает только детект int OW_DetectPresence() {...   Dec 4 2006, 17:44
||- - prottoss   Цитата(asf @ Dec 4 2006, 21:44) Работает...   Dec 4 2006, 18:10
|- - aesok   1. Согласно документации: _delay_us ... The ma...   Dec 4 2006, 18:14
|- - asf   Цитата(aesok @ Dec 4 2006, 18:14) 1. Согл...   Dec 4 2006, 19:05
|- - aesok   Цитата(asf @ Dec 4 2006, 20:05) проект им...   Dec 4 2006, 19:50
|- - asf   Цитата(aesok @ Dec 4 2006, 19:50) Цитата(...   Dec 4 2006, 21:37
|- - aesok   Цитата(asf @ Dec 4 2006, 22:37) Цитата(ae...   Dec 4 2006, 22:35
|- - SasaVitebsk   Я могу переписать на таймер. Например таймер 2. То...   Dec 5 2006, 16:57
- - singlskv   Цитата(asf @ Dec 3 2006, 19:35) так в том...   Dec 3 2006, 20:24
- - prottoss   Цитата(asf @ Dec 3 2006, 23:35) так в том...   Dec 4 2006, 10:08


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 08:58
Рейтинг@Mail.ru


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