Перейти к содержанию
    

VladimirYU

Свой
  • Постов

    426
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные VladimirYU


  1. Форумчане, подскажите, пожалуйста, как заставить cout выводить в UART. C printf вроде разобрался, переопределил в своем проекте putchar и все заработало. Захотелось использовать cout, но получаю ошибку линкера. IARAVR 4.12

     

    Error[e46]: Undefined external "__read" referred in ?getchar ( D:\IAR Systems\EW4_12A\avr\LIB\DLIB\dlAVR-3s-ec-n.r90 )

     

  2. То-есть Вы хотите сказать что все библиотеки которые выкладываются производителями чипов дерьмо. А программы нужно писать самому и с нуля и тогда будет все супер?

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

  3. Нет, обычный, комнатной температуры.

     

    Я вставил на макетку щупы мультимедиа и замеряю с помощью него напряжение между ресетом и землей. Изначально напряжение 3.93, а если его начать шить, то оно падает до 2.93 в. кто-нибудь знает процесс сбрасывания мк, какое напряжение подается??

    В режиме программирования на ножке Reset напряжение должно быть 0В(потенциал "земли" питания).

  4. Добавил в Linker->Extra options

    -y(CODE)

    -Ointel-extended,(XDATA)=$EXE_DIR$\$PROJ_FNAME$.eep

     

    Сам код инициализации

    __eeprom unsigned char erm[15]="Demo STRing";

    или так

    __eeprom char erm1=0x55;

     

    Компилится нормально, но файл *.ерр фактически пустой, и не меняется, даже если я выкину строку инициализации из кода.

    содержимое файла epp ниже. В чем может быть проблема?

    :040000031000F000F9

    :00000001FF

     

    при объявлении переменных ЕЕПРОМ добавьте ключевое слово

    __root __eeprom unsigned char erm[15]="Demo STRing";

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

  5. Уважаемые коллеги,

     

    Есть задумка сделать бесколлекторный двигатель постоянного тока на 1 кВт. Причем с питанием в 500В. (или 250В для начала. Брать из розетки).

     

     

    Вопрос в том как его запитать-законтроллировать?

     

     

     

    Я так понимаю, что проще всего вставить датчики Холла в мотор, подальше от обмоток. И от их сигналов включать нужные обмотки с ШИМ регуляцией.

     

    Кто может предложить подходящую схему?

    Или где можно найти подобную?

     

    У вас две взаимосвязанные задачи

    1. двигатель

    2. управление

    Посмотрите в сторону AT90PWM3, это специализированный контроллер для управления

    двигателями, в том числе и вентильными, там есть примеры его использования как раз для двигателей с встроенными датчиками Холла. Есть пример программы, он правда с глюками, но за основу подойдет. Силовую часть сразу делайте на 3-х фазных мостах от IR, основные защиты там уже аппаратно реализованы. Программные сделаете сами. По поводу двигателя с такими параметрами готового решения подсказать сразу не могу. Но если брать за основу мощность 1кВт, то для 48В получается 20А, это мне видится более реальным.

  6. Вы же написали:

     

    Tobj* obj = new Tobj;
    
    int main()
    {
    ..........
    }

     

    Именно это в таком виде не может работать.

     

    Вы путаете объявление объекта и его создание.

     

    Tobj* obj;  // объявление указателя на объект, указателя с глобальной вивдимостью
    
    int main()
    {
      obj = new Tobj; // создание объекта (вызов конструктора, в данном случае)
                              // и передача адреса созданного обьекта указателю с глобальной видимостью
    ..........
    }

     

    Последний вариантом я всегда и пользовался, см. предыдущий мой пост. Не работает он в конкретном случае и я не могу понять почему, игра с "кучей" и стеками результатов не дала. В map файле ничего криминального не увидел, предупреждений ни кампилятор, ни линкер не выдает. Работает только глобальный статически созданный объект. А первое Ваше утверждение весьма спорно.

    в глобальной области строка

    Tobj* obj = new Tobj;

    включает в себя и объявление и создание объекта.

  7. А что именно не работает? Память не выделяется? Конструктор не вызывается? Указатель на неверный адрес указывает?

     

    Что-то типа int *a = new int[10]; работает?

     

    Судя по всему не вызывается коструктор. Так ведь в куче проектах работает именно третий вариант, указатель на объект глобальный а требуемый конструктор, определяемый например по опросу ключа, вызывается в main. Если я правильно понимаю, что если бы были проблемы с недостатком памяти не работал бы и глобальный объект.

     

    Автор хочет, чтобы это работало до main(). A это невозможно. Внутри любой функции - пожалуйста.

    Поясните, почему, хочется глобальным иметь указатель на объект, а конструктор вызывать где надо и удалять объект (по необходимости ) где надо.

  8. Вопрос к знатокам. Компилятор IARAVR v4.12. Столкнулся со следующим эффектом,в случае объявления объекта глобальным статическим все нормально работает

     

    Tobj obj;

     

    int main()

    {

    ..........

    }

     

    А если объявить его так:

     

    Tobj* obj = new Tobj;

     

    int main()

    {

    ..........

    }

     

    не работает. Естественно методы в этом случае вызываются через указатели.

    Игра настройками HEAP, CSTACK, RCTACK ни к чему не приводит. Впервые на такое налетел.

    Подскажите где я туплю. В map. файлах все практически одинаково, предупреждений нет.

    Нужно по структуре программы работать через указатели.

    По смыслу примерно так (конструктор вызывается в теле:

     

    Tobj* obj ;

     

    int main()

    {

    ..........

    obj = new Tobj;

     

    ..........

    }

     

     

     

  9. Народ кто пробовал сварганить АЦП на МЕГЕ с помощью ШИМ.

    Охота 16-битную ацепуху дешево и сердито.

    Идея такова: Берем ATMega-16, с ШИМа через RC-цепь на внутенний компоратор и мереем с дискретностью 16-битную.

    Кто то реально пробовал?

    Поставленная задача таким способом не решаема.

  10. А если уменьшить частоту сети в 2 раза, типа - положительный период сети- пропуск отрицательного полупериода, пропуск положительного полупериода, отрицательный полупериод , опять 2 пропуска полупериодов, положительный полупериод.., и так далее.

    Как посчитать в таком случае фазосдвигающий конденсатор? И будет ли работать такая схема?

     

    Боюсь, что нет. 1) могут быть проблемы с пуском; 2) При частотном регулировании f и U

    меняют по определенному закону, простейший U/f = const => снижение момента в неизбежно. Иначе

    рост потерь, перегрев двигателя выход его из строя. Логичней было бы использовать коллекторный

    двигатель по типу тех, что в ручном инструменте.

  11. Добрый день.

    Скачал добрый десяток программ для работы с ком-портом, но ни одна не отправляет в шестнадцатиричном виде, все кидают в кодировке ACSII.

    Несколько программ правда имели функцию передачи в HEX, но текст вставлять нельзя, только набирать ручками (мне необходимо передать 80кбайт).

    Может кто-нибудь встречал подобные программы?

    Спасибо.

    Realterm + драйвер для доступа к портам DLPortIO, если под WINDOWS.

  12. Попался контроллер ATmega88-15AZ у которого вместо сигнатуры считываются все единицы. Все остальное работает нормально - шьется программа, фьюзы, EEPROM. А сигнатура не считывается. Встречал ли кто такое и насколько это может быть опасно в работе?

    Когда то давно, такое было у меня с мегой 103. Если ничего не путаю в ранних версиях PONYPROG даже опция была типа "забить на сигнатуру". Приборы с теми мегами без проблем вот уже больше 10 лет работают.

  13. Полагаю, что платите Вы за полную потребляемую из сети мощность W, но в эенергопреобразовании

    в двигателе участвует только активная составляющая. Реактивная составляющая необходима для создания

    магнитного потока в зазоре, без него, создание момента невозможно.

     

  14. :unsure: Подсккажите, пожалуйста, как определить время минимальное между поочередными пусками асинхронного двигателя (через магнитный пускатель)? Двигатели АИС56В4У3 и 3ДСТР-135-1.6-150-У2.

    Через тепловые потери, пусковые токи асинхронного двигателя гораздо больше номинальных. Расчитать средние потери для номинального режима, и обеспечить чтобы средние потери в Вашем случае не превосходили номинальных. Из этого условия определить минимальное время между последовательными пусками.

  15. Здравствуйте. Что то я совсем запутался с кейлом :( Создаю h файл и пытаюсь написать класс, компилятор ругается "identifier "class" is undefined" . Переношу этот же объявление класса в с++ файл, там все нормально компилится. Подскажите , пожалуйста, что надо настроить, чтобы объявить класс в хэдере.

    Примерно так, в хидере

    #ifndef MY_INCLUDE
    #define MY_INCLUDE
    
    // подключить необходимые хидеры 
    
    class Myclass
    {
    private:
    // здесь закрытые члены
    
    public:
    // открытый интерфейс, не забыть про конструктор
    
    protected:
    // защищенные члены
    
    
    };
    
    
    #endif //MY_INCLUDE

     

    В файле CPP

    #include "My_include.h"
    
    // Далее реализация методов класса
    Myclass::Myclass( ) // если надо с параметрами
    {
    ...........
    }
    
    
    void Myclass::Func1(int par1, char par2)
    {
    ............
    }
    
    ...........
    ...........

×
×
  • Создать...