Witam. Napisałem taki oto kod ale za nic nie można go skompilować, prosiłbym o sprawdzenie go na ew. błedy oraz zaprogramowanie i wysłanie wszystkich plików po kompilacji na adres: $regfile = "m162def.dat" $crystal = 16000000 $sim Config Porta = &B00111111 : Porta = &B11111111 Config Portb = &B11111111 : Portb = &B11111111 Config Portc = &B11000000 : Portc = &B11111111 Config Portd = &B11111111 : Portd = &B00000000 Config Porte = &B111 : Porte = &B111 Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.1 , Db6 = Porta.2 , Db7 = Porta.3 , E = Porta.4 , Rs = Porta.5 Config Lcd = 16 * 2 Cls Cursor Off Noblink Config Adc = Single , Prescaler = Auto Config Timer0 = Pwm , Prescale = 1 , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect Config Timer2 = Timer , Prescale = 256 Enable Timer2 : On Timer2 Licznik Start Timer0 Enable Interrupts Config Watchdog = 2048 Led_p Alias Porte.0 Led_bo Alias Porte.1 Led_bz Alias Porte.2 Led_a Alias Portc.7 Led_w Alias Portc.6 Sw_pompa Alias Pinc.5 Sw_zawor Alias Pinc.4 Sw_enter Alias Pinc.3 Sw_menu Alias Pinc.2 Sw_down Alias Pinc.1 Sw_up Alias Pinc.0 Pompa Alias Portb.3 Went Alias Portb.4 Zawor Alias Portb.1 Buzzer Alias Portb.2 Dim T_alarm As Word Dim T_min As Word Dim Hist As Word Dim T_zaw As Word Dim T_wyl As Word Dim Lm335 As Word Dim T(2) As Word Dim Czujnik As Byte Dim Menu As Byte Dim Ustawiana(4) As Word Dim F As Byte Dim Dzielnik As Byte Dim 4ms As Bit , 500ms As Bit Dim Mig As Bit Deflcdchar 0 , 27 , 28 , 4 , 4 , 3 , 32 , 32 , 32 Deflcdchar 1 , 24 , 25 , 3 , 6 , 12 , 24 , 19 , 3 Cls Lcd " Sterownik " Lowerline Lcd " pieca C.O. " Waitms 1500 Readeeprom T_min , 1 Readeeprom T_alarm , 3 Readeeprom T_zaw , 5 Readeeprom Hist , 7 Readeeprom F , 8 F = Pwm0 Cls Start Watchdog Do If 4ms = 1 Then 4ms = 0 Gosub Wyswietlanie End If If 500ms = 1 Then 500ms = 0 Mig = Not Mig If Pompa = 0 Then Led_p = Mig Else Led_p = 1 If Buzzer = 0 Then Led_a = Mig Else Led_a = 1 End If If Zawor = 0 Then Led_bz = 0 Led_bo = 1 Else If Zawor = 1 Then Led_bz = 1 Led_bo = 0 End If End If Gosub Temperatura Gosub Sterowanie Loop End Licznik: Timer2 = 6 Set 4ms Incr Dzielnik If Dzielnik = 125 Then Dzielnik = 0 Set 500ms End If Return Wyswietlanie: If Sw_menu = 0 Then Incr Menu If Menu = 7 Then Menu = 1 End If End If Select Case Menu Case 1: Lcd "Piec: " ; T(1) ; Chr(0) Lowerline Lcd "Bojler: " ; T(2) ; Chr(0) Case 2: Lcd "Temp. minimalna:" Lowerline Lcd T_min T_min = T_min / 10 T_min = Ustawiana(1) If Sw_enter = 0 Then Gosub Nastawa End If Case 3: Lcd "Temp. alarmowa:" Lowerline Lcd T_alarm T_alarm = T_alarm / 10 T_alarm = Ustawiana(2) If Sw_enter = 0 Then Gosub Nastawa End If Case 4: Lcd "Temp. bojlera:" Lowerline Lcd T_zaw T_zaw = T_zaw / 10 T_zaw = Ustawiana(3) If Sw_enter = 0 Then Gosub Nastawa End If Case 5: Lcd "Histereza:" Lowerline Lcd Hist Hist = Hist / 10 Hist = Ustawiana(4) If Sw_enter = 0 Then Gosub Nastawa End If Case 6: Lcd "Podśw. L.C.D:" Lowerline Lcd F ; Chr(1) F = F * 100 F = F / 255 If Sw_enter = 0 Then Gosub Nastawa2 End If End Select Return Nastawa: Lcd Ustawiana(menu) ; Chr(0) If Sw_up = 0 Then Incr Ustawiana(menu) If Sw_down = 0 Then Decr Ustawiana(menu) If Sw_enter = 0 Then Writeeeprom Ustawiana(menu) Return End If End If End If Nastawa2: Lcd F ; Chr(1) If Sw_up = 0 Then Incr F If Sw_down = 0 Then Decr F If Sw_enter = 0 Then Writeeeprom F , 8 Return End If End If End If Temperatura: Select Case Czujnik Case 1: Lm335 = Getadc(6) Case 2: Lm335 = Getadc(7) End Select T(czujnik) = Lm335 * 0.0049 T(czujnik) = T(czujnik) * 100 T(czujnik) = T(czujnik) - 273 Return Sterowanie: If T(1) > T_min Then Pompa = 0 Else T_wyl = T_min - Hist If T(1) < T_wyl Then Pompa = 1 End If 'sterowanie zaworem c.w.u If T(2) < T_zaw Then Zawor = 0 Else If T(1) > T(2) Then Zawor = 1 End If End If 'sterowanie alarmem temperaturowym If T(1) > T_alarm Or T(2) > T_alarm Then Buzzer = 0 Else If T(1) < T_alarm And T(2) < T_alarm Then Buzzer = 1 End If End If Zajrzałem właśnie do m162def.dat i niema tam nic co ustawia adc jak np. przy atmega8 czy atmega16 jeżeli u kogoś sie kompiluje m162 z adc to też poprosiłbym o tą bibliotekę.
|
|||
Re: M162
U nikogo się nie będzie kompilować bo atmega162 nie ma ADC. Dodanie do biblioteki obsługi przetwornika nie stworzy ci układu wewnątrz chipu. tutaj masz napisane co ma ten mikrokontroler http://www.atmel.com/dyn/resources/prod_documents/doc2513.pdf (na pierwszej stronie). Dla porównania przetwornik ma np atmega16 http://www.atmel.com/dyn/resources/prod_documents/doc2466.pdf
- Two 8-bit Timer/Counters with Separate Prescalers and Compare Modes
- One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode
- Real Time Counter with Separate Oscillator
- Four PWM Channels
- 8-channel, 10-bit ADC
8 Single-ended Channels
7 Differential Channels in TQFP Package Only
2 Differential Channels with Programmable Gain at 1x, 10x, or 200x
- Byte-oriented Two-wire Serial Interface
- Programmable Serial USART
- Master/Slave SPI Serial Interface
- Programmable Watchdog Timer with Separate On-chip Oscillator
- On-chip Analog Comparator
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Popatrzyłem dawno na notę
Popatrzyłem dawno na notę katalogową i przecież ma na całym porcie A przetworniki.
Re: M162
atmega162 nie ma ani jednego przetwornika ADC, popatrz jeszcze raz dobrze do karty. Są tam tylko komparatory analogowe. Przetworniki posiada Mega16 tak jak już pisałem wcześniej
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Przepraszam bardzo, teraz
Przepraszam bardzo, teraz zajrzałem jeszcze raz to noty i rzeczywiście pisze tylko "AD" więc mam rozumieć że na tym układzie nie da się mierzyć napięcia, czy jednak tak ponieważ mam 2 procki w domu a układy lm335 u pewnego sprzedawcy na allegro idą po 1.80zł. więc bardzo tanio a ds-y kosztują 3-razy tyle.
Tak w ogóle to te porty oznaczone "AD" jaką mają funkcje.
Mam jeszcze jedno pytanie,
Mam jeszcze jedno pytanie, jak wyglądałby kod do odczytywania z 2 czujników lm75 na I2C ponieważ są też dość tanie, chodzi mi o odczyt i konwersje do st.C
Re: Lm75
Poczytaj w karcie katalogowej jak to zaprogramować. Sam niestety nie używałem tego układu
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Witam. Mam takie pytanie,
Witam.
Mam takie pytanie, jeżeli nie będziesz umiał odpowiedzieć to nie szkodzi, widziałem układy w których czujką temp. był tranzystor krzemowy, no więc podłączyłem to do m8 napisałem program taki jak do lm35 ale niestety układ pokazuje temperatury rzędu tysięcy stopni, a w pokoju panuje 27-30 i tak też pokazuje lcd gdy podepnę lm335 i odejmę 273 stopni(wyskalowany w kelwinach), jak powinien wyglądać program, pytam ponieważ wolałbym dawać za czujnik 5gr. zamiast 2zł.
Re: termometr
Lm35 daje napięcie 10mV na stopień C czyli w 0 stopni jest 0V w typowym zastosowaniu. Żeby to samo zrobić z Lm335 musiałbys dać wzmacniacz operacyjny który odejmie 2,7315V od napięcia panującego na układzie Lm335 albo lepiej w programie to skorygować.
podłaczając do przetwornika ADC procesora M8 bezpośrednio układ Lm335 najlepiej przeliczyć wynik z przetwornika na napięcie (wartosc/1024 *5V) potem odjąć te 2,7315V i na końcu pomnozyć wynik przez 100 żeby uzyskać wskazanie w stopniach.
Tranzystory do pomiaru temperatury też kiedyś stosowano ale nie uważam tego za dobry czujnik. musiał bys wiedziec o ile i w jaki sposób dokładnie zmienia się napięcie przewodzenia, kalibrować to wielopunktowo a i tak dokładność jest kiepska. Tranzystor możesz sobie używać do pomiaru temperatury np w termostacie który włacza wentylator jak się zabardzo radiator przygrzeje ale według mnie do niczego więcej się to nie nadaje
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Mierze lm335 i w programie
Mierze lm335 i w programie odejmuje 273 stopnie w programie, więc z nim nie mam problemu.
mam rozumieć że nie przewodzi w sposób liniowy, a pod projektami pisali:
Głownie do takich celów to ma służyć, gdzie różnica 2-3 stopni można znieść.
Czyli w programie trzeba pomnożyć zamiast przez 100 to przez 500, ale ile odjąć (ile ma np. przy 0 'c
Quote:Czyli w programie
Być może przez 500 lub przez 501 albo 499 trudno powiedzieć. Trzeba to wykalibrować stosując jakieś wzorce temperatury. Poza tym współczynnik to około -2mV/C więc czym wyższa temperatura tym niższe napięcie. Zależnośc jest w w przybliżeniu liniowa jeśli prąd płynący przez diodę będzie zwasze identyczny, nie zależnie od temperatury, musi być też niewielki, np 500uA lub 1mA żeby dioda się sama z siebie nie nagrzewała.
Musisz włożyć diodę do 0 stopni i zobaczyć ile masz odjąć, każdy egzemplarz jest inny
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Czyli przed diodę włożyć
Czyli przed diodę włożyć rezystor 5kOhm, ale czy nie będzie się zmieniało napięcie na diodzie???
Ewentualnie jak zrobić takie źródło prądowe, i jak zmienić program żeby pokazywał na odwrót.
Ale to działa tylko do zmiennych Bit
Re: Program
zrobi Ci negację logiczną, każdego bitu w zmiennej o to nie o to chodzi. Zrób poprostu:
gdzie A jest stałą określoną doświadczalnie a wartość jest napięciem jaki uzyskujesz po przeliczeniu z przetwornika.
poza tym nie wiem czemu tak kombinujesz jak Lm335 kosztuje 1,8zł. Jak kiedyś czujniki temperatury kosztowały 10-15zł to jakis w tym sens był, obecnie nie ma to żadnego sensu poza dodatkową robotą.
Co do źródła prądowego to narazie daj zwykły rezystor ograniczający prąd, ewentualnie poszukaj w internecie jakichś rozwiązań termometrów z diodami i tranzystorami, zobacz czy wogóle działa to w jakikolwiek sposób. Pamiętaj że przetwornik ADC w mikrokontrolerze ma 10 bitów, to znaczy że zwraca liczbę 0-1024 dla napięcia 0-5V. Daje to około 4,88mV na jedną wartość odczytywaną. Temperatura będzie musiała urosnąć o 3 stopnie żebyś zobaczył jakąkolwiek zmianę
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Ok. Narazie pokombinuje z
Ok.
Narazie pokombinuje z rezystorem ale chyba sobie odpuszcze.
Co do tego:
Wiem ale chciałem sprubować i przedewszystkim dowiedzieć się czegoś nowego, skoro inni umieli tym mierzyć temp. to też chciałem sprubować.
Re: Pomiary diodą
TO dobrze że chcesz spróbować uruchomić pomiar diodą ale musisz być świadom tych ograniczeń. Dla LM335 prawdopodobnie też będzie potrzebny jakiś zewnętrzny wzmacniacz pomiarowy ale 10mV na stopień jest przynajmniej 2x większe niż dokładność ADC w mikrokontrolerze
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.