przesiadka z AT90s2313 na ATMega8
Masz problem? Zapytaj na forum elektroda.pl
From: "Arkosss" <arkosss_at_nospam_o2.pl>
Subject: przesiadka z AT90s2313 na ATMega8
Date: Thu, 28 Oct 2004 21:28:08 +0200
Witam!
mam problem z uruchominiem poprawnym temometru z ds1820 na Atmega8.
program dziala na 2313, a na atmedze wyswietla non stop 12 stopni... :-/
nie wiem dlaczego...
natomiast drugi program nie chce ruszyc wogole , wyswietla mi blad (rejestr
Err = 1).
Jesli moglby ktos rzucic okiem co jest , co moze byc nie tak bede wdzieczny.
moze sie ktos podzielic jakimis programikami pod ATmega8 ? ktore dzialaja ?
widze ze juz ktos na grupie probowal przejsc z 2313 na atmege i tez mu nie
dzialalo.. ale nie widze rozwiazania problemu.
pozdrawiam Arkos
program 1. czyta temperature z 1 czujnika:
'termometr pod ATMega8!!!!!!!
'podlaczenie segmentow LED:
'a=portd.0, b=portd.1, c=portd.2, d=portd.3, e=portd.4, f=portd.5, g=portd.6
'anody:
'dziesietne czesci stopni = portc.0, jednostki = portc.3, dziesiatki =
portc.5
$crystal = 12000000
Config Portd = 255 'caly portd pracuje jako wyjscie
Portd = 255 'spoczynkowy stan "1"
Config Portb = &B11100010 'wejscia
Portb = 255
Config Portc = &B111111101 '255
Portc = 255
Dim Blad As Bit
Dim Temp As Byte
Dim Ramtemp As Integer
Dim Eetemp As Eram Integer At 1
Dim Flaga As Bit
Dim Y As Integer
Dim Y1 As Integer
Dim T As Integer , T1 As Integer
Dim Licz As Byte
Dim Tmp As Byte
Dim Bd(9) As Byte
Dim Maxlicz As Integer
Dim Histereza As Integer
S1 Alias Pinb.2 'przyciski
S2 Alias Pinb.3
S3 Alias Pinb.4
Declare Sub Disp
Declare Sub Dekoder
Declare Sub Temperature
Declare Sub Read1820
Declare Sub Ustaw
Config 1wire = Portc.1 'konfiguracja 1WIRE , tu podlaczam ds1820
Blad = 1
Readeeprom Ramtemp , Eetemp
Do 'petla glowna programu
Temperature 'podprogram odczytu temp.
If S3 = 0 Then Gosub Ustaw 'jesli nacisniety s3 to skocz do
podprogramu oblsugi nastaw temp zadanej
If T > Ramtemp Then : Reset Portb.1 'wlacza klime jesli temp zmierzona
jest wieksza niz nastawiona
End If
Histereza = Ramtemp
Histereza = Histereza - 10
If T < Histereza Then 'klima wylacza sie gdy temp zmierzona jest
mniejsza od (nastawionej - 1 stopien).
Set Portb.1
End If
Loop 'koniec petli glownej
Sub Temperature 'pomiar temperatury
1wwrite &HCC 'pominięcie identyfikacji układu DS1820
1wwrite &H44 'start konwersji A/D
'Waitms 200
Disp 'podprogram wyswietlania wyniku
Read1820 'podprogram odczytu temperatury
Blad = Err 'jesli nie ma czujnika, lub inny problem, specjalny
rejesytr Err ma wartosc "1"
End Sub
Sub Read1820 'podprogram odczytu temperatury
1wreset 'inicjalizacja magistrali 1WIRE
1wwrite &HCC 'żądanie dostępu do pamięci RAM
1wwrite &HBE
Bd(1) = 1wread(9) 'odczyt zawartości pamięci i umieszczenie danych w
tablicy
1wreset 'reset magistrali
Tmp = Bd(1) And 1 'konwersja danych z precyzją 0,1 C
If Tmp = 1 Then Decr Bd(1)
T = Makeint(bd(1) , Bd(2))
T = T * 50 : T = T - 25 : T1 = Bd(8) - Bd(7) : T1 = T1 * 100
T1 = T1 / Bd(8) : T = T + T1 : T = T / 10
End Sub
Sub Disp 'podprogram obslugi wyswietlaczy
If Flaga = 1 Then 'jesli nastapoil skok do podprogramu nastawy temp.
Y1 = Ramtemp 'zmienna ramtemp przechowuje aktualna wartsoc
nastawionej temp ktora chcemy utrzymac
Maxlicz = 15 'wynik zostanie wyswietlony 15 razy
Else
Y1 = T 'jesli nie ma skoku wyswietli temp zmierzona.
Maxlicz = 200 'wynik wyswietla 200 razy
End If
For Licz = 1 To Maxlicz
Y = Y1 Mod 10 'Obliczanie dziesietnych czesci , jednostki
If Y1 < 0 Then
Y = Y * -1
End If
Dekoder
Portd = Y
Portc.3 = 0
Waitus 300
Portc.3 = 1
Y = Y1 / 10 'Obliczanie jednostek , dziesiatki
If Y1 < 0 Then
Y = Y * -1
End If
Y = Y Mod 10
Dekoder
Portd = Y
Portc.0 = 0
Waitus 300
Portc.0 = 1
Y = Y1 / 100 'Obliczanie dziesiatek
If Y1 < 0 Then
Y = Y * -1
End If
Y = Y Mod 10
If Y < 0 Then
If Y = 1 Then
Y = 12
Else
Y = 11
End If
End If
Dekoder
Portd = Y
If Portd <> 64 Then 'wygasza zbedne zero
Portc.3 = 0
Waitus 300
Portc.3 = 1
Else
If Temp = 1 Then
Portc.3 = 0
Waitus 300
Portc.3 = 1
End If
End If
Next Licz
End Sub
Sub Dekoder 'podprogram dekodera BCD/7segment
'If Blad = 1 Then 'zmienna blad ma taki stan jak rejestr Err
'Y = 11 'jest tez blokowana w trybie nastawiania zadanej temp.
'End If
Select Case Y
Case 0 : Y = 64 'Konwersja cyfry 0
Case 1 : Y = 121 'Konwersja cyfry 1
Case 2 : Y = 36 'Konwersja cyfry 2
Case 3 : Y = 48
Case 4 : Y = 25
Case 5 : Y = 18
Case 6 : Y = 2
Case 7 : Y = 120
Case 8 : Y = 0
Case 9 : Y = 16 'konwersja cyfry 9
Case 11 : Y = 63 'konwersja znaku "-" minus
Case 12 : Y = 57 'konwersja znaku "-1" /minus jeden, na jednym LED/
End Select
End Sub
Sub Ustaw 'pozwala na ustawienie i zapisanie w eeprom procesora
temp ktora ma byc utrzymywana.
Do
Waitms 30 'wykrywa nacisniecie przycisku s3, i powoduje za led
migaja :)
Set Flaga ' zmienna pomocnicza
Reset Blad 'jesli ds nie dziala, pozwala jednak wejsc w tryb
nastawu temp
If S1 = 0 Then 'zwiekszanie nastawu temp.
If Ramtemp < 90 Then 'zakres do 90 stopni od zera tak sobie
wymyslilem
Incr Ramtemp
Else
Ramtemp = 90 'nie da sie ustawic wiecej niz 90 C
End If
End If
Gosub Disp 'wyswietlenie aktualnej wartosci nastawu
If S2 = 0 Then ' zmniejszanie
If Ramtemp > 10 Then
Decr Ramtemp
Else
Ramtemp = 10
End If
End If
Gosub Disp 'wyswietlenie nastawu
Loop Until S3 = 0 'wyjscie z podporgramu po nacisnieciu s3
Blad = Err 'odblokowuje zmienna blad.
Reset Flaga 'zeruje zmeinna pomocnicza, przechodzi do wyswietlania
temp. zmierzonej
Writeeeprom Ramtemp , Eetemp 'zapis nastawionej temp do pamieci eeprom
avr'a
End Sub
program 2 czyta z dwoch czujnikow ds.. mozna w nim tez ustawic temp
przyciskami:
$crystal = 12000000
Config Portb = &B11100010 'wyjscie / wejscie
Portb = 255 '&B1100010 'stan wyjsc
Config Portd = 255
Portd = 255 ' &B1111110
Config Portc = 255
Portc = 255
Declare Sub Ustaw
Declare Sub Ustaw2
Declare Sub Convallt ' Convert T on ALL sensors
Declare Sub Porownaj
Declare Sub Porownaj2
Declare Function Decigrades(byval Sc(9) As Byte) As Integer
Dim Licz As Byte
Declare Sub Disp
Declare Sub Dekoder
S1 Alias Pinb.2 'przyciski
S2 Alias Pinb.3
S3 Alias Pinb.4
Config 1wire = Pinb.0 '6 '0,1,2 NOP 3,4,5,6,7 works good ON MY
Equipment
Dim Dg As Integer 'DECIgrades, I call it, cause I have no space for commas
on the display....
Dim Temp1 As Integer
Dim Temp2 As Integer
Dim Temp3 As Integer
Dim Dsid1(8) As Byte 'Dallas ID 64 bits incl CRC
Dim Dsid2(8) As Byte
Dim Sc(9) As Byte 'Scratchpad 0-8 72 bits incl CRC, explanations for
DS18b20
Dim Y As Byte
Dim Y1 As Integer
Dim Maxlicz As Byte
Dim Ramtemp As Integer
Dim Rramtemp As Integer
Dim Eetemp As Eram Integer At 1
Dim Eetempp As Eram Integer At 10
Dim Flaga As Bit
Dim Flaga2 As Bit
Dim Flagapowrot As Bit
Dim Blad As Bit
'Getting the two sensors IDs.
Readeeprom Ramtemp , Eetemp
Readeeprom Rramtemp , Eetempp
Dsid1(1) = 1wsearchfirst()
Do
Dsid2(1) = 1wsearchnext()
Loop Until Err = 1
'Main loop
Do
Convallt ' podprogram......"Convert ALL T on the 1w-bus"
Waitus 200 : Waitus 200 : Waitus 200 : Waitus 200 'if you use
2-wire, could be reduced to 200us
1wverify Dsid1(1) 'Issues the "Match ROM "
If Err = 1 Then
Temp1 = 0
Reset Portb.1
Elseif Err = 0 Then 'lcd " Sensor found"
1wwrite &HBE
Sc(1) = 1wread(9) 'read bytes into array
If Sc(9) = Crc8(sc(1) , 8) Then
Dg = Decigrades(sc(9))
Temp1 = Dg 'temperatura zasilania , pierwszy
czujnik!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
End If
End If
1wverify Dsid2(1)
If Err = 1 Then
Reset Portb.1 ' na wszelkii wypadek wylacza pompe
Elseif Err = 0 Then
1wwrite &HBE
Sc(1) = 1wread(9)
If Sc(9) = Crc8(sc(1) , 8) Then
Dg = Decigrades(sc(9))
Temp2 = Dg 'temperatura powrotu, drugi czujnik ds
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
End If
End If
Porownaj 'podprogram
Disp
Porownaj2
If S3 = 0 Then Gosub Ustaw
If S1 = 0 Then Gosub Ustaw2
While S2 = 0
Flagapowrot = 1
Disp
Wend
Loop
End 'end program
Sub Porownaj2
If Temp1 < Rramtemp Then
Reset Portc.4
Else
Set Portc.4
End If
End Sub
Sub Porownaj
'If Err = 1 Then
'Temp1 = 0
'Temp2 = 0
'Else
If Temp1 > Ramtemp Then
Temp3 = Temp1 - Temp2
If Temp3 > 3 Then
Reset Portb.1 'wlaczone
End If
If Temp3 < 2 Then 'histereza 1 stp.
Set Portb.1 'wylacz
End If
Else
Set Portb.1 'wylacz
End If
End Sub
Sub Convallt
1wreset ' reset the bus
1wwrite &HCC ' skip rom
1wwrite &H44 ' Convert T
End Sub
'Makes a integer value of the first two bytes in scratchpad'''''''''''''
'Works on DS18 B 20 , observe "B". The R0 and R1 in Sc(5) tells you how many
bits are accurate
Function Decigrades(byval Sc(9) As Byte)
Decigrades = 0
Decigrades = Makeint(sc(1) , Sc(2))
Decigrades = Decigrades * 10
Decigrades = Decigrades / 19
End Function
' If you have DS1820 or DS18 S 20 , you can use this algo instead:
' Observe that DsId1(1) contains the info value of which sensor is used.
Sub Disp 'podprogram obslugi wyswietlaczy
If Flaga = 1 Then 'jesli nastapoil skok do podprogramu nastawy temp.
Y1 = Ramtemp 'zmienna ramtemp przechowuje aktualna wartsoc
nastawionej temp ktora chcemy utrzymac
Maxlicz = 15 'wynik zostanie wyswietlony 15 razy
Else
If Flaga2 = 1 Then
Y1 = Rramtemp
Maxlicz = 20
Else
If Flagapowrot = 1 Then
Y1 = Temp2
Else
Y1 = Temp1 'jesli nie ma skoku wyswietli temp zmierzona przez ds1,
zasilanie!!!!!!!.
Maxlicz = 200 'wynik wyswietla 200 razy
End If
End If
End If
For Licz = 1 To Maxlicz
Y = Y1 Mod 10 'Obliczanie jednostek
If Y1 < 0 Then
Y = Y * -1
End If
Dekoder
Portd = Y
Portc.0 = 0
Waitms 1
Portc.0 = 1
Y = Y1 / 1 'Obliczanie dziesiątek
If Y1 < 0 Then
Y = Y * -1
End If
Y = Y Mod 10
Dekoder
Portd = Y
Portc.3 = 0
Waitms 1
Portc.3 = 1
''Y = Temp1 / 1000 'Obliczanie tysięcy
''If Temp1 < 0 Then
''Y = Y * -1
''End If
''Y = Y Mod 10
''If Temp1 < 0 Then
''Y = 11
''End If
''Dekoder
''Portb = Y
''Temp1 = Y
''If Portb <> 64 Then
''Portd.3 = 0
''Waitms 2
''Portd.3 = 1
''End If
Y = Y1 / 10 'Obliczanie setek
If Y1 < 0 Then
Y = Y * -1
End If
Y = Y Mod 10
Dekoder
Portd = Y
If Portd <> 64 Then
Portc.5 = 0
Waitms 1
Portc.5 = 1
'Else
'If Temp1 = 1 Then
'Portd.2 = 0
'Waitms 2
'Portd.2 = 1
'End If
End If
Next Licz
End Sub
Sub Dekoder 'podprogram dekodera BCD/7segment
If Err = 1 Then
Y = 11
End If
Select Case Y
Case 0 : Y = 64
Case 1 : Y = 121
Case 2 : Y = 36
Case 3 : Y = 48
Case 4 : Y = 25
Case 5 : Y = 18
Case 6 : Y = 2
Case 7 : Y = 120
Case 8 : Y = 0
Case 9 : Y = 16
Case 11 : Y = 63
'Case 12 : Y = 57
End Select
End Sub
Sub Ustaw 'pozwala na ustawienie i zapisanie w eeprom procesora
temp ktora ma byc utrzymywana.
Do
Waitms 200 'wykrywa nacisniecie przycisku s3, i powoduje za led
migaja :)
Set Flaga ' zmienna pomocnicza
Reset Blad 'jesli ds nie dziala, pozwala jednak wejsc w tryb
nastawu temp
If S1 = 0 Then 'zwiekszanie nastawu temp.
If Ramtemp < 99 Then 'zakres do 90 stopni od zera tak sobie
wymyslilem
Incr Ramtemp
Else
Ramtemp = 99 'nie da sie ustawic wiecej niz 90 C
End If
End If
Gosub Disp 'wyswietlenie aktualnej wartosci nastawu
If S2 = 0 Then ' zmniejszanie
If Ramtemp > 5 Then
Decr Ramtemp
Else
Ramtemp = 5
End If
End If
Gosub Disp 'wyswietlenie nastawu
Loop Until S3 = 0 'wyjscie z podporgramu po nacisnieciu s3
Blad = Err 'odblokowuje zmienna blad.
Reset Flaga 'zeruje zmeinna pomocnicza, przechodzi do wyswietlania
temp. zmierzonej
Writeeeprom Ramtemp , Eetemp 'zapis nastawionej temp do pamieci eeprom
avr'a
End Sub
Sub Ustaw2 'pozwala na ustawienie i zapisanie w eeprom procesora
temp ktora ma byc utrzymywana.
Do
Waitms 200 'wykrywa nacisniecie przycisku s3, i powoduje za led
migaja :)
Set Flaga2 ' zmienna pomocnicza
Reset Blad 'jesli ds nie dziala, pozwala jednak wejsc w tryb
nastawu temp
If S3 = 0 Then 'zwiekszanie nastawu temp.
If Rramtemp < 99 Then 'zakres do 90 stopni od zera tak sobie
wymyslilem
Incr Rramtemp
Else
Rramtemp = 99 'nie da sie ustawic wiecej niz 90 C
End If
End If
Gosub Disp 'wyswietlenie aktualnej wartosci nastawu
If S2 = 0 Then ' zmniejszanie
If Rramtemp > 10 Then
Decr Rramtemp
Else
Rramtemp = 10
End If
End If
Gosub Disp 'wyswietlenie nastawu
Loop Until S1 = 0 'wyjscie z podporgramu po nacisnieciu s3
Blad = Err 'odblokowuje zmienna blad.
Reset Flaga2 'zeruje zmeinna pomocnicza, przechodzi do wyswietlania
temp. zmierzonej
Writeeeprom Rramtemp , Eetempp 'zapis nastawionej temp do pamieci
eeprom avr'a
End Sub
========
Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mai
From: Wojtek Kaniewski <wojtekka_at_nospam_SPAM.SPAM.SPAM>
Subject: Re: przesiadka z AT90s2313 na ATMega8
Date: Thu, 28 Oct 2004 21:41:31 +0200
Arkosss wrote:
mam problem z uruchominiem poprawnym temometru z ds1820 na Atmega8.
program dziala na 2313, a na atmedze wyswietla non stop 12 stopni... :-/
nie wiem dlaczego...
ustawiłeś fusy dotyczące zegara? mega8 domyślnie jest taktowana
wewnętrznym generatorem 1MHz.
w.
========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.atman.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Arkosss" <arkosss_at_nospam_o2.pl>
Subject: Re: przesiadka z AT90s2313 na ATMega8
Date: Thu, 28 Oct 2004 22:02:37 +0200
Użytkownik "Wojtek Kaniewski" <wojtekka_at_nospam_SPAM.SPAM.SPAM> napisał w wiadomości
news:clri4t$hu0$1_at_nospam_inews.gazeta.pl...
Arkosss wrote:
mam problem z uruchominiem poprawnym temometru z ds1820 na Atmega8.
program dziala na 2313, a na atmedze wyswietla non stop 12 stopni... :-/
nie wiem dlaczego...
ustawiłeś fusy dotyczące zegara? mega8 domyślnie jest taktowana
wewnętrznym generatorem 1MHz.
w.
jak sie to robi ?? ;)
========
Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mai
From: Wojtek Kaniewski <wojtekka_at_nospam_SPAM.SPAM.SPAM>
Subject: Re: przesiadka z AT90s2313 na ATMega8
Date: Thu, 28 Oct 2004 22:19:25 +0200
Arkosss wrote:
ustawiłeś fusy dotyczące zegara? mega8 domyślnie jest taktowana
wewnętrznym generatorem 1MHz.
jak sie to robi ?? ;)
nie wiem jakiego programatora i jakiego oprogramowania używasz, więc nie
jestem w stanie pomóc. zajrzyj do pdfa z dokumentacją ATmega8, pewnie
coś z ,,clock source'' w nazwie akapitu, a potem porównaj nazwy fusów z
tym, co masz w programatorze.
albo po prostu zmień w źródle zegar na 1MHz i zapomnij o fusach.
w.
========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.atman.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Marcin Wiązania" <marcin.wiazania_at_nospam_ep.com.pl>
Subject: Re: przesiadka z AT90s2313 na ATMega8
Date: Thu, 28 Oct 2004 22:27:02 +0200
Polecam ksiazke do Bascoma www.btc.pl
Przyklady w oparciu o ATMEGE8
Pzdr
Marcin W
========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.atman.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Arkosss" <arkosss_at_nospam_o2.pl>
Subject: Re: przesiadka z AT90s2313 na ATMega8
Date: Thu, 28 Oct 2004 22:32:03 +0200
znaczy sie generalnie korzystamz kursu bascom w EdW...
========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai