Witam . Od dłuższego czasu walczę z obsłużeniem licznika impulsów w ww procesorze .
Otóż sprawa wygląda następująco . Mam sobie układ taktowany częstotliwością 4 Mhz z kwarcu zewnętrznego . Na pind.5 (t1) przychodzi sobie sygnał prostokątny o częstotliwości 1 Mhz . Jest on podawany przez pewien okres czasu a ja mam zliczyć jego ile było okresów tego sygnału . Procesor startuje układ który generuje dany sygnał i następnie (takie jest moje założenie) załącza counter który jest wyłączany gdy na pind.0 pojawi się 1 oznaczający koniec pomiaru .
I wszystko ładnie pięknie tylko że zawsze dostaję wartość 0 chociaż sygnał prostokątny dochodzi do tej nogi w czasie pomiaru .
Jeśli to coś pomoże to układ ten ma zadanie mierzyć pojemność kondensatorów smd gdzie jeden okres to 1 pF .
Oto kod jaki spłodziłem .
Sam moment załączania timera to
Reszta kodu to zakresy i obsługa wyświetlacza multipleksowanego które na pewno działają poprawnie.
Był bym wdzięczny za pomoc gdyż walczę z tym dość długo . Próbowałem odczytywać te dane z wszystkich zmiennych jakie bascom przeznacza na ten licznik , oraz bezpośrednio pod rejestry licznika (assamblerowe) . Zawsze to samo :/
Otóż sprawa wygląda następująco . Mam sobie układ taktowany częstotliwością 4 Mhz z kwarcu zewnętrznego . Na pind.5 (t1) przychodzi sobie sygnał prostokątny o częstotliwości 1 Mhz . Jest on podawany przez pewien okres czasu a ja mam zliczyć jego ile było okresów tego sygnału . Procesor startuje układ który generuje dany sygnał i następnie (takie jest moje założenie) załącza counter który jest wyłączany gdy na pind.0 pojawi się 1 oznaczający koniec pomiaru .
I wszystko ładnie pięknie tylko że zawsze dostaję wartość 0 chociaż sygnał prostokątny dochodzi do tej nogi w czasie pomiaru .
Jeśli to coś pomoże to układ ten ma zadanie mierzyć pojemność kondensatorów smd gdzie jeden okres to 1 pF .
Oto kod jaki spłodziłem .
Code:
$crystal = 4000000
Config Portb = &B11111111 ; Portb = &B11111100
Config Portd = &B01010010 ; Portd = &B01011001
Config Timer1 = Counter , Edge = Falling , Capture Edge = falling , Prescale = 1
On Timer1 Zeruj
Enable Timer1
Enable Interrupts
W1 Alias Portb.4
W2 Alias Portb.3
W3 Alias Portb.2
Ds Alias Portb.5
Sh Alias Portb.7
st alias portb.6
Pf Alias Portd.6
Nf Alias Portb.1
Uf Alias Portb.0
Strt Alias Portd.4
Safe Alias Portd.1
Dim A As Byte
Dim B As Byte
Dim I As Byte
Dim Licznik As Long
Dim Przep As Byte
Dim S As String * 1
Dim Liczby As String * 3
Dim Cyfry(3) As Byte
Cyfry(1) = 10
Cyfry(2) = 10
Cyfry(3) = 10
A = 1
B = 0
Licznik = 0
Przep = 0
Do
If Pind.3 = 0 Then
Pf = 0
Nf = 0
Uf = 0
Timer1 = 0
Przep = 0
Bitwait Pind.3 , Set
Start Timer1
Safe = 1
Strt = 0
bitwait pind.0 , set
Stop Timer1
Safe = 0
Strt = 1
Licznik = Przep * 65536
Licznik = Licznik + Timer1
If Licznik < 1000 Then
Set Pf
Else
Licznik = Licznik \ 1000
If Licznik < 1000 Then
Set Nf
Else
Licznik = Licznik \ 1000
Set Uf
End If
End If
Liczby = ""
If Licznik < 10 Then
Liczby = "00"
End If
If Licznik < 100 And Licznik > 9 Then
Liczby = "0"
End If
Liczby = Liczby + Str(licznik)
For B = 1 To 3
S = Mid(liczby , B , 1)
I = 4 - b
Cyfry(i) = Val(s)
Next B
End If
If A = 3 Then
A = 1
Else
Incr A
End If
Gosub Wyslij
Select Case A
Case 1:
Reset W1
Case 2 :
Reset W2
Case 3 :
Reset W3
End Select
Waitms 4
Gosub Rst
Waitms 1
Loop
End
Wyslij:
I = Lookup(cyfry(a) , Dta)
For B = 0 To 7
If I.b = 1 Then
Set Ds
Else
Reset Ds
End If
Reset Sh
Set Sh
Next B
Reset St
Set St
Return
Rst:
W1 = 1
W2 = 1
W3 = 1
Return
Zeruj:
Incr Przep
Return
Dta:
Data 126 , 80 , 109 , 121 , 83 , 59 , 63 , 112 , 127 , 123 , 128
Sam moment załączania timera to
Code:
If Pind.3 = 0 Then
Pf = 0
Nf = 0
Uf = 0
Timer1 = 0
Przep = 0
Bitwait Pind.3 , Set
Start Timer1
Safe = 1
Strt = 0
bitwait pind.0 , set
Stop Timer1
Safe = 0
Strt = 1
Licznik = Przep * 65536
Licznik = Licznik + Timer1
Reszta kodu to zakresy i obsługa wyświetlacza multipleksowanego które na pewno działają poprawnie.
Był bym wdzięczny za pomoc gdyż walczę z tym dość długo . Próbowałem odczytywać te dane z wszystkich zmiennych jakie bascom przeznacza na ten licznik , oraz bezpośrednio pod rejestry licznika (assamblerowe) . Zawsze to samo :/