Przetwornik ADC


Witam serdecznie
Mam podłączony potencjometr pod przetwornik ADC, mierze napięcie od 0V-5V i chciałbym wynik zamienić na czas, napisałem w pętli coś takiego jak poniżej, ale chciałbym się dowiedzieć jak mogę to jeszcze inaczej i dużo lepiej napisać?

Dim Czas As Byte  
.....
 
Do
Czas = Getadc(2)
                 Do
                 Loop Until Wl = 0
                 Opto = 1
 
                            Do
                             Loop Until Wl = 1
                             Wait czas
                             Opto = 0
Loop




Portret użytkownika EDC

Odp.Przetwornik ADC

Do czego i jaki czas potrzebujesz? ;)

-

BARTek
Moja strona

Portret użytkownika maro

Adc

Program jest na tyle prosty że wciskając przycisk wł. włącza się dioda, a puszczając przycisk odlicza jakiś czas i dioda gaśnie. Jeśli chodzi o czas to myślałem że jakieś 5s-3min.

Portret użytkownika EDC

Odp. ADC -> czas

Np.tak:

Dim Odmierz As Long
Dim Odczyt as Word
 
Do
 
If Pin = 0 Then
 Odczyt = Getadc(2)
 Odmierz = Odczyt * 1000                                    ' razy cokolwiek w zalezności od predkości
 Set Led
End If
If Odmierz > 0 Then Decr Odmierz
If Odmierz = 0 Reset Led
 
Loop

W ADC wartości moga się zawierać do 1024 więc potrzebny Ci Word a nie Byte. Miej więc na uwadze że w "największym przypadku" mnożysz 1024 razy "ileś" więc druga zmienna musi być duża by to pomiescić.

-

BARTek
Moja strona

Portret użytkownika maro

ADC

Zapomniałem dodać że czas ma być liczony dopiero od momentu puszczenia przycisku

Portret użytkownika EDC

Odp.ADC->czas

Tutaj tak własnie jest. Do momentu puszczenia przycisku ciągle zmiennej Odmierz przypisywana jest wartość z ADC pomnożona przez tysiąc. Jeśli nie chcesz żeby dioda świeciła już podczas naciśnięcia przycisku to możesz napisać:

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim Odczyt As Word
Dim Odmierz As Single
 
Do
If Pin = 0 Then
Odczyt = Getadc(2)
Odmierz = Odczyt * 1000
End If
If Odmierz > 0 Then Decr Odmierz
If Pin = 1 And Odmierz > 0 Then Set Led Else Reset Led
Loop

W sumie to dla tak prostej operacji Wait można użyć. 100ms to normalna częstotliwość skanowania klawiatury więc :

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim Odczyt As Word
 
Do
If Pin = 0 Then
Odczyt = Getadc(2)
End If
If Odczyt > 0 Then Decr Odczyt
If Pin = 1 And Odczyt > 0 Then Set Led Else Reset Led
Waitms 100
Loop

Co da dla odczytu 10 - 1s, dla 1024 - 1m42s

-

BARTek
Moja strona

Portret użytkownika maro

Jednak zostałem przy

Jednak zostałem przy tym

 
Do
Czas = Getadc(2)
                 Do
                 Loop Until Wl = 0
                 Opto = 1
 
                            Do
                             Loop Until Wl = 1
                             Waitms czas
                             Opto = 0
Loop

Portret użytkownika EDC

Każde rozwiązanie jest dobre..

Każde rozwiązanie jest dobre, jesli spełnia swoje zadanie. W Twoim nie ma możliwości przerwania odliczania. Jesli Ci to nie przeszkadza, to ja tym bardziej problemu nie widze :D Potem ciągle czyta to ADC chyba że to jakiś układ potrzymujacy sam sobie napięcie... mógłbyś choć czytać to ADC przy wciśnietym przycisku :D Na czas odczytu ADC "mrozi" procka by nic nie zakłócało odczytu (takie silent mode) Przy tak prostej konstrukcji te wywody nie mają większego sensu.. hahahah ale w kodzie zawsze znajdzie sie coś co można poprawić :D
Miłego dnia :D

-

BARTek
Moja strona