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

VladimirYU

Свой
  • Постов

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

  • Посещение

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


  1. Можно написать так:

      volatile int x;
      x ? 0 : x;

     

    Все правильно, но вот конструкция, например

     char tmp = SPSR; // tmp далее не исп.;

    генерит код чтения регистра а просто

     SPSR;

    нет.

    М.б. все таки "тупое" явное чтение в переменную более надежно,

    чем варианты предлагаемые гуру.

    IAR 4.12 оптимизация отключена.

     

     

    Спасибо :a14:

    Может и не убедительный, но все же аргумент в пользу "тупых" конструкций.

  2. Можно ли нащупать пульс у микроконтроллера (жив или мертв)? Проблема в том, что на одном компьютере контроллер шился вроде нормально, перенес на другую машину и контроллер ponyprogom не опознается. Правда стабилизатор 5и вольтовый 78L05, через который питается ATmeg128 перегрузил (другой нагрузкой) и его пробило, но пробило таким образом, что он звонится с входа и выхода на землю. Вот и закрались сомнения...

     

    p.s. Проверял тестером с ноги GND на VCC тестером в режиме измерения сопротивления, показывает 2.9 ком это нормально?

    Шью пятью проводами через резисторы с LPT.

    Так начните с того, что разберитесь с питанием. Если у Вас оно ниже нормы и включен внутрений BOD или в плате внешний супервизор, то мега будет сидеть постоянно в ресете. Тестер в этом случае не заменит осциллограф.

  3. Узнавал стоимость шлейфа отдельно от житага....В Эфо запросили аж 61 зелёный....Ну это грабёж средь бела дня какой то....Вообщем починил сам. Подрезал. Аккуратно скальпелем соскрёб 5мм изоляционного покрытия...С обраьной стороны подклеил кусок изоленты. Данная конструкция плотно встала в разъём. Всё работает...

    Браво!!! Возьму на вооружение.

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

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

  5. На семинаре было озвучено, что привода нового поколения Омрон с двухуровневой ШИМ (то есть две группы по 6 ключей) обеспечивают диапазон регулирования скорости 1:200 в длительном режиме при номинальном моменте на валу и при работе на асинхронный двигатель БЕЗ энкодера. Несколько раз уточнял не оговорился ли представитель, говорит, что нет. 200 и всё.....Возможно ли такое? И влияет ли количество уровней ШИМ на диапазон? Мне кажется, что ни каким образом не влияет...... :1111493779:

    Как же там при диапазоне 200 да при номинальном моменте с тепловами режимами? Интересно, блин, но не верится.

  6. Я что-то не пойму. Мне кажется, что знакомство с первым в жизни коллеги SMD транзистором можно отложить. Речь идет об TXD, если я правильно понял.

    1-ый вариант - если девайс мастер. Пака не надо передавать TXD на вход, TXEN=0. Когда нужна передача - как обычно,

    2-ой вариант - слэйв, пока не начался запрос от мастера TXEN=0, TXD на вход или в ноль. Надо отвечать взвел TXEN =1 ответил, опять залег.

     

    Транзистор даже SMD не спасет, ну проинвертирует он TXD, а как дальше с условием старта стопа паритета, если он есть. Значит второй транзистор для второй инверсии или пинцет, скальпель... огурец.

     

    Вообще то прав Сергей Борщ и многие откликнувшиеся, кроме напора "Поможите!", ничего автор пока не выложил.

  7. Уже пробовал.

    Без спячки все прекрасно работает.

    И еще, как я понял процессор просыпается от прерывания по RXC только в режиме Idle.

    Пробовал другие режимы. В них процессор спит. :05:

    Idle mode enables the MCU to wake up from external triggered interrupts as well as

    internal ones like the Timer Overflow and USART Transmit Complete interrupts.

     

    Доки от Атмела, как русский язык по Черономырдину. Ни слова про RXC, является ли оно тем, что выделено, или речь только об интах? Ипользовал сам этот режим, но не помню подробностей, вроде делал в принципе все как у Вас, попробую паоднять старый проект, правда он был на меге128. Но это не принципиально. Может быть задействовал еще одну ногу.

  8. Тема моей диссертации связана напрямую с работой, которую я выполняю. А работа в обоих фирмах одна и та же и связана с АСУ ТП, а не с приводами и поэтому забью я уже сей час. Это был вопрос чисто ради интереса, просто я не понимал как можно это реализовать.

     

    А по поводу 27 лет, то у меня была возможность отмазаться от армии военной кафедрой, но я от туда вовремя ушёл и стал заниматься более полезными занятиями. Не понимаю Вашего сарказма.

     

    Всего хорошего.

    Да не было у меня никакого сарказма, просто тема действительно интересная и Вам дополнительные знания в ней ИМХО будут очень даже кстати. Искренне желаю удачи.

  9. 1 дисплей 16х2 HD4478 помоему такой там контроллер. Выводить пытаюсь в протеусе. Hello World выводится без проблем. А вот как байтовые переменные или инт вывести не пойму. С контрастностью все ОК.

    Так их сначала нужно преобразовать в форму представления ASCII

    Например для представления десятичного числа 123 требуется вывести на дисплей 3 байта 0x31 0x32, 0x33. Это несложно сделать даже не используя sprintf.

    Может а Вас в этом проблема.

  10. агаа,да,вполне логично получается.

    а вот еще есть такая схема включения-вроде чтото похожее на то что надо,но не могу понять как она работает...что вообще делает вывод ADJ??

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

  11. Здрастье, подскажите плиз новичку. Пишу в коде вижен

    Атмега16

    подключил lcd.h и хочу выводить на дисплей

    byte Buf [63];

    в виде 16 символов в шестнадцатиричной системе, не получается.

     

    1. На базе какого контроллера LCD (тип его)?

    2. Исходник кода в студию.

    3. Что с регулировкой контрастности.

    4. Начните с вывода "Hello world!"

  12. Выходная Частота 0Гц <Fвых< до 50Гц. Причем 0 и 50Гц достичь принципиально не возможно т.к. выход нарезается из входных синусоид. Даже приближаться к 0 и 50Гц трудно. Я при опытах получал частоты от 5Гц до 45Гц. Возможно этот диапазон немного расширен благодаря более сложным моделям.

    Теорию электромагнитного поля трудно поменять со времен Максвела и Co. А относительно выходных частот немного поподробней.

    0 - невозможен принципиально если говорить о приводе ~ тока с АД. О нижней границе можно говорить применительно к конкретной задаче, т.к. только она определяет оптимальный закон совместного регулирования U и f. Например при законе U/f=Const снижение частоты (скорости идеального холостого хода) в 10 раз требует снижения Uф также в 10 раз. Это приводит к изменению энергетических свойств двигателя. А вот здесь упомянутых Вами моделей управления море. Все они как правило сводятся к поддержанию полезного момента и оптимизации потерь. Ну лет через N ЗЛОЙ нам расскажет об этом подробней. Если конечно у него хватит желания и сил совмещать эти непростые, но интересные проблемы с работой в двух конкурирующих фирмах, и он не забъет на все по достижению 27 лет. На сем откланяюсь в данном топике.

  13. Все верно.

    Функция Usart_read(); выглядит примерно так:

     

    void Usart_read(void)
    {
      while(!received);  
    }
    
    //А вот само прерывание
    
    #pragma vector = USART_RXC_vect
    __interrupt void Recieve()
    { 
      unsigned char temp = 0;    
    
      temp = UDR;  
      UsartBuff[UsartBuffPtr] = temp; 
      UsartBuffPtr++;
      if(temp == 0x0D) received = 1; //0x0D - конец принимаемых данных.
    }

     

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

  14. Появилась тут у меня одна интересная идейка. Но чтобы не выставлять себя на посмешище хотелось бы сначала узнать: каковы частоты или диапазоны частот в первичной и вторичной цепях?

    Ну в первичной цепи а Вас скорей всего 50Гц, а во вторичной, если речь о приводе, от 10-ых Гц до, как правило, 60Гц.

    Все украдено уже до Вас.

     

    Насмешил :biggrin:

    Ну Вы там еще нахохочитесь, если это СПбГПУ кафедра "Систем автоматического управления".

  15. Нет. Первое холостое преобразование нужно делать, чтобы инициализировать модуль АЦП, поэтому его нужно делать даже в том случае, если питание на модуль АЦП (установкой бита ADEN) подали несколько часов назад. Тем более что время первого преобразования зависит от выбранной частоты тактирования модуля АЦП, и оно может меняться в весьма широких пределах. Тогда как длительность переходных процессов при подаче питания на модуль АЦП фиксирована и не зависит от частоты его тактирования.

    Меня тоже интересует этот вопрос :) Но ответа на него я не нахожу.

     

     

    Простите. ОписАлся. Разумеется всё наоборот. :)

     

    А можно ссылочку необходимоть холостого преобразования. Никогда им не пользовался и проблем небыло. Часто о нем слышал ткните пожалуйста (а то фантом какой то получается). Насчет выборки, как раз все расписано. См. DS для меги128 рис 110, 111, 112.

  16. Всем добрый день.

     

    Возникла проблема при использовании спящего режима(Idle mode) в Atmega8.

    Вот код(не полный):

    void main(void)
    {
      MCUCR |= (0<<SM2)|(0<<SM1)|(0<<SM0); //Idle mode
      init_Usart();
      __enable_interrupt();
    
    for(;;)
    {
       MCUCR |= (1<<SE); //Разрешение спящего режима
       asm("sleep");  //Сон
       Usart_read(); //Читаем строку
       Usart_Send_Str(UsartBuff); //Возвращаем принятое
    }
    }

     

    Проблема заключается в том, что при использовании спящего режима Usart читает входящие данные нормально, за исключением первого байта.

    .

     

    Idle mode enables the MCU to wake up from external triggered interrupts as well as

    internal ones like the Timer Overflow and USART Transmit Complete interrupts. If

    wake-up from the Analog Comparator interrupt is not required, the Analog Comparator

    can be powered down by setting the ACD bit in the Analog Comparator Control and Status

    Register – ACSR. This will reduce power consumption in Idle mode. If the ADC is

    enabled, a conversion starts automatically when this mode is entered.

     

    Мне кажется функцию приема нужно организовать по прерыванию от RXC.

     

     

     

    Idle mode enables the MCU to wake up from external triggered interrupts as well as

    internal ones like the Timer Overflow and USART Transmit Complete interrupts. If

    wake-up from the Analog Comparator interrupt is not required, the Analog Comparator

    can be powered down by setting the ACD bit in the Analog Comparator Control and Status

    Register – ACSR. This will reduce power consumption in Idle mode. If the ADC is

    enabled, a conversion starts automatically when this mode is entered.

     

    Мне кажется функцию приема нужно организовать по прерыванию от RXC.

     

    Немного не так выделил.

  17. Да не ругайтесь так. Я задал Вам сначала вопрос правильно, а потом задал ещё один вопрос (только забыл ? поставить). Так что это два разных вопроса. :)

    А все-таки, что у Вас за задача. Почему так хочется уйти от звена постоянного тока?

  18. Попробуем по другому

    задача:

    есть кодировка

    000001 = 'A';

    000010 = 'B';

    100000 = 'C';

    и так далее.

    Так вот нужна такая функция, в которую входило допустим "000001";

    мы сравнивали с имеющимися у нас строками, и присваивали переменной типа char наш символ.

    Вот идея проекта.

    Моя задумка была, реализовать все 15 кодов в массив, сравнить с прешедшей строчкой, получить номер элемента массива, и с помощью switch присвоить переменной значение.

    Может есть какие более правильные или удобные решения?

    Получили строку, преобразовали в число, далее Ваш switch и массив вообще не нужен. ИМХО.

  19. Запросто. Строковый литерал имеет тип char*, поэтому им можно инициализировать как указатель, так и массив указателей.

    Некоторые проблемы возникают у avr-gcc, но только при размещении строк во флеше и потому, что у него нет ключевого слова flash, означающего другой тип памяти, а есть только атрибут размещения переменной в секции, помещаемой во флеш. Атрибут применим к переменной, а не к литералу, только поэтому приходится заводить промежуточный массив char[].

    При размещении массива указателей в ОЗУ инициализация их строковыми литераламаи - стандартная для С операция со времён создания языка.

    Несомненно.

    Дык, что товарищу тогда делать то при недостатке памяти и при этой особенности GCC кроме, как перейти на другой компилятор? Я просто предлогаю путь уменьшения расхода памяти.

  20. А какие используются ПЧ для управления электроприводами. Думаю, DDS, всё таки там не используют.

    В непосредственных простейших силовых ПНЧ, можно, например вырезать сетевые периоды по-возможности равномерно, энергетика правда хреновая, пульсации тоже.

  21. Тогда интересно, как можно инициализировать массив указателей значениями типа "000001"?

     

    Указатель инициализировать строкой нельзя, а строку на которую он указывает пожалуйста

    там надо только

    char __flash* mass[]={"str1", "srt2"....} (синтаксис IAR)

     

    Я так полагаю, надо символьное представление двоичного числа преобразовать в число. Так?

    По-моему, намного проще посимвольно проанализировать входящую строку и вычислить число.

     

    Да мы задачи то толком не знаем.

  22. На МК, ATtiny 2313 есть массив:

    char *mas[15] = {"000000","000001","000010" ... "111111"}

     

    ......

    Дальше идёт сравнение строки. Котрую получила функция.

    .......

    Не проще ли получаемую строку преобразовать в обычный char и искать его уже в массиве не из 15 строк, а как максимум из 15 char. Или из 15 элементов структуры (15*6=80 10 байт).

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