Witam
Mam podpięty czujnika ultradźwiękowy mobot- us v2 do atmegi8. Steruje nim za pośrednictwem interfejscu I2C, a pomiary z czujnika za pomocą rs-232 wyrzucam na moniktor komputera. Problem polega na tym że przy prędkości transmisjii 9600 (rs) czujnik wysypuje pomiary do odległości 1,8m, a przy prędkości 38400 do odległości 35 cm, a pożniej podaje stała wartość, nie wykonuje pomiarów. Przy prędkość transmisji 4800 uzyskuje zasięg powyżej 2m.
Czy ktoś może mi wytłumaczyć jaki związek ma prędkość wysyłania pomiarów z czujnika za pośrednictwem atmegi8 na komputer do jego skutecznego zasięgu ?? I czy moża uzyskac pełen zasięg czujnika przy prędkość 38400 transmiji danych po RS na kompa? Poniżej załączam kod programu sterującego dzięki któremu odmierzam czas pomiędzy kolejnymi pomiarami i odczytuje wartość pomierzonej wielkości.
Mam podpięty czujnika ultradźwiękowy mobot- us v2 do atmegi8. Steruje nim za pośrednictwem interfejscu I2C, a pomiary z czujnika za pomocą rs-232 wyrzucam na moniktor komputera. Problem polega na tym że przy prędkości transmisjii 9600 (rs) czujnik wysypuje pomiary do odległości 1,8m, a przy prędkości 38400 do odległości 35 cm, a pożniej podaje stała wartość, nie wykonuje pomiarów. Przy prędkość transmisji 4800 uzyskuje zasięg powyżej 2m.
Czy ktoś może mi wytłumaczyć jaki związek ma prędkość wysyłania pomiarów z czujnika za pośrednictwem atmegi8 na komputer do jego skutecznego zasięgu ?? I czy moża uzyskac pełen zasięg czujnika przy prędkość 38400 transmiji danych po RS na kompa? Poniżej załączam kod programu sterującego dzięki któremu odmierzam czas pomiędzy kolejnymi pomiarami i odczytuje wartość pomierzonej wielkości.
$regfile = "m8def.dat"
$crystal = 8000000
$lib "i2c_twi.lbx"
$baud = 38400
'deklaracja adresu I2C dla czujnika
Sonar_adres_zapis Alias &H04
Sonar_adres_odczyt Alias &H05
Enable Interrupts
'konfiguracja interfejscu I2C
Config Scl = Portc.5
Config Sda = Portc.4
Config Twi = 100000
I2cinit
'deklaracja procedur i funkcji
Declare Sub Sonar_reset
Declare Sub Sonar_czulosc(byval Czulosc As Byte)
Declare Sub Sonar_ilosc_impulsow(byval Ilosc_impulsow As Byte)
Declare Sub Maksymalny_zasieg(byval Zasieg As Integer)
Declare Sub Wartosc_progu_out(byval Prog_out As Byte)
Declare Sub Tryb_uspienia
Declare Sub Sonar_pomiar
Declare Sub Czasowiec
Declare Function Sonar_odczyt() As Word
'Program główny
Call Sonar_reset
Call Sonar_czulosc(0)
Call Sonar_ilosc_impulsow(4)
Call Maksymalny_zasieg(3000)
Call Wartosc_progu_out(200)
'pętla głowna
'odbsługa timera1 do odmierzania czasu 1 s
Dim I As Integer
Dim Impulsy As Long
Dim Sek As Integer
Dim Czas As Long
Czas = 0
Tccr1a = &H00
Tccr1b = &H0C
Ocr1ah = &H7A
Ocr1al = &H12
Tcnt1h = &H00
Tcnt1l = &H00
Do
Disable Compare1a
For I = 1 To 5000
Impulsy = Timer1
Tcnt1h = &H00
Tcnt1l = &H00
Call Czasowiec
Call Sonar_pomiar
Print "pomiar";I;" dystans " ; Sonar_odczyt() ; " impulsy " ; Impulsy ; " czas " ; Czas
Next I
Enable Compare1a
Loop
Sub Czasowiec
Sek = Impulsy / 31.25
Czas = Czas + Sek
End Sub