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

 
 
> Задержки в мкс на 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

Сообщений в этой теме
- 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
|- - prottoss   Цитата(singlskv @ Dec 3 2006, 23:40) Мне ...   Dec 3 2006, 19:49
|- - singlskv   Цитата(prottoss @ Dec 3 2006, 19:49) Заче...   Dec 3 2006, 20:02
- - 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 Текстовая версия Сейчас: 21st July 2025 - 04:07
Рейтинг@Mail.ru


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