Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Задержки в atmega16

Непрочитано 15.05.2011, 22:46  
shy_plumbum
Прохожий
 
Регистрация: 07.02.2009
Сообщений: 3
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
shy_plumbum на пути к лучшему
По умолчанию Задержки в atmega16

Для реализации протокола по типу i2c нужны функции задержки для атмеги16. вроде должны быть стандартные (в каком-то проекте было delay.h и вызовы delay_ms, delay_us). пишу в image craft, не вижу там такого... где-нибудь можно достать или самостоятельно придется писать?
Реклама:
shy_plumbum вне форума  
Сказали "Спасибо" shy_plumbum
warel (27.06.2019)
Непрочитано 16.05.2011, 00:34  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Задержки в atmega16

Пишите самостоятельно. Задержки пишутся на ассемблере, а встроенный инлайновый асм у каждого компилятора свой. Открытые у GCC, но они не подойдут для другого компилятора. К примеру короткий цикл задержки:
Код:
void
_delay_loop_1(uint8_t __count)
{
	__asm__ volatile (
		"1: dec %0" "\n\t"
		"brne 1b"
		: "=r" (__count)
		: "0" (__count)
	);
}
Ну и сама функция микросекундной задержки
Код:
void
_delay_us(double __us)
{
	uint8_t __ticks;
	double __tmp = ((F_CPU) / 3e6) * __us;
	if (__tmp ‹ 1.0)
		__ticks = 1;
	else if (__tmp › 255)
	{
		_delay_ms(__us / 1000.0);
		return;
	}
	else
		__ticks = (uint8_t)__tmp;
	_delay_loop_1(__ticks);
}
Сомневаюсь, что это Вам сильно поможет.
Проще всего - сменить компилятор, тем более что результат сборки у WinAVR все равно куда оптимальнее.
kison вне форума  
Эти 2 пользователя(ей) сказали Спасибо kison за это сообщение:
shy_plumbum (16.05.2011), warel (27.06.2019)
Непрочитано 16.05.2011, 08:13  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Задержки в atmega16

Сообщение от shy_plumbum Посмотреть сообщение
Для реализации протокола по типу i2c нужны функции задержки для атмеги16
Для и2с задержки не нужны. Если запись в память - просто периодически передавайте ей стартовый байт. Память не отзовется до тех пор, пока запись не окончится. Все остальные микросхемы на время обработки команды удерживают Клок на нуле, аппаратный модуль в атмеге это знает и учитывает
niXto вне форума  
Сказали "Спасибо" niXto
warel (27.06.2019)
Непрочитано 16.05.2011, 11:08  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Задержки в atmega16

Сообщение от niXto Посмотреть сообщение
Для и2с задержки не нужны. Если запись в память - просто периодически передавайте ей стартовый байт. Память не отзовется до тех пор, пока запись не окончится.
Протокол "по типу I2C" не обязан быть именно I2C. И не обязан именно с памятью работать. Есть куча вариантов и большинство из них не укладывается в стандартный TWI меги. К примеру интерфейс может быть однопроводным.
kison вне форума  
Сказали "Спасибо" kison
warel (27.06.2019)
Непрочитано 16.05.2011, 12:24  
shy_plumbum
Прохожий
 
Регистрация: 07.02.2009
Сообщений: 3
Сказал спасибо: 2
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
shy_plumbum на пути к лучшему
По умолчанию Re: Задержки в atmega16

протокол нужен для общения с сенсором sht1x
по одной линии - тактовый сигнал, по другой - данные...

kison, почему ассемблер так не похож на известный мне ассемблер для мк серии avr? могу ли написать что-нибудь проще для более частной задачи (к примеру, мк будет работать на 1мгц=› 1такт=1мкс; мне нужны задержки по 2, 5 и 200 мкс. для последней сделать какую-нибудь функцию с циклом, а для небольших значений просто писать что-то типа nop?)
shy_plumbum вне форума  
Сказали "Спасибо" shy_plumbum
warel (27.06.2019)
Непрочитано 16.05.2011, 12:40  
_guardianangel
Почётный гражданин KAZUS.RUN
 
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,138
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
_guardianangel на пути к лучшему
По умолчанию Re: Задержки в atmega16

ну так и напишите. Асм то Вы знаете. Малые задержки макросами, большую можно и функцией.
_guardianangel вне форума  
Сказали "Спасибо" _guardianangel
warel (27.06.2019)
Непрочитано 17.05.2011, 14:38  
heady69
Прописка
 
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
heady69 на пути к лучшему
По умолчанию Re: Задержки в atmega16

Сообщение от shy_plumbum Посмотреть сообщение
Для реализации протокола по типу i2c нужны функции задержки для атмеги16. вроде должны быть стандартные (в каком-то проекте было delay.h и вызовы delay_ms, delay_us). пишу в image craft, не вижу там такого... где-нибудь можно достать или самостоятельно придется писать?
Может так попробовать
не очень точно,но задержки можно с запасом брать

//частота тактирования мк
#define F_CPU 11059000

//макросы программных задержек
#define _delay_ns(time) __delay_cycles(time*(F_CPU/1000000000))
#define _delay_us(time) __delay_cycles(time*(F_CPU/1000000))
#define _delay_ms(time) __delay_cycles(time*(F_CPU/1000))


когда-то писал прогу для такого датчика (давно и на ASM-51)
;ПРОГРАММА РАБОТЫ С ДАТЧИКАМИ ВЛАЖНОСТИ-ТЕМПЕРАТУРЫ SHT1-7X
;ИСП. РЕГИСТРЫ (ACC,B,R5,R6,R7)
;ВАРИАНТ ДЛЯ KEIL 19.03.2005

HDA BIT P1.1 ; ШИНА ДАТЧИКА
HCL BIT P1.2


SHT1X_CODE SEGMENT CODE
PUBLIC SHTTMP,SHTHUM


RSEG SHT1X_CODE
;*************************
;ПРОГРАММА ДЕЛЕНИЯ ЧИСЛА R7R6 НА R5 РЕЗУЛЬТАТ=B
DELENIE:
MOV B,#0
MOV A,R6
DL3: CLR C
DL1: SUBB A,R5
JC DL0
INC B
SJMP DL1
DL0: MOV R6,A
MOV A,R7
JZ DL2
INC B
DEC R7
MOV A,R6
SJMP DL3
DL2: RET

;*****************************
;ДАННЫЕ О ТЕМПЕРАТУРЕ
SHTTMP:
CALL SHSTART
MOV A,#00000011B;ТЕМПЕРАТУРА
CALL SHTRS
JC SHERROR
;---------------------
JB HDA,$
CALL SHRAC
MOV R7,A
CALL SHRES ;ПОЛУЧАЕМ ДАННЫЕ
MOV R6,A
MOV R5,#100
CALL DELENIE
MOV A,B ;ВЫЧИСЛЯЕМ ПО ФОРМУЛЕ T=(SHT1DAT/100)-40
CLR C
SUBB A,#40
RET

;*****************************
;ДАННЫЕ О ВЛАЖНОСТИ
SHTHUM:
CALL SHSTART
MOV A,#00000101B ;ЗАПРОС ВЛАЖНОСТИ
CALL SHTRS
JC SHERROR ;ОШИБКА
;--------------------------
JB HDA,$ ;ОЖИДАЕМ ЗАВЕРШЕНИЯ ИЗМЕРЕНИЯ
CALL SHRAC ;ПРИЕМ СТАРШЕГО БАЙТА
MOV R7,A
CALL SHRES ;МЛАДШЕГО
MOV R6,A
MOV R5,#31 ;ВЫЧИСЛЯЕМ ВЛАЖНОСТЬ ПО УПРОЩЕННОЙ
CALL DELENIE ;ФОЛМУЛЕ RH=SHT1DAT/31
MOV A,B
RET
;---------------------------
SHERROR:
MOV A,#0FFH ;ВЫХОД ПО ОШИБКЕ
RET

;******************************
;START-ПОСЛЕДОВАТЕЛЬНОСТЬ
SHSTART:
SETB HDA
CLR HCL
CALL SHDEL
SETB HCL
CLR HDA
CLR HCL
SETB HCL
SETB HDA
CLR HCL
RET

;*************************
;ПРОГРАММА ПОСЫЛКИ БАЙТА (A) C ПРОВЕРКОЙ
;КВИТИРУЮЩЕГО БИТА (ЕСЛИ ERR. ТО ФЛАГ 'С' УСТ.)
SHTRS: MOV B,#08H ;КОЛ-ВО БИТ
SHT2: RLC A
MOV HDA,C
SHT1: NOP ;ПЕРЕДАЧА БАЙТА
SETB HCL
CLR HCL
DJNZ B,SHT2 ;ВСЕ БИТЫ?
;-----------------------
SETB HDA
SETB HCL
MOV B,#08
SHT4: JNB HDA,SHT3 ;ЕСТЬ ACK?
DJNZ B,SHT4
CLR HCL
SETB C ;ВЫХОД С ОШИБКОЙ
RET
;-----------------------
SHT3: CLR HCL ;БЕЗ ОШИБКИ
CLR C
RET

;***********************
;ПРОГРАММА ПРИЕМА БИТА В (А) С ВЫДАЧЕЙ КВИТИРУЮЩЕГО БИТА
SHRAC:
MOV B,#08
SHT5: SETB HCL
NOP ;ПРИНИМАЕМ БАЙТ
MOV C,HDA
CLR HCL
RLC A
DJNZ B,SHT5
;--------------------
CLR HDA
NOP ;ВЫДАЕМ ACK
SETB HCL
CLR HCL
SETB HDA
RET

;************************
;ПРИЕМ БЕЗ КВИТИРОВАНИЯ
SHRES:
MOV B,#08
SHT6: SETB HCL
NOP
MOV C,HDA
CLR HCL
RLC A
DJNZ B,SHT6
;---------------------
SETB HDA
SETB HCL
CLR HCL
RET

;*********************
;ПРОГРАММА ЗАДЕРЖКИ
SHDEL:
RET

Последний раз редактировалось heady69; 17.05.2011 в 14:44.
heady69 вне форума  
Сказали "Спасибо" heady69
warel (27.06.2019)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятки с моделью задержки (The Delay/Buffer Model) DK Proteus 11 21.04.2011 23:47
Нужна помощь CDC-232 и atmega16 robin7341 Микроконтроллеры, АЦП, память и т.д 0 08.08.2010 00:13
ATMega16 + ADC + x200 или х10 не хочет работать a_akmal Микроконтроллеры, АЦП, память и т.д 27 06.04.2009 10:55
Помогите разобраться с программой для ATmega16 idmg Микроконтроллеры, АЦП, память и т.д 33 17.05.2007 01:12
[Решено] Помогите найти схему задержки речевого сигнала dezarr Аудиотехника 1 24.02.2005 20:26


Часовой пояс GMT +4, время: 17:13.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.