Witam
Tak jak w temacie. Jak liczyć czas między pojawieniem sie na porcie impulsów stanu niskiego (o ile stan niski można nazwać impulsem)? tzn tak: pojawia się 0 timer rusza, pojawia sie 0, timer się zatrzymuje, zczytuję stan timera, robie z tym to i tamto, zeruje licznik i od początku, czekam na 0, licznik rusza, itp. Nie chcę korzystać z licznia impulsów w czasie np 1s, gdyż zależy mi na szybkości odczytu, a muszę odcztać czasy z dwóch źródeł, więc ten czas i tak jest *2. Pozatym nie mogę zkorzystać z funkcji counter, gdyż z tego co się orientuje, timer atmegi 8 nie reaguje na stan niski (chyba że źle zrozumiałem)
Ja wymyśliłem coś takiego, ale nie chce działać. Dlaczego? :
akurat licznie stosunku obr/obr ma na celu uzyskanie w celach testowych pewnego wniku, niezależnie od uzyskanego czasu, co pozwoli mi wyświetlić 1 na wysw. 7-seg. Gdyby to działało, bez problemu dostosował bym program do licznia tego co potrzeba.
Jakie są opcjonalne rozwiązania tego problemu?
Poprawiłem tytuł.
[zumek]
Tak jak w temacie. Jak liczyć czas między pojawieniem sie na porcie impulsów stanu niskiego (o ile stan niski można nazwać impulsem)? tzn tak: pojawia się 0 timer rusza, pojawia sie 0, timer się zatrzymuje, zczytuję stan timera, robie z tym to i tamto, zeruje licznik i od początku, czekam na 0, licznik rusza, itp. Nie chcę korzystać z licznia impulsów w czasie np 1s, gdyż zależy mi na szybkości odczytu, a muszę odcztać czasy z dwóch źródeł, więc ten czas i tak jest *2. Pozatym nie mogę zkorzystać z funkcji counter, gdyż z tego co się orientuje, timer atmegi 8 nie reaguje na stan niski (chyba że źle zrozumiałem)
Ja wymyśliłem coś takiego, ale nie chce działać. Dlaczego? :
$crystal = 1000000
$regfile = "m8def.dat"
Config Portc = Output
Config Portd.1 = Output
Config Portd.7 = Output
Config Timer1 = Timer
Config Portb.0 = Input
Portd.1 = 1
Portc = &B11111111
Declare Sub Cyfra
Dim Wynik As Single
Dim Obr As Word
Dim U As byte
Set Portb.0
Set Portd.7
Do
If Pinb.0 = 0 Then
Start Timer1
Do
Loop Until Pinb.0 = 0
stop TIMER1
Obr = Timer1
Wynik = Obr / Obr
If Wynik = 0 Then U = 1
Call Cyfra
End If
Timer1 = 0
Loop
Sub Cyfra
Select Case U
Case 1 : Portc = &B11011101
Portd.1 = 1
Case 2 : Portc = &B11001010
Portd.1 = 0
Case 3 : Portc = &B11001000
Portd.1 = 1
Case 4 : Portc = &B11010001
Portd.1 = 1
Case 5 : Portc = &B11100000
Portd.1 = 1
Case 6 : Portc = &B11100000
Portd.1 = 0
Case 7 : Portc = &B11001101
Portd.1 = 1
Case 8 : Portc = &B11000000
Portd.1 = 0
Case 9 : Portc = &B11000000
Portd.1 = 1
End Select
End Sub
Endakurat licznie stosunku obr/obr ma na celu uzyskanie w celach testowych pewnego wniku, niezależnie od uzyskanego czasu, co pozwoli mi wyświetlić 1 na wysw. 7-seg. Gdyby to działało, bez problemu dostosował bym program do licznia tego co potrzeba.
Jakie są opcjonalne rozwiązania tego problemu?
Poprawiłem tytuł.
[zumek]