Wysłany: 16 Lis 08 09:02 Czujniki napięciowe (ciśnienia, temperatury itd) i ATmega
Witam wszystkich!!!
Mam zamiar do Atmegi32 (może 16 lub 8.) podłączyć napięciowy czujnik
ciśnienia o czułości 20mV/kPa.
Jako że jestem poczatkujący w zabawach z mikrokontrolerami nie wiem w jaki sposób napisać program mierzący napięcie, jak mają być zapisane warunki,
które mają być spełnione aby zostały wykonane jakieś instrukcje np.:
- jeśli ciśnienie jest z przedziału 100-110kPa (czyli napięcie jest
z przedziału 2000-2200mV), to włącz pin;
lub
- jeśli ciśnienie jest z przedziału 100-110kPa, to wcześniej ustalona zmienna np. "x"=1;
itp.
Rozumiem że podłączenie czujnika jest proste i wymaga tylko połączenia
wyjścia czujnika z pinem (ADC) mikrokontrolera.
Dane czujnika:
MPX4250DP
http://www.audiworld.com/tech/pix/mpx4250.pdf
Tak wogóle to piszę w języku C++ i najlepiej aby ktoś, kto chciałby pomóc, napisał w C lub C++, ale jeśli napisałby ktoś w basicu, może potrafiłbym to przełożyć, albo troszkę poczytam i może spróbuję napisać program w basicu.
Serdeczne dzięki i pozdrawiam
Pomógł: 6 razy Posty: 160 Otrzymał 6 piw(a) Skąd: Bełk
Wysłany: 16 Lis 08 09:17
A więc poczytaj w datasheet jakie właściwości ma PortA w atmega16/32.
W bascomie zrobienie takiego programu było by banalne, ale dopuki nie zobacze twoich wypocin w C albo Bascomie to nienapisze ci tego
Pozdrawiam
_________________ "Niema ludzi niewinnych, są tylko źle przesłuchiwani" Feliks "Krwawy Feliks" Dzierżyński
Moich wypocin? A na co Ci one, chyba, że chodzi o sprawdzenie czy nie czekam na gotowca.
W pewnym sense czekam, bo czujników analogowych jeszcze nigdy nie podłączałem. Napisałem natomiast program do programatora włączającego i wyłączającego jakieś urządzenie o trzech różnych godzinach.
Napisałem też program do starej zmywarki do naczyń. Program miał umożliwiać regulację czasu zmywania, dawać sygnał dźwiękowy, że zmywanie zakończone, sterował grzałkami (ale termostaty były na zasadzie 0/1). Nie bedę zamieszczał programu, żeby po pierwwsze nie zaśmiecać, a po drugie, od strony estetycznej (zapewne też składniowej) nie są najlepsze, bo dopiero zaczynam przygodę z mikrokontrolerami.
Teraz chcę zrobić swego rodzaju miernik ciśnienia, ale że potrzebuję więcej pinów niż 23, jakie ma Atmega8, dlatego zamierzam użyć 16 lub 32. W sumie cena niewiele je różni, a program, wrazie nienajlepszej składni (wtedy może zajmować więcej pamięci) na pewno się zmieści.
A co do właściwości portu A, przynajmniej w ATmedze32 to ma on m.in funkcję umożliwiającą podłączenia czujnika napięciowego.
Pomógł: 6 razy Posty: 160 Otrzymał 6 piw(a) Skąd: Bełk
Wysłany: 16 Lis 08 10:44
Dobra a więc tak:
niewiem jak to wygląda w C, w bascomie pobierasz dane z ADC za pomocą komendy
Kod:
getadc(nrkanału)
Musisz tą wartość zapisać do zmiennej myśle że zmienna WORD albo SINGLE.
Potem zależnie od stopnia podziału sygnału dobierasz przelicznik.
Dla podziału 10bitowego i napięcia odniesienia 5V przelicznik wynosi 0.0049
Poczytaj helpa i sam sie dowiesz co i jak
Pozdrawiam
_________________ "Niema ludzi niewinnych, są tylko źle przesłuchiwani" Feliks "Krwawy Feliks" Dzierżyński
Czy to oznacza, że mam zapisać coś w stylu:
- na początku programu konfiguracja ADC, włączenie przetwornika, deklaracja zmiennych:
Config Adc = Single , Prescaler = Auto, Reference = AVCC
Start Adc
Dim W As Word
Dim cisnienie As Single ‘cisnienie w kPa
- dalej gdzies w programie, w miejscu gdzie potrzebuję:
W = Getadc(0) ‘0 jeśli chcę zczytywać z pinu A0?
Cisnienie = W*0.00488/.02 ‘czułość czujnika była 20mV/kPa
End
lub
Config Adc = Single , Prescaler = Auto, Reference = AVCC
Start Adc
Dim W As Word
Dim glebokosc As Single ‘chodzi o głębokość w wodzie, zakładam, że 1 cm słupa wody powoduje wzrost ciśnienia o 1 hPa
- dalej:
W = Getadc(0) 'lub Getadc(0, 204.8), bo 1024/5=204,8=1/0,00488 - tyle, że wówczas wartość zmienej W jest równa wsrtości napięcia na Pinie A0
glebokosc = W*.00488/.002 'czułość czujnika to 20mV/kPa, czyli 2mV/hPa, co daje w przybliżeniu 2mV na każdy dodatkowy centymetr zanurzenia, mnożenie przez 0,00488 można chyba pominąć jeśli w linii o jedną wyżej zastosujemy zapis Getadc(0, 204.8), bo jak podaje manual, można wpisać wzmocnienie
Do
If glebokosc>10 And glebokosc<=15 Then PortB1 = 1
Else PortB1 = 0
End If
Loop
End
Pytanie co do prescalera, dlaczego w manualu piszą, że dozwolone są dzielniki 2, 4, ..., 128, skoro jest 10 bitowy, czyli do 1024? Czy jeśli dam Auto, tak jak w przykładzie, automatycznie zostanie wybrane 1024?
Ważne, abym podłączył AVCC pod VCC, czyli 5V i między AREF I GND kond. 100uF.
Proszę o poprwaki
Ostatnio zmieniony przez adamkoc 17 Lis 08 04:27, w całości zmieniany 1 raz
no ok.
Ale podana przez Ciebie zmienna Cis oznacza wartość napięcia jaką podaje czujnik. Jeśli chcę mieć wartość ciśnienia, to muszęją podzielić przez 20 (czułość czujnika to 20mV/kPa), chyba dobrze kombinuję?
Co do komendy
W = getadc()
to w nawiazach muszę podać wartość "0" jeśli chcę czytać z pinu A0, lub "3" jeżeli z pinu A3?
co do 0,0049 to zgadzam się pod warunkiem że trzeba zaokrąglać do dziesięciotysięcznych, bo 5/1024=0,004882...
I jeszcze co to za zapisy w przykładowych programach w manualu:
$regfile = "m48def.dat"
$baud = 19200
$hwstack = 40
$swstack = 8
$framsize = 40
Ten pierwszy to pewnie podanie pod jaki mikrokontroler jest program, ale reszta to "czarna magia". Co to jest tak mówiąc po polsku?
Pozdrawiam i serdeczne dzięki za pomoc
Ok.
Ale co to oznacza:
prędkość komunikacji po rs-232
wartosc stosu
wartosc stosu
wartosc ramki
Co do zapisu:
$crystal = 8000000, to nie pisałem bo rozumiem ten zapis.
Wcześniej pisałem w C++ w synedicie. Tam ustawiało sięmikrokontroler i kwarc w makefile w WinAVR i wtedy chodziło mi na zewnętrznym. Czy jeśli w basicu użyję komendy:
$crystal = 8000000
to też będzie chodziło na zewnętrznym, czy będę musiał coś konfigurować w BASIC-AVR?
I co mi jeszcze napiszecie w sprawie moich pytań i przemyśleń z poprzedniego posta (tych dotyczących "0,0049", "W = getadc() ", zmiennej Cis i sposobu wyliczenia faktycznego ciśnienia, zeby dalej przekształcić na cyfry tysięcy, setek, dziesiątek i cyfr hPa)?
Serdeczne dzięki i pozdrawiam
[ Dodano: 19 Lis 08 09:09 ]
Jeszcze raz serdeczne dzięki za pomoc Trekerowi i Decado.
Myślę, że temat można uznać za zamknięty (dopóki ktoś go nie "otworzy" )
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum