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

DenisIV

Свой
  • Постов

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

  • Посещение

Весь контент DenisIV


  1. Сорри, что пишу с небольшой задержкой :), но может кому пригодится... Пробовал компилятор IAR AVR, IAR STM8 - настраивал так: 1. Options -> Output Convertor -> Generate additional format, intel - standart (.hex) я использую вместо конкретного имени переменную $PROJ_FNAME$.hex -да, да, именно так, не приходится при копировании/переименовании проекта переназывать выходные файлы. 2. Если расширение в Options -> Linker -> Output не соответствует стандартному ($PROJ_FNAME$.out), то вышеуказанный файл $PROJ_FNAME$.hex не создаётся. Не знаю, почему. По сути после мы на выходе имеем и .hex и .elf(с расширением .out) файлы.
  2. ATMega128, IAR EWAVR 5.4. Тут ещё вопросик нарисовался: можно ли в пределах одного проекта использовать две таблицы векторов прерываний (одна основная, другая-из бутлоадера) или нужно сделать 2 проекта и отдельно их линковать? 2Moderators: Может отдельную тему для этого вопроса создать или переместить в нужную?
  3. Со стыковкой разобрался. А вот с вставкой асм-никак. Вернее, как я уже писал, асм строчки вставляются, но "доопределить" внутри асм те же регистры типа ZL,ZH,ADCH,ADCL и т.д. не получилось. Отдельный файл асм в проект добавляется, к нему вопросов почти нет, но я не смог добавить(состыковать) его с прерываниями(не смог задать вектор+не знаю, как сделать переход из таблицы векторов к обработчику). Чтение доки не помогло. Может у кого есть какой-либо пример? Собственно обработчик прерывания на асм, контент сохраняю и восстанавливаю сам, вопрос, как из проекта вызвать этот обработчик.
  4. Собственно сабж. Нашел, как вставить строчку на асм, а команды обозначающей начало и конец асм-вставки не нашел. У hi-tech pic такая команда #asm, дальше сколько хош асма, в конце #endasm На С не получается обработка FFT, с асмом грабли, мозг пухнет... F1! И ещё: какие переменные можно видеть под асмом из С и как их в асм из С можно передать? (и в обратную сторону тоже)
  5. Да, в дополнение к предыдущему моему посту: как вы охлаждали индикатор? Если охлаждался корпус, внутри которого плата и индикатор, то ещё не так страшно, хотя вопрос с выделением влаги надо было обязательно решать. Если аэрозолем (локально плату), то получается, что индикатор (и плата процессора) получались холоднее окружающей среды, соответственно наступала точка росы и весьма возможно, на плате выделилась влага. А влага есть и ёмкость и сопротивление(ну высадился всё равно не чистый H2O-ионы хлора или ещё чего всегда есть). И этого вполне могло быть достаточно, чтобы колебания резонатора сорвались и/или прекратились. Пример-бутылка пива, которую достали из холодильника и поставили на стол. Т.к. Температура бутылки меньше температуры окружающей среды, то через некоторое время на ней появились капли воды. Далее: Если в контроллере для тактовой частоты использовался не резонатор, а внутренний RC-генератор, то 90% вероятности, что он остановился уже при -10...-15. Почитайте даташит на контроллер. Наверняка производители не гарантируют работу встроенного RC-генератора при отрицательных температурах. В дополнение - цепи питания(стабилизаторы,батареи/аккумуляторы), электролиты(замёрзли?), супервизоры, и просто контакты в разъёмах(окислились, сдвинулись)- проверьте. В общем, причин много. Расскажите, какие у вас условия - поможем разобраться. Приведу пример из своей практики - я давно работаю с индикаторами TIC32 и TIC48(контроллер LCD PCF8531), испытывал при -54 - никаких проблем. Только пиксели поворачивались сек 10...15. Контроллер PIC16+кварц 4.0M+вся плата была залита двойным слоем уретана (лак такой). С вашим контроллером LCD(PCF8535) пока дел не имел, но судя по даташиту, он получше.
  6. Хм. т.е Mega1284P совсем не то? • Operating Voltages –1.8 - 5.5V for ATmega1284P • Speed Grades –0 - 4 MHz @ 1.8 - 5.5V –0 - 10 MHz @ 2.7 - 5.5V –0 - 20 MHz @ 4.5 - 5.5V Мне казалось, что Mega16 при 8М может работать при 2.7V, а при 16М - при 4.5 и далее(у ПИКов, например, так) • Operating Voltages –2.7 - 5.5V for ATmega16L –4.5 - 5.5V for ATmega16 • Speed Grades –0 - 8 MHz for ATmega16L –0 - 16 MHz for ATmega16
  7. Точнее пожалуйста, что не работает: интерфейс, угол зрения не тот, встроенный умножитель или ещё чего ? КАК не работает: сразу, постепенно, температура перехода ? Информацию в студию, тогда и покумекать можно. Не забудьте измерить напряжение питания и умножителя (Vlcd) при разных температурах.
  8. Проблема в том, что кварц не хочет заводится, если напряжение питания поднимать от 0 до 4.6 V, зато после 4.6, когда завёлся, можно снижать до 2,5 V - всё нормально работает. Кварц на 8мГц. Brown-out выключен. Просто в устройстве планируется батарейное питание, а встроенный RC-генератор использовать нельзя. Необходима точность. Конфигурация в программаторе AVRSTUDIO/AVRISP2 H=0xD9;L=0xFF; В чём могут быть грабли? Или это нерешаемо? Раньше я с ПИКами работал, там граблей таких не замечал...
  9. Это я всё понимаю, однако обнаружил некоторые "недоделанные" команды из 8535. Типа Mirror Y и ещё чего-то... Вот и спросил... Мож кто этот контроллер на "столе" щупал? Оч класный ЖКИ, дешёвый, если найдётся чел, который нащупал чтение-звёздочка ему... Да, 2moderators: Может стоит создать отдельную ветку "Устройства отображения информации, иллюминация" для таких вопросов? А туда и LED и LCD индикаторы и матрицы всякие, и кинескопы, и лазерные/не очень проекторы, фонтаны с хитрой подсветкой и т.д. засунуть?
  10. Кто работал с PCF8531? (Контроллер ЖКИ 128*32(128*34), применяется в индикаторах TIC32,TIC48 и т.д...) Читается ли внутреннее ОЗУ? Я сначала думал, что на линии SDA вообще нет транзистора, но осциллограмма показала, что ACK(подтверждение) микросхема выдаёт. А вот как вычитать из неё данные, не знаю. Ведёт себя, как будто такой команды (бит Wr/Rd=1)нет. :( Собственно, проблема проста: зажечь и/или погасить точку, не изменив содержимое остальных 7 бит (в байте внутреннего ОЗУ драйвера) . Хранить копию экрана в ОЗУ контроллера не предлагать-контроллер PIC16F876A, ОЗУ < 512 байт. (128*32/8=512) Заранее спс.
  11. Вопрос по HI-Tech C

    Ясно. ну в этом случае мне выгоднее использовать конструкцию, которую я ранее приводил, когда я вызываю функцию, а в теле функции асмом отдаётся собственный код адреса и далее dw 0x.. и т.д. Да, позвольте дать совет не использовать конструкции вида asm ('movlw 0x00'); asm ('movwf MyVar'); дело в том, что компилятор когда начинает свою оптимизацию, может вообще поменять местами ваши команды по своему усмотрению. лечше используйте блоками: #asm movlw 0x00 movwf MyVar #endasm Это хоть какая-то гарантия будет от перемешивания команд... (IAR для AVR точно очень любит такие фокусы, я насмотрелся...) Ну тема с доступом к массиву полагаю,закрыта... Хотелось бы ещё спросить про аппаратный I2C мастер. У меня ну никак не получилось заставить его работать. Может какие тонкости есть в этом деле? Я попытался повторить эту демку на PIC16F886 и сколько не бился, так и не смог запустить аппаратно I2C. Пришлось программно симулировать. В даташите вроде не отличаются I2C у 876A и 886.
  12. Вопрос по HI-Tech C

    Можно поподробнее? Есть ли доступ к таблице переходов? PRO 9.65 даже если сместится, можно хоть как-нибудь не прибегая к асму вытащить адрес функции и засунуть в какую-нибудь переменную? на AVR и x51. ну в AVR с dw нормально, только точка перед ней нужна, с 51 проблем никаких вроде. dw не самая большая проблема.
  13. Вопрос по HI-Tech C

    У меня прошло так: void MyArray(void) { #asm dw 0x3FF0,0x1A55 #endasm } void main(void) {unsigned int Temp,Tmp; asm(" fncall _main, _MyArray"); Temp=&MyArray; Tmp=FLASH_READ(Temp); } Только вот указатель на функцию компилируется неправильно. Либо я его неправильно описал. Как я понимаю: Temp - прямая адресация к ячейке. *Teмp - адресация к данным через указатель (как к регистру INDF) &Temp - адресация к самому указателю (как к регистру FSR) в итоге у меня почему-то значение в Temp не совпадает с адресом самой функции. А так строчка asm(" fncall _main, _MyArray"); мне очень помогла. Не хотелось бы прибегать к асму, т.к. программа планируется быть носимой на другие платформы. предыдущий рабочий вариант был таков: unsigned int MyArray(void) { #asm movlw low ($+5) movwf ?_MyArray movlw high($+3) movwf ?_MyArray+1 return dw 0x3FF0,0x1A55 #endasm return 0;// для того, чтобы компилятор увидел явный возврат из функции на С (команды asm он в расчёт не берёт) } void main(void) { unsigned int i,Tmp,Temp; Temp=MyArray(); Tmp=0; for(i=0;i<1024;i++) {Tmp=Tmp+FLASH_READ(Temp+i);} } но в начале функции команды asm не дадут перейти на другую платформу... =((
  14. sergeeff Во-первых ссылка не работает, во-вторых это уже даже не дискуссия и тема выходит за рамки топика. Если есть вопросы и темы "про пацанов" - то вам либо в БОБРУЙСК, либо в РОСТОВ. (или ИЗрАИЛЬ) Понимаю, что с предыдущего поста время прошло месяц с гаком, но просто неправильно говорить например о ошибках компилятора (которые, например, пока ещё не найдены), основываясь на переводе документации с английского на албанский и далее на китайский и русский. Анекдот! С уважением(или нет?) SergeeffMinusSergeeff=0
  15. Вопрос по HI-Tech C

    Огромное вам сапасибо, testerplus , я более ёмкого и конкретного ответа даже не ожидал. Буду тестировать на проекте как проснусь, сразу отпишусь. Алгоритм со сжатием не подойдёт, так как данные уже упаковны не хуже GSM упаковки... Но всё равно биг спс !!! Я думаю, считывание типа Temp=FLASH_READ(MyTable+OffSet) должно пройти... Есть ещё пара мелких локальных вопросов, которые я хотел бы задать, но это потом... Адреналин, оказывается, вырабатывается не только в случае опасности, а так же в случае удачной компиляци... :)
  16. Вопрос по HI-Tech C

    Объясняю: данные размером 8 килобайт. в памяти FLASH контроллера 14 килобайт (8 килослов размером 14 бит) если я задам массив из 8 килобайт, компилятор сгенерит код типа retlw 0xFF и т.д. т.е. будет использовано 8 бит из 14-и. этот код будет весить 8 килослов(14-битных, а не 8!!!), т.е. 100% FLASH памяти контроллера. мне же мужно считать 14-битные данные из FLASH, выровнять на границу в 8 бит и т.д (дальше не вопрос) я думаю, в 6 килобайт оставшихся точно помещу распаковку(выравнивание) =)) ваш совет полезен только в случае, если массив менее 8кб (8192-длина программы) а здесь другое...
  17. Вопрос по HI-Tech C

    Вобщем есть такой вопросик: Есть подпрограмма(функция или процедура-не важно). В ней таблица вида void Table1(void) { #asm dw 0x3FF,0x3FF// и так далее... #endasm } почему asm,dw 0x... спросите вы: для того, что бы я мог использовать все 14 бит flash памяти. можно задать как массив во флэш,но при реализации компилятор сделает таблицу вида: retlw 0xFF retlw 0x1F и т.д. собственно, сам вопрос: как можно считать эти данные внутри функции Table1 и если не вызывается данная функция, как заставить компилятор её не исключать при сборке. Считать флэш у меня получается, а присвоить присвоить переменной адрес функции-не получается. Да, проц = PIC16F876A и(или) PIC16F886
  18. Попробуйте глянуть ComPic (работает даже на 386 процессоре под ДОСом) или PonyProg (У него гораздо список микросхем очень внушительный, под Windows) Оба программатора имеют одинаковую схему, буквально 1 транзистор и 3-5 резисторов... Обоими программами пользовался с 1997 года, недавно только купил профессиональный программатор. Схем в нете навалом, включите поиск только...
  19. Если разводка PIC к программатору правильная и с напряжениями вопросов нет, попробуйте посмотреть конденсаторы по питанию и/или линии Reset. У меня тоже были такие грабли давненько... Обычно для стабильного входа в режим программирования 12v на линии reset должно появиться раньше основного питания.
  20. Компилятор снова обновился. picc pro 9.65 доступна на сайте хайтэч Могу выложить. 2moderators: переименуйте пожалуйста шапку, если посчитаете нужным.
  21. Чтобы реализовать на россыпи могу предложить такое: тактовый генератор > 500 kHz (я бы взял 1 Mhz) далее счётчики 15 бит минимум общей длины (561ие15 вроде) далее устройство сравнения с заданным кодом яркости и управления симистором. заданный код яркости тоже состоит из счётчиков (кнопки + и -) также необходимо учитывать минимальный и максимальный коды яркости а также ещё счётчиков для второго полупериода. Далее, при потреблении схемы более 10 мА, запитать её через нить лампы(нагрузки) врядли удастся. Да, коды вроде должны быть динамическими или нужно фапч для генератора, что бы не зависеть от изменений частоты питающей сети. Я понимаю, что программированием заниматься не хочется, но может стоит попытаться? Схема в РАДИО конечно хороша, но есть схема устройства "сапфир-2503" помоему... там датчик бесконтактный(емкостной) даже, а не кнопка...
  22. Зачем всякие фиктивные прерывания? Всё красиво работает. Перед sleep я принудительно останавливаю TMR1. Вопросов с рекурсией не возникает. Прога по TMR2 считает только секунды и больше ничем не занята. Время выполнения как я не крутил-120мкс и всё тут. (это 4 периода 32768 Hz) не могу понять только, почему 4... Правда, сейчас не могу разобраться с оптимизацией - на максимуме и на минимуме есть глюки, макс. без code motion и cross calls<5 работает. И закралась на этапе вылизывания интересная вещь: при обновлении ЖКИ на нём иногда включаются совсем не те сегменты, которые должны были... хотя ОЗУ не модифицировалось (просто обновление)
  23. Как всегда, задача нестандартная... Математика тормозит, но клавиатурой прерывается. Всё хорошо, пока есть питание. А когда его нет, всё скидывается в еепром и считается время бездействия. К сожалению, 30 мкс пока не получилось. Получилось только 120 мкс. Буду думать дальше, но наврядли. Тем не менее, могу скинуть то, что есть, если интересно...
  24. Примерно через часик скину. Сейчас добился примерно 30 мкс, а это как раз 1/32768, но нужно всё проверить...
  25. Я уже писал, что стоит аккум ~20mah,4.8v а устройство должно проработать недели 2-3 без внешнего корма и эта миллисекунда мне очень дорога... А TMR1 выполняет общие функции (клавиатура,дребезг,жки) и ко времени привязан слабо. TMR2 только секунды добавляет (<50 тактов выполнение) А снаружи инженерная математика(и логарифмы и синусы и т.д) и эта математика думает иногда очень долго(минуты). Поэтому в неё нельзя. Поэтому и сабж. Сейчас на данный момент достиг 118 мкс, пытаюсь укоротить хотя бы ещё втрое...
×
×
  • Создать...