Skocz do zawartości

ADC - zawsze 1023


lukix

Pomocna odpowiedź

Nie wiedziałem czy umieścić ten temat w dziale dotyczącym programowania czy elektroniki, bo nie wiem gdzie jest błąd.

Dlaczego odczyt z adc zawsze zwraca wartość 1023, niezależnie od tego czy czujniki linii są nad białą kartką, czy nad czarną?

Czujniki to CNY70.

Schemat:

Program:

$regfile = "m8def.dat"
$crystal = 1000000

'Konfiguracja przetwornika analog-cyfra (ADC)
Config Adc = Single , Prescaler = Auto

Config Portd = Output
      Portd = &B00000000
Config Portb = Output
      Portb = &B00000000

Red_led Alias Portd.6
Green_led Alias Portd.7
Reset Red_led
Reset Green_led
Dim W As Word
Dim Czujnik As Word
Do
  Start Adc
  W = Getadc(5)
  W = Getadc(5)
  Stop Adc
  Czujnik = W
  If Czujnik > 341 Then
       Set Green_led
  Else
       Reset Green_led
  End If
  If Czujnik < 682 Then
       Set Red_led
  Else
       Reset Red_led
  End If

Loop

End

Próbowałem też z:

If Czujnik = 1023 Then
       Set Red_led

i czerwona dioda się świeciła.

Gdy mierzyłem "ręcznie" (woltomierzem) to napięcie się zmieniało w zależności od koloru kartki. Sprawdzałem też aparatem diody w czujnikach - świecą.

Myślałem że jest coś źle z zasilaniem przetwornika ADC, ale sprawdziłem i wydaje mi się że jest wszystko ok.

Proszę o pomoc.

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

Może to drobiazg ale nie widzę na schemacie dławika w zasilaniu ADC.

Jeżeli korzystasz z wewnętrznego generatora to ten zapis jest też raczej zbędny

$crystal = 1000000 🙂

Link do komentarza
Share on other sites

piotrp7, wiem co daje ten zapis, ale skąd kompilator ma wiedzieć czy wewnętrzny generator ustawiony jest na 1Mhz czy na przykład na 8Mhz? Taki zapis jest konieczny.

Link do komentarza
Share on other sites

myślę że wywalenie pomiaru z pętli głównej powinno pomóc.

Trzymaj:

$regfile = "m8def.dat"
$crystal = 1000000

'Konfiguracja przetwornika analog-cyfra (ADC)
Config Adc = Single , Prescaler = Auto

Config Portd = Output
      Portd = &B00000000
Config Portb = Output
      Portb = &B00000000

Red_led Alias Portd.6
Green_led Alias Portd.7
Reset Red_led
Reset Green_led
Dim W As Word
Dim Czujnik As Word
Do
  Gosub Pomiar
  If Czujnik > 341 Then
       Set Green_led
  Else
       Reset Green_led
  End If
  If Czujnik < 682 Then
       Set Red_led
  Else
       Reset Red_led
  End If

Loop
End
Pomiar:

  Start Adc
  W = Getadc(5)
  W = Getadc(5)
  Stop Adc
  Czujnik = W
Return
Link do komentarza
Share on other sites

Robomaniak niestety dalej nie działa 😐

piotrp7 z tego co wiem to brak tego dławika może zmniejszyć dokładność pomiarów, ale bez niego też powinno działać.

__________

Komentarz dodany przez: Treker

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.