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

VladimirYU

Свой
  • Постов

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

  • Посещение

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


  1. В atmega64L столкнулся с такой проблемой.

    Программу пишу на Си в AVRStudio под WINAVR. Текст программы такой:

    int main(void)

    {

    Init_ports();

     

    PORTD = 0xC7;

     

    while(1);

     

    }

     

    void Init_ports(void)

    {

    DDRD = 0x38; // 3-бит на вывод

    PORTD = 0xCF; // 1 в 3 бите

     

    return;

    }

     

    Чему удивляетесь, 3-й бит сконфигурировар на вывод 1, ее и видите. Стек здесь ни причем.

  2. Уважаемые!

    Проблема:

    Mega162. Задумался по поводу экономии памяти. Объявил свой SFR в Extended IO.

    Дебаггер всё рисует как хотелось.

    НО НЕ РАБОТАЕТ В ПРОЦЕ!

    Проверяю бит SFR'a в подпрограмме. Есть подозрение, что чего-то недописал. В смысле, в объявлении.

    Или ещё где (в другом месте) собака порылась?

     

    Про AVR не уверен, но в MCS51 свободные адреса в области SFR физически не существуют, поэтому в отладчике все кучеряво, а на железе, сам понимаешь :-)

  3. Уважаемые Знатоки!

    Поделитесь, пожалуйста примерами конфигурирования и чтения данных с AD7715, подключенного по SPI с не заведенными на Мегу сигналами CS и DRDY, если такой вариант работоспособен в принципе.

     

    Без DRDY можно обойтись, флаг готовности результата преобразования читается программно. Без CS попробовать можно (посадить его на землю), а вот RESET лучше заложить от Меги. ИМХО

     

    А что за микросхема AD7715, интересно очень?

    Похож на 7705, сигма-дельта АЦП с SPI интерфейсом.

  4. У меня такое случается постоянно с любым чипом с JTAG интерфейсом после того как я вхожу в отладку и отрубаю JTAG разъем для отладки другой платы (тобиш чип остается под отладкой, но отладчик от него отключен) потом подключаю JTAG разъем опять к этой плате и заново вхожу в отладку.

     

    Ну а теперь подумайте из-за чего оно может происходить у вас на ровном месте.

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

     

    ИМХО, это не очень хорошо для здоровья самого JTAG, например ICE MKII этого не любит, вылетает буферная микросхема MAX3391. Сам лично сталкивался с такой неприятностью.

  5. Над чем? (кстати не PSEN, а PEN)

     

    Если для режима программирования посадить на GND перемычкой, а для нормальной работы перемычку убрать, там есть пулап к VCC.

     

    Неужели нужно так подробно разжевывать? Для таких целей есть даташит.

     

    Вы правы, поясню откуда взялось мое утверждение. 128 - потомок 103, а в начальных DS на 103 было прописано о соединении PEN c 1. Поэтому по привычке сажаю 1 ногу на 1 и никогда небыло проблем с программированием, тем более в заводской настройке установлен фуз совметимости с 103. ИМХО, наверное сейчас PEN - это рудимент. Интересно будет узнать в этом ли причина проблем у коллеги.

  6. Что с первой ногой PSEN? Посадите ее на 5в через несколько кОм. Если есть возможность отключите в программаторе чтение сигнатуры, посмотрите может все будет нормально. Последнее, осциллом посмотрите PDI, PDO, SCK, RESET.

  7. Конечно может! Debug и Realese с установками "по-умолчанию" отличаются как минимум уровнем оптимизации исходного когда. А при максимальном уровне оптимизации иногда такие чудеса начинаются, что ой-ёй-ёй! :wacko: Особенно, когда программист на Си не знает про квалификатор volatile ;)

     

    Фузы выставлены одинаково, с volatile, конечно, знаком. Но вспоминается EW IARAVR 3.20C там налетел на глюк, пока не апгрейдил до D. Буду искать причину. Объем кода 30К, отличие кода Release oт Debug 28 байт, по данным 1 байт (2677 и 2676). Спасибо всем откликнувшимся.

  8. Потому что настройки все же разные. Читать в заголовках .lst и .map - там перечислены ключи, с которыми вызывались компилятор и линкер. Сравнивая заголовки, можно найти отличие и уже дальше искать какая галочка за это отличие отвечает - ее вы и не заметили.

     

    Спасибо, идею понял, проверю. Но всвязи с этим другой вопрос, может ли это быть причиной подводных камней в функционировании одного и того же устройства прошитого из Debug JTAG-ом или из Release, например, AVReal-ом. Вопрос для меня не только теоретичесий, две партии приборов ведут себя по разному, прошиты были, как сказано выше.

  9. На самом деле мне и нужно измерять угол поворота только я хотел измеряя расстояние от датчика до магнита вычислять угол. Подскажи пожалуйста как можно измерить угол поворота (есть поворотный механизм который поворачивается вокруг оси на 20 градусов я хотел к нему прицепить магнит а к неподвижному корпусу датчик холла). Зарание спасибо.

     

    Посмотрите у Honeywell, там есть датчики угла построенные на эффекте Холла с аналоговым выходом.

  10. У меня были проблемы с mkII, человек из "ЭФО" СПб посоветовал проверить потребление прибора, и оказалось, что mkII ни жив, ни мертв. Вылетела микруха MAX3391. Попробуйте понизить частоту JTAG, может быть полегчает.

  11. Вот официальное мнение Atmel по этому вопросу:

     

    Software Reset

    Question

    How can I reset my AVR through software?

     

    Answer

    If you want to perform a software reset of your AVR you should use the internal Watchdog. Simply enable it and let it time out. When the Watchdog triggers it resets the program counter back to 0, clears all the registers and performs all the other tasks. This operation gives the same result as pulling the RESET line low.

     

    You should not try to:

    - Use another pin of the AVR to pull the external RESET line. The pins of the AVR are tristated halfway through the minimum reset time, this releases the RESET line and hence nothing happens.

    - Jump to program location 0. Jumping to program location 0 does not clear all the registers and hence you do not have a "clean" reset.

     

    Естественно, требования к аппаратному сбросу никто не отменял, поэтому ATMEL и не рекомендует "самострел". Ну о то что переход на 0х0000 это не эквивалент RESET ИМХО очевидно.

  12. Если Ваш ЖКИ имеет расширенный температурный диапазон, то необходимо отрицательное смещение. Варианты разные ADM660, ICL7660..., иначе светится не будет. Я их закладываю сразу, и голова не болит какие ЖКИ снабженцы достанут.

  13. Про чтение не упоминал по тому что с ним все гораздо проще.

    Никто ведь не мешает нам организовать 2 очереди, одна на запись другая на чтение,

    и учитывая то, что чтение практически не отнимает ресурсов, можно при каждом прерывании

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

     

    P.S. Правда это все не имеет никакого отношения к использованию IARом переменных

    в области EEPROM, зато имеет отношение к грамотному использованию eeprom.

     

    Как бы не пытались, но природу не обманешь. ЕЕПРОМ медленное устройство, поэтому основная программа должна это учитывать. Как это сделать, вариантов предложено достаточно. ИМХО разработчик разберется, выберет или предложит собственный вариант решения СВОЕЙ ЗАДАЧИ. А IAR здесь в самом деле ни причем. Предлагаю тему закрыть.

  14. Нет!

    Если взглянуть как реализованы библиотечные функции обращения к ЕЕПРОМ (\avr\src\lib\eeprom.s90), то видно, что прерывания там запрещаются на крайне непродолжительное время.

    Когда-то в форуме Кросплатформенный компилятор IAR я выкладывал доработанный файл eeprom.s90 (с исправленным багом). Поищите.

     

    Игорь, если не в тягость, в чем суть твоих изменений. Файл я нашел, но с родным еще не сличал. Заранее спасибо.

  15. VladimirYU, всё это конечно правильно, но речь шла о том, чтобы при этом можно было штатными средствами компилятора обращаться к обьектам в ЕЕПРОМ как к переменным.

    Этой функциональности можно добиться объединив Ваш метод с тем, что предложил CSB.

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

    Не ждать этого события нельзя т. к. может возникнуть фоновое обращение к ЕЕПРОМ.

    Отсюда следует, что полезность (а отсюда и применимость) прерываний от ЕЕПРОМ крайне мала при гораздо большей геморройности данного занятия, но это уже решать пользователю.

     

    Игорь, полностью согласен. Сам никогда не использую прерывания при работе с ЕЕПРОМ, но решать, как вы правильно заметили, пользователю.

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

     

    Может я не понял вопроса, но мне кажется как обычно в IAR. Определяете

     

    #pragma vector = EE_READY_vect

    __interrupt void EE_write (void)

    {

    .....

    }

     

    Первый элемент после проверки готовности ЕЕПРОМ пишите в той части программы где надо начать запись, устанавливаете счетчик, а далеее все последующие по прерываниям до тех пор пока не выберете весь буфер. Естествеено в соответствии с правилами обращения с ЕЕПРОМ согласно DS.

  17. УВАЖАЕМЫЕ СПЕЦИАЛИСТЫ

     

    Прошу откликнуться тех кто работал с ПВМ3 (без буквы Б)

     

    Возможно ли запустить PSC с симетричным ШИМ так чтоб один канал был в противофазе к другому ??

     

    Как это сделать ?? (если не сложно кусочек кода)

     

    Код не поможет, если без B, то либо внешний инвертор, а еще лучше драйвер для управления верхним и нижним транзистором IR2110, например. Кстати в СПб ЭФО B уже продает

  18. Вот разработал я устройство, написал программу, всё работает. НО!

    Смысл в чём, по переполнению таймера 1 выполняется подпрограмма анализа состояния размыкателей.

    На прерывании по приему байта по UART , устройство передаёт свои значения, которые насобирали за определенный период, а теперь вопрос.

    Почему когда МК передаёт данные в UART, не работает прерывание от таймера, меня на 100% устраивает то, что передача будет прерываться. Главное для меня не пропустить захват события обрабатываемое прерыванием от счётчика.

     

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

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