Termomometr uniwersalny+termostat


Witam, na tym forum miałem już multum pomysłow z termostatem ale jednak sie zdecydowałem:)A więc tak wykonałem Termometr uniewrsalny z tej stronki i działa świetnie.Zamierzam pod goldpin, który byl pod diode LED(miała się świecić przy ujemnych temperaturach) podepne kable do płytki z przekaźnikem na oddzielnej płytce:)Ale żeby byl termostat trzeba dopisać kawałek kodu to Termometru uniewrsalnego:)Termostat mam działać na tej zasadzie:uruchomieniu układu ma się załączyć termostat i wyłączyć przy 40 C, ta temperatura będzie na stałe w programie,histereza 1 C tesz na stałe w programie, przerobiłem troche kod na podstaiwe poprzednich kodów z porzednich tematów,ale nie wiem czy to zadziała tak jak opisywałem wyżej:)
KOD:

'****************************
           'Konfiguracja
'****************************
$regfile = "attiny2313.dat"
$crystal = 12000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111111 : Portd = &B11111111
 
Config 1wire = Pind.5
 
Config Timer0 = Timer , Prescale = 64
Enable Timer0 : On Timer0 Przerwanie0
 
 
Enable Interrupts
'****************************
      'Zmienne
'****************************
Dim Lsb As Byte
Dim Msb As Byte
Dim Co4ms As Byte , Co100ms As Byte , Co1s As Byte
Dim Wysw As Word , Wysw1 As Byte , Wysw10 As Byte , Wysw100 As Byte
Dim Wysw_pomoc As Word
Dim Tempa As Word
Dim Mux As Byte
 
Dim Zezw_wysw As Bit
Dim Pomiar_odczyt As Bit
Dim Minus As Bit
Dim Ur As Bit
'****************************
      'Wartosci Poczatkowe
'****************************
Reset Pomiar_odczyt
Reset Ur
Wysw1 = 191
Wysw10 = 191
Wysw100 = 191
Histereza = 20
Tempu = 400
'****************************
      'Petla glowna
'****************************
Do
 
If Zezw_wysw = 1 Then
  Reset Zezw_wysw                                           'co 4ms
  Wysw = Tempa
 
  If Ur = 1 Then Gosub Przelicz
  Gosub Wyswietl
 
 
  If Pind.6 = 0 Then                                        'jezeli jest wlaczony przekaznik
   If Tempa >= Tempu Then Portd.6 = 1                       'jezeli tempa dochodzi do ustawionej to wyl przekaznik
  Else                                                      'jezeli wyl przekaznik
   Tempp = Tempu - Histereza                                'punkt wylaczenia
   If Tempa < Tempp Then Portd.6 = 0                        'jezeli tempa mniejsza niz ustawiona temp. - histereza to wlacz przek.
  End If
 
  Portd.0 = Pind.6
  Portd.1 = Not Pind.6
 
End If
 
Loop
End
 
'****************************
      'Przerwanie timer0
'****************************
Przerwanie0:
Timer0 = 5
Incr Co4ms
 If Co4ms = 3 Then
   Co4ms = 0
   '***************************************  co 4ms
   Set Zezw_wysw
   Incr Co100ms
   If Co100ms = 25 Then
     Co100ms = 0
     '*************************************** co 100 ms
     'ew flaga obslugi przyciskow
     Incr Co1s
     If Co1s = 7 Then
       Co1s = 0
       '*************************************** co 1s
       Pomiar_odczyt = Not Pomiar_odczyt
 
       Disable Interrupts
       1wreset
 
       If Pomiar_odczyt = 1 Then
        1wwrite &HCC
        1wwrite &H44
       Else
        If Err = 0 Then
 
          1wwrite &HCC
          1wwrite &HBE
          Lsb = 1wread():
          Msb = 1wread():
 
          Minus = Msb.7
 
          Tempa = Msb * 256
          Tempa = Tempa + Lsb
 
 
          If Minus = 1 Then
            Tempa = Not Tempa
            Tempa = Tempa + 1
          End If
 
          Tempa = Tempa * 10                                'temperatura *10
          Tempa = Tempa / 16
 
          If Ur = 0 Then Ur = 1
 
        Else
          Tempa = 10000                                     'Er wyswietli wyswietlacz potem
        End If
       End If
 
       Enable Interrupts
       '***************************************
     End If
     '***************************************
   End If
   '***************************************
 End If
 
Return
'****************************
      'Inne Etykiety
'****************************
Przelicz:
 If Wysw < 1000 Then
   Wysw_pomoc = Wysw Mod 10
   Wysw1 = Wysw_pomoc
   Wysw = Wysw / 10
   Wysw_pomoc = Wysw Mod 10
   Wysw10 = Wysw_pomoc
   Wysw = Wysw / 10
   Wysw_pomoc = Wysw Mod 10
   Wysw100 = Wysw_pomoc
 
   If Wysw100 = 0 Then Wysw100 = 10                         'wygaszenie zera wiodącego
 
   Wysw1 = Lookup(wysw1 , Tabela)
   Wysw10 = Lookup(wysw10 , Tabela2)
   Wysw100 = Lookup(wysw100 , Tabela)
 
 Else
   Wysw1 = 175                                              'r
   Wysw10 = 175                                             'r
   Wysw100 = 134                                            'E
 End If
 
Return
 
 
Wyswietl:
 
  Incr Mux
  If Mux = 3 Then Mux = 0
 
  Portd.6 = Not Minus
 
  Select Case Mux
    Case 0:
     Set Portd.0
      Portb = Wysw100
     Reset Portd.2
 
    Case 1:
     Set Portd.2
      Portb = Wysw10
     Reset Portd.1
 
    Case 2:
     Set Portd.1
     Portb = Wysw1
     Reset Portd.0
  End Select
 
Return
 
'****************************
 
'****************************
 
 
'*******************************************************************************
                           'Tabele do wyswietlania na wyswietlaczu
'*******************************************************************************
Tabela:
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144 , 255
'znak:    0     1     2     3     4     5     6     7     8     9     pusty
 
Tabela2:
    Data 64 , 121 , 36 , 48 , 25 , 18 , 2 , 120 , 0 , 16 , 255
'znak:    0.    1.  2.    3.   4.   5.  6.   7.   8.  9.    pusty
'*******************************************************************************
 
'*******************************************************************************

Ale przy wciśnięciu F7 wywala mi takie błędy:
Error : 46 Line : 40 Assignment error [HISTEREZA: 0 20: 112] , in File : C:\Documents and Settings\Piotrek\Pulpit\TermometrUniwersalnyAVR.BAS
Error : 46 Line : 41 Assignment error [TEMPU: 0 400: 112] , in File : C:\Documents and Settings\Piotrek\Pulpit\TermometrUniwersalnyAVR.BAS

Proszę o pomoc:)

Pozdro:)




Portret użytkownika mirley

Re: Termostat

Nie masz zadeklarowanych zmiennych Histereza i Tempu itp. Wstaw to tam gdzie pozostałe zmienne są deklarowane, na początku programu

Dim Histereza as byte
Dim Tempu as Word

-

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 rgbled

Termostat

Witam,zobilem tak jak Pan pisał i kod wygląda tak:

'****************************
           'Konfiguracja
'****************************
$regfile = "attiny2313.dat"
$crystal = 12000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111111 : Portd = &B11111111
 
Config 1wire = Pind.5
 
Config Timer0 = Timer , Prescale = 64
Enable Timer0 : On Timer0 Przerwanie0
 
 
Enable Interrupts
'****************************
      'Zmienne
'****************************
Dim Lsb As Byte
Dim Msb As Byte
Dim Co4ms As Byte , Co100ms As Byte , Co1s As Byte
Dim Wysw As Word , Wysw1 As Byte , Wysw10 As Byte , Wysw100 As Byte
Dim Wysw_pomoc As Word
Dim Tempa As Word
Dim Mux As Byte
 
Dim Zezw_wysw As Bit
Dim Pomiar_odczyt As Bit
Dim Minus As Bit
Dim Ur As Bit
Dim Histereza as byte
Dim Tempu As Word
'****************************
      'Wartosci Poczatkowe
'****************************
Reset Pomiar_odczyt
Reset Ur
Wysw1 = 191
Wysw10 = 191
Wysw100 = 191
 
'****************************
      'Petla glowna
'****************************
Do
 
If Zezw_wysw = 1 Then
  Reset Zezw_wysw                                           'co 4ms
  Wysw = Tempa
 
  If Ur = 1 Then Gosub Przelicz
  Gosub Wyswietl
 
 
  If Pind.6 = 0 Then                                        'jezeli jest wlaczony przekaznik
   If Tempa >= Tempu Then Portd.6 = 1                       'jezeli tempa dochodzi do ustawionej to wyl przekaznik
  Else                                                      'jezeli wyl przekaznik
   Tempp = Tempu - Histereza                                'punkt wylaczenia
   If Tempa < Tempp Then Portd.6 = 0                        'jezeli tempa mniejsza niz ustawiona temp. - histereza to wlacz przek.
  End If
 
  Portd.0 = Pind.6
  Portd.1 = Not Pind.6
 
End If
 
Loop
End
 
'****************************
      'Przerwanie timer0
'****************************
Przerwanie0:
Timer0 = 5
Incr Co4ms
 If Co4ms = 3 Then
   Co4ms = 0
   '***************************************  co 4ms
   Set Zezw_wysw
   Incr Co100ms
   If Co100ms = 25 Then
     Co100ms = 0
     '*************************************** co 100 ms
     'ew flaga obslugi przyciskow
     Incr Co1s
     If Co1s = 7 Then
       Co1s = 0
       '*************************************** co 1s
       Pomiar_odczyt = Not Pomiar_odczyt
 
       Disable Interrupts
       1wreset
 
       If Pomiar_odczyt = 1 Then
        1wwrite &HCC
        1wwrite &H44
       Else
        If Err = 0 Then
 
          1wwrite &HCC
          1wwrite &HBE
          Lsb = 1wread():
          Msb = 1wread():
 
          Minus = Msb.7
 
          Tempa = Msb * 256
          Tempa = Tempa + Lsb
 
 
          If Minus = 1 Then
            Tempa = Not Tempa
            Tempa = Tempa + 1
          End If
 
          Tempa = Tempa * 10                                'temperatura *10
          Tempa = Tempa / 16
 
          If Ur = 0 Then Ur = 1
 
        Else
          Tempa = 10000                                     'Er wyswietli wyswietlacz potem
        End If
       End If
 
       Enable Interrupts
       '***************************************
     End If
     '***************************************
   End If
   '***************************************
 End If
 
Return
'****************************
      'Inne Etykiety
'****************************
Przelicz:
 If Wysw < 1000 Then
   Wysw_pomoc = Wysw Mod 10
   Wysw1 = Wysw_pomoc
   Wysw = Wysw / 10
   Wysw_pomoc = Wysw Mod 10
   Wysw10 = Wysw_pomoc
   Wysw = Wysw / 10
   Wysw_pomoc = Wysw Mod 10
   Wysw100 = Wysw_pomoc
 
   If Wysw100 = 0 Then Wysw100 = 10                         'wygaszenie zera wiodącego
 
   Wysw1 = Lookup(wysw1 , Tabela)
   Wysw10 = Lookup(wysw10 , Tabela2)
   Wysw100 = Lookup(wysw100 , Tabela)
 
 Else
   Wysw1 = 175                                              'r
   Wysw10 = 175                                             'r
   Wysw100 = 134                                            'E
 End If
 
Return
 
 
Wyswietl:
 
  Incr Mux
  If Mux = 3 Then Mux = 0
 
  Portd.6 = Not Minus
 
  Select Case Mux
    Case 0:
     Set Portd.0
      Portb = Wysw100
     Reset Portd.2
 
    Case 1:
     Set Portd.2
      Portb = Wysw10
     Reset Portd.1
 
    Case 2:
     Set Portd.1
     Portb = Wysw1
     Reset Portd.0
  End Select
 
Return
 
'****************************
 
'****************************
 
 
'*******************************************************************************
                           'Tabele do wyswietlania na wyswietlaczu
'*******************************************************************************
Tabela:
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144 , 255
'znak:    0     1     2     3     4     5     6     7     8     9     pusty
 
Tabela2:
    Data 64 , 121 , 36 , 48 , 25 , 18 , 2 , 120 , 0 , 16 , 255
'znak:    0.    1.  2.    3.   4.   5.  6.   7.   8.  9.    pusty
'*******************************************************************************
 
'*******************************************************************************

Ale i są błędy:(
Error : 31 Line : 62 Invalid datatype [[0007]] , in File : D:\ssssssssss.bas
Error : 242 Line : 63 Source variable does not match the target variable [ 0] , in File : D:\ssssssssss.bas
Error : 7 Line : 0 IF THEN expected [ 63] , in File :
Error : 123 Line : 0 END IF expected , in File :

Proszę o pomoc :)

-

Pozdro :)

Portret użytkownika matrix

Re: Ale i są błędy:(

- nie ma zadeklarowanej zmiennej Tempp
- w związku z tym że nie jest zadeklarowana to drugi błąd pokazuje że zmienna źródłowa nie pasuje do zmiennej docelowej,
- trzeci błąd jest gdzieś w pętli głównej, o tu brakuje co najmniej dwóch End If

Do
 
If Zezw_wysw = 1 Then
  Reset Zezw_wysw                                           'co 4ms
  Wysw = Tempa
 
 If Ur = 1 Then Gosub Przelicz
  Gosub Wyswietl
 
 
  If Pind.6 = 0 Then                                        'jezeli jest wlaczony przekaznik
   If Tempa >= Tempu Then Portd.6 = 1                       'jezeli tempa dochodzi do ustawionej to wyl przekaznik
  Else                                                      'jezeli wyl przekaznik
   Tempp = Tempu - Histereza                                'punkt wylaczenia
   If Tempa < Tempp Then
    Portd.6 = 0                    'jezeli tempa mniejsza niz ustawiona temp. - histereza to wlacz przek.
   end if
 
  Portd.0 = Pind.6
  Portd.1 = Not Pind.6
 
End If
 
Loop
End

Portret użytkownika rgbled

:(

Witam, a czy można by było tak te błędy poprawić bo ja w tym avr nic się nie orientuje prawie, a chcem tylko ten projekt skończyć i zapomnieć o avr:)

Bardzo proszę o pomoc:)

-

Pozdro :)

Portret użytkownika matrix

Re: czy można by było tak te błędy poprawić

z pewnością się da, ale ja niestety nie pomogę, bo nie mam na to czasu. musiał bym analizować cały kod ponieważ wstawianie end if'ów gdziekolwiek nie daje rezultatu. trzeba znać zamierzenia autora. jak pisałem wyżej, nie bardzo mam na to czas, bo z jednej strony praca a z drugiej dom i rodzina. sory.

Portret użytkownika mirley

Re; termostat

Dodaj jeszcze:

Dim Tempp As Word  

Musisz mieć zadeklarowane wszystkie zmienne które używasz bo potem się głupie błędy pojawiają. U mnie po tym wszystko się skompilowało bezbłędnie

-

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 demsy1

Termostat

Witam
Też chciałem sobie zbudować termostat na bazie termometru uniwersalnego i jak będzie wyglądał kod w ostateczności, niestety nie znam się na pisaniu programów.

Portret użytkownika mirley

Re: Termostat

Kod do termostatu jest dostępny.... nie trzeba go pisać. Popatrz w załącznikach pod termometrem uniwersalnym

-

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 demsy1

Termostat

Widziałem, ale chciałem kod pod Attiny2313 tak jak kolega na początku napisał na stale temperaturę i histerezę

Portret użytkownika mirley

Re: Termostat

Weź oryginalny program od termometru uniwersalnego i napisz w miejscu pod Gosub Wyswietl kod:

if Tempa < 550 then reset portx.y
if tempa > 570 then set portx.y

550 i 570 to progi włącz i wyłacz 550 odpowiada 55.0 stopnia a 570 to 57.0 stopnia
zamiast portx.y musisz wpisac odpowiedni port na którym chcesz wyjście.

-

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 demsy1

termostat

Nie ma potrzeby osuwać tej linijki ,,Portd.6 = Not Minus,, z oryginalnego kodu? bo pod ten port podłączyłem bazę tranzystora od przekaźnika.

Portret użytkownika mirley

Re: termostat

Oczywiście że trzeba to usunąć, port na którym jest wyjście ma być sterowany tylko w jednym miejscu i tylko według temperatury a nie znaku minus

-

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 demsy1

termostat

Mam problem z podłączeniem tranzystora pod port PD6. Polutowałem tak jak na zdjęciu niżej, ale sytuacja wygląda tak. Wpisałem w programie odpowiednie temperatury i gdy mierze miernikiem napięcie to się zgadza wszystko kiedy przekroczy ustaloną tem. napięcie znika i gdy spadnie to się załącza, ale przekaźnik cały czas jest wł. co może być źle?

Portret użytkownika mirley

Re: Termostat

To proste... popatrz co zrobiłeś tranzystor Q5 na emiterze ma 12V a na baze podajesz 0 lub 5V, więc będzie on zawsze przewodził, wystarczy aby napięcie na bazie spadło do około 11.4V a złacze tranzystora zacznie przewodzić. Nie ma się co dziwić że przy 5V zawsze przewodzi.

najprościej jest dać tranzystor NPN a przekaźnik podłączyć względem +12V a kolektor tranzystora. Emiter do masy. Wtedy 5V otworzy tranzystor a 0V zamknie i trzeba będzie zanegować stan portu w programie.

Drugie wyjście to przekaźnik na 5V i podłączenie emitera tranzystora do 5V

-

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 demsy1

Termostat

Proste jak ktoś to wszystko wie, a ja cały czas się uczę, bo niestety nie kończyłem elektroniki.
Dałbym przekaźnik na 5V, ale niestety nie posiadam takiego, więc dam tranzystor NPN, ale znowu jest pytanie jak zanegować stan portu?
Chodzi o coś takiego?
#define PIN_ON() PORTD |= (1<

#define PIN_OFF() PORTD &= ~(1<

Portret użytkownika mirley

Termostat

W tym programie co wyżej wystarczy zmienić:

  .........
  If Tempa >= Tempu Then Portd.6 = 1  'tu trzeba zmienić z 1 na 0
  Else                                                      
   Tempp = Tempu - Histereza                                
   If Tempa < Tempp Then Portd.6 = 0  ' tu trzeba zmienić z 0 na 1 
   .........

To co napisałeś wyżej może by było dobre ale w C a nie w bascomie

-

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 demsy1

Termostat

Wyszło mi coś takiego:

'****************************
           'Konfiguracja
'****************************
$regfile = "attiny2313.dat"
$crystal = 12000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111111 : Portd = &B11111111
 
Config 1wire = Pind.5
 
Config Timer0 = Timer , Prescale = 64
Enable Timer0 : On Timer0 Przerwanie0
 
 
Enable Interrupts
'****************************
      'Zmienne
'****************************
Dim Lsb As Byte
Dim Msb As Byte
Dim Co4ms As Byte , Co100ms As Byte , Co1s As Byte
Dim Wysw As Word , Wysw1 As Byte , Wysw10 As Byte , Wysw100 As Byte
Dim Wysw_pomoc As Word
Dim Tempa As Word
Dim Mux As Byte
 
Dim Zezw_wysw As Bit
Dim Pomiar_odczyt As Bit
Dim Minus As Bit
Dim Ur As Bit
Dim Histereza As Byte
Dim Tempu As Word
'****************************
      'Wartosci Poczatkowe
'****************************
Reset Pomiar_odczyt
Reset Ur
Wysw1 = 191
Wysw10 = 191
Wysw100 = 191
 
'****************************
      'Petla glowna
'****************************
Dim Tempp As Word
Do
 
If Zezw_wysw = 1 Then
  Reset Zezw_wysw                                           'co 4ms
  Wysw = Tempa
 
  If Ur = 1 Then Gosub Przelicz
  Gosub Wyswietl
 
 
  If Pind.6 = 0 Then                                        'jezeli jest wlaczony przekaznik
   If Tempa > 350 Then Portd.6 = 0                          'jezeli tempa dochodzi do ustawionej to wyl przekaznik
  Else                                                      'jezeli wyl przekaznik
   Tempp = Tempu - Histereza                                'punkt wylaczenia
   If Tempa < 250 Then Portd.6 = 1                          'jezeli tempa mniejsza niz ustawiona temp. - histereza to wlacz przek.
  End If
 
  Portd.0 = Pind.6
  Portd.1 = Not Pind.6
 
End If
 
Loop
End
 
'****************************
      'Przerwanie timer0
'****************************
Przerwanie0:
Timer0 = 5
Incr Co4ms
 If Co4ms = 3 Then
   Co4ms = 0
   '***************************************  co 4ms
   Set Zezw_wysw
   Incr Co100ms
   If Co100ms = 25 Then
     Co100ms = 0
     '*************************************** co 100 ms
     'ew flaga obslugi przyciskow
     Incr Co1s
     If Co1s = 7 Then
       Co1s = 0
       '*************************************** co 1s
       Pomiar_odczyt = Not Pomiar_odczyt
 
       Disable Interrupts
       1wreset
 
       If Pomiar_odczyt = 1 Then
        1wwrite &HCC
        1wwrite &H44
       Else
        If Err = 0 Then
 
          1wwrite &HCC
          1wwrite &HBE
          Lsb = 1wread():
          Msb = 1wread():
 
          Minus = Msb.7
 
          Tempa = Msb * 256
          Tempa = Tempa + Lsb
 
 
          If Minus = 1 Then
            Tempa = Not Tempa
            Tempa = Tempa + 1
          End If
 
          Tempa = Tempa * 10                                'temperatura *10
          Tempa = Tempa / 16
 
          If Ur = 0 Then Ur = 1
 
        Else
          Tempa = 10000                                     'Er wyswietli wyswietlacz potem
        End If
       End If
 
       Enable Interrupts
       '***************************************
     End If
     '***************************************
   End If
   '***************************************
 End If
 
Return
'****************************
      'Inne Etykiety
'****************************
Przelicz:
 If Wysw < 1000 Then
   Wysw_pomoc = Wysw Mod 10
   Wysw1 = Wysw_pomoc
   Wysw = Wysw / 10
   Wysw_pomoc = Wysw Mod 10
   Wysw10 = Wysw_pomoc
   Wysw = Wysw / 10
   Wysw_pomoc = Wysw Mod 10
   Wysw100 = Wysw_pomoc
 
   If Wysw100 = 0 Then Wysw100 = 10                         'wygaszenie zera wiodącego
 
   Wysw1 = Lookup(wysw1 , Tabela)
   Wysw10 = Lookup(wysw10 , Tabela2)
   Wysw100 = Lookup(wysw100 , Tabela)
 
 Else
   Wysw1 = 175                                              'r
   Wysw10 = 175                                             'r
   Wysw100 = 134                                            'E
 End If
 
Return
 
 
Wyswietl:
 
  Incr Mux
  If Mux = 3 Then Mux = 0
 
 
 
  Select Case Mux
    Case 0:
     Set Portd.0
      Portb = Wysw100
     Reset Portd.2
 
    Case 1:
     Set Portd.2
      Portb = Wysw10
     Reset Portd.1
 
    Case 2:
     Set Portd.1
     Portb = Wysw1
     Reset Portd.0
  End Select
 
Return
 
'****************************
 
'****************************
 
 
'*******************************************************************************
                           'Tabele do wyswietlania na wyswietlaczu
'*******************************************************************************
Tabela:
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144 , 255
'znak:    0     1     2     3     4     5     6     7     8     9     pusty
 
Tabela2:
    Data 64 , 121 , 36 , 48 , 25 , 18 , 2 , 120 , 0 , 16 , 255
'znak:    0.    1.  2.    3.   4.   5.  6.   7.   8.  9.    pusty
'*******************************************************************************
 
'*******************************************************************************

Zastanawiam się jeszcze czy w tym miejscu powinny być ustawione temperatury na stałe?

If Tempa > 350 Then Portd.6 = 0                         
  Else                                                    
   Tempp = Tempu - Histereza                                
   If Tempa < 250 Then Portd.6 = 1  

Portret użytkownika mirley

Re: temperatury

250 to 25 stopni a 350 to 35 stopni. Są to temperatury wyłączenia (więcej niż 35 stopni) i włączenia (poniżej 25)

-

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 demsy1

Termostat

Wgrałem ten kod co wyżej, ale nie wyświetla się cyfra po przecinku.
Za to ten kod działa dobrze tyle że, trzeba zmienić stan portu PD.6 ale nie wiem co dopisać.

'****************************
           'Konfiguracja
'****************************
$regfile = "attiny2313.dat"
$crystal = 12000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111111 : Portd = &B11111111
 
Config 1wire = Pind.5
 
Config Timer0 = Timer , Prescale = 64
Enable Timer0 : On Timer0 Przerwanie0
 
 
Enable Interrupts
'****************************
      'Zmienne
'****************************
Dim Lsb As Byte
Dim Msb As Byte
Dim Co4ms As Byte , Co100ms As Byte , Co1s As Byte
Dim Wysw As Word , Wysw1 As Byte , Wysw10 As Byte , Wysw100 As Byte
Dim Wysw_pomoc As Word
Dim Tempa As Word
Dim Mux As Byte
 
Dim Zezw_wysw As Bit
Dim Pomiar_odczyt As Bit
Dim Minus As Bit
Dim Ur As Bit
'****************************
      'Wartosci Poczatkowe
'****************************
Reset Pomiar_odczyt
Reset Ur
Wysw1 = 191
Wysw10 = 191
Wysw100 = 191
'****************************
      'Petla glowna
'****************************
Do
 
If Zezw_wysw = 1 Then
  Reset Zezw_wysw                                           'co 4ms
  Wysw = Tempa
 
  If Ur = 1 Then Gosub Przelicz
  Gosub Wyswietl
  If Tempa < 250 Then Reset Portd.6
  If Tempa > 400 Then Set Portd.6
End If
 
Loop
End
'****************************
      'Przerwanie timer0
'****************************
Przerwanie0:
Timer0 = 5
Incr Co4ms
 If Co4ms = 3 Then
   Co4ms = 0
   '***************************************  co 4ms
   Set Zezw_wysw
   Incr Co100ms
   If Co100ms = 25 Then
     Co100ms = 0
     '*************************************** co 100 ms
     'ew flaga obslugi przyciskow
     Incr Co1s
     If Co1s = 7 Then
       Co1s = 0
       '*************************************** co 1s
       Pomiar_odczyt = Not Pomiar_odczyt
 
       Disable Interrupts
       1wreset
 
       If Pomiar_odczyt = 1 Then
        1wwrite &HCC
        1wwrite &H44
       Else
        If Err = 0 Then
 
          1wwrite &HCC
          1wwrite &HBE
          Lsb = 1wread():
          Msb = 1wread():
 
          Minus = Msb.7
 
          Tempa = Msb * 256
          Tempa = Tempa + Lsb
 
 
          If Minus = 1 Then
            Tempa = Not Tempa
            Tempa = Tempa + 1
          End If
 
          Tempa = Tempa * 10                                'temperatura *10
          Tempa = Tempa / 16
 
          If Ur = 0 Then Ur = 1
 
        Else
          Tempa = 10000                                     'Er wyswietli wyswietlacz potem
        End If
       End If
 
       Enable Interrupts
       '***************************************
     End If
     '***************************************
   End If
   '***************************************
 End If
 
Return
'****************************
      'Inne Etykiety
'****************************
Przelicz:
 If Wysw < 1000 Then
   Wysw_pomoc = Wysw Mod 10
   Wysw1 = Wysw_pomoc
   Wysw = Wysw / 10
   Wysw_pomoc = Wysw Mod 10
   Wysw10 = Wysw_pomoc
   Wysw = Wysw / 10
   Wysw_pomoc = Wysw Mod 10
   Wysw100 = Wysw_pomoc
 
   If Wysw100 = 0 Then Wysw100 = 10                         'wygaszenie zera wiodšcego
 
   Wysw1 = Lookup(wysw1 , Tabela)
   Wysw10 = Lookup(wysw10 , Tabela2)
   Wysw100 = Lookup(wysw100 , Tabela)
 
 Else
   Wysw1 = 175                                              'r
   Wysw10 = 175                                             'r
   Wysw100 = 134                                            'E
 End If
 
Return
 
 
Wyswietl:
 
  Incr Mux
  If Mux = 3 Then Mux = 0
 
 
  Select Case Mux
    Case 0:
     Set Portd.0
      Portb = Wysw100
     Reset Portd.2
 
    Case 1:
     Set Portd.2
      Portb = Wysw10
     Reset Portd.1
 
    Case 2:
     Set Portd.1
     Portb = Wysw1
     Reset Portd.0
  End Select
 
Return
 
'****************************
 
'****************************
 
 
'*******************************************************************************
                           'Tabele do wyswietlania na wyswietlaczu
'*******************************************************************************
Tabela:
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144 , 255
'znak:    0     1     2     3     4     5     6     7     8     9     pusty
 
Tabela2:
    Data 64 , 121 , 36 , 48 , 25 , 18 , 2 , 120 , 0 , 16 , 255
'znak:    0.    1.  2.    3.   4.   5.  6.   7.   8.  9.    pusty
'*******************************************************************************
 
'*******************************************************************************

Portret użytkownika mirley

Re: Termostat

Poszukaj problemu sprzętowego na nie dzialanie wyświetlacza... program wygląda dobrze. Nie widzę w nim problemów. Jak chcesz sterować pinem d.6 to kod podałem już wyżej, tylko trzeba wkleić w pętli głównej pod obsługą flagi wyświetlacza tak jak w przykładowym kodzie wyżej

-

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 demsy1

Termostat

Mam pytanie dotyczące wyświetlacza. Czym może być spowodowane lekkie migotanie ledów?

Portret użytkownika mirley

Re: Migotanie LED

Jak migają tak co okolo 1s to jest wina odczytu ds'a. Trzeba by było program sprytniej napisać aby tego uniknąć

-

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.