Здравствуйте, Уважаемые КОТЫ! Собираю свой простенький осциллограф , схема скопирована со знаменитого хамелеона D2 viewtopic.php?f=25&t=19878 Программа написана с ноля на баском авр в принципе многое сделано но отображение сигнала только по уровню синхронизации(уровень синхронизации устанавливается пользователем как в хамелеоне)-делается 1024 замера,потом поиск точки синхронизации Спойлеркуски программы чтоб было понятнее osc(1024)-буфер,сюда складываем результаты замера Usinc-точка синхронизации,по умолчанию= 120 ***********************замер за 40 тактов,есть еще за 3,6,12,30,60,120,300,600,1200 и 3000 тактов**************** read40: while PINC > Usinc x = x + 1 if x > 1000 then goto label wend label: $asm push xl '- сохраняем стек push xh ldi xh, 1 '- ставим указатель на начало данных ldi xl, 0 Loop13: 'если не равно 0 то прыгаем назад - 2 такта, иначе 1 такт '40-7=33 такта ldi r16,11 ;счетчик задержки 1 wait11: dec r16 ;1 brne wait11 ; 2=назад 1=вниз nop IN R24, PINC 'считываем порт - 1 такт ST X+, R24 ' пишем в озу и увеличиваем указатель на 1 - 2 такта CPI XH, $05 ' проверяем если старший регистр больше конца массива то прыгаем на выход иначе - 1 такт BRLO LOOP13 'перейти на начало цикла - 2 такта pop R24 pop R25 pop XH pop XL $end Asm ****************поиск точки синхронизации**************** for x = 1 to 700 if osc(x) < Usinc and z = 0 then y = 1 -ищем точку ниже уровня синхронизации,как нашли if osc(x) => Usinc and y = 1 then -ищем точку выше или равно уровню синхронизации z = 1 sinhr = x - 2 -эта и есть точка=уровню синхронизации goto label1 end if next x sinhr =1 -если не нашли точку синхр то просто выводим с 1 ячейки буфеа label1: ***************************стираем старый график и рисуем новый*************** for x = 1 to 239 'стираем крайние правые столбики Lcd_set_pixel 319 , x , Black Lcd_set_pixel 318 , x , Black next x for x = 1 to x_max 'ILI9341=319 w = x - 1 ' буфер начинается с 1 а установка позиции с 0,делаем смещение на 1 if osc_clear(x) < osc_clear(x + 1) then 'так стирает быстрее чем чей-то там алгоритм for y = osc_clear(x) to osc_clear(x + 1) Lcd_set_pixel w , y , Black next y else for y = osc_clear(x + 1) to osc_clear(x ) Lcd_set_pixel w , y , Black next y end if 'рисуем новый гафик a = x + sinhr if osc(a ) < osc(a + 1 ) then for y = osc(a) to osc(a + 1) Lcd_set_pixel w , y , red next y else for y = osc(a + 1) to osc(a ) Lcd_set_pixel w , y , red next y end if next x for x = 1 to x_max 'заполняем буфер для того чтоб при след отрисовке экрана стирать график a = x + sinhr osc_clear(x) = osc(a) next x *********************далее накладываем сетку и т д**************** а каков принцип однократный запуск развертки по фронту или по спаду? например запись сигнала с пульта?смотрел исходники хамелеона но там ничего не понял
Добавлено after 33 minutes 14 seconds: пока вот что получилось
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 45
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения