74 сообщения в этой теме

i80186    10

Если пользуетесь элементом из меню View - corse, то для адекватного отображения количества выполненных процессор тактов необходимо открывать и disassembly. Только тогда будет реальное количество тактов отладчик считать. Например:

double i=100;

void main(void){

i=i/3;

}

Посмотрите сколько будет отображаться тактов на эту команду с открытым меню disassembly и без. При этом должно быть активно окошко disassembly, нужно ткнуться на него мышкой, и выполняться step into(F11).

Такие вот особенности.

Опять же, надо иметь ввиду, что не все ассемблерные команды выполняются за один машинный такт. Т. е. таймеру можно доверять однозначно, а вот счётчику команд в отладчике нет)

При условии использования ST-LINK конечно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
i80186    10

А вообще, есть вариант смотреть сколько именно циклов выполняется там или иная функция. Но это возможно только в режиме "без железа" ,т .е. необходимо пользоваться симулятором.

В меню view/register находим register CPU, и там уже будут виртуальные счётчики CYCLECOUNTER - количество циклов после сброса, CCSTEP-количество циклов на последние действие, и два CCTIMER их можно сбрасывать когда необходимо и смотреть сколько с этого момента заняло циклов выполнение программы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IDis    4

Как вы подключили файл dalnomer.c ?

#include  <dalnomer.c>

- Если кинуть в папку с проектом этот файл, то компилятор выдает ошибку

- Если создать пустой файл и сохранить его под именем dalnomer.c и дальше кликнуть по main.c => add=>dalnomer.c

То подключения файла не происходит. Как его можно подключить не закидывая этот файл в папку с прогой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
i80186    10

Я вроде про это рассказывал в одном из уроков. А может позабыл. Надо препроцессору задать путь к файлу.e72be58203ba.jpg

Точнее к папке, где находиться файл.

Это в настройках проекта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IDis    4

i80186

не подскажите какие еще будут использоваться устройства в ваших уроках?

Что бы можно было сразу скопом их купить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IDis    4

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

А то пока не очень понятно как это работает.

Например кто вызывает функцию TIMR4_ISR

__interrupt void TIMR4_ISR(void){

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
i80186    10

Функции прерывания не вызываются, это адрес, на который процессор переходит автоматически. Т. е. это определённая ячейка в памяти программ, куда записывается адрес функции обслуживания прерывания, процессор автоматически переходит по этому адресу, там лежит адрес программы обслуживания прерывания. Компилятор позволяет выполнить эту операцию в полной мере, сохраняя в стек данные регистров процессора, счётчика команд и т. д. На самом деле обслуживание прерываний необходимо хотя бы один раз попробовать сделать на ассемблере, чтобы получить полное представление об этом. Ну а видео, хорошо, следующие сделаю про прерывания.

Устройства будут такие. Ну и наверное индикатор.

http://ru.aliexpress...1725211643.html

http://ru.aliexpress...05-427fcc1ec4a3

Изменено пользователем i80186

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IDis    4

Конспект к уроку 5.

869a9c52e8dd.jpg

Схема подключения:

4932398217f2.jpg

Характеристики датчика HC-SR04

В отличие от инфракрасных дальномеров

+ не влияют источники света или цвет препятствия

- Могут возникнуть затруднения при определении расстояния до пушистых или тонких объектов

- скорость звука в воздухе зависит от температуры

Характеристики

Напряжение питания

Ток потребления в режиме ожидания: 2мА

Ток потребления в режиме работы: 15мА

Частота ультразвука 40 кГц

Угол обзора 15 градусов

Измеряемое расстояние

от 0,03 до 0,6м с разрешающей способностью 3 мм

от 0,6 до погрешность увеличивается

Расчет расстояния

S=F/58,

S – расстояние в сантиметрах,

F – продолжительность импульса в микросекундах.

Для запуска датчика необходимо:

1. МК сформировывает импульс на вход датчика trigger длительностью не менее 10 мкс, по даташиту рекомендуют 60мкс (Т.е. даем единицу на соответствующую ногу микропроцессора)

2. ДАТЧИК передает 8 звуковых импульсов для измерения расстояния (далее датчик сам сформирует на выходе echo сигнал, чем он дольше, тем больше расстояние.)

3. МК принимает сигнал по каналу echo, считает его длительность и далее мы можем перевести это в расстояние по формуле: длительность импульса / 58

//функция ообслуживания датчика
int time_count(void){
int time=0;
i=30; // устанавливаем длительность запускающего импульса
__disable_interrupt(); // запрещаем прерывания
PD_ODR_bit.ODR6=1; // включаем порт D6
while(--i,i); // держим сигнал включенным (30)
PD_ODR_bit.ODR6=0; //Выключаем наш сигнал, порт D6
while(PD_IDR_bit.IDR7==0); // ожидаем импульс с датчика порт D7 echo
while(PD_IDR_bit.IDR7==1){ //как только видим на порту D7 единицу начинаем считать его длительность
++time; //считаем время
}
__enable_interrupt();
return time;
}

//функция измерения дальности
void izm_dalnost(void){
dalnost=time_count()/58; // 58 - рекомендуемый делитель по даташиту, Зависит от скорости тактирования нашего процессора
}

Изменено пользователем IDis

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IDis    4

Тут возник вопрос.

Вот у меня есть рабочая частота - 16 МГц . Как мне узнать сколько тактов будет в одной секунде?

Или если я ее понижу до 2 МГц или до 4 МГц. Сколько тактов будет в секунде?

Если секунды слишком большая величина, то сколько тактов будет в наносекунде?

Есть ли какая то формула? или зависимость?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
i80186    10

1/fmaster для периферийных устройств, 1/fcpu для ядра процессора. Т. е. если рабочая частота процессора 16 МГц, то время одного машинного такта - 1/16000000 Гц = 62,5 нс.

Изменено пользователем i80186

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IDis    4

А не подскажите при какой частоте процессора начинаются проблемы?

Типа дорожки воспринимаются за емкости и им подобные проблемы. Какая максимально комфортная работа процессора? 16МГц, 24МГц или 64МГц и тд?

Как я понимаю, частоту процессора можно держать значительно выше, чем частоту шины?

Какая максимально комфортная частота процессора и шины?

Изменено пользователем IDis

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
i80186    10

Лучше не экспериментировать, какая указана в документации, ту и использовать. Т. е. 16 МГц, или 24 МГц(для тех МК, где это указано в документации) Возможно ядро оно и сможет работать на более высокой частоте, но оно внутри процессора, доступа к нему нет, а узел тактирования может просто кварц/генератор с более высокочастотный не признавать.

Хотя, можете и провести эксперимент. Страшного ничего не должно случиться, только советую на DISCOVERY этого не делать. На отдельном процессоре.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IDis    4
время одного машинного такта - 1/16000000 Гц = 62,5 нс

Не подскажите, как подсчитать что бы светодиод моргал с периодичностью точно 1 секунду? Какое значение i должно тут быть?

void delay (unsigned long int i)
{while (i-->0);}
...
PB_CR2_bit.C20=1;
...
 PB_ODR_bit.ODR0=1;
 delay (100000);
 PB_ODR_bit.ODR0=0;
 delay (100000);

Возможно ли выполнить следующую задачу:

- "Светодиод 1" подключен к порту Е6 и мигает на частоте 16МГц с периодичностью в 1 000 тактов

- "Светодиод 2" подключен к порту В1 и мигает на частоте 16/8/128 с периодичностью в 1 000 тактов

- при срабатывании кнопки на порту А4, частоты меняются местами. То есть "Светодиод 1" тактируется с частотой 16/8/128 а "Светодиод 2" тактируется с частотой 16МГц

Как указать, что порт Е6 работает с одной частотой, а порт В1 с другой.

Или это невозможно сделать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
i80186    10

Нет, так нельзя. Порты не работают как таковые на какой либо частоте. Собственно порт представляет из себя буферный регистр. Например К1533ИР27 будет хорошим примером порта. Единственное что, тут он ещё и побитно доступен.

Таймер заведи по прерыванию и там время отсчитывай.

Собственно даже и таймер то не нужен. Всё программно можно сделать.

Т. е. не надо указывать никаких частот портам. Нужно временные задержки их переключения менять.

Напремер в функцию delay можно передавать не константу, а переменную, и менять её значение, в зависимости от состояния входа.

Изменено пользователем i80186

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IDis    4

хотел спросить, ожидаются ли ещё уроки по stm8?

Отправлено с моего Wileyfox Swift через Tapatalk

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IDis    4

Эх, не долго музыка играла.

Может кто то сможет перенять эстафету по stm8?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IDis    4

офигеть, как тонко и информативно. Столько уважения в этих словах. Сразу видно человек с богатым опытом.

Отправлено с моего Wileyfox Swift через Tapatalk

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость Сергей   
Гость Сергей

А возможно ли считать прошивку с чипа, внести нужные коррективы а потом обратно её в чип залить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
snn_krs    38

Если в МК не установлена защита от чтения, то считать можно. Записать вообще без проблем. А вот сможете разобраться в том что считаете или нет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Похожие публикации

    • Автор: Евгений61
      Здравствуйте! Помогите пожалуйста разобраться с заголовочным файлом.
      По идее pragma vector должен быть прописан в IOSTM8s003f3.h
      но там почему то не прописаны аектора внешних прерываний. Помогите!
      И еще вопросик. Как посмотреть что описано в "#define" файле. Может его можно самому написать.


      А В ДАТАШИТЕ ВЕКТОРА ЕСТЬ
       

    • Автор: Евгений61
      Здравствуйте. Такой вопрос. Нужно реализовать на STM8S командное управление. 
      Поясню. При поступлении восьмибитного кода на пин МК нужно выполнять какое то действие. Кодировка кода происходит ШИМ модуляцией( Т,Е. по длительности импульса- длинный импульс =1 короткий =0.). При нарастании фронта на ножку МК нужно включить таймер. По спаду фронта нужно выключить таймер, и сравнить значение счетчика с числом. Если значение совпадает, то записать число (0 или 1) в соответствующий бит регистра. По принятии всех 8 битов нужно выполнять какое-то действие. Так вот вопрос заключается в том-как реализовать запуск таймера при поступлении на ножку фронта сигнала, и как его остановить по спаду и проверить значение счетчика. Желательно делать аппаратно на таймерах и прерываниях, что бы уменьшить время.

    • Автор: Anton-VII
      Продам микроконтроллер ATmega8-16PU б/у, выводы чистые не паяные. Цена 100руб. за штуку, количество - 100шт. Могу отправить в любой город почтой России или транспортной компанией (стоимость пересылки за ваш счет). Перевод денег на пластиковую карту Сбербанка.
    • Автор: Pivowar
      Всем привет!
      Мы ищем человека которому интересно заниматься проектированием схем, плат и созданием своих устройств. Мы стартап-команда, занимающаяся разработкой IoT, на основе различных микроконтроллеров с последующей интеграцией с облачными технологиями. Так же имеется большое количество проектов по разработке программно-аппаратных решений "под ключ". Для всего этого необходимо проектировать схемы, разрабатывать прототипы, подбирать различные модули и компоненты, создавать gerber файлы и подготавливать это все для производства. Прошу на обсуждение всех заинтересовавшихся. 
      Наше место дислокации: г. Москва, СЗАО, метро "Октябрьское Поле"
    • Гость Vlad_krsu
      Автор: Гость Vlad_krsu
      Разбираюсь с микросхемой UC3825. Есть работающая схема контроля скважности выходного сигнала переменным резистором, подключенным к ноге 8. Приложена к посту
      Задался целью управлять этой микросхемой не переменным резистором, а с помощью ШИМ от 5в микроконтроллера. Насколько я понял по даташиту UC3825 может работать по току и по напряжению и теоретически это возможно.
      Есть ли кто ни будь, кто хорошо разбирается в функционале это микрухи? Как можно подключить к ней МК и будет ли она работать от входного ШИМ сигнала, частотой скажем 1кГц?