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

maik-vs

Участник
  • Постов

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

  • Посещение

Весь контент maik-vs


  1. А Вы невнимательно читали предыдущие страницы. :rolleyes: Нужно положение колеса, а не один строб на оборот. Или будете заниматься предсказанием скорости?
  2. Готовность SPI

    Ссылочкой не поделюсь, т.к. 34 - число, добытое честным экспериментом. Для SPCR=0x50: SPE и MSTR, остальные биты =0, т.е. коэффициент деления 1. Для других коэффициентов, наверное, не 34, поэтому и привёл значение SPCR. AVR Studio это дело симулирует правильно: если между "out SPDR" 34 цикла, передаются байты с промежуткосм в 1 бит. Если меньше - стробы есть, а на линии данных стоит высокий уровеь. Это видел в осциллографе. Частота кварца 20 МГц, МК mega16. Да, разумеется, SPIF взводится по концу передачи байта. Не понимаю, в чём проблема у топикстартера - можно работать в прерывании, можно - опрашивая флаг, как всегда...
  3. Готовность SPI

    "перед записью узнать что предыдущая передача уже завершилась" Как? "читая SPIF". Прочитали - узнали - не завершилась. Что делать? "читая SPIF и ожидая когда он исчезнет". Ну или прерывание скажет, когда.
  4. Готовность SPI

    Чего-то напутано. "Сразу после записи в SPDR" передача как раз идёт. Если записать в SPDR пока передача идёт, поднимется флаг WCOL. Писать в SPDR можно через 34 цикла процессора после предыдущей записи (SPCR=0x50). Раньше - синхроимпульсы будут, а данные - нет. Прямо сейчас этим занимаюсь, Мега16. AVR Studio всё правильно симулирует.
  5. Основная мысль была - что при симуляции можно пользоваться флагом. (Цель - отладить программу, а не ткнуть носом atmel в их баги?) Возможно, в последних версиях студии всё уже исправлено. Хотя вот не всё, судя по Вашему последнему посту.
  6. Студия глюковаста... Я для имитации прерывания ставлю галку в бите флага, для симуляции достаточно. Именно потому, что изменения на входах портов часто не отслеживаются, ну их...
  7. Ну так дурак он и ... сломает. Видел схему, где ресет подключен к электролиту на 100 мкф (!) типа для задержки включения. Почитайте процедуру запуска контроллера в даташите и в свете прочитанного посмотрите на форму напряжения питания. Там бывают неплавности. Или коллекторный двигатель на почти одном питании с контроллером - никто не ждёт, что он ещё и генератор :) - может просадить птание с хорошими импульсами. Наверное, длинные провода вешать не надо, а например кнопки, замыкающие на землю - пожалуйста. Они и программированию не мешают. Я часто использую разъём программирования для перемычек, какую-нибудь конфигурацию можно задать.
  8. А также так: lds R5 или in R6. Нижние регистры не работают с константами: всякие там andi ldi. Остальное всё работает. Имхо, если программа вся на константах - -это или очень простая программа, или плохо написанная. Память при старте прописывать ничем не надо, если переменные, хранимые в этой памяти, правильно инициализируются.
  9. запустите макрос выполняться, откройте окно ассемблера и увидите, во что оттранслировался Ваш макрос. Можно использовать конструкцию вида ldi @0h,high(@1) ,здесь MNAME Y,$1234 преобразуется в ldi Yh, high($1234).
  10. ТАЙМЕР1

    Всё это описано в документации. К сожалению, нужно всё это внимательно прочесть и понять. Если трудности с английским, то выучи язык! то можно поискать перевод на gaw.ru. Я когда разбирался, сделал вот это в екселе (Макросы не выключай!) Там меняешь битики в регистрах, оно показывает.
  11. ТАЙМЕР1

    Я бы повесил этот сигнал на внешнее прерывание по обоим фронтам. Его обработчик пусть быстренько переписывает в регистр значение таймера, потом определяет задний или передний фронт. Если задний, то вычисляет длительность. Таймер бы я взял самый приоритетный, разрядность бы расширил софтом: в прерывании таймера по переполнению пусть наращивается регистр или хоть два, получится 24-разрядный таймер, 2 секунды на 16 мегагерцах.
  12. AVR Studio 4.14 от 04.2008

    Скачал, поставил. Мега16, Мега8515, всё то же самое. Вот что они пишут: New Features Support for the new XMEGA device family in Simulator 2, JTAGICE mkII and STK600. Read more about the new XMEGA family here: http://www.atmel.com/products/AVR/default_xmega.asp AVR Simulator 2 has been released with complete and accurate simulation of all digital peripherals. Improved support for the ELF production file format. Programming dialogs have been upgraded to support new XMEGA features. Upgraded verbose I/O view for easier debugging of complex parts and the new XMEGA family. Upgraded USB driver. Full support for 32-bit and 64-bit version s of Vista The new AVR Wireless Services application, supporting the AVR Raven kit, is included in the installation. Ну и багфиксов кучка.
  13. Разумеется, таймер считает независимо ни от чего. Но при выполнении кода в прерывании все прерывания запрещены. Поэтому, если долго "сидеть" в прерывании, можно "проспать" прерывания от других источников - от таймера, например. То есть флаг запроса на прерывание от таймера установится когда нужно, а вот процедура обработки прерывания начнётся, когда будет установлен бит I регистра SREG. Обычно, если нужно измерять через какой-то интервал, делается так: Обработчик прервания по таймеру запускает измерение. Обработчик прерывания по окончанию преобрахования АЦП выдаёт чего намерял. Всё. В остальное время выполняется основная программа ну или можно уйтив sleep если делать нечего - будет экономиться потребление тока.
  14. Разумеется, в опциях дебаггера. По умолчанию там 4 мгц. Так что должно быть наоборот: 4 секунды в студии и 1 секунда контроллером. Хотя, если не прошить фузы под внешний кварц, контроллер будет работать на 1 мгц от внутреннего генератора и выдаст таки 4 секунды.
  15. Ну, если будет знать, что это для меги16, то таки да. Вы знаете, замена констант - это 2% от всей работы. Вам же надо понять алгоритм, да? А понятных названий для регистров нет, для ячеек памяти нет; где массив, где переменная? Программа писалась на С или ассемблере или ещё на чём? Всё это нужно сделать головой и руками в процессе копания в коде. И никакая IDA Вам тут не поможет. Так что успехов в труде.
  16. А откуда он узнает, как Вы привыкли называть 38-ю ячейку памяти? :) В редактор, "найти - заменить все"... Потом дебаггер, точки входа 0-й адрес или другие, в зависимости от fuses "BLB" контроллера. И вперёд. :smile3046:
  17. ИМХО это большой героизм советского толка писать такое на С. Лучше на ассемблере - там эмулятор точно считает время, можно всё учесть и пользоваться всякими хитростями. Сам интересуюсь подобной штукой, поэтому интересно, что у Вас получится. Видел проект, где пикселы строки заносятся во все 32 регистра, а потом тупо сдвигаются. Для сдвига, подумалось мне, можно использовать один из последовательных интерфейсов, кажется TWI может подойти. Или использовать внешний регистр сдвига как external RAM. Насчёт дрожания. PLL к строчной синхронизации конечно желателен, но у нас есть разработка с пиксельной частотой 20 МГц, буквы не дрожат.
  18. У меня валяется SIemens C35i, Alcatel какой-то, Nokia простенькая, и уже пора бы поменять мой siemens M55, а то старый совсем. А! У сына ещё должно быть два старых. У Вас не так?
  19. Ну если так, то дребезга скорее всего не будет. Я поначалу понял, что 16 импульсов на оборот. Честно говоря, ничего не приходит в голову кроме внешнего реверсивного счётчика и прерывания от его переполнения.
  20. Вставлю и свои 5 коп :) Тоже uart, но с прерываниями. В памяти формируется строка, но не ASCIIZ а первый байт = кол-во байтов. Ещё нужен счётчик адреса (1 байт), если нет желания получать строку задом наперёд. Строка формируется в программе, где надо. Когда можно начать отправку, жду UDRE и пишу байт в UDR, например, '@' - "начало сообщения". Дальше оно самО: по прерыванию UDRIE если счётчик+1=длине то выходим; иначе UDR = байт с адреса строки+счётчик. В прерывании TXCIE обнуляем счётчик (на будущее). Здесь не надо ждать, программа выполняется в фоне, прерывания происходят 1 раз на байт и занимают немного времени.
  21. PWM + RTC

    1. Отключить ШИМ [sENSORED] (совсем, запретить программно) и убедиться, что часы идут точно. 2. Искать откуда ШИМ "мешает". Он же не ауру портит? Ток двигателя по общей земле идёт, или питание просаживает, или наводки на цепи часов от мощного тока. Искать. Не рекомендую использовать бранные выражения, пусть даже завуалированные грамматикой. IgorKossak.
  22. Нет, если очень быстро надо, то и прикурить мона, и с толкача мона, и у соседа аккум спи попросить. Вечером подключил - утром получил. Удача ОК. :)
  23. Ну что ж, раз нужна наша помощь и Вы уже везде были... 1. добры, помош , что бы надо писать как добрый, помошь, и чтобы 2. Какова максимальная частота квадратурного сигнала? И тогда что такое 16 бит? 3. Вам не нужны таймеры. Нужно циклически (по таймеру) принимать состояния квадратурных сигналов и, сравнив их с предыдущим состоянием, принимать решение. Именно так, потому что, как правило, там будет дребезг. PS. D-триггер работает только с идеальным сигналом, причём съедает один зуб на реверсе. Надо 2 триггера. Нарисуйте диаграммы сигналов на бумажке - увидите.
  24. В авто не чайник - 17 лет жигулей. Ну не приходилось мне заряжать аккумуляторы!!! Пока ездишь - он заряжается откуда надо. Как перестал - покупай новый! Ну да, если простоял недели три, тогда надо подзарядить. Тогда беру сварочник, превичку через лампочку 150 Вт, на вторичке выпрямитель уже есть. Получается источник тока ампера на 3. И заряжает. :) А вы говорите - мега16.
  25. Не нужно подключать напрямую к порту. Вы не боитесь за свой LPT порт--контроллер портов на материнке -- сама материнка, если что-то не так пойдёт на микроконтроллере? Сделайте байт бластер! Если что - сгорит ОДНА микросхема в бластере, а не ОДНА материнка в компьютере. Знаю - пробовал (с какого-то перепугу сгорела КРЕНка и 12 вольт пошло на бластер). И кабель у меня 3 метра от порта до бластера, и всё шьётся. А Вы сколько раз её шили - не 10000 ли? мож своей смертью флеша померла?
×
×
  • Создать...