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

smalltim

>А как проц в баиньки отправлять?

asm sleep в бесконечном цикле в главной функции:)

>фьюзы не менял

Понятно. 1 МГц от встроенного генератора. См тему телеметрия на несколько страниц ранее, я прикладывал скриншот с фьюзами.

maloii

Чтото уже более осмысленное стало выводится но не до конца. По логике вещей должна вывестись одна линия, но выводится 2, плюс они очень реагируют на внешние факторы, видео прилагаю. sale-music.com/MPEG0002.AVI

#incl*ude <mega8.h>
#incl*ude <delay.h>


int i=0;

int start_line=200;	// íà÷èíàåì âûâîä ñ ëèíèè íîìåð 100

// ñàì òåñòîâûé ñèìâîë (íàðèñîâàí 0 åäèíè÷êàìè)

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
		if (i>start_line && i<start_line+90)  {
				delay_us(20);
				PORTD.7 = 1;
				PORTD.7 = 1;
				PORTD.7 = 1;
				PORTD.7 = 1;
				PORTD.7 = 0;
		  }
		i++;
}

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
		i=0;
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=Out Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=1 State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x80;
DDRD=0x80;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Any change
// INT1: On
// INT1 Mode: Any change
GICR|=0xC0;
MCUCR=0x05;
GIFR=0xC0;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")
PORTD.7 = 0;
while (1)
{
	  #asm("sleep")
};
}
maloii

Разобрался, диод на выходе тупой был. там простой светодиод я поставил, щас поставил BAS16 и нармуль стало всё. Только лини всёравно 2 😦

maloii

Фух, разобрался, только чтото оптимизация никуда у codeVisoinAVR с C , выводит медленно и печально. smalltim, выложите пожалуйста если можно кусочек кода на ассемблере вывода строк. Я в ассемблере слаб и всю Вашу прошивку не осилил 😦 , так сказать всё от туда выкинуть кроме вывода пару цифорок. Буду очень признателен. 😒

smalltim

Всё оттуда выкинуть кроме пары циферок не получится.

Общая суть действий такова:

  1. Кушаем в регистр А 8-битовое значение, которое есть горизонтальное сечение битовой матрицы символа 8х8
  2. Выводим старший бит регистра в порт D.7
  3. Сдвигаем регистр А влево
  4. Идем на шаг 2.

Так выводится одна восьмая часть одного символа.

>выводит медленно и печально
Так заведите ж проц на 16 МГц.
Залейте мою тестовую прошивку, чтоб по тому, что творится на экране, проверить частоту.

maloii
smalltim:

Так заведите ж проц на 16 МГц.
Залейте мою тестовую прошивку, чтоб по том, что творится на экране, проверить частоту.

По вашим тестовым прошивкам всё откалибровал. Работает изумительно. буковки и цыфорки маленькие и окуратненькие кажет, а как пишу на С в codeVisionAVR так один бит не очень похож на пиксель, а похож на продолговатую линию. Вот тут читаю, ребята так же парятся electronix.ru/forum/index.php?showtopic=41013&st=0.

smalltim

// INT0: On
// INT0 Mode: Any change
// INT1: On
// INT1 Mode: Any change

Стоп, а вот это что такое?
У Вас прерывания возникают и по нарастающему и по спадающему фронту сигнала с лм1881, отсюда и 2 полосы, и каждая строка как две считается. Поставьте, чтоб прерывания только по спадающему фронту возникали.

А неустойчивость относительно собственно содержимого видеосигнала у лм1881 может случаться, камеры-то у всех разные. Поставьте на входе видеосигнала в лм1881 подстроечник, поиграйтесь с его сопротивлением.

>попробовал прошить прошивкой smalltim, но у меня датчики не подключенны к меге, стали белые полоски прыгать по экрану

Не, что-то у Вас было не так. Без датчиков высота-скорость-температура будут нули, но всё остальное должно быть как обычно.
Но я так понимаю, сейчас у Вас мои прошивки нормально заработали.

В общем, правильнее всего, как и ожидалось, писать всё на C со вставками ассемблера в критических местах. У меня лицензионной среды с С нету, так что обхожусь ассемблером…

maloii

Спасибо, буду разбираться с прерываниями, я ведь только учюсь, а настройки мне codeVisionAVR сгенерила

smalltim

Про пирометры: я и раньше скептически к ним относился - а ну как поведет себя самолетик если будет пролетать мимо деревьев и домов? Крениться? 😃

А добила меня мысль о том, что в один из пирометров может заглянуть солнышко. Человек, который эту систему пользовал, подтверждает: в таком случае начинаются опаньки.

Prikupets
smalltim:

Про пирометры: я и раньше скептически к ним относился - а ну как поведет себя самолетик если будет пролетать мимо деревьев и домов? Крениться? 😃

Самолет можно будет сбивать зеркальцем, как жители Сиракуз римские корабли.

Тут где-то обсуждается тема про цифровые магнитные компасы. Что если поставить трехосевой датчик, откалибровать его перед запуском, и он будет выяснять положение самолета относительно вектора Магнитного Поля Земли в данный момент полета. А от вектора МПЗ через калибровочные углы переходим к положению относительно горизонта. Ну и выравниваем, чтобы он был горизонтален. А азимутальную составляющую результатов компаса можно выводить на OSD 😃

Vad64
Prikupets:

Что если поставить трехосевой датчик, откалибровать его перед запуском, и он будет выяснять положение самолета относительно вектора Магнитного Поля Земли в данный момент полета.

К сожалению, не получится однозначно определять положение. Представим ситуацию, когда одна ось датчика параллельна вектору магниного поля. Две другие оси будут выдавать нули. При этом получается неопределенность - можно вращать модель вокруг первой оси на 360 градусов, а выходы датчиков будут одинаковыми.
Я даже пытался испытывать такую систему, пока не напоролся на эти очевидные грабли.

Что касается пирометров. Если на них стоят ИК фильтры на 8-14 мкм, то Солнца они не увидят.

ReGet

maloii, в компиляторе Си нужно поставить оптимизацию по скорости (в cvAVR по умолчанию стоит оптимизация по размеру).
Project -> configure -> c compiler -> optimize for: speed

после этого вывод станет в 2 раза быстрее

maloii:

Вот тут читаю, ребята так же парятся electronix.ru/forum/index.php?showtopic=41013&st=0.

Это как раз я там и парился 😃 Почитайте ту тему до конца, там все ответы есть, я дошел до вывода нормальных циферок 😇

maloii
ReGet:

maloii, в компиляторе Си нужно поставить оптимизацию по скорости (в cvAVR по умолчанию стоит оптимизация по размеру).
Project -> configure -> c compiler -> optimize for: speed

после этого вывод станет в 2 раза быстрее

Это как раз я там и парился 😃 Почитайте ту тему до конца, там все ответы есть, я дошел до вывода нормальных циферок 😇

А можеш готовую прошивку дать посмотреть?

maloii

У меня просто ещё проблема с настройками портов, с контроллером неделю ещё не работаю, много вопросов глупых 😃

ReGet
maloii:

А можеш готовую прошивку дать посмотреть?

смотри личные сообщения

maloii
ReGet:

смотри личные сообщения

Спасибо за прошивку! Разобрался, в личку можно не отвечать. Но одно Но, символы большие, если взять к примеру прошивку от smalltim то всё маленькое выходит, а в данном варианте большое 😃 . Хотя может я чтото неправильно настроил в компиляторе, поделитесь 😃

SGordon

Наверно это обсуждалось в начале, но все-таки, чем можно заменить датчик высоты MPX4115 . На сайте пишут Not Recommended for New Design … ( меня это не смущает в плане повторения работающей конструкции ) Но хотелось бы из новых … Вроде бы у MPXA6115A6t1 похожие
характеристики? Или что то еще порекомендуете?

smalltim
SGordon:

Наверно это обсуждалось в начале, но все-таки, чем можно заменить датчик высоты MPX4115 . На сайте пишут Not Recommended for New Design … ( меня это не смущает в плане повторения работающей конструкции ) Но хотелось бы из новых … Вроде бы у MPXA6115A6t1 похожие
характеристики? Или что то еще порекомендуете?

Да, насколько я понимаю, 6115 должен прекрасно заменять 4115 😃

foxfly
smalltim:

Да, насколько я понимаю, 6115 должен прекрасно заменять 4115 😃

Правильно! В марке- “115” означает предел давления.
Все остальное- тип корпуса и прочую цоколевку .

ReGet
maloii:

Спасибо за прошивку! Разобрался, в личку можно не отвечать. Но одно Но, символы большие, если взять к примеру прошивку от smalltim то всё маленькое выходит, а в данном варианте большое 😃 . Хотя может я чтото неправильно настроил в компиляторе, поделитесь 😃

Эхх, а я уже почти ответил 😃

Насколько большие? Я делал вот такие electronix.ru/forum/index.php?act=Attach&type=post…
Можете нарисовать буквы любого размера, изменяя шрифт в начале кода

maloii
ReGet:

Эхх, а я уже почти ответил 😃

Насколько большие? Я делал вот такие electronix.ru/forum/index.php?act=Attach&type=post…
Можете нарисовать буквы любого размера, изменяя шрифт в начале кода

Да, у меня такие же получаются, просто по меньще их не сделать. Из-за длины так сказать пикселя, то есть длительность одного сигнала велика получается. В прошивке от smalltim это длина в 2 раза меньще и поэтому он смог сделать буковки меньше. В прошивке smalltim я почти разобрался, он делает всё тоже самое, но из за того что там ассемблер, всё поэкономичней получается, чего в си компилятор наворотил фиг знает 😁 . Ща поразбераюсь, хочу всётаки в Си заставить всё как следует работать, а то не дело на тёте асе писать, гиморно это очень