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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Chettuser

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

Сообщение Chettuser »

Спасибо большое!
А в чём фишка такой конструкции?

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

void main () {
__CONFIG(WDTDIS & INTIO & UNPROTECT & BORDIS & MCLRDIS & LVPDIS);

Я обычно ставлю перед main.

ПОЗЖЕ: Сорри - я невнимательный, забыл про PEIE = 1;
Back-loz
Родился
Сообщения: 17
Зарегистрирован: Чт июл 16, 2009 11:51:34

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

Сообщение Back-loz »

Добрый день. Проблема следующая: Пытаюсь разобраться с технологией Bit Banding для микроконтроллера STM32F107VC, но никак не получается устанавливать или сбрасывать биты через эту технологию. Подскажите пожалуйста формулу расчёта адреса бита в области Bit Band конкретно для данного микроконтроллера(STM32F107VC). Желательно с примером расчёта адреса какого нибудь бита. Заранее всем спасибо. Программирую я на IAR embedded workbench на си.
Soir
Друг Кота
Сообщения: 3956
Зарегистрирован: Ср окт 14, 2009 10:37:49
Откуда: Украина

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

Сообщение Soir »

Chettuser писал(а):А в чём фишка такой конструкции?

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

void main () {
__CONFIG(WDTDIS & INTIO & UNPROTECT & BORDIS & MCLRDIS & LVPDIS);

Я обычно ставлю перед main.

Никакой фишки или принципиальной разницы нет. Компилятор (HI-TECH, за другие не знаю) найдет конфигурацию и там, и тут. Попался пример с такой конструкцией, вот и выложил.
Back-loz
Родился
Сообщения: 17
Зарегистрирован: Чт июл 16, 2009 11:51:34

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

Сообщение 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; то это не приводит к тому же результату?? Подскажите пожалуйста что надо исправить в макросе чтобы он заработал.
FireHawk
Родился
Сообщения: 4
Зарегистрирован: Вт авг 23, 2011 14:16:49

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

Сообщение FireHawk »

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

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

Сообщение Леонид Иванович »

Сделать инверсный PWM и грузить регистр инвертированным кодом.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

Сообщение Мастер Ломастер »

Ничегонеработает писал(а):Сделать инверсный PWM и грузить регистр инвертированным кодом.

проблема перейдет в значение OCR=255?
битва с дураками проиграна, победители торжествуют. слава победителям!
FireHawk
Родился
Сообщения: 4
Зарегистрирован: Вт авг 23, 2011 14:16:49

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

Сообщение FireHawk »

Мастер Ломастер писал(а):
Ничегонеработает писал(а):Сделать инверсный PWM и грузить регистр инвертированным кодом.

проблема перейдет в значение OCR=255?

К сожалению так и произошло. Теперь при Duty Cycle = 100% (OCR=255) ножка таймера постоянно отваливается в ноль - в итоге напряжение гуляет в районе 4.63В. =О_о=

Что самое обидное, в интернете сотни примеров и туториалов PWM на атмеге. И нигде никто не разбирает такую проблему.
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

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

Сообщение Леонид Иванович »

Мастер Ломастер писал(а):проблема перейдет в значение 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.)".

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

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

Сообщение 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;
работает неправильно.
Почему? Ведь по логике вещей всё правильно.
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

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

Сообщение Леонид Иванович »

Chettuser писал(а):почему то (у меня такое ощущение) конструкция

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

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


Нужно

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

DATA = n & temp;
Chettuser

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

Сообщение Chettuser »

Результат - только 1-й импульс на выходе - остальные 0.
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

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

Сообщение Chip115 »

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

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

mov si,6006h
mov [si],bx

?
Что то не работает... не могу понять этот метод адресации :(
Последний раз редактировалось Chip115 Вс сен 25, 2011 17:28:54, всего редактировалось 1 раз.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

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

Сообщение SII »

Написано всё принципиально верно, так что должно работать. А с чего взяли, что не работает? Или, может, в регистрах запутались? А то в одном месте про BX говорите, в другом -- про DX...
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

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

Сообщение 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]        :                                       
 
===========================
 




===========================
Вложения
Снимок.JPG
скриншот
(57.45 КБ) 299 скачиваний
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

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

Сообщение Chip115 »

можете проверить по прямой адресации. Надо число из ах пнуть по адресу 6005H

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

mov ax,6h       
mov [6005h],ax
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Chettuser

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

Сообщение Chettuser »

По моему вопросу никто не скажет? :(
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

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

Сообщение 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;
}
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

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

Сообщение SII »

Chip115 писал(а):Не посоветуете программу по эмуляции процессора i80386 ?


Народ обычно пользует Bochs и QEMU (вроде так они пишутся)... Но я давно уже на ассемблере под ПК не программировал, работа не с ним связана, так что не особо в курсах.
Chettuser

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

Сообщение Chettuser »

Вопрос снимается - разобрался.
Если нужен правильный код напишу.

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

Вернуться в «Разные вопросы по МК»