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

    

IF_P

Участник
  • Публикаций

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

  • Посещение

Репутация

0 Обычный

Информация о IF_P

  • Звание
    Частый гость

Контакты

  • Сайт
    http://www.sobos.in.ua
  • ICQ
    460707493
  1. Тоже делал совмещенный компонент. Но при разводке возникают некоторые неудобства. При ручной разводке или при корректировании уже разведенной платы иногда нельзя присоединиться к некоторым падам двойного элемента. Вот тестовый пример. "норм.gif" - все нормально разводитсяи в слое TOP и в слое BOTTOM. Соединяю пады выводные между собой, SMD-ные между собой и выводные с SMD-ными. А вот элементы D1 и L1 можно соединить между собой только выводными падами (TOP и BOTTOM "test5.gi", "test6.gif"). К SMD-ным падам прицепиться нельзя (связь проведена только от выводных падов). А вот если немного сдвинуть один из элементов, то все нормально ("test7", "test8" и связь отходит уже от SMD-ной площадки). В чем здесь проблема? P.S. Добавил таблицу пинов test.pcb test.sch
  2. Ощибка PE147, union и ATMega16

    Цитата(Сергей Борщ @ Jun 30 2017, 09:05) Чудес не бывает. Значит этот файл включается туда же через какой-то другой заголовочный файл. Люди не зря придумали защиту от повторного включения заголовочных файлов. Что касается защиты от повторного включения, то я согласен. Просто это всегда остается "за кадром" - потом, потом...А в моем случае попробую на выходных выделить из программы необходимое, сделать тестовый пример и выложу сюда. Хотелось бы разобраться до конца.
  3. Ощибка PE147, union и ATMega16

    Цитата(Сергей Борщ @ Jun 29 2017, 23:57) Вы объявили в заголовочном файле переменную безымянного типа. Но у union есть имя. Цитата(Сергей Борщ @ Jun 29 2017, 23:57) Полагаю, adc_16_old.h был включен более чем в один файл исходников, а adc_union.h вы включили только в один. Файл всего лишь один. Есть основная программа к которой подключен хидер. Больше его нигде нет. Я всего лишь разделил один хидер на два и последовательно их подключил, чтоб заработало. В другом проекте с ATMega128 объявление union в общем хидерном файле прекрасно работает. Вот поэтому я и не понимаю, в чем разница. Я просто скопировал с этого проекта и поменял ATMega128 на ATMega16.
  4. Ощибка PE147, union и ATMega16

    Выделил union в отдельный хидерный файл ("adc_union.h") и вставил его в программу - заработало: #include <iom16.h> #include <intrinsics.h> #include "adc_union.h" #include "adc_bits.h" #include "adc_16.h" А когда этот union находился в общем хидерном файле ("adc_16_old.h") - выскакивала ошибка. Хотя оно заработало, но хотелось бы все таки узнать причину ошибки, чтоб не наступать на грабли в будущем. Буду благодарен за информацию.
  5. Ощибка PE147, union и ATMega16

    Вылетает ошибка "ERROR[PE147]...". В программе с ATMega128 все нормально работает. А здесь стоит ATMega16. Что ему не нравится?
  6. Цитата(Владивольт @ Oct 21 2016, 22:40) Берём сообщение из .ERR https://www.google.ru/search?q=Draw+apertur...7G8rI6AS7wY6ADQ http://www.pcad.ru/forum/36189/ и еще ряд ситуаций PCAD выдает эти ошибки, но при этом содает Gerber-файлы шелкографии. И там присутствуют эти элементы с ошибками. Как может поступить производитель - он игнорирует эти ошибки или возвратит файлы обратно для доработки. В понедельник утром файлы должны быть в Китае. Если нужно дорабатывать, то завтра еще можно посидеть. Но не хотелось бы это делать, т.к. можно внести какие-то новые ошибки. А эти платы уже проверены и не один раз изготавливались в Украине. Но никто не требовал от меня Gerber, делали по "pcb".
  7. При создании Gerber-файла шелкографии возникают ошибки ("SB_001_004_006.ERR"). Некоторые из них просмотрел. Попадают на обозначение диода ("diode.GIF"). На шелкографии, вроде, все нормально. Вопрос: - в чем тут проблема - пройдет ли такое на производстве в Китае И походу еще один вопрос. В одной из плат китайцу не понравился DRILL. Вот что он пишет: "but there is no drill layer in gerber files, I just see the drill txt." и прицепил два файла ("123.jpg", "12345.jpg") . Я файлы делал в PCAD2004 и проверял в "Online Gerber-Viewer", а также в CAM350 ("Sb_001_004_006_DRL.gif", "Sb_001_004_006_CAM.gif"). Что ему здесь не нравится?
  8. Обнуление указателя стека

    Конечно можно. Я что-то упустил из виду это.
  9. Обнуление указателя стека

    Спасибо за подсказки. Так значительно лучше. По крайней мере в ISR T0 в стеке сохраняется только 4 р-ра. Что касается таймера T0, то я режим поменяю только после полной отладки программы. Дело в том, что я отлаживаю программу в Proteus'е. А там TWI в ATMega8535 немного глючит (касательно того, что мне надо). Пришлось использовать ATMega8. А у неё нет режима таймера CTC. Но это уже мелочи.
  10. Обнуление указателя стека

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

    Попутно еще вопрос. у меня в п/п прерываня таймера сохраняется в стеке 20 р-ров, а используется только 12. Это особенности компилятора или я чего-то не углядел. Ведь это все влияет на размер стека.
  12. Обнуление указателя стека

    Xenia спасибо за помощь. Сделал глобальную переменную и ошибка стека исчезла. Но вот обмен по I2C виснет на второй секунде. Видимо, где-то это описание вылезат "боком". Копаю дальше.
  13. Обнуление указателя стека

    Цитата(Xenia @ Aug 30 2013, 18:53) Появилась она оттого, что вы заводите char messageBuf[TWI_BUFFER_SIZE]; на стеке! Вот компилятор и резервирует этой командой 20 байт, отъедая их из стека. А стека у вас кот наплакал (0x20). Заведите буфер глобально (вне main) и ваши проблемы исчезнут. А в "нормальной" программе этого не было потому, что TWI вы не использовали и под буфер стек не изводили. TWI я там тоже использовал, только программа ISR TWI была моя и там немного другой принцип обработки информации. А здесь я просто скопировал у ATMEL (AVR311). Но у них буфер 4 байта в примере и это не критично. Сейчас попробую разобраться и переделать.
  14. Обнуление указателя стека

    После небольшой модернизации программы начала вылетать ошибка стека ("Err_SP.GIF"). Начал разбираться и пришел вот к чему. В программе MAIN в самом начале есть команда: SBIW R29:R28, 20 Здесь уменшается р-р Y на 20. (0x80 - 20 = 0x6C). Впоследствии этот р-р используется для адресации стека. При входе в п/п прерывания таймера сохраняются 20 р-ров ("ISR_Save.GIF"). В результате указатель стека получается равным 0x58, чего быть не должно. В дальнейшем при первом же вызове п/п в этом месте 37 ADC_7741[N_chan_7741][step7741]=TCNT1; \ 0000003A B44C IN R4, 0x2C \ 0000003C B45D IN R5, 0x2D \ 0000003E .... LDI R26, LOW(ADC_7741) \ 00000040 .... LDI R27, (ADC_7741) >> 8 \ 00000042 9140.... LDS R20, N_chan_7741 \ 00000046 E050 LDI R21, 0 \ 00000048 E00A LDI R16, 10 \ 0000004A E010 LDI R17, 0 \ 0000004C .... RCALL ?S_EC_MUL_L02 указатель стека обнуляется и начинают выдаваться вышеуказанные ошибки. Посмотрел предыдущую версию программы. Там нет команды SBIW R29:R28, 20 Почему она появилась? В рабочей версии программы использовал свою п/п обработки прерывания I2C. В программе с ошибками обработка прерываний I2C от ATMEL. В прицепе два варианта программы. IAR 4.30A Proteus 7.10.0
  15. I2C в AVR

    Цитата(ASDFG123 @ Jun 22 2013, 20:48) Подскажите по I2C интерфейсу в атмега 16, Нужно сделать слейв. Получаем запрос с адресом от мастера, в ответ отправляем данные. Взял аппноут AVR311 как его довести до работоспособности? Не понятен момент как слейв узнает что ему пришел SLA-R в main.c строчка #define TWI_CMD_MASTER_READ 0x20 что она означает ? это 0010 0000 но SLA-R это ведь 1 и 7битов адресов и почему функция чтения того что пришло слейву, состоит из 2 массивов ? TWI_Get_Data_From_Transceiver(messageBuf, 2); что нужно дописать (вырезать) что бы использовать эту библиотеку ? Это написано для связки Master (AVR315) - Slave (AVR311). Команда TWI_CMD_MASTER_READ 0x20 поступает от Master'а. Slave только отвечает на нее.