BASCOM: Promenljiva vremenska zadrska

Rasprava o AVR mikrokontrolerima, AVR projekti i drugo vezano za AVR...

Moderators: pedja089, stojke369, trax, InTheStillOfTheNight

Post Reply
velja
Posts: 12
Joined: 05-04-2017, 09:58

BASCOM: Promenljiva vremenska zadrska

Post by velja »

Pozdrav!

Pisem neki program u BASCOM-AVR-u pa me interesuje kako izvesti funkciju vremenske zadrske ali tako da se vreme zadrske menja u toku programa? To vreme je u stvari sirina bita u serijskoj komunikaciji koja se menja pod uticajem temperature i potrebno ga je stalno korigovati.
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: BASCOM: Promenljiva vremenska zadrska

Post by Kukinjos »

Ne razumijem tu "serijsku komunikaciju", Je li to PWM ili neka standardna serijska komunikacija. Ni linije koda nisi stavio u post, teško možemo pomoći ovako ad-hoc. Napiši što ti točno treba, ako je širina impulsa u pitanju (PWM), onda napiši granice u kojima se kreće, minimalna širina - max. širina, pauza fiksna ili se i ona mijenja. Ili je u pitanju nešto kao RS232?
Malo više detalja!
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
velja
Posts: 12
Joined: 05-04-2017, 09:58

Re: BASCOM: Promenljiva vremenska zadrska

Post by velja »

Evo ovako,
Problem sam resio. Radi se o anemometru TX23. Posto uredjaj stoji napolju sirina bita se menja znacajno sa promenom temperature. Komunikacija sa njim je takva da postoji samo data linija pa je treba precizno semplovati kako se ne bi prslo na sledeci bit. Prilozio sam sliku ali se lose vidi. U prvom je kanalu DATA a u drugom sam ja generisao impulse da bih video kako "gadja" bitove.
Problem je sto senzor zna ponekad da se zaglupi i ako se koristi BITWAIT komanda program upada u beskonacnu petlju. Resenje je ovakvo:

For Z = 0 To 1000
Waitus 2
If Tx23_data = 1 Then 'bitwait tx23_data, set
Exit For
End If
If Z = 500 Then
Marker = 1
End If
Next Z

to je kod kada se ceka da se bit setuje. Slican je kada se ceka reset. Fleg MARKER sluzi kao pokazatelj neregularnog izlaska iz petlje.
A evo kako sam odredio sirinu jednog bita: Na pocetku svakog niza podataka nalazi se header "11011". Sirina bita je polovina prvog impulsa.


Vreme_impulsa1 = 0
Vreme_impulsa2 = 0
Timer1 = 0 'pokrece tajmer za merenje vremena
Start Timer1


For Z = 0 To 1000
Waitus 2
If Tx23_data = 1 Then 'bitwait tx23_data, set
Exit For
End If
If Z = 500 Then
End If
Next Z

Vreme_impulsa1 = Timer1
Waitus 240

For Z = 0 To 2000
Waitus 2
If Tx23_data = 0 Then 'bitwait tx23_data, reset
Exit For
End If
If Z = 1000 Then
End If
Next Z



Vreme_impulsa2 = Timer1
Stop Timer1
W = Vreme_impulsa2 - Vreme_impulsa1
W = W / 80
W = W - 2 'Dodatna korekcija da bi vrednost bila sto tacnija

Sub Cekam: 'Ovaj podprogram daje zadrsku od 2,5us
For G = 1 To W
Next G
End Sub
Attachments
screenshot2_resize.jpg
screenshot2_resize.jpg (7.34 KiB) Viewed 5234 times
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7876
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: BASCOM: Promenljiva vremenska zadrska

Post by pedja089 »

Nisam zagledao tvoj program puno, ali na googlu caskom nasao ovo
https://www.john.geek.nz/2012/08/la-cro ... #more-2271
Ako je to tacno, polje D je uvek 11011. Jednostavno izmeri koliko dugo traju ove 2 jedinice, podeli to vreme na 2, i dobio si tacno vreme koliko traje jedan bit. Sacekaj da pin opet bude 1, i posle 2,5 xvreme bita imas prvi validan bit, i to je to...
Ako mislis da ne mozes napisati program da je dovoljno brz da to uradi sve u hodu, pozovi uredjaj jednom, izmeri koliko su trajala ta 2 bita u polju D, zatim izracunaj sve potrebne pauze itd, i pokreni merenje drugi put. I to je to, bez puno komplikacije...
velja
Posts: 12
Joined: 05-04-2017, 09:58

Re: BASCOM: Promenljiva vremenska zadrska

Post by velja »

Da, sve sam to opisao u prethodnom postu.
Post Reply