Digitalni sat sa M5451

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

User avatar
alpino005
Penjem se :)
Penjem se :)
Posts: 74
Joined: 27-10-2010, 18:29
Location: Sarajevo , BiH

Digitalni sat sa M5451

Post by alpino005 »

Dobio sam digitalni sat sa serijskom komunikacijom za koji nemam kontrolni dio koji šalje informaciju
ic kolu M5451 sa ukupno 35 bita koliko sam mogao da vidim iz data sheet.Htio bi da pokušam sa nekim mikrokontrolerom poslati serijsku informaciju i staviti ga u funkciju jer je većih dimenzija pa se vrijedi
potruditi. Dobro bi došli bilo koji dobronamjerni savjeti , nemam previše iskustva sa programiranjem a
radio sam sa pic16f84 i pic16f866 neke jednostavnije projekte.Možda dodati i DCF77 prijemnik za automatsku korekciju vremena, slične projekte sam već vidio na forumima samo sa običnim 7 segmentnim displejom i pic16f84.
Attachments
M5450_51.rar
M5451
(132.74 KiB) Downloaded 440 times
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Digitalni sat sa M5451

Post by pedja089 »

To nije sat, to je samo shift registar....
User avatar
alpino005
Penjem se :)
Penjem se :)
Posts: 74
Joined: 27-10-2010, 18:29
Location: Sarajevo , BiH

Re: Digitalni sat sa M5451

Post by alpino005 »

Jeste samo kolo M5451 ali se u ovom slučaju upotrebljeno kao drajver za led displej.Imam i bit tabelu pojedinih segmenata na 5 cifrenom 7 segmentnom displeju.U međuvremenu sam našao da koristi I2C , pitanje je dali pic može poslati 35 bita? Za originalni sklop nemam podataka osim dijela sa M5451 na koji bi trebalo dovesti clock i data , stim da clock može biti do 0,5Mhz. Trebalo bi pokušao riješiti sa definisanjem scl i sda uz i2cwrite.
Primjeri neredbe za I2CWRITE možda pomognu.
Attachments
Bit TABELA m5451.rar
(6.83 KiB) Downloaded 390 times
User avatar
alpino005
Penjem se :)
Penjem se :)
Posts: 74
Joined: 27-10-2010, 18:29
Location: Sarajevo , BiH

Re: Digitalni sat sa M5451

Post by alpino005 »

Slika Displeja sa M5451.
Attachments
Displej.rar
(223.62 KiB) Downloaded 401 times
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Digitalni sat sa M5451

Post by pedja089 »

Lose si nasao. Ne koristi I2C. Koristi najobicniju sinhronu serisku komunikaciju. Imas samo klok i data, postavis data na 1 ili 0, i posaljes 1 period kloka.
Moras napisati koji uC hoces da koristis, i koji jezik, pa ce ti vec neko pomoci...
Za pocetak spoji 2 tastera i 2 otpornika. Na data spoj pullup 10K, i taster prema masi i paralelno tasteru 100-330nF. Na clock spoj taster prema + otpornik prema masi, i kondezator 100-330nF paralelno otporniku.
I probaj rucno slati 1 i 0, pa ces videti sta se desava.
Probaj slati samo 1, pa ces videti sta se desava, pa salji prvu 1 pa nule...
Kad skontas kako radi, dalje ti nece biti problem napisati kod.
Zaboravih napisati dataenable na masu vezi...
User avatar
alpino005
Penjem se :)
Penjem se :)
Posts: 74
Joined: 27-10-2010, 18:29
Location: Sarajevo , BiH

Re: Digitalni sat sa M5451

Post by alpino005 »

Ok probat ću čim stignem. Ovo za I2c sam našao na nekoj web koja proizvodi nešto slično ovome.
User avatar
alpino005
Penjem se :)
Penjem se :)
Posts: 74
Joined: 27-10-2010, 18:29
Location: Sarajevo , BiH

Re: Digitalni sat sa M5451

Post by alpino005 »

To bi trebalo biti kao na šemi !
Attachments
Test.rar
(5.87 KiB) Downloaded 368 times
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Digitalni sat sa M5451

Post by pedja089 »

Tako je...
Samo nemoj zaboraviti data enable i onih par komponenti za struju led...
A verovatno i ima vec na ploci.
Iz grafika datasheeta koji si prilozio nacrtano je da se datamenja dok je klok na nuli, iz tog razloga sam ti rekao da stavis taster za klok tako. A sad kontam za data ce ti biti lakse ako je prekidac.
U principu to ti radi tako da se podatci upisuju u registar sve dok se ne isiftuje ona prva jedinica koja je nazvana start, i onda ona aktivira latch registar koji drzi stanja, i resetuje zatim shift registar. I iz latch se podaci preslikavaju na izlaz....
User avatar
alpino005
Penjem se :)
Penjem se :)
Posts: 74
Joined: 27-10-2010, 18:29
Location: Sarajevo , BiH

Re: Digitalni sat sa M5451

Post by alpino005 »

Spojeno i testirano , pali segmente neodređeno što je normalno jer tasterom neodređeno ide na data.
Ovaj M5451 nema data eneable samo m5450 tako da nisam morao vršiti prepravke.Ostalo je na originalnoj ploči već spojeno za jačinu svjetlosti i sve radi 4+1 .Samo sam morao raspored izlaza prema
segmentima displeja pojedinačno ispitati i napraviti novu tabelu za svaki bit koji segment na određenoj cifri je spojen.Sad mi ostaje da probam nešto sa pic16f84 pa tek onda vezano za vrijeme.
Attachments
Broj tabela ok.rar
(7.02 KiB) Downloaded 383 times
User avatar
alpino005
Penjem se :)
Penjem se :)
Posts: 74
Joined: 27-10-2010, 18:29
Location: Sarajevo , BiH

Re: Digitalni sat sa M5451

Post by alpino005 »

Evo jednog primjera ,pošto sam koristio i PBP probat ću nešto kao u primjeru.Nisam siguran kako se postavlja kod na forumu pa je u attacment-u.
Attachments
SLED4C_Tst.rar
(2.19 KiB) Downloaded 381 times
User avatar
alpino005
Penjem se :)
Penjem se :)
Posts: 74
Joined: 27-10-2010, 18:29
Location: Sarajevo , BiH

Re: Digitalni sat sa M5451

Post by alpino005 »

Testirano sa PIC16F876A i pali nedefinisane karaktere na displeju sa ovim primjerom koda.
Stim da M5451 nema data enable .

Code: Select all

                                   
'*  Notes   : Test code for the SLED4C 4-digit serial           *
'*          : LED / clock display module                        *


DEFINE OSC 20
DEFINE LOADER_USED 1    ' PIC16F876A @ 20MHz w/loader
include "modedefs.bas"

EN      var PORTB.5 ' Enable pin
CLK     var PORTB.6 ' Clock pin
DOUT    var PORTB.7 ' Data out pin
X       VAR WORD    ' GP var
Y       VAR BYTE    ' GP var
                    ' Digit #1 is the colon ":"
D2      VAR BYTE    ' Digit #2 rightmost digit
D3      VAR BYTE    ' Digit #3
D4      VAR BYTE    ' Digit #4
D5      VAR BYTE    ' Digit #5 leftmost digit
CFG     VAR BYTE    ' Holds display band/digit config value

TRISB = 0

Main:
    GOSUB Counter2  ' Count from 0 to 1000
    GOSUB LampTest  ' Lamp test with 8.8.:8.8. + blinking
    GOSUB PowerDown ' Demonstrates power-down mode
    GOSUB Clock     ' 4-digit clock from 16:50 to 17:00 w/blinking colon
    GOSUB Counter0  ' Colon ON + 100% bright, count on right 2, then 50% on left 2
    GOSUB Help      ' Display H.E.L.P. pulsing brightness from 50% to 100%
    GOSUB Counter1  ' High speed counter from 9994 to 0000 @ 50% brightness
    GOSUB Ouch      ' Display OUCH pulsing brightness from 50% to 100%
    GOTO  Main

PowerDown:            ' Routine to enter display low power mode (power down)
    CFG = %11110000   ' Digits 5,4 special decode/OFF, 3,2,1 HEX decode
    GOSUB Config
    PAUSE 3000
    RETURN
    
Counter0:   ' Count 00-14h on right 100% bright, then count on left with 50% bright
    CFG = %11110001   ' Digits 5,4 special decode/OFF, 3,2,1 HEX decode
    GOSUB Config
    
    ' Now write data to the display
    FOR X = 0 to 20   ' Count from 0 to 14h on digits 3 & 2 with leading 0 blanking
      EN = 0          ' Display banks         5     4   3\2  :=ON
      Shiftout DOUT, CLK, MSBFIRST, [%1000\4, $0\4, $0\4, X\8, $2\4]
      EN = 1          ' Disable display
      PAUSE 150       ' Display count from 0 to 14h
    NEXT X
    
    CFG = %11001101   ' Digits 5,4,1 HEX decode, 3,2 special/OFF
    GOSUB Config
    
    FOR X = 0 to 20   ' Count from 0 to 14h on digits 5 & 4 with leading 0 blanking
      EN = 0          ' Display banks       5\4    3     2   :=ON
      Shiftout DOUT, CLK, MSBFIRST, [%0000\4, X\8, $0\4, $0\4, $2\4]
      EN = 1          ' Disable display
      PAUSE 150       ' Display count from 0 to 14h
    NEXT X
    PAUSE 500
    Return
       
Counter1:   ' Count from 9994 to 0000
    CFG = %11000011   ' All digits HEX decode
    GOSUB Config
    
    ' Now write data to the display
    D2=4 : D3=9 : D4=9 : D5=9 ' Load count values
    FOR X = 0 to 6    ' Count from 9994 to 0000
      EN = 0          ' Enable display
      IF D2 > 9 THEN D2=0 : D3=D3+1 ' Increment each higher digit # on 9
      IF D3 > 9 THEN D3=0 : D4=D4+1 ' value of each lower digit # for BCD
      IF D4 > 9 THEN D4=0 : D5=D5+1 ' counting
      IF D5 > 9 THEN D5=0        '    dim      5     4     3     2    :=OFF
      Shiftout DOUT, CLK, MSBFIRST, [%0000\4, D5\4, D4\4, D3\4, D2\4, $0\4]
      EN = 1          ' Disable display
      PAUSE 500       ' Without pause, display can count from 0 to 9999 in ~6 seconds
      D2=D2+1         ' Increment counter
    NEXT X
    PAUSE 500
    Return
    
Counter2:   ' Count from 0 to 1000
    CFG = %11000011   ' All digits HEX decode
    GOSUB Config
    
    ' Now write data to the display
    D2=0 : D3=0 : D4=0 : D5=0 ' Load count values with 0000
    FOR X = 0 to 1000    ' Count from 0 to 1000
      EN = 0          ' Enable display
      IF D2 > 9 THEN D2=0 : D3=D3+1 ' Increment each higher digit # on 9
      IF D3 > 9 THEN D3=0 : D4=D4+1 ' value of each lower digit # for BCD
      IF D4 > 9 THEN D4=0 : D5=D5+1 ' counting
      IF D5 > 9 THEN D5=0'         bright    5     4     3     2    :=OFF
      Shiftout DOUT, CLK, MSBFIRST, [%0000\4, D5\4, D4\4, D3\4, D2\4, $0\4]
      EN = 1          ' Disable display
      PAUSE 20        ' Without pause, display counts from 0 to 9999 in ~6 seconds
      D2=D2+1         ' Increment counter
    NEXT X
    PAUSE 500
    Return
    
Help:   ' Display H.E.L.P. while toggling brightness from 100% to 50%
    CFG = %11101111    ' Special decode 5,3,2,1. 4 = normal
    GOSUB Config
    
    ' Now write H.E.L.P. to display blinking 50% to 100% brightness
    Y = %10001111      ' Setup bit 3 for toggling display brightness
    FOR X = 0 to 4     ' and all DP's ON
      EN = 0           ' Enable display
      Y.0[3] = Y.0[3] ^ 1' Flip Y.bit.3 by XOR-ing with 1 [ 0=DIM, 1=BRIGHT ]
      '           Y = brightness & DP's   5     4     3     2   :=OFF
      SHIFTOUT DOUT, CLK, MSBFIRST, [Y\4, $2\4, $E\4, $5\4, $8\4, $0\4]
      EN = 1           ' Disable display
      PAUSE 200
    NEXT X
    PAUSE 500
    RETURN
    
Ouch:   ' Display OUCH while toggling brightness from 100% to 50%
    CFG = %11010111   ' Special decode 4,2,1. 3,5 = normal
    GOSUB Config
    'en = 0
    'SHIFTOUT DOUT, CLK, MSBFIRST,[%11010111]
    'EN = 1
    
    ' Now write OUCH to display
    Y = %00001000      ' Set bit 3 for toggling brightness & all DP's OFF
    FOR X = 0 to 4
      EN = 0           ' Enable display
      Y.0[3] = Y.0[3] ^ 1' Flip Y.bit.3 by XOR-ing with 1 [ 0=DIM, 1=BRIGHT ]
      '                                   5     4     3     2   :=OFF
      SHIFTOUT DOUT, CLK, MSBFIRST, [Y\4, $0\4, $A\4, $C\4, $2\4, $0\4]
      '                              ^--- bit 3 of 4-bit value toggles brightness
      EN = 1           ' Disable display
      PAUSE 200
    NEXT X
    PAUSE 500
    RETURN

LampTest:  ' Lamp test 8.8.:8.8.
    CFG = %11000001    ' All digits normal HEX decode
    GOSUB Config
    
    ' Now write 8.8.:8.8.
    EN = 0             ' Enable display 5=8  4=8   3=8    2=8  :=ON
    SHIFTOUT DOUT, CLK, MSBFIRST, [$F\4, $8\4, $8\4, $8\4, $8\4, $2\4]
    '                               ^-- bright display + all DP's ON
    EN = 1             ' Disable display
    PAUSE 250
    ' Now blink display ON & OFF 3 times
    ' Note: Toggling bit.0 of the 8-bit config byte toggles the
    ' display ON (1) & OFF (0) for normal/low power modes
    FOR X = 0 to 2
     CFG = %11000000    ' All digits HEX decode
     GOSUB Config
     PAUSE 250
     CFG = %11000001    ' All digits normal HEX decode
     GOSUB Config
     PAUSE 250
    NEXT X
    RETURN
    
Clock: ' 24-hour clock times from 16:50 to 17:00 w/blinking colon
    CFG = %11000011   ' 5,4,3,2 HEX decode, 1 special decode
    GOSUB Config
    Y = 8             ' Used to toggle colon 8 = ON, 0 = OFF
    ' Now write data to the display
    D5=1 : D4=6 : D3=5 : D2=0 ' Load clock value with 1650 on start
    FOR X = 0 to 10   ' Display clock time from 16:50 to 17:00
      EN = 0          ' Enable display
      IF D2 > 9 THEN D2=0 : D3=D3+1 ' Increment each higher digit on 9
      IF D3 > 5 THEN D3=0 : D4=D4+1 ' Roll-over from 59 minutes
      IF D4 > 9 THEN D4=0 : D5=D5+1 ' Roll-over from hours to tens hours
      IF D5 > 2 THEN D5=0           ' Never > 2 for 10's hour digit
      IF (D5 = 2) AND (D4 > 3) THEN ' Roll-over from 23:59 to 00:00
       D5 = 0 : D4 = 0
      ENDIF'                           dim    5=1   4=6  3=5-0 2=0-9 :=Toggle/Blink colon
      Shiftout DOUT, CLK, MSBFIRST, [%0000\4, D5\4, D4\4, D3\4, D2\4, Y\4]
      Y = Y ^ 8       ' 8^8=0, 0^8=8
      EN = 1          ' Disable display
      PAUSE 250       ' Update frequency or clock ticks
      D2=D2+1         ' Increment low digit counter
    NEXT X
    PAUSE 500
    Return
    
Special:   ' Display characters in special decode mode
    CFG = %11111111   ' All digits special decode
    GOSUB Config
   
    ' Now write data to the display
    FOR Y = 0 to 15   ' Display all 15 special characters
      EN = 0          ' Enable display   
      Shiftout DOUT, CLK, MSBFIRST, [%0000\4, Y\4, Y\4, Y\4, Y\4, $0\4]
      EN = 1          ' Disable display
      PAUSE 250       ' Set display update speed
    NEXT Y
    PAUSE 500
    Return   
    
NoDecode:   ' Display with no decode       
    CFG = %00111111   ' All digits special decode
    GOSUB Config
   
    ' Now write data to the display
    FOR Y = 0 to 15   ' Display all 15 special characters
      EN = 0          ' Enable display   
      Shiftout DOUT, CLK, MSBFIRST, [%1000\4, Y\4, Y\4, Y\4, Y\4, $0\4]
      EN = 1          ' Disable display
      PAUSE 200       ' Set display update speed
    NEXT Y
    PAUSE 500
    Return
    
Config:
    EN = 0             ' Enable display
    Shiftout DOUT, CLK, MSBFIRST, [CFG] ' Write to display config register
    EN = 1             ' Disable display
    return
                
    End
 
User avatar
alpino005
Penjem se :)
Penjem se :)
Posts: 74
Joined: 27-10-2010, 18:29
Location: Sarajevo , BiH

Re: Digitalni sat sa M5451

Post by alpino005 »

trebam pomoć oko naredbe :

SHIFTOUT DataPin,ClockPin,Mode,[Var{\Bits}...]

primjer:
ShiftOut DOUT, CLK, MSBFIRST, [% 0000 \ 4, D5 \ 4, D4 \ 4, D3 \ 4, D2 \ 4, Y \ 4]
data clock highest bit first ????????????? dig5 ? ????
pin pin

za displej drajver trebam slati za svaku cifru 7 bit-a i ukupno 35. Data i clock pin definisani samo
u zagradi mi je nejasno dali /4 znači 4 bita i na kraju y/4 šta definiše .
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Digitalni sat sa M5451

Post by pedja089 »

To su sve promenljive ili konstante. A posle kose crte oznacava broj bitova koji se salje. Definisi 2 promenljive tipa word. I to ti je 32 bajta i jes jedan bajt i to je to... Za mod pogledaj help... Ima lepo objasnjeno.
User avatar
alpino005
Penjem se :)
Penjem se :)
Posts: 74
Joined: 27-10-2010, 18:29
Location: Sarajevo , BiH

Re: Digitalni sat sa M5451

Post by alpino005 »

Problem se javlja zbog samog riješenja da je ostavljano 7 bita za svaki broj na displeju.Tako da za svaki broj npr. desetice sat , jedinice sat , desetice minuti,jedinice minuti i dodatni imaju rezervisano samo
7 bita .Stim da svaki bi trebao odvojiti u posebnu vrijablu.U slučaju da se pošalje bit više remeti kompletan prikaz na ostalim brojevima na displeju.Što je logično jer je urađen sa shift registrom.Još jedna stvar da imaju redosljed na displeju 12354.Neda mi se da to ispravim na originalnoj štampanoj ploči pa pokušavam da svaku cifru odvojeno pošaljem.Tek na kraju ostaje uključenje DS1307 sa vremenom ili slično.Predpostavljam da postoji riješenje ali još nisam našao.
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Digitalni sat sa M5451

Post by pedja089 »

Uzmi sa svaku cifru po 1 bajt, i salji samo 7 bita... Tako je sve jedno kako ces spakovati to i poslati.
User avatar
alpino005
Penjem se :)
Penjem se :)
Posts: 74
Joined: 27-10-2010, 18:29
Location: Sarajevo , BiH

Re: Digitalni sat sa M5451

Post by alpino005 »

Probao sam na više načina i sa ovim kodom ispiše sve cifre 88 : 88 8 ali kad promjeniš neke od brojeva
npr. upišem 0 umjesto 8 sve je ok , međutim pri upisu drugog broja npr 4 desi se da se sve pomjeri za bit
i poremeti ostale cifre npr 8 4 : - 3.sigurno je da griješim pa pokušavan naći gdje? :D

Code: Select all

Include "modedefs.bas"  ; Include shift modes

D1PIN Var PORTB.7       ; Shift data pin 1
C1PIN Var PORTB.6       ; Shift clock pin 1


f1  Var word
f2  Var word
f3  Var word
f4  Var word
f5  Var word
f6  var word
mainloop:

f1=%1111111 ; sat desetice
f2=%1111111  ;dodatna cifra
f3=%1111111 ; sat jedinice
f4=%1111111 ; minuti desetice
f5=%1111111 ; minuti jedinice 


   ; Shift in 7 bits data za svaku promjenjivu od f1-f5
   Shiftout D1PIN, C1PIN, MSBPRE, [$0001,f5\7,f4\7,f3\7,f2\7,f1\7]
  
   Pause 1000
   Goto mainloop

   End
User avatar
alpino005
Penjem se :)
Penjem se :)
Posts: 74
Joined: 27-10-2010, 18:29
Location: Sarajevo , BiH

Re: Digitalni sat sa M5451

Post by alpino005 »

Izdgleda da je bio problem u smjeru slanja pa kad sam MSBPRE zamjenio sa LSBPRE to jest mod
uspio sam ispisati 12:34 5 na displeju.

Code: Select all

Include "modedefs.bas"  ; Include shift modes

D1PIN Var PORTB.7       ; Shift data pin 1
C1PIN Var PORTB.6       ; Shift clock pin 1


f1  Var word
f2  Var word
f3  Var word
f4  Var word
f5  Var word
f6  var word
mainloop:

f1=%0110000 ; sat desetice
f2=%1011011  ;dodatna cifra
f3=%1101101 ; sat jedinice
f4=%1111001 ; minuti desetice
f5=%0110011 ; minuti jedinice 


   ; Shift in 7 bits data za svaku promjenjivu od f1-f5
   Shiftout D1PIN, C1PIN,LSBPRE, [$0001,f5\7,f4\7,f3\7,f2\7,f1\7]
  
   Pause 800
   Goto mainloop

   End
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Digitalni sat sa M5451

Post by pedja089 »

Odlicno.
Sad mozes dalje...
User avatar
alpino005
Penjem se :)
Penjem se :)
Posts: 74
Joined: 27-10-2010, 18:29
Location: Sarajevo , BiH

Re: Digitalni sat sa M5451

Post by alpino005 »

Ne znam dali bi mogao koristiti select case da svaki broj konvertujem u 7 bita.Ovo je upotrebljeno u jednom primjeru sat-a sa pic16f84 i pojedinačnim 7 segmentnim displeima.

Code: Select all

select case n
case 0  result =%1111110 ; 7 bita za broj 0 itd..
case 1  result =$0110000 
case 2  result =%1101101 
case 3  result =%1111001 
case 4  result =%0110011 
case 5  result =%1011011 
case 6  result =%1011111 
case 7  result =%1110000
case 8  result =%1111111 
case 9  result =%1111011 
end select
end sub
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Digitalni sat sa M5451

Post by pedja089 »

Identicno moze i ovde...
Post Reply