Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

GetADC w bascom

jacynka84
-
-
Posty:150
Rejestracja:17 maja 2006, o 22:50
Lokalizacja:Sulejówek
GetADC w bascom

Postautor: jacynka84 » 26 wrz 2006, o 12:46

Mam pytanie odnośnie wszystkich typów konwersji wyniku GetADC w bascom -
no co można przekonwertować wynik np 10bitowy ze wspomnianej instrukcji??
Np Volty, Hertze, co tam jeszcze jest ?
Lub ew podajcie jakieś linki .

Awatar użytkownika
piterino_16
-
-
Posty:400
Rejestracja:26 paź 2005, o 21:20
Lokalizacja:Inowrocław
Kontaktowanie:

Postautor: piterino_16 » 26 wrz 2006, o 16:45

nie wiem czy jest tu odpowiedź na Twoje pytanie bo stronke tak na szybko poszukałem ale sprawdź bascom

pozdrawiam 8)

sablik
-
-
Posty:101
Rejestracja:7 lip 2004, o 06:18
Lokalizacja:Czaniec
Kontaktowanie:

Postautor: sablik » 30 wrz 2006, o 16:50

getadc podaje ci ile bitów masz na wejsciu i tyle.
Najprosciej jest to inna postać napięcia.
AS

jacynka84
-
-
Posty:150
Rejestracja:17 maja 2006, o 22:50
Lokalizacja:Sulejówek

Postautor: jacynka84 » 2 lis 2006, o 14:43

Ok już raczej opanowałem co chciałem.
Teraz jak uzyskać dużą rozdzielczość?
jak wstawie jakąś zmienną do waitms
to mi to da dokładność do 1ms a co jeśli ja chce odmierzyć np 1.12ms ??? jak dzielić zmienną wynoszącą np 10 z rozdzielczością np 100 na jeden "punkt" zmiennej???
dałoby sie to uzyskać w 'waitus zmienna' i podawać w tysiącach ,ale jak już zostało powiedziane do waitus nie można przypisać czasu ze zmiennej...

mw
-
-
Posty:242
Rejestracja:23 lut 2003, o 23:22
Lokalizacja:Busko Zdrój
Kontaktowanie:

Postautor: mw » 2 lis 2006, o 15:35

Mozna wykorzystac do odmierzania czasu timery.

jacynka84
-
-
Posty:150
Rejestracja:17 maja 2006, o 22:50
Lokalizacja:Sulejówek

Postautor: jacynka84 » 2 lis 2006, o 16:44

Zapomniałem dodać że czas ma być z GetADC Lub GetRC, i właśnie nie wiem jak otrzymać precyzyjny wynik . np 1.25ms.

Fredy
-
-
Posty:141
Rejestracja:27 mar 2005, o 21:45
Lokalizacja:Małopolska

Postautor: Fredy » 4 lis 2006, o 14:31

Zapomniałem dodać że czas ma być z GetADC Lub GetRC, i właśnie nie wiem jak otrzymać precyzyjny wynik . np 1.25ms.
mozesz zrobić petlę która się kręci w zależnosci od wyniku np:

u=getadc(0)
for x=1 to u
watms10

cos tam

next x

sablik
-
-
Posty:101
Rejestracja:7 lip 2004, o 06:18
Lokalizacja:Czaniec
Kontaktowanie:

Postautor: sablik » 5 lis 2006, o 13:14

Witam, coś nie bardzo rozumiem, czy Ty chcesz mierzyć czas czy napiecie, czy chcesz mierzyć co określony czas napiecie ??

jacynka84
-
-
Posty:150
Rejestracja:17 maja 2006, o 22:50
Lokalizacja:Sulejówek

Postautor: jacynka84 » 5 lis 2006, o 15:57

Już raz to mówiłem - i wiem jak to uzyskać - czas ma być ściśle proporcjonalny do wyniku GetADC lub ew. do GetRC do 2 miejsc po przecinku.
Po prostu nie bardzo wiem jakie działanie wstawić aby uzyskać te 2 miejsca po przecinku.
wiemy ze normalnie jest 1023 (zero też sie liczy) na "gołym" pinie.

[ Dodano: 05-11-2006, 14:59 ]
Ps wie ktoś może ile trwa zmierzenie 'czasu rozładowania' konda np. 100pF
komendą GetRC

shadow82
-
-
Posty:12
Rejestracja:8 lis 2006, o 15:17
Lokalizacja:Trójmiasto
Kontaktowanie:

Postautor: shadow82 » 9 lis 2006, o 04:54

Witam,
O ile dobrze rozumiem, to wynik z dwoma miejscami po przecinku otrzymujesz ze sformatowania wartości mierzonego napięcia funkcją Fusing(), czyli otrzymujesz np. 2.53 V. Następnie możesz użyć funkcji Int() oraz Frac() w celu rozłożenia wyniku na część całkowitą i ułamkową (Int = 2, Frac = 0.53). Część ułamkową możesz ew. pomnożyć * 100, żeby uzyskać liczbę całkowitą.
Potem zostaje tylko złożyć te dwie liczby w jedną i napisać prostą procedurkę "wait" w asemblerze i gotowe.

szymel
-
-
Posty:212
Rejestracja:16 sty 2005, o 16:42
Lokalizacja:Włocławek

Postautor: szymel » 9 lis 2006, o 11:27

Już raz to mówiłem - i wiem jak to uzyskać - czas ma być ściśle proporcjonalny do wyniku GetADC lub ew. do GetRC do 2 miejsc po przecinku.
Po prostu nie bardzo wiem jakie działanie wstawić aby uzyskać te 2 miejsca po przecinku.
wiemy ze normalnie jest 1023 (zero też sie liczy) na "gołym" pinie...
No to już wiemy , że czas ma być wprost proporcjonalny do napięcia , ale jakie to mają być poroporcje i czy zależność jest liniowa :?: Napisz proszę , jaki odcinek czasu przypada na jednostkę napięcia , do czego chcesz wykorzystać tę zwłokę w czasie i na jakim procu to ma dzałać.
Natomiast co do czasu rozładowania kondensatora, to jest on zależny(w przybliżeniu) od stanu jego naładowania i prądu rozładowania.

Piotrek

jacynka84
-
-
Posty:150
Rejestracja:17 maja 2006, o 22:50
Lokalizacja:Sulejówek

Postautor: jacynka84 » 9 lis 2006, o 11:41

uP to objętnie ,byle z ADC ,docelowo możliwe attiny26.
Nie wiem jaki ma być przekładnik ,załóżmy że pot 5k jest w połowie położenia ~2.5k
liniowy bezpośrednio do ADC odfiltrowany kondem 100nF, wtedy ma wynosić ten czas np. 8.75ms przy tych 2.5kohma.

shadow82
-
-
Posty:12
Rejestracja:8 lis 2006, o 15:17
Lokalizacja:Trójmiasto
Kontaktowanie:

Postautor: shadow82 » 9 lis 2006, o 19:45

Czy możesz jasniej przedstawić swoją ideę, bo nie bardzo wiem czego Ci jeszcze brakuje.

jacynka84
-
-
Posty:150
Rejestracja:17 maja 2006, o 22:50
Lokalizacja:Sulejówek

Postautor: jacynka84 » 9 lis 2006, o 20:58

W ten sposób mógłbym (po zmianie zakresów czasu-1.00ms-3.00ms) sterować serwami w jakimś urządzeniu.
A funkcja Frac nie wiem czy jest najlepsza ,bo podaje tylko miejsce po przecinku,
a ja potrzebuje "całego" kawałka (wyniku -jedności.dziesiętnesetne). :566:

shadow82
-
-
Posty:12
Rejestracja:8 lis 2006, o 15:17
Lokalizacja:Trójmiasto
Kontaktowanie:

Postautor: shadow82 » 9 lis 2006, o 22:03

Cały wynik podaje funkcja Fusing() (np. "1.85"), w której mozna określić ile miejsc po przecinku powinien mieć wynik.

Jeżeli zakres ma być od 1 ms do 3 ms, a napięcie od 0 V do REF, to wystarczy podzielić zakres czasowy (3 ms - 1ms = 2 ms) przez maksymalną rozdzielczość konwersji (0 - 1024 - dla pełnego zakresu napięć), później pomnożyć przez wynik konwersji, a następnie dodać początek zakresu czasu przerwy, czyli ((2 ms / 1024) * ADC) + 1 ms. Wynik otrzymamy w ms, dla ułatwienia można go pomnożyć przez 1000 - jednostką bedą wtedy us, następnie użyć funkcji Int(), zostanie wtedy tylko część całkowita czasu przerwy w us. No i na koniec tylko procedurka w asm, czekająca odpowiednią ilość us. Tolerancja wyniku będzie w zakresie +-1 us.

Czy o to chodziło?

szymel
-
-
Posty:212
Rejestracja:16 sty 2005, o 16:42
Lokalizacja:Włocławek

Postautor: szymel » 9 lis 2006, o 22:03

W ten sposób mógłbym (po zmianie zakresów czasu-1.00ms-3.00ms) sterować serwami w jakimś urządzeniu...
No to nas załatwiłeś na cacy :D
Nie mogłeś od razu napisać , że:
"Chciałbym sterować serwomechanizmem , za pomocą potencjometru podłączonego do wejścia ADC AVR-ka - jak to zrobić ?"
BascomAVR posiada gotowe "mechanizmy" do sterowania serwami i tego sie trzymaj :lol:

Piotrek

jacynka84
-
-
Posty:150
Rejestracja:17 maja 2006, o 22:50
Lokalizacja:Sulejówek

Postautor: jacynka84 » 10 lis 2006, o 09:23

Wiem że bascom ma gotowy skrypt.
Ale czy mozna nimi sterować precyzyjnie każde serwo oddzielnym
potencjometrem???
Bo z tego co wiem słaba jest ta funkcja.

[ Dodano: 10-11-2006, 08:26 ]
W sumie mechanizm na zasadzie GetADC już mam (ew. da sie na GetRC) ,
tylko ta rozdzielczość... na 3ms musi przypadać z 300kroków rozdzielczości.

[ Dodano: 15-11-2006, 14:50 ]
Cześć , mam taki pomysł aby klawiaturę zrobić ...na jednym pinie ,bez dodatkowych części ,prócz rezystorów -
Po prostu każdy przycisk miałby swój rezystor ,np 1,2,3 Kohm
dzięki czemu ADC by je rozróżniała , pozostaje kwestia Programu który powie
jaki został naciśnięty , np jeśli wynik jest w takich a takich granicach to jest to np
przycisk pierwszy ,itd.
Wiem że to utrudnianie sobie życia, ale jak ktoś chce mieć BARDZO dużo klawiszy ,a klaw.
AT odpada...To może być przydatne.
Ma ktoś pomysł jak napisać ten kawałek do mierzenia napięć na adc ?

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 31 gości