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

Хтось

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

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

  • Посещение

Репутация

0 Обычный

Информация о Хтось

  • День рождения 15.08.1977

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. Тоже столкнулся с такой же проблемой. При подключении к компьютеру stm32f746 через USB и установки драйверов на последовательный USB порт с сайта ST, порт определялся с ошибкой 10 (устройство не может быть запущено). Я так и не смог найти, где изменить размер кучи (Heap size), но проблема решилась по совету из этой темы: https://community.st.com/message/91508 После уменьшения HS max packet size с 512 до 64 все заработало. Где это изменяется в Cube MX я так и не нашел, поэтому изменил значение CDC_DATA_HS_MAX_PACKET_SIZE в файле usbd_cdc.h
  2. Все! Я окончательно понял, что контроллеры делаются с помощью черной магии и их работоспособность сильно зависит от количества китайцев, на земле, фазы луны и еще от чего-то! В общем танцевал я с бубном вокруг WDT с утра и до обеда. Что только не пробовал на трех разных платах: и задержки и инициализации разные, по несколько раз через софт и через фьюзы, в конце вообще на ассемблер перешел прямо в АВР студии, чтоб компилятор был от производителя - ничего не помогает. Не работает и все! (Программный Reset, кстати, работал) Потом осенило посмотреть что в WDT.CTRL. Вывожу я его через UART наружу и - о чудо! Там 0x1A - в полном соответствии с симулятором! То есть WDT разрешён, и период 0,5сек. как я и устанавливаю. Получается - не работает сам модуль WDT в железе. Ну я и успокоился, решил что научились китайцы делать поддельные контроллеры, а нам повезло найти нужного поставщика - ну с кем не бывает :). Повытирал все свои эксперименты и сел дальше софт писать. Ближе к 5 часам вечера начинает коллега ругаться плохими словами - говорит программатор сдох ни с того ни с сего. Одолжил я ему свой (AVRISP mkII) на 5 мин., он свою плату перешил и программатор вернул. Прошиваю я сразу свою плату и вижу,что она уходит в ресет постоянный. И тут до меня доходит, что все "wdr" в программе закрыты, а watchdog в фьюзах остался включенным и он почему-то заработал. Беру другую плату - WDT не работает. Просто перешиваю программу (фьюзы не трогаю) и снова чудо - WDT заработал и на ней. Вот теперь даже не знаю - плакать :crying: или смеяться :08: , а главное - каких сюрпризов дальше ждать. :laughing:
  3. :bb-offtopic: Уважаемый zombi, на этом форуме уже есть не одна тема (и не без Вашего участия) с обсуждением стоит ли использовать WDT, с подобной "помощью" милости прошу туда! Использование внешнего супервизора это абсурд, так как есть встроенный (BOD) который ничем не хуже, только дешевле. А от внешних мы отказались уже лет 8 назад, после того, как несколько штук сгорели и стали выдавать непериодический ресет просто так! (уж поверьте, сгорели именно супервизоры, а не питание сделалось плохим.) Может мы говорим о разных вещах, но в документации от "атмел" написано, что ихний WDT именно для этого и предназначен! Уже только этого и достаточно. P.S. Вы все равно не убедите меня, что WDT это зло, поэтому прошу по этому поводу в данной теме больше не писать. Кстати, некоторые убеждены, что ремень безопасности в машине это тоже зло, но я все равно им пользуюсь :)
  4. Конкретно сейчас есть 3 причины: 1. При подаче питания с помощью искрящего контакта контроллер зависает где -то один раз из двадцати. (это при том, BOD включен на 2,4В при питании 3,3, а нормально работать контроллер начинает с 1,8В) 2. Плата работает в условии достаточно сильных помех от расположенных рядом двигателей + также рядом стоящие радиопередатчики ей здоровья не добавляют :twak: . 3. Использование WDT дает +2 к такому важному навыку разработчика, как "здоровый сон" :) Да, я читал, как доберусь до железа - обязательно попробую и сообщу о результатах. Еще раз спасибо за помощь!
  5. вот сгенерированный код: ;void watchdog_init(void) ; 0000 0056 {unsigned char s,n; _watchdog_init: ; 0000 0057 // Сгенерировано через Code Wisard AVR и проверено по атмеловскому даташиту ; 0000 0058 #pragma optsize- ; 0000 0059 s = SREG; // Save interrupts enabled/disabled state ST -Y,R17 ST -Y,R16 ; s -> R17 ; n -> R16 IN R17,63 ; 0000 005A #asm("cli") // Disable interrupts cli ; 0000 005B n = WDT_PER_512CLK_gc | WDT_ENABLE_bm | WDT_CEN_bm; // Watchdog Timer: On. Period: 500 ms LDI R16,LOW(27) ; 0000 005C CCP = CCP_IOREG_gc; LDI R30,LOW(216) OUT 0x34,R30 ; 0000 005D WDT.CTRL = n; STS 128,R16 ; 0000 005E ; 0000 005F n = (WDT.WINCTRL & (~WDT_WEN_bm)) | WDT_WCEN_bm; // Watchdog window mode: Off LDS R30,129 ANDI R30,0xFD ORI R30,1 MOV R16,R30 ; 0000 0060 CCP = CCP_IOREG_gc; LDI R30,LOW(216) OUT 0x34,R30 ; 0000 0061 WDT.WINCTRL = n; STS 129,R16 ; 0000 0062 ; 0000 0063 SREG = s; // Restore interrupts enabled/disabled state OUT 0x3F,R17 ; 0000 0064 } LD R16,Y+ LD R17,Y+ RET ; Вроде все нормально. Да и я включал WDT через Fuse биты - все равно не работал!!! Если у Вас работает, то есть подозрения на битые контроллеры. Тем более, что у меня уже есть горький опыт именно с Xmega32A4. (внутреннее АЦП в беззнаковом режиме выдавало на некоторых участках битый код. Пришлось запустить в знаковый режим, потерял 1 бит точности, но все стало работать. ) В общем в понедельник буду испытывать на других платах. и спасибо за помощь.
  6. Хорошо хоть у кого-то работает, значит проблема решается :) У меня определяется так же: #define WDT_PER_512CLK_gc (0x06<<2) // 512 cycles (0.5s at 3.3V) а можете показать асемблеровский кусок посмотреть? В понедельник еще возьму плату трехлетней давности, чтоб точно контроллер из другой партии был и проверю на ней.
  7. Укладывается, я смотрел сгенерированный asm, там n назначен на r16 и присвоение идет двумя последовательными командами. К сожалению, до понедельника попробовать уже не смогу. Все осталось на работе. А Вы использовали WDT в Xmega_х? Мне не верится, что он там не работает вообще, но мало ли?
  8. Развяжите диодами. Только диоды шоттки нужны, с как можно меньшим порогом, а то напряжение не до нуля опускается. И резистор подтягивающий к питанию побольше (но без фанатизма - 2 - 10 кОм в зависимости от скорости в канале) чем меньше ток, тем ближе напряжение к нулю в моменты передачи.
  9. Не работает Watchdog в AtXmega

    Прошу помощи у Клуба! Кто пользовался watchdog таймером в Xmega контроллерах? У меня watchdog нагло отказывается работать! Вот кусок программы: void watchdog_init(void) {unsigned char s,n; // Сгенерировано через Code Wisard AVR и проверено по атмеловскому даташиту #pragma optsize- s = SREG; // Save interrupts enabled/disabled state #asm("cli") // Disable interrupts n = WDT_PER_512CLK_gc | WDT_ENABLE_bm | WDT_CEN_bm; // Watchdog Timer: On. Period: 500 ms CCP = CCP_IOREG_gc; WDT.CTRL = n; n = (WDT.WINCTRL & (~WDT_WEN_bm)) | WDT_WCEN_bm; // Watchdog window mode: Off CCP = CCP_IOREG_gc; WDT.WINCTRL = n; SREG = s; // Restore interrupts enabled/disabled state } #define SetGreenLed PORTC.OUTCLR = 0x40 #define ClrGreenLed PORTC.OUTSET = 0x40 #define SetRedLed PORTC.OUTCLR = 0x80 #define ClrRedLed PORTC.OUTSET = 0x80 void main(void) { watchdog_init(); InitPins(); //Инициализация ножек, куча строк типа "PORTA.DIR = 0b00110110;" и ничего больше SetGreenLed; // InitSystemClock(); //переключиться на внешний генератор 33 МГц delay_ms(400); // ClrGreenLed; // delay_ms(5000); // while(1) // {delay_ms(250); // SetRedLed; // delay_ms(250); // ClrRedLed; // } // //... //Дальше шла программа, которую WDT должен был защищать и оберегать После рестарта мигает зеленый светодиод, а затем навсегда начинает мигать красный. То есть контроллер не сбрасывается. Пробовал включить WDT через Fuse биты (устанавливал WDP и WDLOCK) - не помогает, все равно Watchdog не работает. Пробовал на двух контроллерах AtXmega128A1 AtXmega32A4. не работает ни там ни там. Как заставить его работать? Может я что-то упускаю? Кто то вообще использовал WDT в Xmega_х?
  10. Расстояние порядка 100 метров. Есть похожая работающая система, только там проложен отдельный сигнальный кабель, и по 485 протоколу гоняется 115k. Соответственно хочется использовать готовые конечные устройства (в смысле пульт и блок измерений/управления двигателем), переделав только канал связи. Посмотрел выложенные Вами ссылки и порылся в и-нете в данном направлении. Максы вроде как хорошо становятся, если удастся купить, а если нет, то буду лепить частотную манипуляцию. И хоть DSP я не поставлю (пока не довелось работать с этим добром), но ПЛИС_ину могу втулить свободно :) Так что проблема FSK или ЧМ вроде не существует, можете дискуссии на эту тему прекращать. Всем спасибо, когда будут результаты, обещаю рассказать.
  11. Связь по линиям питания

    Задача: нужно связать 2 микроконтролера (скорее всего АТМега16) по линии питания двигателя (постоянный ток 60В, до 50А). Дополнительные провода или радио организовать ОЧЕНЬ трудно, а нужно туда-сюда гонять управляющую/измерительню информацию при чем скорость нужна не ниже 19200 бит/сек (в идеале 115k :glare: ). Поделитесь идеями, как сделать не сильно дорого и сердито, или может где-то существуют готовые решения?
  12. Хелп плиз! Три года писал для PIC-ов Atmel-ов на ассемблере, нормально получалось. Теперь решили переходить на Cygnal-ы и хочется перейти на С. В школе и институте учили Pascal. Подскажите, пожалуйста где взять нормальную электронную книгу уровня для чайников или обучалку, чтобы выучить С. И вообще, принимаются любые советы!
×
×
  • Создать...