ПО измерителя длительности сигнала

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
Uklunok
Вымогатель припоя
Сообщения: 561
Зарегистрирован: Сб апр 03, 2010 10:12:41
Откуда: Хабаровск

ПО измерителя длительности сигнала

Сообщение Uklunok »

:shock: Ребята выручайте! Тут задание на лабораторную работу... Нужно измерить длительность прямоугольного сигнала (импульса точнее). Интервал (длина импульса) от 10мкс до 1с., точность 1мкс.
Нужно так: подаём с генератора последовательность прямоугольных импульсов на одну из ножек порта ввода/вывода. Программа всё это дело обрабатывает и выдаёт данные по UART в COM порт ПК. И на мониторе ПК должна появиться длина сигнала (число), для этого придётся как то написать программу на Си. Вот :o
По идее придётся мерить не весь сигнал с фронтами, а достаточно только уровень померить, думаю положительного достаточно.
Микроконтроллер ATMEGA16, стенд STK500.
Ну за 2 недели мне вручную её точно не сообразить. :? Поэтому и хочу узнать, ведь должно быть что-то подобное, в интернете, кто то же обязательно писал такую вещь. Одним словом с помощью своей головы я не справлюсь и требую Вашего совета))
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18657
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: ПО измерителя длительности сигнала

Сообщение ARV »

Uklunok писал(а):требую Вашего совета
жестко! сразу, испугавшись и дрожа, подсказываю:
если с генератора импульсы будут идти не очень часто, с промежутками, достаточными для передачи по UART данных, то задача не стоит выеденного яйца.
со стороны компа просто терминал запускаете, из МК передаете готовые числа.
в МК запускаете TIMER1 на счет с частотой 1 Мгц, разрешаете захват и прерывание по захвату. по переполнению таймера так же разрешаете прерывание, в котором инкрементируете 16-битный программый счетчик. по прерыванию от захвата у вас в регистре ICR1 будет младшее слово, а в программном счетчике - старшее слово интервала между захватами. если захват настроен на фронт - получите период импульсов, если на фронт и спад - длительность единицы. т.е. вам надо будет в прерывании по захвату из двух 16-битных чисел слепить одно 32-битное, и выдать его в основной цикл на обработку. обработка будет заключаться в том, что надо вычислять разность между ТЕКУЩИМ числом и его ПРЕДЫДУЩИМ значением - это и будет длительность импульса в микросекундах. останется только выдать это число по UART-у.

теперь вы и сами должны справиться за неделю :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
Uklunok
Вымогатель припоя
Сообщения: 561
Зарегистрирован: Сб апр 03, 2010 10:12:41
Откуда: Хабаровск

Re: ПО измерителя длительности сигнала

Сообщение Uklunok »

А эта штука будет работать с кнопкой? Пока кнопка не нажата идёт положительный сигнал, и программа должна считать длительность. Только длина высокого уровня должна быть не длиннее 1с. Хе, тогда придётся постоянно держать кнопку нажатой и иногда отпускать на время не длиннее 1секунды. Можно тогда сделать кнопку разрешения принятия сигнала. Пока кнопка резрешения нажата - сигнал можно принять и обработать. Классно я придумал)). Пипец короче.
А можете посоветовать какой-нибудь софт для принятия пакетов с COM порта?? Поидее моё число где-то должно показаться на экране...
И мне что-то не верится что подобным проектом никто не занимался. Должно же где то быть...
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: ПО измерителя длительности сигнала

Сообщение Meteor »

HyperTerminal может принимать, еще есть Putty, LabView, MATLAB.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: ПО измерителя длительности сигнала

Сообщение pyzhman »

При точности 1 мкс число будет 3-х байтным. Увидели в терминале их и что дальше? Абра-кадабра. Так понимаю, нужен полноценный приемник, который преобразует принятые байты в десятичное число и выведет его на экран. Аршинными буквами. мУчите Delphi.
Uklunok писал(а):А эта штука будет работать с кнопкой?
Можно даже сделать так, что приниматся будет из терминала и выдаватся на лпку МК. С нужной длительностью. И с кнопкой. :)
Docendo discimus
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18657
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: ПО измерителя длительности сигнала

Сообщение ARV »

pyzh_man писал(а):При точности 1 мкс число будет 3-х байтным. Увидели в терминале их и что дальше? Абра-кадабра. Так понимаю, нужен полноценный приемник, который преобразует принятые байты в десятичное число и выведет его на экран. Аршинными буквами. мУчите Delphi.
ай-ай, как не стыдно... нельзя вводить в заблуждение, делфами всякими стращать народ...
обычный printf("%lu мкс\n", dlitelnost); выведет в терминал вполне читабельный текст без всяких аршинных букв.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: ПО измерителя длительности сигнала

Сообщение pyzhman »

2ARV: :beer:
Однако вины за собой не вижу. Не солгал и в заблуждение не ввел. Все по-честному.
Docendo discimus
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3384
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: ПО измерителя длительности сигнала

Сообщение Мурик »

Uklunok писал(а):А можете посоветовать какой-нибудь софт для принятия пакетов с COM порта?? Поидее моё число где-то должно показаться на экране...
А если самому написать?
Это не сложно.
Зато будет оригинально, а не тупо терминал какой-то.
Можно будет даже на графиках изображать данные.
Аватара пользователя
Uklunok
Вымогатель припоя
Сообщения: 561
Зарегистрирован: Сб апр 03, 2010 10:12:41
Откуда: Хабаровск

Re: ПО измерителя длительности сигнала

Сообщение Uklunok »

Мурик писал(а):А если самому написать?
Не знаю получится ли... Программно никогда не связывал внешнее устройство с ПК. Драйвер надеюсь не придётся писать?
В принципе с борландом С++ 6.0 знаком на уровне "любителя") можно попробывать.
Аватара пользователя
Uklunok
Вымогатель припоя
Сообщения: 561
Зарегистрирован: Сб апр 03, 2010 10:12:41
Откуда: Хабаровск

Re: ПО измерителя длительности сигнала

Сообщение Uklunok »

1). Нашёл такие строки про ОБЩИЙ РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ - GIFR:
Бит 7 - INTF1: Флаг внешнего прерывания 1: При возникновении на выводе INT1 события, вызывающего прерывание, INTF1 устанавливается в "1".
Так это мне придётся посылать сигнал не на вывод какого-нибудь порта, а на вывод INT1???

2). И в случае внешнего прерывания, перед переходом на процедуру обработки прерывания, данные в регистрах и т.п. автоматически сохранится в стеке или нужно использовать PUSH,POP ??

3). Ещё такое: Внешние прерывания могут возникать по спадающему или нарастающему фронту, а также по низкому уровню.
А как же высокий уровень??? не в счёт что-ли? А если мне нужен и низкий и высокий уровень?
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3384
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: ПО измерителя длительности сигнала

Сообщение Мурик »

Uklunok писал(а): Не знаю получится ли....
С COM портом не сложно работать, типа так

Код: Выделить всё

; Открыли порт.
If OpenSerialPort(0,"COM1",9600,#PB_SerialPort_NoParity,8,1,#PB_SerialPort_NoHandshake,256,256)
  InBytes = AvailableSerialPortInput(0)     ; Сколько байт поступило.
  If InBytes>0                              ; Поступили новые байты
    *memory = AllocateMemory(InBytes)       ; Память под данные.
    ReadSerialPortData(0, *memory, InBytes) ; Прочитали данные из порта.
    
    ; Тут обрабатываем данные
    
    FreeMemory(*memory) ; Отвободили папмять.
  EndIf
EndIf
Аватара пользователя
Uklunok
Вымогатель припоя
Сообщения: 561
Зарегистрирован: Сб апр 03, 2010 10:12:41
Откуда: Хабаровск

Re: ПО измерителя длительности сигнала

Сообщение Uklunok »

Хорошо. Но вот только в COM порт придут не только данные которые нужны мне (длина сигнала). Там будут скорее всего находиться ещё данные для конфигурации, опроса стенда STK500 и тд., не разбирался ещё. И как то нужно отделить нужную мне информацию от "мусора". :wink:
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3384
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: ПО измерителя длительности сигнала

Сообщение Мурик »

Uklunok писал(а):И как то нужно отделить нужную мне информацию от "мусора".
Для этого нужно описание протокола обмена данными.
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: ПО измерителя длительности сигнала

Сообщение Meteor »

Много размышлений - проще надо быть.
Просмотрите в Putty, что отсылается, подумайте и напишите в матлабе mфайл - и с броами не надо разбираться(много проще чем в билдере или делфи)
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Аватара пользователя
Uklunok
Вымогатель припоя
Сообщения: 561
Зарегистрирован: Сб апр 03, 2010 10:12:41
Откуда: Хабаровск

Re: ПО измерителя длительности сигнала

Сообщение Uklunok »

Запустил PUTTY. Открыл COM порт - появилась консоль. Но беда в том, что ПК стенд STK500 больше не видел. Т.е. заливаю прогу через AVR, ну он и говорит типа COM порт disabled. Пробовал все порты - такая же штука.
Если же сначала залить программу, а потом через PUTTY открыть порт, то он просто не открывается. Конфликт у них однако.
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Re: ПО измерителя длительности сигнала

Сообщение coredumped »

Зачем изобретать колесо? В аттаче замечательная либа для работы с UART - с использованием прерываний, FIFO.
Берите, и не мучайтесь впредь с выводом на консоль. В качестве терминальной программки рекомендую TeraTerm http://ttssh2.sourceforge.jp/

Вот примерчик использования (WinAVR).

Код: Выделить всё

#include <ctype.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <util/delay.h>

#include "uart.h"

#ifndef F_CPU
#define F_CPU 11059200UL  //cpu freqency
#endif

#define UART_BAUD_RATE 	115200


static int uart_putchar(char c, FILE *stream)
{
	if (c == '\n') uart_putc('\r');
	uart_putc(c);
	return 0;
}

FILE uartf = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);

ISR(TIMER0_OVF_vect)
{
}

int main(void)
{
	uint32_t t;

	
       uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); 
	sei();

	stdout  = &uartf; // route stdout to UART

	t=2000;

	printf("T = %lu mS\n", t);
	for(;;);
	return 0;
}
Проблема вывода уже решена, осталось померять длительность импульса, сложить в переменную t и все :) Тут Вы уж сами, иначе ничему не научитесь.
Вложения
test1.zip
(7.83 КБ) 142 скачивания
Все будет только лучше, в крайнем случае - хуже.
Аватара пользователя
Uklunok
Вымогатель припоя
Сообщения: 561
Зарегистрирован: Сб апр 03, 2010 10:12:41
Откуда: Хабаровск

Re: ПО измерителя длительности сигнала

Сообщение Uklunok »

Это конечно хорошо. Но вот WINAVR... А не ассемблере нету исходника??? Это прога в CodeVision будет работать?
Аватара пользователя
Uklunok
Вымогатель припоя
Сообщения: 561
Зарегистрирован: Сб апр 03, 2010 10:12:41
Откуда: Хабаровск

Re: ПО измерителя длительности сигнала

Сообщение Uklunok »

А почему Вы переменной t присваиваете 2000?

Ладно спасибо всем за помощь. Прогу для работы ПК с COM портом вроде нашёл. Обработчик события и выдачу по УАРТ сам попробую написать. Что получится, покажу
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Re: ПО измерителя длительности сигнала

Сообщение coredumped »

Простите, я нигде не увидел, что пожка должна быть на ASM :o
Uklunok писал(а):А почему Вы переменной t присваиваете 2000?
Это просто пример использования библиотечки. Есть кусочек на asm, тоже с буферизацией вывода, если "упретесь" - пишите, поделюсь.
Все будет только лучше, в крайнем случае - хуже.
Аватара пользователя
Uklunok
Вымогатель припоя
Сообщения: 561
Зарегистрирован: Сб апр 03, 2010 10:12:41
Откуда: Хабаровск

Re: ПО измерителя длительности сигнала

Сообщение Uklunok »

Ок, давайте, пригодится
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»