Skocz do zawartości

Kurs Arduino - #4 - Przetwornik ADC


Pomocna odpowiedź

Dlaczego na tym schemacie rezystory są przed diodami, tzn. przed anodą? Na wszystkich wcześniejszych schematach rezystory były za diodami, pomiędzy katodą a uziemieniem. Czy to błąd? Nie znam się, ale z tego co rozumiem, to tutaj jest dobrze, a na wszystkich wcześniejszych było źle. Czy to może nie ma znaczenia po której stronie diody jest rezystor?

image.thumb.png.282a8dc21c4f31dcde595306baa37e3b.png

 

 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Pytanie:
Jakie wartość zwróci przetwornik zbudowany na jednobitowym przetworniku A/C?

Odpowiedz:
Stosując opisaną w kursie metodę dzielę napięcie 5V przez 2. Dlaczego przez 2?
10-bitowy przetwornik zwraca 1024 różne liczby a 1 bitowy zwraca dwie. Tam podzielono 5V na 1024 ja analogicznie dzielę na 2.

5V / 2 daje wartość 2,5V

Mamy więc:
0*2,5V = 0 
1*2,5V = 2,5V
I to wszystko innych wartości jak 0 lub 1 taki przetwornik nie zwróci. w Tym skrajnym przypadku uciekło nam 2,5V.
Dla przetwornika 10 bitowego ta różnica na szczęście jest dużo mniejsza i w przykładach z tego kursu pewnie jest bez znaczenia ale z definicji skazuje nas na niemożność pomiaru napięcia równego 5V i wprowadza systematyczny błąd pomiaru.

 

Link do komentarza
Share on other sites

Dnia 19.01.2022 o 11:48, farmaceuta napisał:

Bo nie sprawdzasz pinu analogowego w petli while...gdy zaswiecisz swiatlo to wartosc wzrosnie, ale Ty caly czas znajdujesz sie w while bo sprawdzasz wartosc ktora zostala zapisana przed wejsciem w while...poprostu tworzysz petle nieskonczona...raz wpadniesz i juz nigdy nie wyjdziesz...

if(dane < 200){
  digitalWrite(6, HIGH);
  Serial.println(dane);
  while(analogRead(A5) < 200) {}

Tak to ma byc

Dobra działa. Dzięki. Przyznaję nie kumam wszystkiego. Zależy mi na sprawdzeniu napięcia w momencie zapalenia diody. Gubi mnie ta pętla while. Dlaczego uzależniamy ją od fotorezystora a nie od zapalenia się diody? Rozumiem że można "wypluć" informację i tak i tak (chyba). Czy mógłby ktoś podesłać kod pod diodę a nie fotorezystor? (Mój kod uzależniony jest jeszcze od potencjometru. Mało to zmienia poza definicją prog zamiast konkretnej sztywnej wartości.)

int odczytWartosci = 0;
int prog = 0;
float napiecie = 0;

void setup() {
 Serial.begin(9600); //uruchomienie połączenia USART
 pinMode(8, OUTPUT); //dioda wyjście
}
void loop() {
  odczytWartosci = analogRead(A5); //odczytanie wartosci z fotorezystora
  prog = analogRead(A4); //potencjometr
  napiecie = odczytWartosci * (5.0/1024.0);

  if (odczytWartosci < prog) {
    digitalWrite(8, HIGH); //włączenie diody
    Serial.println(napiecie); //wysłanie napięcia na monit
    delay(1000);
    while(analogRead(A5) < prog){}
  }
  else {
    digitalWrite(8, LOW); //wyłączenie diody
       delay(25);
      
    }  
  
}

 

image.png

Link do komentarza
Share on other sites

@farmaceuta Śliczne dzięki! Fotorezystor wykrywa zmianę -> puszcza info na diodę -> dioda świeci się. Wydaje mi się ale chyba w kodzie powyżej to zmiana na fotorezystorze determinuje odczytanie wartości napięcia a nie zapalenie się diody. Chyba że to że Serial.pintln jest zaraz po digitalWrite(8, HIGH) to właśnie świadczy o tym że to moment zapalenia diody jest momentem odczytania wartości V. A drugi temat (jakby Ci się chciało) dlaczego pętla while jest w segmencie if a nie po wszystkim (na końcu) po else? I dlaczego tam jest (odczyt z A5 < wartość ustalona)? Jakoś to dla mnie nie jest intuicyjne. Nie da się tego jakoś inaczej zatrzymać?:) Czasami do zatrzymania używamy delay a czasami while. Siwy dym:D Przydałby się w tym szkoleniu jeden dodatkowy temat o zatrzymywaniu i o tym gdzie w kodzie ładować konkretne pętle i co w tedy uzyskujemy, jaki jest efekt (na początku, na końcu, środku, przed, po itd..)

Link do komentarza
Share on other sites

19 godzin temu, farmaceuta napisał:

@binsswanger napisz konkretnie co chcesz napisać to coś się napisze 😉

Śliczne dzięki! Fotorezystor wykrywa zmianę -> puszcza info na diodę -> dioda świeci się. Wydaje mi się ale chyba w kodzie powyżej to zmiana na fotorezystorze determinuje odczytanie wartości napięcia a nie zapalenie się diody. Chyba że to że Serial.pintln jest zaraz po digitalWrite(8, HIGH) to właśnie świadczy o tym że to moment zapalenia diody jest momentem odczytania wartości V. A drugi temat (jakby Ci się chciało) dlaczego pętla while jest w segmencie if a nie po wszystkim (na końcu) po else? I dlaczego tam jest (odczyt z A5 < wartość ustalona)? Jakoś to dla mnie nie jest intuicyjne. Nie da się tego jakoś inaczej zatrzymać?:) Czasami do zatrzymania używamy delay a czasami while. Siwy dym:D Przydałby się w tym szkoleniu jeden dodatkowy temat o zatrzymywaniu i o tym gdzie w kodzie ładować konkretne pętle i co w tedy uzyskujemy, jaki jest efekt (na początku, na końcu, środku, przed, po itd..)

Link do komentarza
Share on other sites

1 godzinę temu, binsswanger napisał:

 to właśnie świadczy o tym że to moment zapalenia diody jest momentem odczytania wartości V.

Nie jest tak...napięcie jest obliczenie zanim wejdziesz w if'a ale dzie się to tak szybko że można przyjąć że obliczenie napięcia jest wtedy kiedy i zmiana stanu LED... 

 

1 godzinę temu, binsswanger napisał:

 A drugi temat (jakby Ci się chciało) dlaczego pętla while jest w segmencie if a nie po wszystkim (na końcu) po else?

A to już zależy czego aktualnie potrzebujemy...czasem pętlę są zagnieżdżone (pętla w pętli itp) bo tego wymaga sposób działania kodu, a czasem nie...

 

1 godzinę temu, binsswanger napisał:

Nie da się tego jakoś inaczej zatrzymać?:)

Raczej tak się pisze kod żeby właśnie nie zatrzymywać się w miejscu, a ewentualnie omijać kawałki kodu które aktualnie nie mają się wykonywać...

 

1 godzinę temu, binsswanger napisał:

 Przydałby się w tym szkoleniu jeden dodatkowy temat o zatrzymywaniu i o tym gdzie w kodzie ładować konkretne pętle i co w tedy uzyskujemy, jaki jest efekt (na początku, na końcu, środku, przed, po itd..)

Hehe😉 to by było trudne do uzyskania bo krótko mówiąc jest to sztuka budowania kodu...to programista ma wiedzieć jak, czego i gdzie używać...ktoś może Ci doradzić, pokazać parę trików, ale i tak to Ty musisz się sam nauczyć "czarować" tym wszystkim co dostarcza Ci konkretny język 👍 

Generalnie ta pętla while nie jest tutaj do niczego potrzebna...w kodzie chodzi tylko o odczytanie napięcia i zapalenie diody, więc nic się nie stanie jeśli program będzie chodził w "kółko" gdy wartość fotorezystora < prog... 

if (odczytWartosci < prog) {
    digitalWrite(8, HIGH); //włączenie diody
    Serial.println(napiecie); //wysłanie napięcia na monit
    delay(1000);
    
  }
  else {
    digitalWrite(8, LOW); //wyłączenie diody
       delay(25);
      
    }  

 

1 godzinę temu, binsswanger napisał:

 I dlaczego tam jest (odczyt z A5 < wartość ustalona)? Jakoś to dla mnie nie jest intuicyjne. 

Musi tak być żeby pętla while była skończona...zwróć uwagę że jest tam w warunku funkcja analogRead()..dzięki temu podczas każdego sprawdzania warunku pętli jest pobierana AKTUALNA! wartość z pinu analogowego i jeśli jego wartość osiągnie > prog pętla będzie mogła się zakończyć...gdyby tam była zmienna która nie jest aktualizowana w while, to wtedy while nigdy się nie zakończy, wpadniesz raz i już tam zostaniesz...może trochę zawile tłumaczę..jak coś to pytaj dalej

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.