Termometr Domowy pod Attiny2313.


Witam

Jestem kompletnym amatorem w BASCOM-ie, ale wziąłem się za przerobienie kodu Termometru Domowego na tiny2313 i po części udało się. Termometr pokazuje przez jakieś 5 min temperaturę 0'C, a po tym czasie wyłącza się. Nie reaguje na przycisk. Mirley, jak znajdziesz czas to zerknij, dla Ciebie to pestka.
Oto mój program:

$regfile = "attiny2313.dat"
$crystal = 12000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111111 : Portd = &B11111111
 
Config Timer0 = Timer , Prescale = 64            'okres Timera0 250*12*Tosc=250us
Load Timer0 , 250
 
Enable Interrupts
Enable Timer0 : On Timer0 Przerwanie
Start Timer0
 
Portb = 255
Portd = 255
Config 1wire = Pind.5
'*******************************************************************************
                                  'Zmienne
'*******************************************************************************
Dim Lsb As Byte
Dim Msb As Byte
Dim Co4ms As Byte , Co100ms As Byte , Co1s As Byte
Dim Wysw As Byte , Wysw1 As Byte , Wysw10 As Byte
Dim Tempa As Byte
Dim Mux As Byte
Dim Autooff As Word
Dim Przycisk As Byte
 
Dim Zezw_przyc As Bit , Zezw_wysw As Bit
Dim Pomiar_odczyt As Bit
Dim Minus As Bit
Dim Pokaz As Bit
Dim Przyc As Bit
'*******************************************************************************
                                  'wartosci
'*******************************************************************************
Reset Pomiar_odczyt
Set Pokaz
Autooff = 1500
'*******************************************************************************
                                  'Petla glowna
'*******************************************************************************
Do
 
If Zezw_wysw = 1 Then                                         'wyswietlanie
  Reset Zezw_wysw
  '*****************************************      'co 4ms
  If Portd.4 = 0 Then
    Incr Przycisk
    If Przycisk = 200 Then
      Przycisk = 0
      Set Przyc
    End If
  Else
    Przycisk = 180
    Reset Przyc
  End If
 
  If Portd.6 = 0 Then
 
   If Przyc = 1 Then
    Reset Przyc
    Pokaz = Not Pokaz
   End If
 
  Else
 
   If Przyc = 1 Then
    Reset Przyc
    Set Pokaz
    Autooff = 1500
   End If
 
   If Autooff > 0 Then
    Decr Autooff
   Else
    Reset Pokaz
   End If
 
  End If
 
  If Pokaz = 1 Then
    Wysw = Tempa
    Gosub Przelicz
    Gosub Wyswietl
  Else
    Portb = 255
  End If
 
  '*****************************************
End If
 
Loop
End
'*******************************************************************************
                                  'Przerwanie Timera
'*******************************************************************************
Przerwanie:                                                   'co 250us
 Incr Co4ms
 If Co4ms = 16 Then
   Co4ms = 0
   '***************************************  co 4ms
   Set Zezw_wysw
   Incr Co100ms
   If Co100ms = 25 Then
     Co100ms = 0
     '*************************************** co 100 ms
     Set Zezw_przyc
     Incr Co1s
     If Co1s = 10 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():
 
          If Msb = 0 Then
            Reset Minus
            Tempa = Lsb / 2
          Else
            Set Minus
            Lsb = Not Lsb
            Tempa = Lsb / 2
            Tempa = Tempa + 1
          End If
 
        Else
          Tempa = 255                                         'Er wyswietli wyswietlacz potem
        End If
       End If
 
       Enable Interrupts
       '***************************************
     End If
     '***************************************
   End If
   '***************************************
 End If
Return
'*******************************************************************************
Przelicz:
 If Wysw < 100 Then
   Wysw1 = Wysw Mod 10
   Wysw1 = Lookup(wysw1 , Tabela)
   If Wysw > 9 Then
     Wysw10 = Wysw / 10
     Wysw10 = Lookup(wysw10 , Tabela)
   Else
     Wysw10 = 255                                             ' znika 0 na pierwszym miejscu
   End If
 Else
   Wysw1 = 175                                                'r
   Wysw10 = 134                                               'E
 End If
 
Return
'*******************************************************************************
Wyswietl:
  Incr Mux
  If Mux = 4 Then Mux = 0
 
  Select Case Mux
    Case 0:
     Set Portd.0
 
     If Minus = 1 Then
       If Wysw10 = 255 Then
        Portb = 255
       Else
        Portb = 191
       End If
     Else
       Portb = 255
     End If
 
     Reset Portd.3
    Case 1:
     Set Portd.3
 
     If Minus = 1 Then
       If Wysw10 = 255 Then
        Portb = 191
       Else
        Portb = Wysw10
       End If
     Else
      Portb = Wysw10
     End If
 
     Reset Portd.2
    Case 2:
     Set Portd.2
 
     Portb = Wysw1
 
     Reset Portd.1
    Case 3:
     Set Portd.1
 
     Portb = 70
 
     Reset Portd.0
  End Select
 
Return
'*******************************************************************************
                           'Tabela do wyswietlania na wyswietlaczu
'*******************************************************************************
Tabela:
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
'znak:    0     1     2     3     4     5     6     7     8     9
'*******************************************************************************




Portret użytkownika mirley

Re: temo

Popatrz na ustawienia fusebitów najpierw

-

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 marcin1828

Fuse bity ustawiłem zgodnie

Fuse bity ustawiłem zgodnie z: http://mirley.firlej.org/termometr_uniwersalny

Zmniejszyła się tylko częstotliwość migania. Po ok. 5 min wyświetla się "Er"(chyba error). Pewnie to jakiś błąd w kodzie.

Mam czujnik temp. Dallas DS1820, a na schemacie jest DS18S20(taki dali mi w sklepie). Może to jest problemem?

Portret użytkownika mirley

Re: Termometr

Poszukaj błędu w części sprzętowej.... a temperatura jest dobra tylko po jakimś czasie masz error czy nic nie pokazuje a po pewnym czasie error. Czujnik jest ok

-

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 marcin1828

No ale chyba to, że term nie

No ale chyba to, że term nie reaguje na przycisk(jak nacisnę w momencie wyświetlania wyświetlacz lekko słabiej świeci) nie świadczy o usterce sprzętowej. Co do sprzętu...
-cały układ wyświetlający(od procesora do wyświetlacza)jest w porządku, bo sprawdzałem.
-część "zasilająca" też, bo napięcie wynosi 5,15V
Oprócz tego mamy: czujnik, tiny2313, kwarc + 2x 33pF.
Nie wiem co mogłoby być nie tak jak powinno w sprzęcie. Upierałbym się jednak przy tym kodzie, ponieważ poprawiałem go sam(na podstawie "Termometr Uniwersalny") i nie jestem pewien do końca czy wszystko zrobiłem tak jak należy, bo jestem amatorem w BASCOM-ie.

Portret użytkownika mirley

Re: Termometr

No to tak.... teraz się zorientowałem. Pin na którym jest przycisk musi być ustawiony jako wejście. Tiny ma dwa typy wyprowadzeń, konfigurowane programowo. Jak pin jest wyjściem to aktywne są dwa tranzystory wyjściowe i stan jest dobrze określony. Jak taki pin zewrzesz do masy a jest w stanie wysokim to masz tak jakbyś zrobił zwarcie w układzie i możesz procka spalić. jak pin jest wejściem to można stan logiczny dowolnie wymuszać. Pin musi być ustawiony w takim wypadku na wysoki stan logiczny aby można było z niego czytać stan. Zmień konfiguracje na początku na taką:

Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B10101111 : Portd = &B11111111  'pierwszy bajt to konfiguracja a drugi to satn początkowy
'w konfiguracji 1 oznacza wyjście a 0 to wejście

Niżej w kodzie też jest problem bo są dwa rejestry portów, rejestr portx.y służy do ustawiania wartości portu, jeśli nóżka procka jest wejściem to z tego portu nic nie odczytasz. Do odczytu stanów z portu słuzy rejestr pinx.y. To taka subtelna różnica. Jak ustawiasz stan to piszesz portx.y = X, a jak czytasz to piszesz X = pinx.y

'*****************************************      'co 4ms
  If Portd.4 = 0 Then      'tu ma być pind.4 a nie portd.4
    Incr Przycisk
    If Przycisk = 200 Then
      Przycisk = 0
      Set Przyc
    End If
  Else
    Przycisk = 180
    Reset Przyc
  End If
 
  If Portd.6 = 0 Then  'tu ma być pind.6
........

-

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 gosc

Dzięki, ale nie mam jak

Dzięki, ale nie mam jak przetestować. Zmieniałem fusy w avr dude i teraz BASCOM nie może zidentyfikować tiny2313 ;/

Portret użytkownika mirley

Re: Fusy

Jak zmieniłeś fusy na kwarc to musisz dołączyć kwarc żeby procek działał prawidłowo itp. Chyba że źle ustawiłeś fusebity to mogło się coś przyblokować

-

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 gosc

Kwarc jest, obawiam się tej

Kwarc jest, obawiam się tej 2-giej opcji.

Portret użytkownika gosc

Da się jakoś zresetować ten

Da się jakoś zresetować ten procesor żeby miał ustawienia fabryczne?

Portret użytkownika mirley

Re: Programowanie

Programatorem szeregowym się nie da, chyba że ustawiłeś na zewnętrzny generator lub oscylator RC. Musiałbyś wiedzieć na co ustawiłeś albo poprostu podłączyć generator do procka

-

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 gosc

Fusebity

Jak mam ustawić fusebity w BascomAVR?

Portret użytkownika mirley

Re: Termometr

Wyglądają na dobrze ustawione.... linia KLA... jest na zrzucie obcięta ale jest tam nawias z wartościami CKSEL i SUT, powinno być tam [CKSEL=1111 SUT=11]

-

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 marcin1828

Jak zawsze: problemy :)

Witam
Ustawiłem [CKSEL=1111 SUT=11] i mam 3 problemy:
- temperatura bez zmian 0 stopni
- wyświetlacz nie świeci tylko mryga z wysoką częstotliwością
- jak widać na filmie, urządzenie nie reaguje na przycisk

Oto film ukazujący pracę termometru:
http://www.youtube.com/watch?v=pMh-OVE-iJk

Portret użytkownika mirley

Re: Termometr

A rezystor 4,7k od linii sygnałowej czujnika do +5V jest podłączony?

w kodzie:

If Co4ms = 16 Then    'tutaj zamiast 16 daj 4
   Co4ms = 0

Przyciskami to zajmiemy się jak temperatura zadziała

-

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 marcin1828

Temperatura dalej 0 st,

Temperatura dalej 0 st, natomiast poprawiła się częstotliwość. Teraz miga z superwysoką częstotliwością, z daleka dla oka wygląda jak normalne świecenie. Taka częstotliwość jest oczekiwana, Mirley? Czekam na kolejne instrukcje i oczywiście dziękuję za dotychczasowe ;)

Edit: Ale takiego rezystora nie ma na schemacie.

Portret użytkownika kaban

rezystor

na schemacie nie ma ale w opisie budowy jest to podane

Quote:
Od strony druku należy wlutować rezystor 4,7k podciągający magistralę 1-Wire (nóźka 9 układu U2) do plusa zasilania.

wlutuj rezystor w takim razie

Portret użytkownika marcin1828

Noo wreszcie sukces...

Noo wreszcie sukces...
Temperatura jest. Ale mam jeszcze 2 ale:
-wyświetlacz zbyt szybko gaśnie
-jak zgaśnie to już na amen(brak reakcji na przycisk)

Aaa i zróbcie coś z tym schematem, męczę się 2 miesiące z powodu jednego opornika...

Portret użytkownika mirley

Re: termometr

Piny z których czytasz stan maja być np pind.4 a nie portd.4, rejestr port jest do ustawiania stanów pinów a nie do czytania. Wszystkie wejścia mają być czytane poprzez pinx.y. Oczywiście wczesniej trzeba dana końcówkę zrobic wejściem na początku programu ale o tym juz pisałem.

Spróbuj zwiększyć tą wartość:

Autooff = 1500

Co do tego rezystora to trzeba uważnie czytać a potem robić.

W timerze spróbuj dać: Co4ms = 2 lub 3 to powinno przyspieszyć działanie

-

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 marcin1828

Przepraszam bardzo, ale coś

Przepraszam bardzo, ale coś tu się nie zgadza. Ja robię "termometr domowy", gdzie nie ma nic wspomniane o rezystorze 4,7k. Jest wspomniane w projekcie "termometr uniwersalny". Robiąc termometr nie myślałem że muszę łączyć dwa projekty w jeden. Chciałbym ustrzec przyszłych wykonawców przed tego typu niedopatrzeniem.

EDIT: Działa prawie idealnie, tylko co kilka sekund migają na zmianę temperatura i oC, da się jakoś tego uniknąć? I szkoda, że nie wyświetla nic po przecinku.

Jakie napięcie max. mogę podłączyć?

Portret użytkownika mirley

Re: Termometr

Można b dopisać do 0.5 stopnia ale zrezygnować ze znaku stopnia na końcu. Albo zastosować czujnik Ds18B20 i mieć do 0.1 stopnia wskazanie. To że czasem mignie wyświetlacz spowodowane jest odczytem ds18b20, może dało by się to jakość obejść ale to kwestia całkiem nowego programu

-

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 marcin1828

Zadowolę się na razie tym co

Zadowolę się na razie tym co jest :)
Ponowię pytanie: Jakie napięcie max. można podpiąć pod ten termometr? Mam jeszcze taki problem, że termometr nie działa po podpięciu go pod USB, molex, czy zasilacz 5V. Obecnie śmiga z zasilacza 6V.

Portret użytkownika mirley

Re: Termometr

Masz zrobiony termometr domowy i pewnie masz tez mostek prostowniczy i stabilizator 7805, Jakby mostka nie było to na wejście stabilizatora musisz podac napięcie 7-15V żeby on zrobił sobie pewne 5V na wyjściu i zasilał procka. Jak chcesz z USB to wywal stabilizator i mostek a napięcie z USB lub zasilacza podaj na uklad, bezpośrednio do procka. Pamiętaj ze wtedy może być zasilanie od 4.5 do 5V, przy wyższym procek się spali

-

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 marcin1828

W takim razie wyrzucę mostek

Podłączyłem napięcie 12V i gra. Dziękuję za pomoc :)