Страница 227 из 628

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Ср сен 21, 2011 20:44:12
Chettuser
Спасибо большое!
А в чём фишка такой конструкции?

Код: Выделить всё

void main () {
__CONFIG(WDTDIS & INTIO & UNPROTECT & BORDIS & MCLRDIS & LVPDIS);
Я обычно ставлю перед main.

ПОЗЖЕ: Сорри - я невнимательный, забыл про PEIE = 1;

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт сен 22, 2011 10:08:38
Back-loz
Добрый день. Проблема следующая: Пытаюсь разобраться с технологией Bit Banding для микроконтроллера STM32F107VC, но никак не получается устанавливать или сбрасывать биты через эту технологию. Подскажите пожалуйста формулу расчёта адреса бита в области Bit Band конкретно для данного микроконтроллера(STM32F107VC). Желательно с примером расчёта адреса какого нибудь бита. Заранее всем спасибо. Программирую я на IAR embedded workbench на си.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт сен 22, 2011 11:32:58
Soir
Chettuser писал(а): А в чём фишка такой конструкции?

Код: Выделить всё

void main () {
__CONFIG(WDTDIS & INTIO & UNPROTECT & BORDIS & MCLRDIS & LVPDIS);
Я обычно ставлю перед main.
Никакой фишки или принципиальной разницы нет. Компилятор (HI-TECH, за другие не знаю) найдет конфигурацию и там, и тут. Попался пример с такой конструкцией, вот и выложил.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт сен 22, 2011 12:10:48
Back-loz
Предыдущий Свой вопрос снимаю вроде разобрался в формуле возник другой вопрос. Почему такой код написанный на си: ((volatile unsigned long *)(0x42000000 + (0x2101C*32) + (28*4)))=1; работает и приводит к установке бита 4 регистра RCC_APB1ENR(0x2101C - заранее посчитанное смещение регистра RCC_APB1ENR(0x4002101C-0x40000000)).
А когда я делаю следующий макрос:
#define BB_PERIPH 0x40000000
#define BB_BASE 0x42000000
#define BB_ACCESS(ADDR,BIT) *((volatile unsigned long *)(BB_BASE + ((ADDR-BB_PERIPH)*32) + (BIT*4)))
и использую его следующим образом:
BB_ACCESS(RCC_APB1ENR,4)=1; то это не приводит к тому же результату?? Подскажите пожалуйста что надо исправить в макросе чтобы он заработал.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Сб сен 24, 2011 17:09:31
FireHawk
Приветствую многоуважаемых Котов! У меня совсем мелкий вопрос, который, тем не менее, стоил мне бессонной ночи. Дело в том, что я не могу правильно реализовать PWM на Atmega8. Использую Timer2, режим FastPWM, non-inverted (TCCR=0x69). Проблема появляется, когда OCR становится равен нулю (т.е. Duty Cycle = 0%) - в этом случае ножка таймера всё равно успевает один раз за 3 цикла (в тот момент когда TCNT равен 0x01) PWM перейти в состояние логической единицы (что даёт мне среднее напряжение в 0.36В при текущей частоте 1 МГц). Как мне правильно сделать так, чтобы при OCR = 0 ножка таймера всегда была в "низком" состоянии?

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Сб сен 24, 2011 20:01:34
Леонид Иванович
Сделать инверсный PWM и грузить регистр инвертированным кодом.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Сб сен 24, 2011 21:31:53
Мастер Ломастер
Ничегонеработает писал(а):Сделать инверсный PWM и грузить регистр инвертированным кодом.
проблема перейдет в значение OCR=255?

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Сб сен 24, 2011 22:04:54
FireHawk
Мастер Ломастер писал(а):
Ничегонеработает писал(а):Сделать инверсный PWM и грузить регистр инвертированным кодом.
проблема перейдет в значение OCR=255?
К сожалению так и произошло. Теперь при Duty Cycle = 100% (OCR=255) ножка таймера постоянно отваливается в ноль - в итоге напряжение гуляет в районе 4.63В. =О_о=

Что самое обидное, в интернете сотни примеров и туториалов PWM на атмеге. И нигде никто не разбирает такую проблему.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вс сен 25, 2011 11:59:24
Леонид Иванович
Мастер Ломастер писал(а):проблема перейдет в значение OCR=255?
Да, перейдет в другую, при Duty Cycle = 100% будут короткие провалы в ноль. Тут уж приходится выбирать. В большинстве случаев принципиальнее отсутствие иголок при Duty Cycle = 0%, так как это должно соответствовать полностью выключенному состоянию. А вот максимальное заполнение редко используется, так как в большинстве случаев проименяется программная цифровая калибровка шкалы ШИМ, и максимальное выдаваемое значение соответствует не 100%, а порядка 90% ШИМ. Ведь нужно иметь запас на разброс компонентов.
FireHawk писал(а):Что самое обидное, в интернете сотни примеров и туториалов PWM на атмеге. И нигде никто не разбирает такую проблему.
Что её разбирать в Интернете, если она черным по белому описана в datasheet: "If the OCR2 is set equal to BOTTOM, the output will be a narrow spike for each MAX+1 timer clock cycle. Setting the OCR2 equal to MAX will result in a constantly high or low output (depending on the polarity of the output set by the COM21:0 bits.)".

Проблема не решается, это такое свойство аппаратной части. Но, как я писал выше, отсутствие иголок важно лишь для выключенного состояния.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вс сен 25, 2011 12:40:06
Chettuser
У меня возник вопрос, возможно решение сверху, но его я пока не вижу.

Код: Выделить всё

void ShiftREG_74595(temp)
{ int n = 1;				// Позиция бита 1..8
	while (n <= 128)
	{	CLOCK = 1; 			// Начало строба
		DATA = n && temp; 	// Бит данных
		DATA = 0;
		DelayUs (10);
		CLOCK = 0; 			// Конец строба
	n <<= 1; }
	LOAD = 1;
	DelayUs (50);
	LOAD = 0;
return;
}
По идее в DATA должна происходить побитная трансляция из temp. Но почему то (у меня такое ощущение) конструкция

Код: Выделить всё

DATA = n && temp;
работает неправильно.
Почему? Ведь по логике вещей всё правильно.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вс сен 25, 2011 15:33:19
Леонид Иванович
Chettuser писал(а):почему то (у меня такое ощущение) конструкция

Код: Выделить всё

DATA = n && temp;
работает неправильно.
Почему?
Нужно

Код: Выделить всё

DATA = n & temp;

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вс сен 25, 2011 16:39:12
Chettuser
Результат - только 1-й импульс на выходе - остальные 0.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вс сен 25, 2011 17:08:25
Chip115
Всем привет!
Можете объяснить как косвенная адресация в ассемблере работает? надо переслать число из регистра bx по адресу 6006 с помощью mov.

Мы должны загрузить регистр адреса, например si , а потом пнуть данные в регистр bx?

mov si,6006h
mov [si],bx

?
Что то не работает... не могу понять этот метод адресации :(

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вс сен 25, 2011 17:19:14
SII
Написано всё принципиально верно, так что должно работать. А с чего взяли, что не работает? Или, может, в регистрах запутались? А то в одном месте про BX говорите, в другом -- про DX...

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вс сен 25, 2011 17:28:32
Chip115
да, пока сюда набирал - спутал.
Не посоветуете программу по эмуляции процессора i80386 ?
просто одной пользуюсь но в область памяти с адресом 6006 не попадаю... он по очередно переберает
он же должен содержимое регистра поместить по адресу 6006?
вот что говорит ассемблер

Код: Выделить всё

EMU8086 GENERATED LISTING. MACHINE CODE <- SOURCE.
 
noname.bin_ -- emu8086 assembler version: 4.08  
 
[ 25.09.2011  --  21:42:41 ] 
 
===========================
[LINE]     LOC: MACHINE CODE                          SOURCE
===========================
 
[   1]    0000: B8 06 00                              mov ax,6h
[   2]    0003: 8B D8                                 mov bx,ax
[   3]    0005: BE 06 60                              mov si,6006h
[   4]    0008: 89 1C                                 mov [si],bx
[   5]    000A: CC                                    int 3
[   6]        :                                       
 
===========================
 




===========================

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вс сен 25, 2011 17:58:13
Chip115
можете проверить по прямой адресации. Надо число из ах пнуть по адресу 6005H

Код: Выделить всё

mov ax,6h       
mov [6005h],ax

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вс сен 25, 2011 18:16:51
Chettuser
По моему вопросу никто не скажет? :(

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вс сен 25, 2011 18:25:29
urry

Код: Выделить всё

void ShiftREG_74595(unsigned char temp)
{ 
unsigned char mask = 1;            // Позиция бита 1..8
	do{
   	DATA = mask & temp;    // Бит данных
   	CLOCK = 1;          // Начало строба
   	DelayUs (10);     
   	CLOCK = 0;          // Конец строба
   	mask <<= 1; 
	}while(mask);
   DATA =0;	
   LOAD = 1;
   DelayUs (50);
   LOAD = 0;
}

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вс сен 25, 2011 19:04:30
SII
Chip115 писал(а):Не посоветуете программу по эмуляции процессора i80386 ?
Народ обычно пользует Bochs и QEMU (вроде так они пишутся)... Но я давно уже на ассемблере под ПК не программировал, работа не с ним связана, так что не особо в курсах.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вс сен 25, 2011 20:28:42
Chettuser
Вопрос снимается - разобрался.
Если нужен правильный код напишу.

ПОЗЖЕ Urry, Спасибо. Но почему то unsigned char у меня считает некорректно - вылетает за пределы и не может остановиться :))) (видимо какое то ограничение в 127 имеет значение). Пришлось ставить int.