Телеметрия (часть 1)
>А как проц в баиньки отправлять?
asm sleep в бесконечном цикле в главной функции:)
>фьюзы не менял
Понятно. 1 МГц от встроенного генератора. См тему телеметрия на несколько страниц ранее, я прикладывал скриншот с фьюзами.
Чтото уже более осмысленное стало выводится но не до конца. По логике вещей должна вывестись одна линия, но выводится 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")
};
}
Разобрался, диод на выходе тупой был. там простой светодиод я поставил, щас поставил BAS16 и нармуль стало всё. Только лини всёравно 2 😦
Фух, разобрался, только чтото оптимизация никуда у codeVisoinAVR с C , выводит медленно и печально. smalltim, выложите пожалуйста если можно кусочек кода на ассемблере вывода строк. Я в ассемблере слаб и всю Вашу прошивку не осилил 😦 , так сказать всё от туда выкинуть кроме вывода пару цифорок. Буду очень признателен. 😒
Всё оттуда выкинуть кроме пары циферок не получится.
Общая суть действий такова:
- Кушаем в регистр А 8-битовое значение, которое есть горизонтальное сечение битовой матрицы символа 8х8
- Выводим старший бит регистра в порт D.7
- Сдвигаем регистр А влево
- Идем на шаг 2.
Так выводится одна восьмая часть одного символа.
>выводит медленно и печально
Так заведите ж проц на 16 МГц.
Залейте мою тестовую прошивку, чтоб по тому, что творится на экране, проверить частоту.
Так заведите ж проц на 16 МГц.
Залейте мою тестовую прошивку, чтоб по том, что творится на экране, проверить частоту.
По вашим тестовым прошивкам всё откалибровал. Работает изумительно. буковки и цыфорки маленькие и окуратненькие кажет, а как пишу на С в codeVisionAVR так один бит не очень похож на пиксель, а похож на продолговатую линию. Вот тут читаю, ребята так же парятся electronix.ru/forum/index.php?showtopic=41013&st=0.
// INT0: On
// INT0 Mode: Any change
// INT1: On
// INT1 Mode: Any change
Стоп, а вот это что такое?
У Вас прерывания возникают и по нарастающему и по спадающему фронту сигнала с лм1881, отсюда и 2 полосы, и каждая строка как две считается. Поставьте, чтоб прерывания только по спадающему фронту возникали.
А неустойчивость относительно собственно содержимого видеосигнала у лм1881 может случаться, камеры-то у всех разные. Поставьте на входе видеосигнала в лм1881 подстроечник, поиграйтесь с его сопротивлением.
>попробовал прошить прошивкой smalltim, но у меня датчики не подключенны к меге, стали белые полоски прыгать по экрану
Не, что-то у Вас было не так. Без датчиков высота-скорость-температура будут нули, но всё остальное должно быть как обычно.
Но я так понимаю, сейчас у Вас мои прошивки нормально заработали.
В общем, правильнее всего, как и ожидалось, писать всё на C со вставками ассемблера в критических местах. У меня лицензионной среды с С нету, так что обхожусь ассемблером…
Спасибо, буду разбираться с прерываниями, я ведь только учюсь, а настройки мне codeVisionAVR сгенерила
Про пирометры: я и раньше скептически к ним относился - а ну как поведет себя самолетик если будет пролетать мимо деревьев и домов? Крениться? 😃
А добила меня мысль о том, что в один из пирометров может заглянуть солнышко. Человек, который эту систему пользовал, подтверждает: в таком случае начинаются опаньки.
Про пирометры: я и раньше скептически к ним относился - а ну как поведет себя самолетик если будет пролетать мимо деревьев и домов? Крениться? 😃
Самолет можно будет сбивать зеркальцем, как жители Сиракуз римские корабли.
Тут где-то обсуждается тема про цифровые магнитные компасы. Что если поставить трехосевой датчик, откалибровать его перед запуском, и он будет выяснять положение самолета относительно вектора Магнитного Поля Земли в данный момент полета. А от вектора МПЗ через калибровочные углы переходим к положению относительно горизонта. Ну и выравниваем, чтобы он был горизонтален. А азимутальную составляющую результатов компаса можно выводить на OSD 😃
Что если поставить трехосевой датчик, откалибровать его перед запуском, и он будет выяснять положение самолета относительно вектора Магнитного Поля Земли в данный момент полета.
К сожалению, не получится однозначно определять положение. Представим ситуацию, когда одна ось датчика параллельна вектору магниного поля. Две другие оси будут выдавать нули. При этом получается неопределенность - можно вращать модель вокруг первой оси на 360 градусов, а выходы датчиков будут одинаковыми.
Я даже пытался испытывать такую систему, пока не напоролся на эти очевидные грабли.
Что касается пирометров. Если на них стоят ИК фильтры на 8-14 мкм, то Солнца они не увидят.
maloii, в компиляторе Си нужно поставить оптимизацию по скорости (в cvAVR по умолчанию стоит оптимизация по размеру).
Project -> configure -> c compiler -> optimize for: speed
после этого вывод станет в 2 раза быстрее
Вот тут читаю, ребята так же парятся electronix.ru/forum/index.php?showtopic=41013&st=0.
Это как раз я там и парился 😃 Почитайте ту тему до конца, там все ответы есть, я дошел до вывода нормальных циферок 😇
maloii, в компиляторе Си нужно поставить оптимизацию по скорости (в cvAVR по умолчанию стоит оптимизация по размеру).
Project -> configure -> c compiler -> optimize for: speedпосле этого вывод станет в 2 раза быстрее
Это как раз я там и парился 😃 Почитайте ту тему до конца, там все ответы есть, я дошел до вывода нормальных циферок 😇
А можеш готовую прошивку дать посмотреть?
У меня просто ещё проблема с настройками портов, с контроллером неделю ещё не работаю, много вопросов глупых 😃
А можеш готовую прошивку дать посмотреть?
смотри личные сообщения
смотри личные сообщения
Спасибо за прошивку! Разобрался, в личку можно не отвечать. Но одно Но, символы большие, если взять к примеру прошивку от smalltim то всё маленькое выходит, а в данном варианте большое 😃 . Хотя может я чтото неправильно настроил в компиляторе, поделитесь 😃
Наверно это обсуждалось в начале, но все-таки, чем можно заменить датчик высоты MPX4115 . На сайте пишут Not Recommended for New Design … ( меня это не смущает в плане повторения работающей конструкции ) Но хотелось бы из новых … Вроде бы у MPXA6115A6t1 похожие
характеристики? Или что то еще порекомендуете?
Наверно это обсуждалось в начале, но все-таки, чем можно заменить датчик высоты MPX4115 . На сайте пишут Not Recommended for New Design … ( меня это не смущает в плане повторения работающей конструкции ) Но хотелось бы из новых … Вроде бы у MPXA6115A6t1 похожие
характеристики? Или что то еще порекомендуете?
Да, насколько я понимаю, 6115 должен прекрасно заменять 4115 😃
Да, насколько я понимаю, 6115 должен прекрасно заменять 4115 😃
Правильно! В марке- “115” означает предел давления.
Все остальное- тип корпуса и прочую цоколевку .
Спасибо за прошивку! Разобрался, в личку можно не отвечать. Но одно Но, символы большие, если взять к примеру прошивку от smalltim то всё маленькое выходит, а в данном варианте большое 😃 . Хотя может я чтото неправильно настроил в компиляторе, поделитесь 😃
Эхх, а я уже почти ответил 😃
Насколько большие? Я делал вот такие electronix.ru/forum/index.php?act=Attach&type=post…
Можете нарисовать буквы любого размера, изменяя шрифт в начале кода
Эхх, а я уже почти ответил 😃
Насколько большие? Я делал вот такие electronix.ru/forum/index.php?act=Attach&type=post…
Можете нарисовать буквы любого размера, изменяя шрифт в начале кода
Да, у меня такие же получаются, просто по меньще их не сделать. Из-за длины так сказать пикселя, то есть длительность одного сигнала велика получается. В прошивке от smalltim это длина в 2 раза меньще и поэтому он смог сделать буковки меньше. В прошивке smalltim я почти разобрался, он делает всё тоже самое, но из за того что там ассемблер, всё поэкономичней получается, чего в си компилятор наворотил фиг знает 😁 . Ща поразбераюсь, хочу всётаки в Си заставить всё как следует работать, а то не дело на тёте асе писать, гиморно это очень