Специальные цены   новые товары
Закрытая тема
Страница 35 из 50 ПерваяПервая ... 25 33 34 35 36 37 45 ... ПоследняяПоследняя
Показано с 1,361 по 1,400 из 2000

Телеметрия (часть 1)

Тема раздела Полеты по камере, телеметрия в категории Cамолёты - Общий; Сообщение от smalltim Фильтр там - плоская пластина, углы преломления не роляют. А вот у меня на Изике нет элеронов, ...

  1. #1361

    Регистрация
    04.05.2007
    Адрес
    Opa-locka, USA
    Возраст
    33
    Сообщений
    1,193
    Цитата Сообщение от smalltim Посмотреть сообщение
    Фильтр там - плоская пластина, углы преломления не роляют.

    А вот у меня на Изике нет элеронов, я хочу автопилот с виражами
    Ну, вы, батенька, слишком много кушать ИМХО сначала просто бы горизонт удержать...

    Про фильтр - я непного не о том. http://fizika.asvu.ru/page.php?id=100
    Возьмем две прямоугольные пластинки из турмалина, вырезанные так, что одна из сторон прямоугольника совпадает с направлением оптической оси кристалла, и наложим их так, чтобы их оси совпадали по направлению. Пропустим через сложенную пару пластинок узкий пучок света от фонаря. Начнем поворачивать одну из пластинок вокруг пучка, оставляя другую неподвижной. Мы обнаружим, что след пучка ослабевает, и когда пластинка повернется на 90% он совсем исчезнет. При дальнейшем повороте пластинки проходящий пучок вновь начнет усиливаться и дойдет до прежней интенсивности, когда пластинка повернется на 180°.
    Впрочем, одна пластинка такой эффект не даст, то есть нелинейность засветки врдли является следствием прохождения кристаллической решётки.

    Цитата Сообщение от smalltim Посмотреть сообщение
    Гуру, а как лучше организовать опрос магнитометров?

    Сет-ресет-меряем?
    Или сет-меряем-ресет-меряем и Vout=(Vset-Vreset)/2 ?

    С какой частотой достаточно будет делать сет-ресет? 1 Гц? 0.1Гц? Один раз после включения?
    Отправил исходник.
    Правильно "Или сет-меряем-ресет-меряем и Vout=(Vset-Vreset)/2", причём на один канал, причём постоянно.

    Опрашивать можно как угодно часто, главное чтобы магнитометр не перегрелся - токи SET/reset там нехилые... У меня стоит 4 раза в секунду. Когда автопилот пеглючило, было около 100 раз в секунду. Жужжал как шмель, но выжил
    Вообще, он забавно тикает при разряде.

    Можно конечно SET/RESET делать раз в секунду, а мерить чаще, но ничего кроме некой экономии электричества не получим...

    Цитата Сообщение от foxfly Посмотреть сообщение
    Ну, там все не так просто: www.nxp.com/acrobat_download/applicationnotes/AN00022_COMPASS.pdf
    Это KMZ, я от них отказался - магнит срывало
    А у Тимофея HMC, насколько я знаю...

  2.  
  3. #1362

    Регистрация
    10.07.2006
    Адрес
    Moscow
    Возраст
    39
    Сообщений
    3,554
    Записей в дневнике
    1
    HMC у меня, HMC...
    Только это, господа, натуральное *лядство. Рисую схему, развожу плату. Интересуюсь корпусами датчиков. И что?

    Все чипы в паябельных корпусах стоят раза в 2-3 дороже, чем какой-нибудь *лядский LCC16 размером 3х3мм. И как это прикажете паять?

    Склоняюсь к варианту 3 отдельных датчиков в SIP8 корпусах. Пусть будет дороже, но зато хотя бы осуществимо.

  4. #1363

    Регистрация
    17.11.2005
    Адрес
    Москва
    Возраст
    53
    Сообщений
    2,446
    Тим, ты ссылочку дай на дешевые, но мелкие датчики, а мы поглядим.
    Может нараз и запаяем.

  5. #1364

    Регистрация
    10.07.2006
    Адрес
    Moscow
    Возраст
    39
    Сообщений
    3,554
    Записей в дневнике
    1
    Вот вся линейка:
    http://www.ssec.honeywell.com/magnetic/products.html

    Вот документ по серии 105x - она в России самая дешевая:
    http://www.ssec.honeywell.com/magnetic/dat...ets/HMC105X.pdf

    У двухосевого 1052 сравните корпус 10-pin MSOP и 16-pin LCC на странице 5.
    И посмотрите 1-осевой 1051Z в корпусе 8-pin SIP на странице 4, который я собираюсь использовать, ибо 10-pin MSOP нигде на складах нет (cм efind.ru), а 16-pin LCC - кошмар.

  6.  
  7. #1365

    Регистрация
    17.11.2005
    Адрес
    Москва
    Возраст
    53
    Сообщений
    2,446
    Тим! Если у корпусов 16LCC сбоку есть хоть небольшая площадка от вывода который на брюхе, то припаять можно. Если нет, то тогда только феном.

  8. #1366

    Регистрация
    10.07.2006
    Адрес
    Moscow
    Возраст
    39
    Сообщений
    3,554
    Записей в дневнике
    1
    Пока вот что получается:

    Вложение 204599

    Стабилизатор питания +5В еще не прикручен, память еще не прикручена, питание памяти +3.3В тоже не прикручено.
    Еще надо 2 кнопочки, 2 светодиодика. Ну и еще вход GPS да разъем SPI для общения с платой телеметрии.
    Последний раз редактировалось smalltim; 07.02.2009 в 06:34.

  9. #1367

    Регистрация
    10.07.2006
    Адрес
    Moscow
    Возраст
    39
    Сообщений
    3,554
    Записей в дневнике
    1
    Сделал схему немного более читаемой:

    Вложение 204603

    Ой, в цепи ресета фигня нарисована, не обращайте внимания. Отосплюсь - поправлю, будет как положено и еще плюс кнопочка
    Последний раз редактировалось smalltim; 07.02.2009 в 06:34.

  10.  
  11. #1368

    Регистрация
    10.07.2006
    Адрес
    Moscow
    Возраст
    39
    Сообщений
    3,554
    Записей в дневнике
    1
    По поводу того, как привязан PPM, входы с пирометровых голов и с магнитометров - поругайте, если не лень

    А мне надо очень хорошо подумать, как строить программу чтобы корректно выходной PPM формировать, без задержек и прочая, а то сервы будут дрожать. Раньше я почему-то об этом не подумал.
    А у Атмег прерывания реентерабельные? Т.е. что будет, если стукнет прерывание пока я обрабатываю другое прерывание? Подозреваю, что ничего страшного не произойдет, но все тайминги на моей совести

  12. #1369

    Регистрация
    04.05.2007
    Адрес
    Opa-locka, USA
    Возраст
    33
    Сообщений
    1,193
    Цитата Сообщение от smalltim Посмотреть сообщение
    У двухосевого 1052 сравните корпус 10-pin MSOP и 16-pin LCC на странице 5.
    И посмотрите 1-осевой 1051Z в корпусе 8-pin SIP на странице 4, который я собираюсь использовать, ибо 10-pin MSOP нигде на складах нет (cм efind.ru), а 16-pin LCC - кошмар.
    Я паял MSOP, тоже не подарок. А у LCC есть выводы сбоку.

    Цитата Сообщение от smalltim Посмотреть сообщение
    По поводу того, как привязан PPM, входы с пирометровых голов и с магнитометров - поругайте, если не лень

    А мне надо очень хорошо подумать, как строить программу чтобы корректно выходной PPM формировать, без задержек и прочая, а то сервы будут дрожать. Раньше я почему-то об этом не подумал.
    А у Атмег прерывания реентерабельные? Т.е. что будет, если стукнет прерывание пока я обрабатываю другое прерывание? Подозреваю, что ничего страшного не произойдет, но все тайминги на моей совести
    Я вот одного не пойму - ну если всё равно городить внешний ОУ, почему сразу не поставить нормальный АЦП? Тот же корпус, но нет кучи пассива с пол процентными допусками, который ещё и отстраивать надо. Нету кучи математики для вычисления курса из того г-на, которое получится после усиления ОУ и оцифровкой меговским АЦП. Ну нафига себе проблемы то создавать?
    Видимо, тяга к аналогу, это как свинка. Надо один раз переболеть, чтобы потом на всю жизнь иммунитет...
    Кстати, купить АЦП ничуть не сложнее, чем этот ОУ.

    Прерывания в меге встают в очередь, по приоритетам. Внутри прерывания ничего не происходит, но после выхода из прерывания чип выполнит 1 команду и снова уйдёт в прерывание. Самое приоритетное в очереди.
    Таблица приоритетов есть в ДШ.

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

    Чёта я схему не пойму. А ШИМы там что, не аппаратные?

  13. #1370

    Регистрация
    04.05.2007
    Адрес
    Opa-locka, USA
    Возраст
    33
    Сообщений
    1,193
    Вот, фото моих пирометров Фото головы в сборе и графики чуть позжа.
    Миниатюры Миниатюры Нажмите на изображение для увеличения
Название: DSC04708.JPG‎
Просмотров: 177
Размер:	72.5 Кб
ID:	204617   Нажмите на изображение для увеличения
Название: DSC04709.JPG‎
Просмотров: 135
Размер:	76.4 Кб
ID:	204618  

  14. #1371
    dmk
    dmk вне форума

    Регистрация
    11.03.2001
    Адрес
    Jerusalem
    Возраст
    51
    Сообщений
    80
    Цитата Сообщение от smalltim Посмотреть сообщение
    А у Атмег прерывания реентерабельные? Т.е. что будет, если стукнет прерывание пока я обрабатываю другое прерывание? Подозреваю, что ничего страшного не произойдет, но все тайминги на моей совести
    Для нестинга (если Вы это имеете ввиду) у Атмег достаточно после входа в процедуру обработки прерывания установить флаг глобального прерывания (тем самым подтвердить прерывание). В следующем командном цикле может быть принято и обработано следующее прерывание (внутри текущего прерывания).

  15. #1372

    Регистрация
    22.08.2008
    Адрес
    Moscow
    Возраст
    44
    Сообщений
    55
    а, черт!.....Полностью согласен! Про нормальный АЦП и по прерываниям. Походу PWM программный-дрожать будет в зависимости от сложности остального софта(подключал в свое время аналоговый стрелочный вариометр к 8051 без PWM- все вылизал, а стрелка дрожит, как осиновый листок). Не связывайся- много бестолкового секса будет . В приемнике можно- там ниче нет больше. А про выбор процессора, я лучше помолчу....(LPC21.. 6 асинхронных каналов, например)....молчу

  16. #1373

    Регистрация
    10.07.2006
    Адрес
    Moscow
    Возраст
    39
    Сообщений
    3,554
    Записей в дневнике
    1
    PWM аппаратный будет, это я протупил просто. Схемку перерисую.
    Насчет нормального ацп - мне меговского хватает.

  17. #1374

    Регистрация
    10.07.2006
    Адрес
    Moscow
    Возраст
    39
    Сообщений
    3,554
    Записей в дневнике
    1
    Гуру, не будет наглостью попросить ссылок на доки, где описано, как правильно общаться по SPI между мегами?
    Интересует не только передача данных, но и прошивка младшенькой меги силами старшей.
    Ну и еще, до кучи, у старшенькой меги на том же SPI внешняя память должна висеть. Как это разрулить?

    Раз набрался смелости, вот еще вопрос: а не сможет ли кто-нибудь за разумные деньги в несколько дней сделать пару печатных плат?
    Заказывать на заводе - долго и дорого, да и надо-то пока только дорожки с одной стороны и никаких отверстий. Паять всё соплями к at90usbkey - неохота. И без этого есть что на нем поотлаживать

  18. #1375

    Регистрация
    22.08.2008
    Адрес
    Moscow
    Возраст
    44
    Сообщений
    55
    Ну вот, грабли! Вилы! Ну вот, будем протокол придумывать! SPI- сдвиговый рег. обычный. В данной апп. OSD- мастер, вывод делать в кадровом прерывании, например, дополнительное прерывание вводить нельзя- будут строки выпадать, или сдвигаться, из- за очереди прерываний, а так, все ручками... Хотите ARINC-4xx освоить в "свободное" время ?? Для прошивки Мег, использую мегалоад- ниче удобнее не пробовал- автоопределение, по сбросу. Можно переписать на любой физ. интерфейс, а основную делать прозрачной, во время прошивки. Но, ARM7 имеют на борту заводской лоадер и оригинальные процедуры входа... SAM7S- USBloader, и всего 48 пинов! О чем еще мечтать?! вот под что плату нада делать, а не возиться с протоколом и читать всякую ересь !

    Atmel’s AT91SAM7S is a series of low pincount Flash microcontrollers based on the 32-bit ARM
    RISC processor. It features a high-speed Flash and an SRAM, a large set of peripherals, including
    a USB 2.0 device (except for the AT91SAM7S32 and AT91SAM7S16), and a complete set
    of system functions minimizing the number of external components. The device is an ideal
    migration path for 8-bit microcontroller users looking for additional performance and extended
    memory.

  19. #1376

    Регистрация
    10.07.2006
    Адрес
    Moscow
    Возраст
    39
    Сообщений
    3,554
    Записей в дневнике
    1
    Собственная софтинка для прошивки at90usb128 со штатным бутлоадером через USB у меня уже давно готова. Пересылка данных по USB меге и обратно готова. Не быстро правда, всего 32кБ/сек, но для моих нужд хватит. 2 МБ полетных данных с флеша сольется в компук за минуту.

    Нужно только вот дополнительно уметь прошивать мегу8 через SPI силами at90usb128, подключенной к USB. Для удобства обновления прошивок платы телеметрии. Ну да сам разберусь, спасибо.
    Количество граблей и прочего шума в теме зашкаливает, теперь буду писать в тему по минимуму.

    Если кто-то сможет через недельку помочь с парой опытных экземпляров печатки, не забесплатно, конечно - стукнитесь, пожалуйста, в личку или в почту!

  20. #1377

    Регистрация
    11.06.2008
    Адрес
    Омск
    Возраст
    35
    Сообщений
    3
    Цитата Сообщение от smalltim Посмотреть сообщение
    Гуру, не будет наглостью попросить ссылок на доки, где описано, как правильно общаться по SPI между мегами?
    Интересует не только передача данных, но и прошивка младшенькой меги силами старшей.
    Ну и еще, до кучи, у старшенькой меги на том же SPI внешняя память должна висеть. Как это разрулить?
    1. Ссылок не дам (atmel.com ), но могу дать свои рабочие исходники обмена между мегами на C.
    2. Прошивку ведомой меги силами главной не делал, т.к. у меня в ведомых мегах весьма простые программы сбора данных, которые достаточно было отладить один раз, все навороты в главной.
    3. С внешней памятью и т.д. на том же SPI никаких проблем, просто выбираешь с кем надо обмениваться сигналами SS и все. Иногда приходится дополнительно перенастраивать CPOL и CPHA.
    4. Не пробуй сэкономить и отказаться от SS, отличный способ создать себе массу проблем. Мне пришлось потратить кучу времени чтобы данные передавались надежно.

  21. #1378

    Регистрация
    04.05.2007
    Адрес
    Opa-locka, USA
    Возраст
    33
    Сообщений
    1,193
    Цитата Сообщение от dmk Посмотреть сообщение
    Для нестинга (если Вы это имеете ввиду) у Атмег достаточно после входа в процедуру обработки прерывания установить флаг глобального прерывания (тем самым подтвердить прерывание). В следующем командном цикле может быть принято и обработано следующее прерывание (внутри текущего прерывания).
    Тока выйдя из следующего прерывания мы окажемся в текущем прерывании, а дальше куда?
    Надо писать код, сохраняюший вектор возврата. А это есть изврат. Гораздо проще написать грамотные прерывания, максимально короткие, чтобы всё успевало выполняться.

  22. #1379

    Регистрация
    04.05.2007
    Адрес
    Opa-locka, USA
    Возраст
    33
    Сообщений
    1,193
    Цитата Сообщение от smalltim Посмотреть сообщение
    Гуру, не будет наглостью попросить ссылок на доки, где описано, как правильно общаться по SPI между мегами?
    Интересует не только передача данных, но и прошивка младшенькой меги силами старшей.
    Ну и еще, до кучи, у старшенькой меги на том же SPI внешняя память должна висеть. Как это разрулить?

    Раз набрался смелости, вот еще вопрос: а не сможет ли кто-нибудь за разумные деньги в несколько дней сделать пару печатных плат?
    Заказывать на заводе - долго и дорого, да и надо-то пока только дорожки с одной стороны и никаких отверстий. Паять всё соплями к at90usbkey - неохота. И без этого есть что на нем поотлаживать
    Прошивка младшей описана в ДШ, в разделе memory programming. А как правильно общаться... Да как хочется, так и общайся Я для себя выдумал такой протокол:
    #[addr][sender][lenght][data]
    Адрес получателя, отправителя, длина поля дата и данные. Работает на любом протоколе, в том числе на И2Ц.
    Когда чип не выбран лапкой CS, он по спецификации должен держать свои лапы в Z. При программиовании и ресете лапы МК также переходят в Z, по этому следует предусмотреть подтяжку, чтобы память не подгаживала на шину, когда рулящий чип в ауте.

    Платы могу сделать бесплатно, вот как доставить? Возможно, на след. неделе буду в Москве, но не факт... Почта недели две идёт.

    ПС. Я таки победил пирометры! Работают!!!! Все 4, горизонт видят, всё мериют и вообще работают супер. Пока испытывали только на шесте, но на неделе полетим и запишем в полёте. Но даже на шесте по пирометрам можно было выровнять потожение шеста так, что проверка отвесом показывала 100% совпадение.
    Миниатюры Миниатюры Нажмите на изображение для увеличения
Название: 1.JPG‎
Просмотров: 126
Размер:	31.4 Кб
ID:	206285   Нажмите на изображение для увеличения
Название: 2.JPG‎
Просмотров: 126
Размер:	38.9 Кб
ID:	206286  

  23. #1380

    Регистрация
    22.08.2008
    Адрес
    Moscow
    Возраст
    44
    Сообщений
    55
    Ну вот. С Днём Рождения, блин! Может сам на себя посмотреть:
    Нажмите на изображение для увеличения
Название: innerself.jpg
Просмотров: 254
Размер:	71.7 Кб
ID:	206282
    С детства роботов люблю!
    С "демо" данными:
    Нажмите на изображение для увеличения
Название: hotstrt.jpg
Просмотров: 158
Размер:	46.5 Кб
ID:	206283
    Что- то типа: "В ШТОПОРЕ", с маркером автопилота...
    Нажмите на изображение для увеличения
Название: APcrs.jpg
Просмотров: 147
Размер:	46.8 Кб
ID:	206284
    Сорри, нет фото-камеры..(OSD 72x192 слева скорость, в центре- курс, справа вертикалка, внизу- скольжение+ контроль скольжения +8 aux индикаторов-%) Ну и не сделать толком больше на Меге ниче- все завязано на строчном прерывании...... ~20kb -opt 3. Про обмен датой:
    Самое простое- обмен по SPI. Скажем 32 байта туда<->сюда +1 sync, по одному в конце строчного прерывания- мастером!

  24. #1381

    Регистрация
    11.06.2008
    Адрес
    Омск
    Возраст
    35
    Сообщений
    3
    Цитата Сообщение от Dikoy Посмотреть сообщение
    Надо писать код, сохраняюший вектор возврата. А это есть изврат.
    Всегда считал что он автоматом сохраняется в стеке а затем извлекается оттуда командой RETI. Просто в стеке окажется два вектора возврата, но и команд RETI будет выполнено две (может и больше уровней вложенности оказаться)

    Проверено, работает. Но редко реально нужно.

  25. #1382
    dmk
    dmk вне форума

    Регистрация
    11.03.2001
    Адрес
    Jerusalem
    Возраст
    51
    Сообщений
    80
    Цитата Сообщение от Dikoy Посмотреть сообщение
    Тока выйдя из следующего прерывания мы окажемся в текущем прерывании, а дальше куда?
    Надо писать код, сохраняюший вектор возврата. А это есть изврат. Гораздо проще написать грамотные прерывания, максимально короткие, чтобы всё успевало выполняться.
    Как я понял, Вы меня опять втягиваете в безсмысленный спор . А зря. Поверьте, кроме Вас есть еще люди, которые пишут и достаточно давно для AVR, да и для других процессоров.
    Вложенные прерывания (Nested interrupts) вещь достаточно стандартная, и широко используемая. В случае AVR (как уже было сказано выше) по команде RETI автоматически из стека извлекается вектор возврата, причем количество вложенных прерываний ограничивается только размером стека. А вот STATUS регистр нужно сохранить в ручную, но это нужно делать вне зависимости от вложенности. В принципе, и вызов и возврат из подпрограммы происходят также, только не сбрасывается флаг прерываний. А отказываться от такого мощного инструмента как Nested interrupts (там где это необходимо), это действительно изврат.

  26. #1383

    Регистрация
    04.05.2007
    Адрес
    Opa-locka, USA
    Возраст
    33
    Сообщений
    1,193
    Цитата Сообщение от dmk Посмотреть сообщение
    причем количество вложенных прерываний ограничивается только размером стека.
    Об этом я и написал, вы опять не хотите вникать в суть, видя лишь верх.
    Если вы будете писать код, который не успевает обрабатывать прерывания, очередь прерываний запросто переполнит стек. Что есть путь в никуда, умышленное снижение надёжности своей программы.
    Не говоря про то, что стек у АВР, понятие весьма условное
    Это не PDP-6, та позволяла вообще на одних прерываниях жить...
    Инструмент мощьный, но пользоваться надо осторожно. Я от него отказался и пока не встречал задачи, где без вложенных прерываний ну никак не обойтись, хотя пишу в основном шельф-менеджеры.

    >>А вот STATUS регистр нужно сохранить в ручную, но это нужно делать вне зависимости от вложенности.
    ???
    Если когда и сохраняют статус, то при ручном отключении прерываний внутри большого и важного прерывания. Но я это видел крайне редко в чужих кодах... И то если есть опасность включения настроек компилятора, разрешающий вложенность. Так сказать, для страховки (у нас тут основной критерий к коду - возможность повторного использования, реюзибл), на случай переноса куска кода в другую программу или компилятор. Если настройки нет и cli включается, компилер это заоптимизует и уберёт сам.

  27. #1384
    dmk
    dmk вне форума

    Регистрация
    11.03.2001
    Адрес
    Jerusalem
    Возраст
    51
    Сообщений
    80
    Цитата Сообщение от Dikoy Посмотреть сообщение
    Об этом я и написал ...
    Ну допустим не об этом Вы писали а о адресе возврата из прерывания, который вдруг куда-то исчезает. Возможно Вы не смогли правильно выразить свою мысль. Допускаю. Но к сожалению, создается впечатление, что это Вы в суть не вникли, но обязательно хотите оставить за собой последнее слово. Надеюсь, что это впечатление ложное.
    Вложенностью прерываний можно и нужно пользоваться. А для того чтобы стек не переполнялся, действительно нужно уметь писать грамотный код (как Вы правильно заметили ранее).
    Цитата Сообщение от Dikoy Посмотреть сообщение
    >>А вот STATUS регистр нужно сохранить в ручную, но это нужно делать вне зависимости от вложенности.
    А здесь я допустил неточность, признаю. Это нужно делать в С программах только для прерываний, реализованных на ассемблере или с атрибутом naked. Но это было просто к слову.
    А по существу, я вообще-то ответил smalltim-у, и поскольку комментировать или задавать вопросы он не стал, значит информация его либо удовлетворила, либо была излишней. Тем не менее, если интересно (smalltim-у), могу предложить свой код проекта OSD (тоже по мотивам Томаса Шерера двухлетней давности) на ATMega 168 , написанный на AVR GCC, с вложенным прерыванием строчного синхро. С его помощью я пытался реализовать графический и текстовый режимы в одном экране, вобщем довольно успешно. Хотя, по себе знаю, хуже нет чем ковыряться в чужом коде.

  28. #1385

    Регистрация
    03.06.2007
    Адрес
    Москва
    Возраст
    35
    Сообщений
    3,288
    Цитата Сообщение от dmk Посмотреть сообщение
    Тем не менее, если интересно (smalltim-у), могу предложить свой код проекта OSD (тоже по мотивам Томаса Шерера двухлетней давности) на ATMega 168 , написанный на AVR GCC, с вложенным прерыванием строчного синхро. С его помощью я пытался реализовать графический и текстовый режимы в одном экране, вобщем довольно успешно. Хотя, по себе знаю, хуже нет чем ковыряться в чужом коде.
    Не знаю как Тимофею но мне было б очень интересно посмотреть .

  29. #1386
    dmk
    dmk вне форума

    Регистрация
    11.03.2001
    Адрес
    Jerusalem
    Возраст
    51
    Сообщений
    80
    Да ради бога. Только e-mail в личку бросьте.

  30. #1387

    Регистрация
    04.05.2007
    Адрес
    Opa-locka, USA
    Возраст
    33
    Сообщений
    1,193
    Цитата Сообщение от dmk Посмотреть сообщение
    Ну допустим не об этом Вы писали а о адресе возврата из прерывания, который вдруг куда-то исчезает. Возможно Вы не смогли правильно выразить свою мысль. Допускаю. Но к сожалению, создается впечатление, что это Вы в суть не вникли, но обязательно хотите оставить за собой последнее слово. Надеюсь, что это впечатление ложное.
    Вложенностью прерываний можно и нужно пользоваться. А для того чтобы стек не переполнялся, действительно нужно уметь писать грамотный код (как Вы правильно заметили ранее).
    Я писал о возможности потери вектора возврата при уровни вложенности более 1. Поясню.
    Стек может переполниться запросто, причём даже не самими векторами возврата. Любая функция, особенно, если вызывается редко и из прерывания, да написана не тобой, может резко возжелать стек. А там уже данные основного кода. И вот тут очередному прерыванию понадобится сохранить вектор. А некуда! И всё - ниточка прервалась и получаем "адресе возврата из прерывания, который вдруг куда-то исчезает".
    Понятно, что если функции не хватит стека, это само по себе нехорошо. Но проц может и не зависнуть от этого. А вот от потерявшегося прерывания зависнет 100%. Или уйдёт на нулевой адрес (рестарт). Причём переменные в памяти и регистры сохранят свои значения и если код писался без лишней инициализации (есть такие экономщики, ставящие на дефолтные значения по ДШ) армагидец обеспечен.

    А вы можете выложить видео с последнего полёта куда-нибудь, где его можно скачать? На том сайте дают только смотреть...

  31. #1388
    dmk
    dmk вне форума

    Регистрация
    11.03.2001
    Адрес
    Jerusalem
    Возраст
    51
    Сообщений
    80
    Цитата Сообщение от Dikoy Посмотреть сообщение
    Я писал о возможности потери вектора возврата при уровни вложенности более 1.
    Вы, извините, говорите о тривиальных вещах, которые сами собой разумеются. И писали Вы не о возможности потери вектора, а невозможности использования вложенности без какого-то дополнительного кода, который нужно городить.
    Надеюсь, что в Ваших программах Вы следите за вложенностью функций (а не только прерываний), потому что при таком подходе и они для Вас также будут представлять угрозу переполнения стека, так как тоже сохраняют в нем адрес возврата.

  32. #1389

    Регистрация
    22.08.2008
    Адрес
    Moscow
    Возраст
    44
    Сообщений
    55
    Вот, "босяцкий" индуктивный рпм сенсор, средствами меги, может работать БЕЗ ПРЕРЫВАНИЙ!
    Нажмите на изображение для увеличения
Название: indusens.jpg
Просмотров: 97
Размер:	13.2 Кб
ID:	206847Нажмите на изображение для увеличения
Название: Image008.jpg
Просмотров: 111
Размер:	16.0 Кб
ID:	206848
    (Катушка- половина рас....еного РЭС-22)
    [codebox]
    int FeatureCalcRpm;
    ADMUX |=_BV(REFS0) |_BV(REFS1); //2.56v at AREF pin
    ADCSRA |=_BV(ADEN); //Включаем шнягу....
    ACSR |=_BV(ACIC); //Компаратор- как источник сигнала ICP, по отрицательному фронту...
    TCCR1B |=_BV(CS11); //|_BV(ICNC1); //Timer1_Freq=XTAL/8 минимальная частота измерения~30.5hz макс.~1mhz
    или частота проверки бита захвата. У меня проверка в конце "тела" строчного прерывания 15625херц

    if (bit_is_set(TIFR,ICF1)) {
    TIFR|=_BV(ICF1); //сброс
    TCCR1B = 0x00; //стоп
    TCNT1=0x00; //сброс
    FeatureCalcRpm=ICR1; //сохраняем
    TCCR1B |=_BV(CS11);//|_BV(ICNC1); //старт
    }
    RotationzPerMinute=(XTAL/8/FeatureCalcRpm)*60; //>>1, если 2 магнита
    [/codebox]
    Резистором "чувствительность" можно менять область применения
    (без него-"измеритель шума")

  33. #1390

    Регистрация
    03.06.2007
    Адрес
    Москва
    Возраст
    35
    Сообщений
    3,288
    Цитата Сообщение от Dikoy Посмотреть сообщение
    А вы можете выложить видео с последнего полёта куда-нибудь, где его можно скачать? На том сайте дают только смотреть...
    Если Вы имеете в виду видео последнего полета с улетом ,то на страничке где вы смотрите, снизу в правом углу есть ссылка на скачать в исходном качестве, но эта ссылка видна только для зарегистрированных.

  34. #1391

    Регистрация
    04.05.2007
    Адрес
    Opa-locka, USA
    Возраст
    33
    Сообщений
    1,193
    Цитата Сообщение от dmk Посмотреть сообщение
    Вы, извините, говорите о тривиальных вещах,
    Вы, извините, уточните сначала, что есть стек в АВР и где находится, а потом мы обсудим дополнительный код.

    Цитата Сообщение от maloii Посмотреть сообщение
    Если Вы имеете в виду видео последнего полета с улетом ,то на страничке где вы смотрите, снизу в правом углу есть ссылка на скачать в исходном качестве, но эта ссылка видна только для зарегистрированных.
    ИК! 500 метров! Жёстко...

  35. #1392

    Регистрация
    03.06.2007
    Адрес
    Москва
    Возраст
    35
    Сообщений
    3,288
    Цитата Сообщение от Dikoy Посмотреть сообщение
    ИК! 500 метров! Жёстко...
    Дык

  36. #1393

    Регистрация
    12.05.2006
    Адрес
    Ярославль
    Возраст
    38
    Сообщений
    163
    Записей в дневнике
    2
    Добрый день !

    Собрал телеметрию, пока без датчиков давления. Есть проблемка. При выводе на телевизор буквы скачут на полэкрана, при этом сами символы какие-то деформированные. Но если закрыть объектив видеокамеры, всё встаёт на свои места. Вчём дело и куда копать ?
    Есть подозрение на диод D1. Поставил что было, точнее уже перепробовал штук 5-6, выпаянных из разных плат, результат одинаковый.

  37. #1394

    Регистрация
    20.06.2006
    Адрес
    Baku
    Возраст
    38
    Сообщений
    41
    Доброе время суток.

    technolog

    У Вас наверно камера NTSC используйте PAL камеру, у меня точно такой случай был с моей NTSC камерой



    С уважением Эльмир

  38. #1395

    Регистрация
    10.07.2006
    Адрес
    Moscow
    Возраст
    39
    Сообщений
    3,554
    Записей в дневнике
    1
    Цитата Сообщение от technolog Посмотреть сообщение
    Добрый день !

    Собрал телеметрию, пока без датчиков давления. Есть проблемка. При выводе на телевизор буквы скачут на полэкрана, при этом сами символы какие-то деформированные. Но если закрыть объектив видеокамеры, всё встаёт на свои места. Вчём дело и куда копать ?
    Есть подозрение на диод D1. Поставил что было, точнее уже перепробовал штук 5-6, выпаянных из разных плат, результат одинаковый.
    Похоже, LM1881 с Вашей камерой ошибочно принимает перепады яркости изображения за строчные синхроимпульсы. Попробуйте увеличить R12 (идет через C12 к ноге номер 2 LM1881) с 510 Ом до 1К.

  39. #1396

    Регистрация
    10.07.2006
    Адрес
    Moscow
    Возраст
    39
    Сообщений
    3,554
    Записей в дневнике
    1
    Раз уж я вылез в тему,
    запощу содержимое одного из заголовочных файлов программы автопилота,
    при внимательном прочтении становится понятно, что и как и с чем едят.
    Пока времени мало, так что продвигаюсь медленно.

    Код:
    #incl*ude "types.h"
    
    
    
    typedef struct 
    {
    	u16 ssize;					  // size of this struct in bytes;
    
    	u8 ps_needs_reinit;		   // reititialization takes place once per power/reset cycle
    	u8 pwm_needs_calibration;	 // calibration takes place on usb command or after hwb press
    	u8 pyro_needs_calibration;	// calibration takes place after hwb press
    	u8 compass_needs_calibration; // calibration takes place on usb command or after hwb press
    
    	u8 board_state;				  //	 autopilot board state
    					 			  // 0 - idle in flight (just logging data to memory in flight)
    								  // 1 - idle with USB connected (just communicationg to USB)
    								  // 2 - stabilization active (logging + stabilization)
    								  // 3 - autopilot active (logging + autopilot)
    								  // 4 - calibration active (activates on hwb press or on USB command)
    								  // 5 - menu is active (activates on hwb press when tb is present and USB is not connected)
    
    	u8 tb_connected;			  // telemetry board connection detection takes place on power/reset 
    								  // 0 - telemetry board is not connected,
    								  // 1 - telemetry board is connected
    
    
    	u8 usb_connected;			  // usb connection detection takes place on USB interrupt activation
    								  // 0 - autopilot board is not connected to USB
    								  // 1 - autopilot board is connected to USB
    
    	u8 spi_state;				 // 0 - reads data from tb (when idle/stabilization/autopilot states are active and tb sends data)
    								  // 1 - writes data (menu) to tb (when USB is NOT connected and idle mode is active) 
    								  // 2 - flashes tb (when USB is connected and flash command is sent)
    								  // 3 - writes data to memory (when idle/stabilization/autopilot states are active, or when tb program is being stored to memory)
    								  // 4 - reads data from memory (when USB is connected and log is being downloaded)
    
    	u16 mem_write_bytenumber;	 // counters: byte within page, page number
    	u16 mem_write_pagenumber;
    	u16 mem_read_bytenumber;
    	u16 mem_read_pagenumber;
    
    	u8  mem_state;				  // memory state
    								  // 0 - memory is idle
    								  // 1 - memory is being written
    								  // 2 - memory is being read
    
    	u8  eeprom_state;			  // eeprom state
    								  // 0 - eeprom is idle
    								  // 1 - eeprom is being written
    								  // 2 - eeprom is being read
    
    	u32 log_samplecount;		  // number of last log sample written to memory
    	u16 log_samplesize;		   // size of log sample in bytes
    
    	u16 out_pwm_curwidth[4];	  // (scales to min..max range)
    
    	u16 in_pwm_curwidth[4];	   // (scales to min..max range)
    
    	u8 gps_connected;			  // 0 - GPS module is not connected;
    								  // 1 - GPS module is connected;
    
    	u8 gps_initialized;			  // 0 - start position is not stored;
    								  // 1 - start position is stored;
    
    	u8 gps_datavalid;			  // 0 - current GPS data is not valid
    									// 1 - current GPS data is valid
    
    	u8 gps_fixmode;					// 0 - "N/A"
    									// 1 - "2D"
    								  // 2 - "3D"
    
    	u8 gps_numsatellites;			// 0 - "N/A"
    									// 1 - "2D"
    								  // 2 - "3D"
    
    	u8 gps_latlon_string[32];
    
    	u8 gps_numvalidstrings;		  // number of valid srings received from GPS, need at least 20 with "2D" or "3D" fixmode to store start position
    
    
    	u8 gps_incoming_string[85];   // string that is being filled with NMEA info over USART
    	u8 gps_current_string[85];	// complete string that is being parsed
    
    	u32 gps_startlat;			  // start position by GPS, in 0.001s of minutes
    	u32 gps_startlon;			  // start position by GPS, in 0.001s of minutes
    	u32 gps_startalt;			  // start altitude by GPS, in meters
    	u8  gps_EW;					  // char "E"/"W" that defines current hemisphere
    	u8  gps_NS;					  // char "N"/"S" that defines current hemisphere
    
    	u32 gps_curlat;			   // current position by GPS, in 0.001s of minutes
    	u32 gps_curlon;			   // current position by GPS, in 0.001s of minutes
    	u16 gps_curalt;			   // current altitude by GPS, in meters
    	u16 gps_curdist;			   // current distance to base by GPS, in meters
    	u16 gps_curspeed;			 // current ground speed by GPS, in kph
    	u16 gps_curazimuth;		   // current ground speed azimuth by GPS, in degrees
    
    	u16 baro_curalt;			  // current altitude by baro, in meters
    	u16 baro_curspeed;			  // current airspeed by baro, in kph
    
    	s16 pyro_x_diff;			  // output difference on x axis pyrometers
    	s16 pyro_y_diff;			  // output difference on y axis pyrometers 
    	s16 pyro_z_diff;			  // output difference on z axis pyrometers 
    	s16 pyro_maxdiff;			  // maximum difference on any axis 
    								  // 	used for normalization/angle calculation when pyros at Z axis are not available
    
    	s8  pyro_roll;				  // roll angle calculated by pyro output
    	s8  pyro_pitch;				  // pitch angle calculated by pyro output  
    
    	u8  compass_sr_state;		  // compass set/reset state
    								  // 0 - set
    								  // 1 - reset
    
    	s16 compass_x;				  // magnet field projection at compass x axis
    	s16 compass_y;				  // magnet field projection at compass y axis
    	s16 compass_z;				  // magnet field projection at compass z axis
    
    	u16 compass_heading;		  // heading calculated by compass output;
    
    	u16 adc_rawdata[8];			  // raw data from ADC after taking sum of 64 samples per channel
    
    	u16 cps;					  // main program cycles per second
    	u16 currentcycle;			  // current main program cycle number (within a second)
    	u16 second;					  // second number
    	
    } ap_state_type;				  // TYPE FOR GLOBALLY VISIBLE VARIABLE THAT HOLDS AUTOPILOT STATE
    
    
    typedef struct
    {
    	u16 pwm_minwidth[4];		  // PPM width (in timer clock cycles) for throttle, aileron, elevator and rudder channels. 
    	u16 pwm_maxwidth[4];		  // All the corrective actions depend on that calibration.
    								  // These are not set by PC application.
    
    	u16 compass_c_ax;			  // compass calibration values. These are not set by PC application
    	u16 compass_c_bx;
    	u16 compass_c_ay;
    	u16 compass_c_by;
    	u16 compass_c_az;
    	u16 compass_c_bz;
    
    	u8  invert_channel[4];		  // 0 - channel is not inverted
    								  // 1 - channel is inverted
    
    	u8  vtailmix;				  // 0 - mix for ailerons/elevator is not used
    								  // 1 - mix for ailerons/elevator is used (models having V-tail, ailevon etc);
    
    	u8  tilt_stab_smult;		  // multiplier characterizing sensitivity of feedback on tilt, while stabilization is active.
    								  // 16 corresponds to normal (1) sensitivity. 
    								  // 16=full span of roll/pitch angles detected by autopilot board produces
    								  // 	full span of output pwm width, thus, maximum roll corresponds to maximum aileron corrective action.
    								  //
    								  // output values beyond allowe ppm range are clamped.
    								  //
    								  // example:
    								  // 	32=1/2 of maximum roll corresponds to maximum corrective action
    								  // example:
    								  // 	8=maximum roll corresponds to 1/2 of maximum corrective action
    								  // This field MUST be set
    
    
    	u16 target_altitude;		  // altitude at which autopilod must bring the plane home (in meters). This field MUST be set
    	u16 min_altitude;			  // minimal and maximal allowed altitude values for autopilot, getting closer to these values
    	u16 max_altitude;			  // 	causes 100% of corrective action (elevator turn, throttle control)
    
    	u16 target_airspeed;		  // air speed at which autopilot must bring the plane home (in kph). 0=target airspped is not set
    	u16 min_airspeed;			  // minimal and maximal allowed airspeed values for autopilot, getting closer to these values
    	u16 max_airspeed;			  // 	causes 100% of corrective action (throttle control)
    
    	u8 target_throttle;			  // trottle at which the autopilot must bring the plane home (in percents). 0=target throttle is not set
    	u8 min_throttle;			  // minimal and maximal allowed throttle values for autopilot, getting closer to these values
    	u8 max_throttle;			  //	causes 100% of corrective action (throttle control)
    	
    								  
    
    	u16 target_distance;		  // distance (meters) to base at which autopilot thinks it brought the plane home and goes off. 
    								  // 0-autpilot does not go off automatically.
    
    
    	u8  max_roll;				  // maximum roll and pitch angles allowed for maneuvering while autopilot is active
    	u8  max_pitch;				  // these fields MUST be set
    
    	u8  ap_rollenable;			// 0 - autopilot does not allow roll when active
    								  // 1 - autopilot does allow roll when active (not applicable for models w/o ailerons)
    
    	u16 ap_alarm_on_voltage;	  // 0 - alarm on battery voltage disabled
    								  // any other value - alarm when battery voltage gets lower than value
    	u16 ap_active_on_voltage;	  // 0 - autopilot goes active on battery voltage disabled
    								  // any other value - autopilot goes active when battery voltage gets lower than value
    
    	u16 ap_alarm_on_mah;		  // 0 - alarm on mAh value disabled
    								  // any other value - alarm when mAh gets higher than value
    	u16 ap_active_on_mah;		  // 0 - autopilot goes active on mAh value disabled
    								  // any other value - autopilot goes active when mAh gets higher than value
    
    	u16 ap_alarm_on_dist;		  // 0 - alarm on distance disabled
    								  // any other value - alarm when distance gets higher than value
    	u16 ap_active_on_dist;		  // 0 - autopilot goes active on distance disabled
    								  // any other value - autopilot goes active when distance gets higher than value
    
    	u16 ap_alarm_on_alt;		  // 0 - alarm on altitude disabled
    								  // any other value - alarm when altitude gets higher than value
    	u16 ap_active_on_alt;		  // 0 - autopilot goes active on altitude disabled
    								  // any other value - autopilot goes active when altitude gets higher than value
    
    	u8  ap_alarm_on_signal;		  // 0 - alarm on RC signal loss disabled
    								  // any other value - alarm when RC signal is lost for more than value seconds
    	u8  ap_active_on_signal;	  // 0 - autopilot goes active on RC signal loss disabled
    								  // any other value - autopilot goes active RC signal is lost for more than value seconds
    
    	s8  compass_inclination;	  // magnet field inclination angle 
    								  // this field MUST be set
    
    }  autopilotboard_eeprom_constants_type; // TYPE FOR GLOBALLY VISIBLE VARIABLE THAT HOLDS EEPROM CONSTANTS

  40. #1397

    Регистрация
    12.05.2006
    Адрес
    Ярославль
    Возраст
    38
    Сообщений
    163
    Записей в дневнике
    2
    Прыжки надписей, в целом, поборол установкой телеметрии в то место, где она и должна находится - т.е. между камерой и видеопередатчиком. Первый раз для проверки работоспособности она была полключена между видеоприёмником и телевизором.

    Однако появился вопрос другого плана. На цифрах и буквах появляются (и пропадают) лишние сегменты - это хорошо видно в прикреплённом видеофайле.
    А может это так и должно быть?

    to smalltim
    изменение номинала резистора от 240 ом до 2 ком заметного эффекта не даёт, да и неактуально уже.

    to drweb
    камера чёрно-белая KPC-S190S (взял для экспериметов) какой там стандарт виеосигнала - хз.
    PAL/SECAM/NTSC разве не станарты цветности?


    DSCN4963.rar

  41. #1398

    Регистрация
    10.07.2006
    Адрес
    Moscow
    Возраст
    39
    Сообщений
    3,554
    Записей в дневнике
    1
    Ух ты, какая интересная фигня. Это точно не мусор в памяти - сломавшись в одном месте, буквы не ломаются в другом. Похоже на то, что иногда нужная нога атмеги не переходит в 0, когда ее просят. Я никогда с таким не встречался, хотя через меня прошел уже не один десяток телеметрий.
    Можно фото платы и системы в сборе?

  42. #1399

    Регистрация
    12.05.2006
    Адрес
    Ярославль
    Возраст
    38
    Сообщений
    163
    Записей в дневнике
    2
    Вот плата телеметрии почти собраная. В реальности она не такая страшная. Делал плёночным фоторезистом, шаблон перерисовал в layoute. Внёс небольшие изменения (кварц в другом корпусе, некоторые дорожки другой формы).
    Нажмите на изображение для увеличения
Название: DSCN4970.JPG
Просмотров: 258
Размер:	109.3 Кб
ID:	209460

    "Система" в сборе. Передатчик на модуле AWM630, на плате ещё бует усилитель и модем.
    Нажмите на изображение для увеличения
Название: DSCN4968.JPG
Просмотров: 201
Размер:	85.4 Кб
ID:	209461

    Ну и приёмник:
    Нажмите на изображение для увеличения
Название: DSCN4971.JPG
Просмотров: 170
Размер:	91.2 Кб
ID:	209463

  43. #1400

    Регистрация
    10.07.2006
    Адрес
    Moscow
    Возраст
    39
    Сообщений
    3,554
    Записей в дневнике
    1
    Хорошая платка получилась.
    А что за диод? Больно жирный что-то. Нужен слаботочный, высокочастотный, с как можно меньшей емкостью перехода.

    Да, и еще. Я понимаю, что вроде как бы всё равно, но я бы подключил плату телеметрии между камерой и передатчиком, а не отдельным видеокабелем к передатчику.

Закрытая тема

Похожие темы

  1. Ответов: 89
    Последнее сообщение: 28.09.2010, 23:24
  2. Smalltim OSD and autopilot (часть 1)
    от kulikof в разделе Полеты по камере, телеметрия
    Ответов: 1999
    Последнее сообщение: 24.08.2010, 21:48
  3. E-Revo 1:16 (часть 1)
    от Вовчик в разделе Минимодели масштаба 1:14 - 1:22
    Ответов: 1999
    Последнее сообщение: 22.07.2010, 12:37

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения