Veliki LED sat

Prije desetak godina u suradnji sa jednom domaćom firmom razvio sam proizvod koji je elektronski moj od početka do kraja. Ideja je bila da se napravi veliki vanjski, odnosno unutrašnji (za zatvoreni prostor) LED sat koji bi bio uočljiv sa velike udaljenosti. Prikaz na njemu je vrijeme, datum i temperatura.



Osnova svega je mikrokontroler firme Atmel 89c4051 uz pomoć Dalasovih PCF8583 za vrijeme i DS1820 za temperaturu. U slučaju nestanka napajanja (ili prenosa sata) postoji baterija za nužno napajanje. Štampane pločice su mog dizajna , a izrađene u Tiplon-u, Zagreb.

Komunikacija osnovne ploče sa displejima je serijskog karaktera, te se prikaz može i udaljiti od osnovne elektronike. To sam rješenje upotrebio na projektima za velike nogometne semafore (taj projekat kasnije). Na pločama prikaza nalazi se 11 LED sa serijskim otporom; i tako tri reda u paraleli za prikaz jednog segmenta brojke. Upravljanje LED-a je preko poznatog drajvera ULN2003 i serijsko- paralelnog čipa 74HC595. Napajanje prikaza je 30V istosmjerno, a elektronike 5V.


Ovo je osnovna ideja prikaza. Slika je mala, ali evo link   http://www.circuitdiagramlinks.com/355-spi-interface-big-7-seg-led-using-74hc595/
Večina mojih uradaka je iz glave, a samo pločica se projektira, te ona ostaje u računalu. Neke stvari postoje na papiru, pa ću ih pokušati skenirati i ovdje prezentirati.



Ovo je varijanta jedne izvedbe. Kako su išle nove verzije tako se i program nadopunjavao.

 '                         (c) Boris Felc 2000
'       Sat sa pcf8583
'           Temperatura sa DS 1820
'                Prikaz na displej i serijski na 74595
'  20.12.2004.
' Zadnja revizija 05.05.2005.    podešavanje temperature   X=X-2
'-------------------------------------------------------------------------------
  $large

  Declare Sub Temperatura
   Declare Sub Settime(s As Byte , M As Byte , H As Byte , Dan As Byte , Mjesec As Byte )
   Declare Sub Gettime
   Declare Sub Prikaz
   Declare Sub Vrijeme
   Declare Sub Datum

   Dim I As Byte , Ii As Byte , Tmp As Byte , Pom As Byte
   Dim Broj As Byte , Segment As Byte , Izlaz As Byte
   Dim Tis As Byte , Sto As Byte , Des As Byte , Jed As Byte , Sek As Byte
   Dim Sekdis As Byte , Minus As Byte , Tipke As Byte
   Dim S As Byte , M As Byte , H As Byte , D As Byte
   Dim Dan As Byte , Mjesec As Byte
   Dim Bd(9) As Byte
   Dim T As Integer , T1 As Integer , T2 As Integer
   Dim X As Byte , X1 As Byte
   Dim Temp As Byte , Dat As Byte , Temp1 As Byte , Dat1 As Byte

   Config 1wire = P1.0
   Config Sda = P3.5
   Config Scl = P3.7

   S1 Alias P3.2
   S2 Alias P3.3
   S3 Alias P3.4

   Podatak Alias P1.6
   Store Alias P1.4
   Clock Alias P1.5


'-------------------------------------------------------------------------------
   'Call Settime(0 , 40 , 16 , 6 , 5 )
'-------------------------------------------------------------------------------

    Minus = 10
    Tipke = 0
    Temp = 3
    Dat = 3

    Reset Store
    Reset Clock
    Set Podatak

'-------------------------------------------------------------------------------

   Do

        Call Vrijeme
                Debounce S1 , 0 , Tipka , Sub
        If Temp > 0 Then
        Call Temperatura
                Debounce S1 , 0 , Tipka , Sub
        End If
        If Dat > 0 Then
                Debounce S1 , 0 , Tipka , Sub
        Call Datum
        End If
   Loop

'-----------------------------------------------------------------------------

 Sub Vrijeme
            Minus = 10
           For Pom = 1 To 20
        Waitms 1
        Call Gettime
        Tis = H / 10 : Tmp = Tis * 10
        Sto = H - Tmp
        Des = M / 10 : Tmp = Des * 10
        Jed = M - Tmp
         Sekdis = 11

         Sek = S / 2 : Tmp = Sek * 2
         If S = Tmp Then
         Sekdis = 10
      End If
         If Tis = 0 Then
         Tis = 10
         End If
    Call Prikaz
    Next
 End Sub

'-----------------------------------------------------------------------------
 Sub Datum
            Minus = 10

        Call Gettime
        Tis = Dan / 10 : Tmp = Tis * 10
        Sto = Dan - Tmp
        Des = Mjesec / 10 : Tmp = Des * 10
        Jed = Mjesec - Tmp
         Sekdis = 14

         If Tis = 0 Then
         Tis = 10
         End If
         If Des = 0 Then
         Des = 10
         End If
            Dat1 = Dat * 4
            For Pom = 0 To Dat1
            Waitms 1
    Call Prikaz
            Next
 End Sub

'-----------------------------------------------------------------------------
Sub Temperatura
    1wwrite &HCC : 1wwrite &H44
    Waitms 250
    Waitms 250
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    Bd(1) = 1wread(2)
    1wreset
    X = Bd(1)
    Shift X , Right , 1
    X1 = Bd(2) And 1
        X = X - 2
    If X1 = 1 Then
    Minus = 14
    X = X - 1
    X = Not X
    X = X And 127
    End If

      Tis = X / 10 : Tmp = Tis * 10 : Sto = X - Tmp
      If Tis = 0 Then : Tis = 10 : End If
      Des = 12 : Jed = 13 : Sekdis = 10
    Temp1 = Temp * 4
    For Pom = 0 To Temp1
    Waitms 1
      Call Prikaz
    Next
End Sub

'-----------------------------------------------------------------------------

Sub Gettime
   I2cstart
   I2cwbyte &HA0
   I2cwbyte 2
   I2cstart
   I2cwbyte &HA1
   I2crbyte S , Ack
   I2crbyte M , Ack
   I2crbyte H , Ack
   I2crbyte Dan , Ack
   I2crbyte Mjesec , Nack
   I2cstop
   S = Makedec(s)
   M = Makedec(m)
   H = Makedec(h)
   Dan = Makedec(dan)
   Mjesec = Makedec(mjesec)
End Sub

'-----------------------------------------------------------------------------

Sub Settime(s As Byte , M As Byte , H As Byte , Dan As Byte , Mjesec As Byte)
    S = Makebcd(s)
    M = Makebcd(m)
    H = Makebcd(h)
   Dan = Makebcd(dan)
   Mjesec = Makebcd(mjesec)
      I2cstart
      I2cwbyte &HA0
      I2cwbyte 0
      I2cwbyte 8
      I2cstop
      I2cstart
      I2cwbyte &HA0
      I2cwbyte 2
      I2cwbyte S
      I2cwbyte M
      I2cwbyte H
      I2cwbyte Dan
      I2cwbyte Mjesec
      I2cstop
End Sub
'-------------------------------------------------------------------------------
Tipka:
    Incr Tipke
' Namještanje sata
        While Tipke = 1
            Call Gettime
            Des = 10
            Jed = 10
            Tmp = H
        Debounce S3 , 0 , Podesi , Sub : H = Tmp
            If H > 23 Then : H = 0
            End If
            Tis = H / 10
            Tmp = Tis * 10
            Sto = H - Tmp
            Sekdis = 11
    Call Prikaz
    Call Settime
        Debounce S1 , 0 , Tipka , Sub
Wend

'Namještanje minuta
        While Tipke = 2
            Call Gettime
            Tis = 10
            Sto = 10
            Tmp = M
        Debounce S3 , 0 , Podesi , Sub : M = Tmp
            If M > 59 Then : M = 0 : End If
            Des = M / 10
            Tmp = Des * 10
            Jed = M - Tmp
            Sekdis = 11
            S = 0
    Call Prikaz
    Call Settime
        Debounce S1 , 0 , Tipka , Sub
Wend

' Namještanje dana
        While Tipke = 3
            Call Gettime
            Des = 10
            Jed = 10
            Tmp = Dan
        Debounce S3 , 0 , Podesi , Sub : Dan = Tmp
            If Dan > 31 Then : Dan = 1 : End If
            Tis = Dan / 10
            Tmp = Tis * 10
            Sto = Dan - Tmp
            Sekdis = 14
    Call Prikaz
    Call Settime
        Debounce S1 , 0 , Tipka , Sub
Wend

'Namještanje mjeseca
        While Tipke = 4
            Call Gettime
            Tis = 10
            Sto = 10
            Tmp = Mjesec
        Debounce S3 , 0 , Podesi , Sub : Mjesec = Tmp
            If Mjesec > 12 Then : Mjesec = 1 : End If
            Des = Mjesec / 10
            Tmp = Des * 10
            Jed = Mjesec - Tmp
            Sekdis = 14
    Call Prikaz
    Call Settime
        Debounce S1 , 0 , Tipka , Sub
Wend

'Namještanje trajanja datuma
   While Tipke = 5
   Sto = 10
   Des = 10
   Jed = 10
   Tmp = Dat
   Debounce S3 , 0 , Podesi , Sub : Dat = Tmp
   If Dat > 5 Then : Dat = 0 : End If
   Tis = Dat
   Sekdis = 14
   Call Prikaz
   Debounce S1 , 0 , Tipka , Sub
Wend
'Namještanje trajanja temperature
   While Tipke = 6
   Sto = 10
   Des = 12
   Jed = 13
   Tmp = Temp
   Debounce S3 , 0 , Podesi , Sub : Temp = Tmp
   If Temp > 5 Then : Temp = 0 : End If
   Tis = Temp
   Sekdis = 10
   Call Prikaz
   Debounce S1 , 0 , Tipka , Sub
Wend
'Povrat u program
    If Tipke > 6 Then
        Tipke = 0
        Return
    End If

'-----------------------------------------------------------------------------

Podesi:
   Incr Tmp
Return

'-----------------------------------------------------------------------------


Sub Prikaz

       For Ii = 0 To 5

       If Ii = 0 Then : Broj = Jed : End If
       If Ii = 1 Then : Broj = Des : End If
       If Ii = 2 Then : Broj = Sekdis : End If
       If Ii = 3 Then : Broj = Sto : End If
       If Ii = 4 Then : Broj = Tis : End If
       If Ii = 5 Then : Broj = Minus : End If

   Restore Tabela
   For I = 0 To 14
   Read Segment
   Waitms 1
   If I = Broj Then
   Izlaz = Segment
   Exit For
   End If
   Next
            For I = 0 To 7
   Reset Clock
          'Waitms 1
          Broj = Izlaz And &H80
          If Broj = 0 Then
   Reset Podatak
          Waitms 1
          Else
   Set Podatak
          Waitms 1
          End If
   Set Clock
          Waitms 1
          Rotate Izlaz , Left
          Waitms 1
   Reset Clock
          Waitms 1
             Next
         Next Ii
   Set Store
         Waitms 1
   Reset Store
         Waitms 1
End Sub


Tabela:
'  Data  0  , 1  ,  2  ,   3 ,  4  ,  5  ,  6  ,  7  ,  8  ,  9    ,blank,:, *,   C,    -,
' a=128, b=64, c=32, d=16, e=8, f=4, g=2
   Data 252 , 96 , 218 , 242 , 102 , 182 , 190 , 224 , 254 , 246 , 0 , 64 , 198 , 156 , 128











3 komentara:

  1. Da vidite da ovaj proizvod ima svoju cijenu:
    http://static1.rtl-hrvatska.hr/image/prva-presuda-ivi-sanaderu-u-slikama-2158c87626cb4aefac7660078d2cdf4b_slideshow_fg.jpg?v=17

    OdgovoriIzbriši
  2. Druze kako si spojio aluminijumske profile koji su okvir ovog sata ??
    Sigurno se ne vare jer je eloksirani pa me interesuje da li se srafe ili lepe i kako si uopste izolovao unutrasnjost sata od kise , snega .
    Pozdrav

    OdgovoriIzbriši
    Odgovori
    1. Evo dodao sam novu sliku, na kojoj se u gornjem dijelu može vidjeti kutnik koji se priteže na profil. Unutrašnjost nije dodatno štičena. Dosta satova ima na moru, gdje je bura, jugo... i nema problema. Ako šta uđe; i izači će...

      Izbriši