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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

AndTer писал(а):Ну как же, например просто нет места на индикаторе для 4 цифр + знак + символ температуры. Не делать же бегущей строкой)
Потому и не всегда.
ну так этот аспект к округлению имеет опосредствованное отношение, это скорее проблема форматирования вывода... лично я решал в одном из своих проектов эту проблему так: для положительных температур ниже 100 градусов выводил с десятыми без округления, для температур от 100 и выше - без десятых (считая, что при таких температурах десятые доли уже не особо что-либо решают... например, в бане). аналогично для отрицательных температур... т.е. пока место под десятые есть за счет старших разрядов - десятые выводил, а иначе ими жертвовал в пользу старших разрядов и знака.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Mem
Поставщик валерьянки для Кота
Сообщения: 1915
Зарегистрирован: Вт апр 17, 2012 14:20:59
Откуда: Новокузнецк

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

Сообщение Mem »

Пытаюсь разобраться с работой УЗ датчика расстояния HC-SR04 и подружить его с пиком. Нашел хорошее описание работы и разные примеры программ для этого: https://electrosome.com/hc-sr04-ultrasonic-sensor-pic/

Но вот никак не хочет работать таймер в Proteus и постоянно выдает сообщение "вне радиуса", хотя импульсы с датчика приходят как положено и никаких проблем с его моделированием нет. Но вот подсчет времени в прерывании не происходит и не могу понять почему.

Использую программу для MikroC:
Спойлер

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

// LCD module connections
sbit LCD_RS at RD2_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;

sbit LCD_RS_Direction at TRISD2_bit;
sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
// End LCD module connections

int a;

//Interrupt function will be automatically executed on Interrupt
void interrupt() 
{
  if(INTCON.RBIF == 1)                 //Makes sure that it is PORTB On-Change Interrupt
  {
    INTCON.RBIE = 0;                   //Disable On-Change Interrupt
    if(PORTB.F4 == 1)                  //If ECHO is HIGH
      T1CON.F0 = 1;                    //Start Timer
    if(PORTB.F4 == 0)                  //If ECHO is LOW
    {
      T1CON.F0 = 0;                    //Stop Timer
      a = (TMR1L | (TMR1H<<8))/58.82;  //Calculate Distance
    }
  }
  INTCON.RBIF = 0;                     //Clear PORTB On-Change Interrupt flag
  INTCON.RBIE = 1;                     //Enable PORTB On-Change Interrupt
}
 
void main()
{
  char txt[7];
  Lcd_Init();
  Lcd_Cmd(_LCD_CLEAR);                 // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);            // Cursor off

  TRISB = 0b00010000;
  INTCON.GIE = 1;                      //Global Interrupt Enable
  INTCON.RBIF = 0;                     //Clear PORTB On-Change Interrupt Flag
  INTCON.RBIE = 1;                     //Enable PORTB On-Change Interrupt

  Lcd_Out(1,1,"Developed By");
  Lcd_Out(2,1,"electroSome");

  Delay_ms(3000);
  Lcd_Cmd(_LCD_CLEAR);

  T1CON = 0x10;                        //Initializing Timer Module

  while(1)
  { 
    TMR1H = 0;                         //Setting Initial Value of Timer
    TMR1L = 0;                         //Setting Initial Value of Timer

    a = 0;

    PORTB.F0 = 1;                      //TRIGGER HIGH
    Delay_us(10);                      //10uS Delay
    PORTB.F0 = 0;                      //TRIGGER LOW

    Delay_ms(100);                     //Waiting for ECHO
    a = a + 1;                         //Error Correction Constant
    if(a>2 && a<400)                   //Check whether the result is valid or not
    {
      IntToStr(a,txt);
      Ltrim(txt);
      Lcd_Cmd(_LCD_CLEAR);
      Lcd_Out(1,1,"Distance = ");
      Lcd_Out(1,12,txt);
      Lcd_Out(1,15,"cm");
    }
    else
    {
      Lcd_Cmd(_LCD_CLEAR);
      Lcd_Out(1,1,"Out of Range");
    }
    Delay_ms(400);
  }
}
Схема:

Изображение

Всё как на том сайте, частота МК 8 МГц. Но если использовать готовые скомпилированные прошивки, которые можно скатать там же, то происходит сброс мк watchdog'ом.

Прописав значение a = 10, выдает как положено расстояние в 11 см. А с датчиком ничего.

Где ошибка? В программе или протеусе?
Главный инженер проекта - человек, который как никто другой знает, что приближаться к спроектированной им хрени близко не стоит.
Самсусамыч

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

Сообщение Самсусамыч »

Давно замечено, что протеус с таймерами бывает работает не корректно. Свои программы проверяю только на отладочных платах (на железе).
Chettuser

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

Сообщение Chettuser »

Скачал и установил Atollic для STM32F030. Попробовал создать примитивный пример для отладки STM32F0308-DISCO. Однако при попытке дебажить вываливает ошибку:
Изображение
В ST-Link стоит та версия, которую попросил Atollic (V2.J31.S0), хотя есть новее (V2.J33.S0).
Что я делаю не так?
Спасибо.
Chettuser

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

Сообщение Chettuser »

Лог в Atollic'е:
Изображение
Что означает указанный адрес PC?
После опроса ST-Link'а переключается на STM32CubeProgrammer:
Спойлер

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

STMicroelectronics ST-LINK GDB server. Version 5.1.0
Copyright (c) 2018, STMicroelectronics. All rights reserved.

Starting server with the following options:
        Persistent Mode            : Disabled
        LogFile Name               : C:\Users\Vovan\Atollic\TrueSTUDIO\STM32_workspace_9.3\prt1\Debug\st-link_gdbserver_log.txt
        Logging Level              : 31
        Listen Port Number         : 61234
        Status Refresh Delay       : 15s
        Verbose Mode               : Enabled
        SWD Debug                  : Enabled

Hardware watchpoint supported by the target 
SWD frequency = 4000 kHz
ST-LINK Firmware version : V2J31S0
Device ID: 0x440
PC: 0x8000ab0
ST-LINK device status: HALT_MODE
ST-LINK detects target voltage = 2.92 V
ST-LINK device status: HALT_MODE
ST-LINK device initialization OK
Waiting for debugger connection...
Waiting for connection on port 61234...
Accepted connection on port 61234...
Debugger connected
Enter STM32_AppReset() function 
NVIC_DFSR_REG = 0x00000009
XPSR = 0xC1000000
 ------ Switching to STM32CubeProgrammer ----- 
      -------------------------------------------------------------------
                       STM32CubeProgrammer v1.3.0                  
      -------------------------------------------------------------------
Log output file:   C:\Users\Vovan\AppData\Local\Temp\STM32CubeProgrammer_a04208.log
Error: No debug probe detected.
Encountered Error when opening C:\Program Files (x86)\Atollic\TrueSTUDIO for STM32 9.3.0\Servers\STM32CubeProgrammer\bin\STM32_Programmer_CLI.exe
 ------ Switching context ----- 
Hardware watchpoint supported by the target 
SWD frequency = 4000 kHz
ST-LINK Firmware version : V2J31S0
Device ID: 0x440
PC: 0x8000ab0
ST-LINK detects target voltage = 2.91 V
ST-LINK device status: HALT_MODE
ST-LINK device initialization OK
Error in STM32CubeProgrammer
ST-LINK device status: RUN_MODE
Wait after kill 1000 msec 
Debugger connection lost.
Shutting down...
Что не так с этим STM32CubeProgrammer?

PS: Поставил STM32CubeProgrammer (в нём тот же _CLI.exe) - Firmware upgrade работает! апгрэйдит SW ST-Link'а до V2J33S0, но при этом в упор не видит:
Изображение
Аватара пользователя
GARMIN
Держит паяльник хвостом
Сообщения: 952
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда
Контактная информация:

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

Сообщение GARMIN »

Процессор стартует с адреса 0x08000000.
По этому адресу стоит переход на начало программы, так как вектор прерывания по старту процессора находится по этому же адресу 0x08000000.
За ним находится таблица прерываний процессора.
Следующая выполняемая команда как раз находится по адресу 0x08000ab0. Читайте устройство и работу процессора.
Chettuser

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

Сообщение Chettuser »

Это я знаю. Меня смутил "PC" :))
Причём адресация разная при разных пустых проектах созданных через мастер. Вот это и удивляет!
Проблема вроде решилась сносом Atollic 9.3.0 и установкой 9.0.0.
Печалька... На другой машине (чужой) всё работало "из коробки" с тем же дистрибутивом 9.3.0.
Аватара пользователя
GARMIN
Держит паяльник хвостом
Сообщения: 952
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда
Контактная информация:

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

Сообщение GARMIN »

Точнее, после сброса процессора в указатель стека и программный счётчик грузятся данные, расположенные по адресу 0х08000000. Вот после сброса PC и указывает на этот адрес. А он в общем случае может быть любым, какой ему назначит компилятор.
Аватара пользователя
Dentorol
Нашел транзистор. Понюхал.
Сообщения: 155
Зарегистрирован: Пн июн 21, 2010 19:57:07
Откуда: Россия - родина моя

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

Сообщение Dentorol »

Здравствуйте!

Делаю GSM-контроллер для телеметрии и малой автоматизации. Использую микроконтроллер STM32F103C8T6 и GSM-модуль SIM800L.

Развел плату так, что кварцевые резонаторы оказались под GSM-модулем - с обратной стороны платы. GSM-модуль является источником электромагнитных излучений. Насколько критично такое расположение кварцевых резонаторов?

Плату уже вытравил и почти спаял (осталось запаять GSM-модуль). При разводке на это не обратил внимания. А переразводить плату очень муторно (для меня это одна из самых нудных работ) - и так при разводке все мозги сломал - плата делалась под готовый корпус - места мало.

Да, я могу запаять GSM-модуль и проверить, как будет работать (хотя я почти уверен, что будет работать - но вопрос помех, надежности и стабильности остается открытым). Для полной проверки необходимо много времени и проверять при разных условиях.

Изображение Изображение

Соответственно вопрос: кто-то устанавливал кварцевые резонаторы под GSM-модулем? И как надежно, стабильно работал микроконтроллер?
Chettuser

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

Сообщение Chettuser »

Как называются штыревые разъёмы по краям плат Discovery и Nucleo от ST? На новых Nucleo-xxx не запаяны.
Самсусамыч

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

Сообщение Самсусамыч »

PBD-40 (Гнездо на плату двухрядное 40 контактов, шаг 2.54) Линейка контактов: 6; 8; 10; 16; 20; 40; 80.
Тыц
Chettuser

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

Сообщение Chettuser »

Нее... Это типа PLD, вот только штыри длинные - торчат с двух сторон, как бы насквозь платы.
Последний раз редактировалось Chettuser Сб апр 27, 2019 07:47:03, всего редактировалось 1 раз.
Самсусамыч

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

Сообщение Самсусамыч »

Такие (у этого же продавца)?
Изображение


Тыц
Chettuser

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

Сообщение Chettuser »

Вот, разъёмы с краю стоят. Такие:
Изображение
Они по 19 мм высотой. А вот как их назвать не знаю - это не обычные PLD, а что то другое.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19044
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

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

Сообщение Starichok51 »

PLS нужно искать. например:
https://ru.aliexpress.com/wholesale?Sea ... y&jump=afs
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Самсусамыч

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

Сообщение Самсусамыч »

Верхние по ссылке как раз подойдут… они даже немного длиннее 21 мм… пластмассу переместив на середину разъёма получиться то что надо. :)
Или искать у других продавцов готовые...

зы. Вот можно здесь посмотреть

Или тут

Тут есть 19 мм
Chettuser

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

Сообщение Chettuser »

Как я понял, это что то типа межплатных разъъёмов. Буду искать.
Что интересно - на старых DISCOVERY они короче. В спецификации тишина (может не там смотрю?).
рокки1945
Мучитель микросхем
Сообщения: 490
Зарегистрирован: Вс май 01, 2016 17:51:38

опорное подключение

Сообщение рокки1945 »

Здравствуйте! подскажите можно ли резистор от TL431 который идёт на вход AREF МК подключать к AVCC?
Самсусамыч

Re: опорное подключение

Сообщение Самсусамыч »

Аналоговое питание должно соответствовать напряжению питания МК.
Niks13
Прорезались зубы
Сообщения: 214
Зарегистрирован: Пн янв 16, 2012 02:06:36
Откуда: Луганск

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

Сообщение Niks13 »

Уважаемые коты, может вы поможете разобраться с моим вопросом.
Сделал в программе установку пороговых значений через запись в EEPROM при прошивке МК.
Ячейка с адресом 0x00 - нижний порог (по умолчанию 91 или 0x5B в hex-формате), адрес 0x01 - верхний порог (по умолчанию 97 или 0x61 в hex-формате).
В архиве файлы EEPROM (два варианта - bin и eep). Вы можете открыть их перед прошивкой в программе-прошивалке, отредактировать и залить в EEPROM микроконтроллера.

По не понятным причинам, автор этого проекта, заблокировал меня на своем сайте. Видимо за то, что я живу в Луганске, а он считает нас террористами.
В общем, мне нужно изменить температуру с 91 на 94 градуса, а с 97 на 100 и получить файл HEX, для заливки в контроллер. Если не сложно, хоть в 2х словах расскажите как и в каких программах это делать.
Я редактировал bin файл, в программе HxD. Там-же экспортировал его как HEX. Но получалась какая то фигня.
Вложения
Vent.zip
(1.65 КБ) 182 скачивания
Последний раз редактировалось Niks13 Сб май 11, 2019 10:18:07, всего редактировалось 1 раз.
Ответить

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