Zaprogramowanie kodu


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




Portret użytkownika mirley

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.

Portret użytkownika rafliczek22

Popatrzyłem dawno na notę

Popatrzyłem dawno na notę katalogową i przecież ma na całym porcie A przetworniki.

Portret użytkownika mirley

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.

Portret użytkownika rafliczek22

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.

Portret użytkownika rafliczek22

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

Portret użytkownika mirley

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.

Portret użytkownika rafliczek22

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

Portret użytkownika mirley

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.

Portret użytkownika rafliczek22

Mierze lm335 i w programie

Mierze lm335 i w programie odejmuje 273 stopnie w programie, więc z nim nie mam problemu.

Quote:
musiał bys wiedziec o ile i w jaki sposób dokładnie zmienia się napięcie przewodzenia,

mam rozumieć że nie przewodzi w sposób liniowy, a pod projektami pisali:

Quote:
jak wiadomo napięcie przewodzenia diody krzemowej zmienia się liniowo 2mv/C
???

Quote:
Tranzystor możesz sobie używać do pomiaru temperatury np w termostacie który włacza wentylator jak się zabardzo radiator przygrzeje

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

Portret użytkownika mirley

Quote:Czyli w programie

Quote:
Czyli w programie trzeba pomnożyć zamiast przez 100 to przez 500, ale ile odjąć (ile ma np. przy 0 'c

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.

Portret użytkownika rafliczek22

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.

Temp = Not temp

Ale to działa tylko do zmiennych Bit

Portret użytkownika mirley

Re: Program

Temp = Not temp

zrobi Ci negację logiczną, każdego bitu w zmiennej o to nie o to chodzi. Zrób poprostu:

Temp = A - wartosc

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.

Portret użytkownika rafliczek22

Ok. Narazie pokombinuje z

Ok.
Narazie pokombinuje z rezystorem ale chyba sobie odpuszcze.

Co do tego:

Quote:
poza tym nie wiem czemu tak kombinujesz jak Lm335 kosztuje 1,8zł

Wiem ale chciałem sprubować i przedewszystkim dowiedzieć się czegoś nowego, skoro inni umieli tym mierzyć temp. to też chciałem sprubować.

Portret użytkownika mirley

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.