Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   генератор прямоугольных импульсов. таймер с фиксированой паузой и продолжительностьтю (http://forum.oszone.net/showthread.php?t=240293)

mirasoft 09-08-2012 19:53 1967592

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

Нашел вот такой пример таймера.Код 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 1967619

Сделать два таймера, каждый работает по секунде

mirasoft 09-08-2012 20:49 1967624

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

ferget 09-08-2012 21:18 1967646

В какой среде программируете?

mirasoft 09-08-2012 21:20 1967649

Visual Basic 6

ferget 09-08-2012 21:44 1967666

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 1967676

Вложений: 1
Вот этим
http://forum.oszone.net/attachment.p...1&d=1344534888

Iska 10-08-2012 06:41 1967860

Цитата:

Цитата mirasoft
и все что за это время неуспело выполнится прекращается??? »

Если под «все» понимается содержимое «_Timer()», напрямую — никак.

mirasoft 10-08-2012 11:08 1967943

Вложений: 2
Вот что я имею ввиду:
Есть два цикла, по сути два таймера, один таймер управляет другим.
На прикрепленном рисунке все показано.

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

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

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

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

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

http://forum.oszone.net/attachment.p...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 осцилограмма не прорисовывается.


Время: 15:36.

Время: 15:36.
© OSzone.net 2001-