Skocz do zawartości

Problem z ADC i CNY70


S-View

Pomocna odpowiedź

Witam.. mam problem tego typu że... Mam napisany program niby wszystko ok...

Ale. Czujniki czytają tylko czarną linie jak są 2cm nad nią... jeżeli dam je niżej czyli tak jak ma być te 1-2mm to Atmega16 głupieje.

Zmierzyłem też napięcie wchodzące do ADC

czujniki 2mm nad:

Czarna 4,66V

Biały 1,7V

Czujniki 2cm nad:

Czarna 4,5V

Biała 4,2V

$crystal = 16000000
$regfile = "m16def.dat"


In4 Alias Portd.0
In3 Alias Portd.1
In2 Alias Portd.2
In1 Alias Portd.3
'Config Porta = Adc

Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 64
Config Adc = Single , Prescaler = Auto , Reference = Avcc

Dim Czujnik1 As Word , Czujnik2 As Word , Czujnik3 As Word , Czujnik4 As Word , Czujnik5 As Word , Czujnik6 As Word , Czujnik7 As Word , Czujnik8 As Word
Dim Sens1 As Byte , Sens2 As Byte , Sens3 As Byte , Sens4 As Byte , Sens5 As Byte , Sens6 As Byte , Sens7 As Byte , Sens8 As Byte
Dim Offset As Byte
Offset = 0
Start Adc

Enable Interrupts



Do

Sens1 = Getadc(0)
If Sens1 > 120 Then Czujnik1 = 1 Else Czujnik1 = 0

.......

loop

......
Link do komentarza
Share on other sites

Sprawdź sobie przez UART (albo wyświetlacz LCD) jakie wartości zwracają czujniki - tak będzie najłatwiej. Podpiąłeś wszystkie kondensatory i dławik? Napięcie jest ok czyli błąd w programie albo w połączeniach. Co znaczy "głupieje"?

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

Aref jest dobrze dobrane...

Problem Tkwił w granicy czyli jest na 700 i sobie już radzi:)

Drugi problem tkwił w tym ze samiast Sensx As Byte miało być Sensx As word

a przy okazji także zmieniłem Czujnikx As Word na Czujnikx As bit

Pomógł kolega z Forum "kuczus za co mu wielkie dzieki;)

Wiec program wygląda mniejwiecej tak

$crystal = 16000000
$regfile = "m16def.dat"

Dim Granica As Word
Granica = 550
Config Pind.0=output
Config Pind.1=output
Config Pind.2=output
Config Pind.3=output
Config Pind.6=input
portd.6=1

In4 Alias Portd.0
In3 Alias Portd.1
In2 Alias Portd.2
In1 Alias Portd.3

Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 64
Config Adc = Single , Prescaler = Auto , Reference = Avcc

Dim Czujnik1 As Bit , Czujnik2 As Bit , Czujnik3 As Bit , Czujnik4 As Bit , Czujnik5 As Bit , Czujnik6 As Bit , Czujnik7 As Bit , Czujnik8 As Bit
Dim Sens1 As Word , Sens2 As Word , Sens3 As Word , Sens4 As Word , Sens5 As Word , Sens6 As Word , Sens7 As Word , Sens8 As Word

Dim X as bit
x=1

Do
if pind.6=0 then x=0
Loop Until X = 0
x=1

Start Adc
Enable Interrupts

a robocik jeździ teraz tak....

Jest to jego 20% możliwości a spowodowane jest tym iż algorytm trzeba dopracowac;) narazie działa na 4ru CNY

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.