- •Курсовая работа Система сбора данных на микроконтроллере aTtiny13a
- •Введение
- •Глава 1. Автономная система сбора данных
- •1.1. Роль компьютера
- •1.2. Роль интерфейсных устройств
- •1.3. Роль программного обеспечения
- •Глава 2. Ацп микроконтроллера aTmega8l
- •2.1. Основные характеристики
- •2.2. Принцип работы
- •Глава 3. Спектральный анализ сигналов
- •3.1. Быстрое преобразование Фурье
- •3.2. Обобщение метода бпф
- •3.3. Метод сортировки
- •Глава 4. Реализация системы сбора данных
- •4.1. Плата сбора данных
- •4.2. Схема сопряжения микроконтроллер-компьютер
- •4.3. Программное обеспечение персонального компьютера
- •Заключение
- •Литература
- •Приложение 1.
Литература
Ан П. Сопряжение ПК с внешними устройствами: Пер. с англ. – М.: ДМК Пресс, 2001. – 320 с.
Баранов В.Н. Применение микроконтроллеров AVR: схемы, алгоритмы, программы, 2-е изд. испр. – М.: Издательский дом «Додэка-XXI», 2006. – 288 с.
Белов А.В. Самоучитель разработчика устройств на микроконтроллерах AVR. – СПб.: Наука и Техника, 2008. – 544 с.
Гёлль П. Как превратить персональный компьютер в измерительный комплекс: Пер. с фр. – 2-е изд., испр. – М.: ДМК Пресс, 2001. – 144 с.
Гук М. Аппаратные интерфейсы ПК. Энциклопедия. – СПб.: Питер, 2002. – 528 с.
Евстифеев А.В. Микроконтроллеры AVR семейства Mega фирмы. Руководство пользователя. – М.: Издательский дом «Додэка-XXI», 2007. – 592 с.
Кузьменко В.Г. Visual Basic 6. Самоучитель. – 2-е изд. – М.: ООО «Бином-Пресс», 2003. – 432 с.
Лапин А.А. Интерфейсы. Выбор и реализация. – М.: Техносфера, 2005. – 168 с.
Мортон Дж. Микроконтроллеры AVR. Вводный курс. /Пер. с англ. – М.: Издательский дом «Додэка-XXI», 2006. – 272 с.
Ревич Ю.В. Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера. – СПб.: БВХ-Петербург, 2008. – 384 с.
Трамперт В. AVR-RISC микроконтроллеры. /Пер. с нем. – К.: «МК-Пресс», 2006. – 464 с.
Хартов В.Я. Микроконтроллеры AVR. Практикум для начинающих. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2007. – 240 с.
Устройство микроконтроллеров AVR [Электронный ресурс] - Режим доступа: http://www.myrobot.ru/stepbystep/mc_architecture.php - Загл. с экрана.
Журнал мир компьютерной автоматизации - Типовые аппаратные решения построения систем сбора данных [Электронный ресурс] - Режим доступа: http://www.mka.ru/?p=40005 - Загл. с экрана.
Журнал мир компьютерной автоматизации - Концепция построения виртуальной измерительной лаборатории [Электронный ресурс] - Режим доступа: http://www.mka.ru/?p=40001 - Загл. с экрана.
Юкио Сато. Без паники! Цифровая обработка сигналов. /Пер. с яп. Селиной Т.Г. М.: Додэка-XXI, 2010. – 176 с.
Приложение 1.
Листинг управляющей программы персонального компьютера.
'Объявление глобальных переменных
Dim clearX(128) As Integer 'входные данные из буфера
Dim X(128) As Integer 'массив действительной части коэффициентов Фурье
Dim Y(128) As Integer 'массив мнимой части коэффициентов Фурье
Dim butX(129) As Double 'массив данных после двоично-инверсной перестановки
Dim InBuff As Variant 'переменная возвращает байты из буфера порта
Dim port As String 'переменная указатель буфера порта
'Процедура для нажатия кнопки «Читать буфер»
Private Sub Command1_Click()
Dim i As Integer
Command1.Enabled = False
Text3.Text = ""
If MSComm1.InBufferCount = 0 Then
Text3.Text = "empty"
Exit Sub
End If
For i = 0 To 127
butX(i) = 0
X(i)=0
Y(i)=0
clearX(i)=0
Next i
InBuff = MSComm1.Input
For i = 0 To 127
clearX(i) = CInt(InBuff(i)) - 128
Text3.Text = Text3.Text & clearX(i) & " "
Next i
Text3.Text = Text3.Text & Chr(13) & Chr(10)
Text3.Text = Text3.Text & "------------------------------" & Chr(13) & Chr(10)
For i = 0 To 127
butX(i) = CInt(InBuff(i + 128)) - 128
Text3.Text = Text3.Text & butX(i) & " "
Next i
Text3.Text = Text3.Text & Chr(13) & Chr(10)
Text3.Text = Text3.Text & "------------------------------" & Chr(13) & Chr(10)
Text1.Text = MSComm1.InBufferCount
Picture1.Cls
Picture1.Scale (0, 5.5)-(13.19, -5.5)
Picture2.Cls
Call Makelines
Picture1.DrawWidth = 2
Picture1.DrawStyle = 0
Picture1.ForeColor = &HFF&
Picture1.PSet (0, (clearX(0) * 5 / 256) + 2.5)
For i = 1 To 127
Picture1.Line -(i * 13.19 / 127, (clearX(i) * 5 / 256) + 2.5)
Next i
Call FFT
End Sub
'Процедура для кнопки «Выбрать порт»
Private Sub Command4_Click()
On Error GoTo 10
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
port = InputBox("номер порта")
MSComm1.CommPort = CByte(port)
MSComm1.PortOpen = True
Shape1.FillColor = &HC000&
MsgBox ("Port number " & MSComm1.CommPort & " opened correctly")
Text4.Text = MSComm1.CommPort
Text1.Text = MSComm1.InBufferCount
Text2.Text = MSComm1.InBufferSize
Label3.Caption = "On"
Exit Sub
10
MsgBox ("Bad port " & port)
Text4.Text = "Bad port: " & port
Shape1.FillColor = &HFF
Text1.Text = "-"
Text2.Text = "-"
Label3.Caption = "Off"
End Sub
'Процедура загрузки основного окна
Private Sub Form_Load()
Picture1.Scale (0, 5.5)-(13.19, -5.5)
Picture2.Scale (0, 1)-(4807.5, -20)
Command1.Enabled = False
On Error GoTo 15
port = InputBox("номер порта")
MSComm1.CommPort = CByte(port)
MSComm1.PortOpen = True
Text1.Text = MSComm1.InBufferCount
Text2.Text = MSComm1.InBufferSize
Text4.Text = MSComm1.CommPort
Label3.Caption = "On"
Shape1.FillColor = &HC000&
MsgBox ("Port number " & MSComm1.CommPort & " opened correctly")
Exit Sub
15
MsgBox ("Bad port or NULL:" & port)
Text4.Text = "Bad port: " & port
Shape1.FillColor = &HFF
Text1.Text = "-"
Text2.Text = "-"
End Sub
'Процедура закрытия основного окна
Private Sub Form_Unload(Cancel As Integer)
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
Unload Me
End Sub
'Процедура обработки ошибок и событий элемента MS Comm Control
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
' Ошибки
Case comEventBreak
Case comEventCDTO
Case comEventCTSTO
Case comEventDSRTO
Case comEventFrame
Case comEventOverrun
Case comEventRxOver
Case comEventRxParity
Case comEventTxFull
Case comEventDCB
' События
Case comEvCD
Case comEvCTS
Case comEvDSR
Case comEvRing
Case comEvReceive
Text1.Text = MSComm1.InBufferCount
Text2.Text = MSComm1.InBufferSize
Command1.Enabled = True
Case comEvSend
Case comEvEOF
End Select
End Sub
'Процедура получения координаты курсора в области осциллограммы
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Text5.Text = X
Text6.Text = Y
End Sub
'Процедура рисования координатных осей для области осциллограммы
Public Sub Makelines()
Dim i As Double
Picture1.DrawWidth = 1
Picture1.ForeColor = &H0
Picture1.DrawStyle = 0
'по оси Y
For i = -5 To 5
Picture1.Line (0, i)-(13.19, i)
Next i
'по оси Х
For i = 1 To 13.19
Picture1.Line (i, 5.5)-(i, -5.5)
Next i
Picture1.DrawStyle = 2
For i = 0.5 To 13.19
Picture1.Line (i, 5.5)-(i, -5.5)
Next i
For i = -4.5 To 4.5
Picture1.Line (0, i)-(13.19, i)
Next i
End Sub
'Процедура анализа входного сигнала методом БПФ
Public Sub FFT()
Dim l1 As Byte
Dim l2 As Byte
Dim l3 As Byte
Dim lp As Double
Dim lp2 As Double
Dim darg As Double
Dim arg As Double
Dim IW As Byte
Dim WR As Double
Dim WI As Double
Dim c As Double
Dim s As Double
Dim z(128) As Double
Const m = 7
Const N = 128
For i = 1 To 128
Y(i) = 0
butX(i) = butX(i) - 128
Next i
For l1 = 1 To m
lp = 2 ^ l1
lp2 = lp / 2
darg = -3.141592636 / lp2
arg = 0
For l2 = 1 To lp2
c = Cos(arg)
s = Sin(arg)
arg = arg + darg
For l3 = l2 To N Step lp
IW = l3 + lp2
WR = butX(IW) * c - Y(IW) * s
WI = butX(IW) * s + Y(IW) * c
butX(IW) = butX(l3) - WR
Y(IW) = Y(l3) - WI
butX(l3) = butX(l3) + WR
Y(l3) = Y(l3) + WI
Next l3
Next l2
Next l1
For i = 1 To N
butX(i) = butX(i) / N
Y(i) = Y(i) / N
Next i
Picture2.DrawWidth = 3
Picture2.ForeColor = &HFF0000
Picture2.Scale (0, 1)-(4807.5, -20)
'постоянная составляющая
z(0) = Sqr(Abs((butX(0) * butX(0)) + (Y(0) * Y(0))))
'спектр мощностей
For i = 1 To 127
Picture2.PSet (i * 4807.5 / 64, -20)
z(i) = Sqr(Abs((butX(i) * butX(i)) + (Y(i) * Y(i))))
z(i) = 10 * Log(z(i) / z(0)) / Log(10)
Picture2.Line -(i * 4807.5 / 64, z(i))
Next i
Picture2.DrawWidth = 1
Picture2.ForeColor = &H0
Picture2.DrawStyle = 2
For i = 0 To -20 Step -5
Picture2.Line (0, i)-(4807.5, i)
Next i
For i = 1 To 127
Picture2.Line (i * 4807.5 / 64, 1)-(i * 4807.5 / 64, -20)
Next i
Picture2.DrawStyle = 0
Picture2.Line (0, 0)-(4807.5, 0)
End Sub
'Процедура получения координаты курсора в области спектр анализатора
Private Sub Picture2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Text7.Text = X
Text8.Text = Y
End Sub