Witam!
Zbudowałem termometr w oparciu o ten schemat:
tylko zamiast wyświetlacza 3 pozycyjnego użyłem 4 pozycyjnego:
http://sklep.avt.pl/photo/_pdf/TOF5462.pdf
Jeden segment (DIG.4.) podpiąłem pod PIND.6.
Oto program jaki napisałem:
Ale niestety popełniłem błąd i nie wiem gdzie ponieważ program nawet nie chce się skompilować.
Osiągnąć chciałem to aby temperatura byłą wyświetlana na DIG4, DIG3, DIG2 a znak temperatur ujemnych "-" powinien się wyświetlać na DIG1 chyba ze będzie temperatura jednocyfrowa np -4,5 stopnia to znak "-" na DIG2
Mam nadzieję, że w miarę zrozumiale to wyjaśniłem
Z góry dziękuję za odpowiedź!
Pozdrawiam!
Projekt nie jest kolegi autorstwa więc proszę podać źródło projektu.
Robak
Oczywiście już poprawiam swój błąd
Źródło: http://mirley.firlej.org/termometr_uniwersalny
Zbudowałem termometr w oparciu o ten schemat:
tylko zamiast wyświetlacza 3 pozycyjnego użyłem 4 pozycyjnego:
http://sklep.avt.pl/photo/_pdf/TOF5462.pdf
Jeden segment (DIG.4.) podpiąłem pod PIND.6.
Oto program jaki napisałem:
'****************************
'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
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
Wysw1 = Lookup(wysw1 , Tabela)
Wysw10 = Lookup(wysw10 , Tabela2)
Wysw100 = Lookup(wysw100 , Tabela)
Wysw1000 = 255
If Wysw100 = 192 Then
Wysw100 = Lookup(wysw100 , Tabela) 'wygaszenie zera wiodšcego
if Minus = 1 then Wysw100.6 = 0
else
if Minus = 1 then Wysw1000.6 = 0
end if
Else
Wysw1 = 175 'r
Wysw10 = 175 'r
Wysw100 = 134 'E
Wysw1000 = 255
End If
Return
Wyswietl:
Incr Mux
If Mux = 4 Then Mux = 0
Select Case Mux
Case 0:
Set Portd.6
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
Case 3:
Set Portd.0
Portb = Wysw1000
Reset Portd.6
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 niestety popełniłem błąd i nie wiem gdzie ponieważ program nawet nie chce się skompilować.
Osiągnąć chciałem to aby temperatura byłą wyświetlana na DIG4, DIG3, DIG2 a znak temperatur ujemnych "-" powinien się wyświetlać na DIG1 chyba ze będzie temperatura jednocyfrowa np -4,5 stopnia to znak "-" na DIG2
Mam nadzieję, że w miarę zrozumiale to wyjaśniłem
Z góry dziękuję za odpowiedź!
Pozdrawiam!
Projekt nie jest kolegi autorstwa więc proszę podać źródło projektu.
Robak
Oczywiście już poprawiam swój błąd
Źródło: http://mirley.firlej.org/termometr_uniwersalny