Войти

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


mirasoft
09-08-2012, 19:53
Доброго времени суток форумчани. Пишу генератор импульсов.
Как зделать так чтобы в таймера было фиксированое время выполнения и паузы?

Нашел вот такой пример таймера.Код Visual Basic
Me.TimerInterval = 1000
End Sub

Sub Form_Timer()
Static intShowPicture As Integer
If intShowPicture Then
' Show icon.
Me!btnPicture.Picture = "C:\Icons\Flash.ico"
Else
' Don't show icon.
Me!btnPicture.Picture = ""
End If
intShowPicture = Not intShowPicture
End Sub



дело в том что по таймеру будут выпоолнятся некоторые действия и неизвестно сколько времени они будут выполнятся.
Как зделать так чтоб например таймер секунду курит и секунду выполняется и все что за это время неуспело выполнится прекращается???

Зарание благодарен

ferget
09-08-2012, 20:38
Сделать два таймера, каждый работает по секунде

mirasoft
09-08-2012, 20:49
чтото не могу вкурить. немогли бы вы показать пример?
Также не могу правельно сделать таймер. когда он запускается программа виснет

ferget
09-08-2012, 21:18
В какой среде программируете?

mirasoft
09-08-2012, 21:20
Visual Basic 6

ferget
09-08-2012, 21:44
VB6 нету, вот пример на VB.net

Public Partial Class MainForm

Private Dim i As Integer

Public Sub New()
Me.InitializeComponent()
timer1.Start()
End Sub

Sub Timer1Tick(sender As Object, e As EventArgs)
i=i+1
textBox1.Text=i.ToString()
timer1.Stop()
timer2.Start()
End Sub

Sub Timer2Tick(sender As Object, e As EventArgs)
i=i+1
textBox2.Text=i.ToString()
timer2.Stop()
timer1.Start()
End Sub
End Class

mirasoft
09-08-2012, 21:55
Вот этим
http://forum.oszone.net/attachment.php?attachmentid=86071&stc=1&d=1344534888

Iska
10-08-2012, 06:41
и все что за это время неуспело выполнится прекращается??? »
Если под «все» понимается содержимое «_Timer()», напрямую — никак.

mirasoft
10-08-2012, 11:08
Вот что я имею ввиду:
Есть два цикла, по сути два таймера, один таймер управляет другим.
На прикрепленном рисунке все показано.

в первом цикле зупускается второй цикл и отрабатывает нное количество итераций, сколько неизвестно так как частота его работы(тобишь время работы и паузы) меняется.

Тоесть, стартанул первый цикл (допустим время паузы и работы 1с, в общем получается 2с), на картинке это рисунок 1, t1=t2.

За время t1 работает второй цикл у которого тоже все строго фиксировано, указывается частота.

В результате должно получится то что на рисунке 3.

Второй цикл просто долбит комп порт устанавливая на какой то лапе "0" или "1" и держит паузы.

http://forum.oszone.net/attachment.php?attachmentid=86086&stc=1&d=1344582592


PS: мне скинули пример такой программы, я её немного пределал по свои нужды. Исходники в архиве.

Вот код.


Dim I#, P# '
Dim H#, pe#, temp# '
Dim cI, cP, gr


Private Sub Command1_Click()
H = 1 ' Hz
pe = 500 ' period = 1Hz
temp = pe / H
If H > 999 And H < 9999 Then
temp = temp * 100
End If
If H > 9999 And H < 99999 Then
temp = temp * 10
End If

I = temp 'ms
P = temp 'ms

Text1.Text = P
Cl

If TimerP.Enabled = False Then
Cl
TimerP.Enabled = True
Command2.ZOrder 0
End If
End Sub
Sub Cl()
Picture1.Cls
cI = 0: cP = 0
gr = 20 * (I + P)
Picture1.Scale (0, 2)-(gr, -2)
TimerI.Interval = I
TimerP.Interval = P
Picture1.Line (0, 0)-(20 * (I + P), 0), &H808080
End Sub

Private Sub Command2_Click()
TimerP.Enabled = False
TimerI.Enabled = False
Command1.ZOrder 0
End Sub

Private Sub Form_Load()
'For I = 1 To 20
'Combo1.AddItem 50 * I
'Combo2.AddItem 50 * I
'Next I
'Combo1.ListIndex = 9
'Combo2.ListIndex = 9
TimerI.Enabled = False
TimerP.Enabled = False
Picture1.AutoRedraw = True
Command2.ZOrder 1
End Sub

Private Sub TimerI_Timer()
Shape1.Visible = False
TimerP.Enabled = True
TimerI.Enabled = False
If cP < gr Then
Picture1.Line (cI, 0)-(cI, 1), vbGreen
Picture1.Line (cI, 0)-(cI + P, 0), vbBlue
cI = cI + P
Else
Cl
End If
End Sub

Private Sub TimerP_Timer()
Shape1.Visible = True
TimerP.Enabled = False
TimerI.Enabled = True
If cI < gr Then
Picture1.Line (cI, 0)-(cI, 1), vbGreen
Picture1.Line (cI, 1)-(cI + I, 1), vbRed
cI = cI + I
Else
Cl
End If

End Sub


Обясните мне что тут означет переменная gr, дело в том что на частотах выше 19Khz осцилограмма не прорисовывается.




© OSzone.net 2001-2012