Skocz do zawartości

ADC - zawsze 1023


Pomocna odpowiedź

Napisano

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.

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 🙂

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

$crystal = 1000000 🙂

Dlaczego miałby być zbędny?

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.

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

Spróbuj z tym:

Config Adc = Single , Prescaler = 64 , Reference = Avcc

Nie pamiętam co się w Bascomie działo bez podania parametru Reference.

  • Pomogłeś! 1

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

Gdzie mierzyłeś to napięcie, na pinach uC? Na pewno zmienia się na nich napięcie? Nie masz żadnego zwarcia?

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...