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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

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

Сообщение HHIMERA »

Берём тот камень, какой нужен... и не паримся...
Нужна периферия... скорость не так нужна... подешевле - F0XX или F100...
Нужна математика (простая) и скорость - F103 или F2XX...
Нужно всё - F4XX...

А перспективность/неперспектипность это от лешего... У всех линеек больше общего, чем разного... Изучая одну линейку неизбежно изучаешь и все остальные...
В принципе недорого

STM32F103VCT6 Микроконтроллер
Микроконтроллер: ARM Cortex-M3 32-bit, Flash: 256K, RAM: 48K, UART: 5, АЦП: 16 x 12bit (1MSPS), ЦАП: 2 x 12bit, ШИМ: 28 x 16bit
Тип корпуса: LQFP100
Цена - 48 грн. ...
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

STM32F103VCT6 Микроконтроллер

Надо срочно покупать, а то тут дороже:
http://www.compel.ru/infosheet/ST/STM32F103VCT6/
может наши барыги ценник забыли сменить :))
Chettuser

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

Сообщение Chettuser »

Возник вопрос в очередной раз:
Допустим есть порт PORTB из 8 пин. Соответственно имеем 8 бит регистра.
А мне нужно обращаться к нему как будто к двум портам, например биты 0,1,2,3 этого порта - это некий виртуальный порт PORTX, к которому также хотелось бы обращаться как к регистру. И есть порт PORTY - биты 4,5,6, с аналогичным доступом.
Можно ли это организовать например через #define ? В голову что то ничего не приходит.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Можно конечно. Только #define это директива препроцессора, позволяющая делать необходимые абстракции для программиста. А на деле всеравно будет сложная работа с битами порта, причем эта директива ограничена однострочными абстракциями, первый вариант еще можно легко реализовать при помощи дефайна, а для второго варианта уже нужен макрос или подпрограмма.
Макрос будет немного быстрее но сильно использует память а подпрограмма выполняться будет дольше но съекономит флеш-память что будет заметно если данная функция используется очень часто. Но на 16 тактов дольше выполнение.

Но лучше этой фигней не страдать, а создать в прошивке некий HAL, где доступ к железу будет разграничен от основного алгоритма и осуществляться через строго заданные интерфейсы. В таком случае у тебя не будет никаких портов, только функции высокого уровня(вроде "отправить байт") а вся реализация будет отделена логически. Вобщем, вариантов может быть масса главный критерий - удобство использования.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

Alexeyslav писал(а):причем эта директива ограничена однострочными абстракциями, первый вариант еще можно легко реализовать при помощи дефайна, а для второго варианта уже нужен макрос
Хмм... Под "однострочными" вы что имеете в виду? Исходную запись или результат? :)

А макрос не через define делается? :)

oleg110592 писал(а):мне нужно обращаться к нему как будто к двум портам, например биты 0,1,2,3 этого порта - это некий виртуальный порт PORTX, к которому также хотелось бы обращаться как к регистру. И есть порт PORTY - биты 4,5,6, с аналогичным доступом.

Если на чтение, то можно, например, вот так сделать (поверх порта A).
#define GET_PORTX (PINA&0x0f)
#define GET_PORTY ((PINA&0x70)>>4)
На запись маленько сложнее...
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

директива #define пишется только в одну строку, макрос делается при помощи пары директив .macro и .endmacro между ними можно запихнуть целую простыню текста с подставляемыми параметрами.
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

Alexeyslav, вы, наверное, про ассемблер, если .macro упомянули. А я про Си. Именно поэтому я смайликов наставил ранее - непонятно о чём речь.

На Си можно вот так записать.

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

#define GET_BITS(port, mask,shift) ( \
  (port & mask) >> shift \
)
И поэтому смайлик про однострочность был...
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

макросы обрабатываются препроцессором, поэтому язык значения не имеет. на С тоже работает.

так дефайном можно сделать пару строк, больше будет очень не удобно... а уж про параметры в такой макроподстановки уже молчу. А вывих мозга получить исследуя программу с такими дефайнами - как нефиг делать.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

oleg110592 писал(а):
мне нужно обращаться к нему...

это не моя писал(а) :o
в последней поделке забил на всякие макросы - по дедовски как то надежнее:

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

    TIM2->SR1 &= ~TIM2_SR1_UIF; // Очистка флага прерывания по обновлению

    UP_GPIO_DDR &= ~UP; // Ножка конфигурируется на ввод
    ENT_GPIO_DDR &= ~ENT; // Ножка конфигурируется на ввод
    DWN_GPIO_DDR &= ~DWN; // Ножка конфигурируется на ввод

    CAT1_GPIO_ODR |= CAT1; // cathodes off
    CAT2_GPIO_ODR |= CAT2;
    CAT3_GPIO_ODR |= CAT3;
    CAT4_GPIO_ODR |= CAT4;

    SEGA_GPIO_ODR &= ~SEGA; //segment off
    SEGB_GPIO_ODR &= ~SEGB;
    SEGC_GPIO_ODR &= ~SEGC;
    SEGD_GPIO_ODR &= ~SEGD;
    SEGE_GPIO_ODR &= ~SEGE;
    SEGF_GPIO_ODR &= ~SEGF;
    SEGG_GPIO_ODR &= ~SEGG;
    SEGH_GPIO_ODR &= ~SEGH;
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

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

Сообщение amd9800 »

А чем тогда макрос от функции отличается?
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

Alexeyslav писал(а):макросы обрабатываются препроцессором, поэтому язык значения не имеет. на С тоже работает.
Что-то про .macro ничего вот тут, например, нет https://gcc.gnu.org/onlinedocs/cpp/
Все директивы начинаются с символа #

И в какой среде для языка Си работают макросы в виде .macro .endmacro ???

amd9800, код функции вызывается, а код макроса поставляется каждый раз в то место, где он указывается.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
petrenko
Друг Кота
Сообщения: 5321
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

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

Сообщение petrenko »

А чем тогда макрос от функции отличается?
:))) :))) :)))
Макрос - нечто вроде синонима - подставляется вместо него во всех местах, где он встретится тот текст, который в определении оного.
Ну в общем учите матчасть..
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Chettuser

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

Сообщение Chettuser »

Всё! У меня мысли кончились, прошу помощи.
Для начала несколько картинок:
Так должно быть, это программный вывод SPI 9-бит:
screenshot_1.png
(64.43 КБ) 372 скачивания

Так выходит с аппаратным выводом тех же 9 бит:
screenshot_2.png
(65.01 КБ) 327 скачиваний

Видны "лишние" короткие импульсы на чётных данных.

Микроконтроллер PIC16F887, код инициализации SPI:
Спойлер

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

//----- SPI -------
   SMP = 0;      // фиксация данных в середине
   CKE = 0;      // данные по фронту
   
   SSPEN = 0;      // запретить SPI
   CKP   = 0;         // в состоянии покоя низкий уровень
   SSPM0 = 0;      // F(SPI)=F(OSC)/64 (312.5кГц)
   SSPM1 = 1;      // (0000 = F/4, 0001 = F/16, 0010 = F/64, 0011= TMR2/2)
   SSPM2 = 0;
   SSPM3 = 0;
//----------


Выводится инкрементируемая переменная.

Сам вывод:
Спойлер

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

void Lcd_write(char cd,unsigned char c)
{

   CS   = 0;      // Разрешаем LCD
   SCLK = 0;
   SDA  = cd;      // Передаем 9-й бит вручную
   SCLK = 1;
   __delay_us(1);   // Импульс такта
   SCLK = 0;
   
   SSPIF  = 0;
   SSPEN  = 1;      // Разрешить SPI
//   SSPBUF = ReversByte(c);      // Передаем по SPI остальные 8 бит
   SSPBUF = c;
   while (!SSPIF)
      {
         asm("nop");   // Ожидаем окончания аппаратной передачи
      }
   SSPIF = 0;
   SSPEN = 0;      // Запретить SPI
   
   SDA = 0;
   CS  = 1;
return;
}


Никто не сталкивался? :oops:
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Макросы не имеют никакого отношения к среде и языку на котором пишешь, макросы работают непосредственно перед компиляцией на уровне препроцессора поскольку они ГЕНЕРИРУЮТ исходник.
В макрос можно передать к примеру часть имени функции, склеить внутри полное имя и вызвать эту функцию, что обычным процедурам в рантайме недоступно.
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

Alexeyslav, препроцессоры бывают разные. Не зря там написано "The C Preprocessor".
AvrAssembler2 умеет обрабатывать определения в стиле Си-шного препроцессора и знает что такое ".marco", однако cpp (GNU C Preprocessor) не знает что такое ".macro".
Не спорю, что само определение макроса можно рассматривать независимо от языка, и можно "ручками" сделать не типичную схему обработки исходника с использованием каких угодно средств. И, соответственно, можно попробовать прикрутить препроцессор от AvrAssembler2 к программе на Си - только зачем?

Alexeyslav писал(а):макрос делается при помощи пары директив .macro и .endmacro
Это для ассемблеров! Типично для ассемблеров.
Для Си, обычно, все делается через "#define". Посмотрите раздел 3 по ссылке про препроцессор для Си - как называется раздел и с помощью каких директив создаются макросы в Си.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

Всем доброго дня :) Кто-нибудь может подсказать, как работать с 74HC595D? Гугл какого-то туториола не выдал, в даташите я понял только названия ног :( Я даже не понял смысла того, что написано в таблице управления микросхемой .В целом ситуация такая: есть, скажем, 4х разрядный 7ми сегментный индикатор. Есть ATmega48, без внешнего кварца.
Ну и вопрос, куда и что подключать, чтобы отправить ей команды? И в каком виде ей их слать? Как тактировать? В общем, ничего я не пойму :(
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Мikа писал(а):Всем доброго дня :) Кто-нибудь может подсказать, как работать с 74HC595D?
Даж не знаю. Обычный сдвиговый регистр, в ДШ всё разжёвано... Что конкретно непонятно?
Мikа писал(а):Я даже не понял смысла того, что написано в таблице управления микросхемой
Тут, наверное, надо бы дать ссылочку на книжку по цифровой технике...
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

Gudd-Head, в целом по поводу учебника по цифровой электронике вы правы, но я как-то не сторонник книг или ВУЗов, ИМХО, всё лучше доходит с практикой. Нагуглил вот http://avrproject.ru/publ/kak_podkljuch ... 5/2-1-0-44 то, что надо, кажется. Надо было искать "...сдвиговый регистр", на это меня подтолкнул ваш ответ, спасибо :)
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Мikа писал(а):Нагуглил вот

А вот как можно передавать инфу по одному проводу: http://easyelectronics.ru/upravlenie-se ... ovodu.html
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Ответить

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