જાતે ગતિશીલ પ્રદર્શન કેવી રીતે બનાવવું. બહુ-અંક સાત-સેગમેન્ટ સૂચક

ડીસૂચક પર મલ્ટી-ડિજિટ નંબર પ્રદર્શિત કરવા માટે, તમારે પહેલા તેની સાથે એક મુશ્કેલ મેનીપ્યુલેશન કરવું આવશ્યક છે, જેમાં સંખ્યાને તેના ઘટકોમાં તોડવાનો સમાવેશ થાય છે. ઉદાહરણ તરીકે, હું સામાન્ય એનોડ સાથે ક્વોડ સાત-સેગમેન્ટ સૂચક પર 1234 નંબરનું પ્રદર્શન આપીશ.


ચાર-અંકની સંખ્યા દર્શાવવા માટે, તમારે એક સામાન્ય ચલ બનાવવાની જરૂર છે જેમાં તમે જે નંબર દર્શાવવા માંગો છો તે આવેલું હશે (ચલ ડબલ્યુ), ચાર ચલ જેમાં દરેક ચિહ્ન માટે ડેટા સંગ્રહિત કરવામાં આવશે (એન) અને મધ્યવર્તી પરિવર્તન માટે ચાર વધુ ચલ (એમ), જેથી મુખ્ય ચલને સ્પર્શ ન થાય. ચલ એ મૂલ્યને અનુરૂપ હોવું જોઈએ જે તેમાં સંગ્રહિત થશેઆઈ. તેથી ચલ માટેડબલ્યુપ્રકાર પૂરતો હશેપૂર્ણાંક , કારણ કે આ પ્રકારનું ચલ સ્ટોર કરવા માટે સક્ષમ છેમૂલ્યોને -32768 થી +32767 માં બદલો (અથવાશબ્દ જ્યાં સુધી તમે નકારાત્મક સંખ્યાઓનો ઉપયોગ કરવાની યોજના ન કરો). ચલોમાંએન0 થી 9 સુધીની સંખ્યાઓ હશે, તેથી ચલનો ઉપયોગ કરીને જેમ કેબાઈટ
. અને ચલોમાંએમ હશેવેરીએબલમાં સમાન મૂલ્યોડબલ્યુ, તેથી અમે પ્રકાર સેટ કરીએ છીએ પૂર્ણાંક .

પૂર્ણાંક તરીકે ડબલ્યુ મંદ કરો
ડિમ N1 બાઈટ તરીકે
ડિમ N2 બાઈટ તરીકે
ડિમ N3 બાઈટ તરીકે
ડિમ N4 બાઈટ તરીકે
પૂર્ણાંક તરીકે મંદ M1
પૂર્ણાંક તરીકે મંદ M2
પૂર્ણાંક તરીકે મંદ M3
પૂર્ણાંક તરીકે મંદ M4


ચલો જાહેર કર્યા પછી, અમે આઉટપુટ પોર્ટને ગોઠવીએ છીએજેનો ઉપયોગ સૂચકને જોડવા માટે કરવામાં આવશે:

DDRC = &B11111111
DDRD = &B11111111


DDRC =&B 00001111 અને DDRD =&B 01111111 (પોર્ટ સી.ના ચાર પ્રથમ પગએનોડ અને પ્રથમ છ બંદરો માટેવિભાગો માટે ડી).

પછી આપણે વેરીએબલને સોંપીએ છીએડબલ્યુ મૂલ્ય જે આપણે સૂચક પર પ્રદર્શિત કરવા જઈ રહ્યા છીએ:

W=1234

"Arial","sans-serif""> પ્રોગ્રામના મુખ્ય લૂપમાં આપણે વેરીએબલ M ને વેરીએબલની વેલ્યુ અસાઇન કરીએ છીએડબલ્યુ, હું આ કરું છું:

M1 = W
M2 = M1
M3 = M1
M4 = M1


"Arial","sans-serif""> આ પેરાનોઇયા નથી)), આ ધ્યેય સાથે કરવામાં આવે છે કે બધા ચલ M માં સમાન સંખ્યા હોય, કારણ કે સોંપણીની કામગીરી દરમિયાન એક વિક્ષેપ સરળતાથી તૂટી શકે છે (જો ત્યાં એક હોય અને અક્ષમ ન હોય), જેના હેન્ડલરમાં ચલડબલ્યુ બદલી શકે છે. અને જો અસાઇનમેન્ટ આના જેવું થયું: M1= W , M 2= W , M 3= W , M 4= W ચલ M વિવિધ મૂલ્યો ધરાવશે, જે રીડિંગ્સમાં ગડબડ તરફ દોરી જશે.

ચલોને મૂલ્યો સોંપ્યા પછી, અમે તેની સાથે કામ કરવાનું શરૂ કરીએ છીએ
તેમાંથી દરેક, એવી રીતે રૂપાંતરિત થાય છે કે ચલમાંએન જે મૂલ્ય હશે તેને દબાવો
સૂચક પર પ્રદર્શિત થાય છે: ચલમાં
એન 1 એ "1", માં હોવું જોઈએ N 2 – “2”, N 3 – “3” માં, અને N 4 – “4” માં.

M1 = M1 / ​​1000 " M1 = 1234 / 1000 = 1.234
N1 = Abs (m1) " N1 = Abs (1.234) = 1

એબ્સ – એક ફંક્શન કે જે વેરીએબલને પૂર્ણાંક નંબર પરત કરે છેએન 1 હિટ એક, જે જરૂરી હતું તે બરાબર છે.

ચલને બે સોંપવા માટેએન ઓપરેશન 2 થોડું વધુ જટિલ હશે:

M2= M2 મોડ 1000 " M2 = 1234 મોડ 1000 = 234
M2 = M2 / 100 " M2 = 234 / 100 = 2.34
N2= Abs (m2) " N2 = Abs (2.34) = 2

"Arial","sans-serif""> સાથે શરૂ કરવા માટે, કાર્યમોડ આપણે પ્રથમ ત્રણને ચલમાં પરત કરીએ છીએ
સંખ્યાના અંકો (1000 દ્વારા ભાગાકારનો બાકીનો ભાગ), અને પછી બધું પ્રથમ કિસ્સામાં જેવું છે.

તે છેલ્લા બે અંકો સાથે લગભગ સમાન છે:

M3 = M3 મોડ100
M3 = M3/10
N3 = Abs (m3)

M4 = M4 મોડ 10
N4= Abs (m4)


હવે અમારા ચલોમાં તે મૂલ્યો છે જે આપણે પ્રદર્શિત કરવા માંગીએ છીએ, માઇક્રોકન્ટ્રોલર માટે તેના પગને લાત મારવાનો અને આ મૂલ્યોને સૂચક પર પ્રદર્શિત કરવાનો સમય છે, આ કરવા માટે આપણે ડિસ્પ્લે પ્રોસેસિંગ સબરૂટિન કહીએ છીએ:

"Arial","sans-serif"">

ગોસબ લેડ

"Arial","sans-serif""> પ્રોસેસર લેબલ સાથે સબરૂટિન પર જશેએલ.ઈ. ડી:

એલ.ઈ. ડી:

Portc = &B00001000

"Arial","sans-serif""> અહીં અમે ઉચ્ચ સ્તરની સેવા આપીએ છીએPORTC .3, અમારી પાસે આ પગ સાથે જોડાયેલ પ્રથમ શ્રેણીનો એનોડ છે. પછી અમે પસંદ કરીએ છીએ કે પ્રથમ વેરીએબલની કિંમત દર્શાવવા માટે કયા સેગમેન્ટને પ્રકાશિત કરવાની જરૂર છે. તે આપણા માટે એક છે, તેથી તેના પગ પર શૂન્ય હશે Portd.1 અને Portd .2, જે વિભાગોને અનુરૂપ છે B અને C સૂચક.

કેસ N1 પસંદ કરો









પસંદ કરવાનું સમાપ્ત કરો
રાહ 5

"Arial","sans-serif""> જરૂરી સેગમેન્ટ્સ પ્રકાશિત થયા પછી, 5 ms રાહ જુઓ અને નીચેના નંબરો દર્શાવવા માટે આગળ વધો:

Portc = &B00000100
કેસ N2 પસંદ કરો
કેસ 0 : પોર્ટડી = &B11000000
કેસ 1 : પોર્ટડી = &B11111001
કેસ 2 : પોર્ટડી = &B10100100
કેસ 3 : પોર્ટડી = &B10110000
કેસ 4 : પોર્ટડી = &B10011001
કેસ 5 : પોર્ટડી = &B10010010
કેસ 6 : પોર્ટડી = &B10000010
કેસ 7 : પોર્ટડી = &B11111000
કેસ 8 : પોર્ટડી = &B10000000
કેસ 9 : પોર્ટડી = &B10010000
પસંદ કરવાનું સમાપ્ત કરો

રાહ 5

Portc = &B00000010

કેસ N3 પસંદ કરો
કેસ 0 : પોર્ટડી = &B11000000
કેસ 1 : પોર્ટડી = &B11111001
કેસ 2 : પોર્ટડી = &B10100100
કેસ 3 : પોર્ટડી = &B10110000
કેસ 4 : પોર્ટડી = &B10011001
કેસ 5 : પોર્ટડી = &B10010010
કેસ 6 : પોર્ટડી = &B10000010
કેસ 7 : પોર્ટડી = &B11111000
કેસ 8 : પોર્ટડી = &B10000000
કેસ 9 : પોર્ટડી = &B10010000
પસંદ કરવાનું સમાપ્ત કરો

રાહ 5

Portc = &B00000001

કેસ N4 પસંદ કરો
કેસ 0 : પોર્ટડી = &B11000000
કેસ 1 : પોર્ટડી = &B11111001
કેસ 2 : પોર્ટડી = &B10100100
કેસ 3 : પોર્ટડી = &B10110000
કેસ 4 : પોર્ટડી = &B10011001
કેસ 5 : પોર્ટડી = &B10010010
કેસ 6 : પોર્ટડી = &B10000010
કેસ 7 : પોર્ટડી = &B11111000
કેસ 8 : પોર્ટડી = &B10000000
કેસ 9 : પોર્ટડી = &B10010000
પસંદ કરવાનું સમાપ્ત કરો

રાહ 5

"Arial","sans-serif""> સૂચક પરની માહિતી પ્રદર્શિત કર્યા પછી, તમારે મુખ્ય પ્રોગ્રામ લૂપ પર પાછા ફરવું આવશ્યક છે, જ્યાં તમારે લૂપ પૂર્ણ કરવાની અને પ્રોગ્રામનો અંત સૂચવવાની જરૂર છે.

"Arial","sans-serif""> આ તે છે જે આપણે અંતે મેળવીએ છીએ:

"Arial","sans-serif"">

"Arial","sans-serif""> નાના સ્વિચિંગ વિલંબને કારણે, સ્વિચિંગ માનવ આંખ માટે ધ્યાનપાત્ર રહેશે નહીં અને અમે પૂર્ણાંક 1234 જોશું.

તમે નીચે પ્રોટિયસમાં સ્ત્રોત અને પ્રોજેક્ટ ડાઉનલોડ કરી શકો છો:"Arial","sans-serif"">

ડાયનેમિક ડિસ્પ્લેનો ઉપયોગ વિવિધ માહિતી પ્રદર્શિત કરવા માટે થાય છે, જેમ કે તાપમાન, વોલ્ટેજ, સમય, અથવા કોઈપણ ઉપકરણ અથવા સેન્સર કેટલી વખત ટ્રિગર થાય છે. બેઝ પરનું ડાયનેમિક ડિસ્પ્લે માઇક્રોકન્ટ્રોલર્સ સાથે સંપૂર્ણ રીતે સુસંગત છે. જો કે, પ્રોગ્રામિંગ AVR માઇક્રોકન્ટ્રોલર્સ પરના સાહિત્યમાં, આ મુદ્દાની ખૂબ જ ઉપરછલ્લા ચર્ચા કરવામાં આવી છે અને સંબંધિત વિષયને સમર્પિત દરેક પુસ્તકમાં નહીં. તેથી, અમે ગતિશીલ સંકેત સાથે સાત-સેગમેન્ટ સૂચકને માઇક્રોકન્ટ્રોલર સાથે કેવી રીતે કનેક્ટ કરવું તેના પર નજીકથી નજર નાખીશું, આ કિસ્સામાં ATmega8 સાથે, પરંતુ સમાનતા કોઈપણ શ્રેણીના AVR MK માટે રહે છે.

અંકોની સંખ્યા (અંકો) અનુસાર, ગતિશીલ સાત-સેગમેન્ટ સૂચકાંકો એક-અંક, બે-અંક, ત્રણ-અંક, ચાર-અંક અને ખૂબ જ ભાગ્યે જ છ-અંકના હોય છે. અમે સૌથી વધુ ઉપયોગમાં લેવાતા ડાયનેમિક ડિસ્પ્લેના પ્રકાર તરીકે ચાર-અંકના સાત-સેગમેન્ટ સૂચકાંકો પર ધ્યાન કેન્દ્રિત કરીશું. તેઓ સામાન્ય એનોડ અને સામાન્ય કેથોડ સાથે ઉત્પાદિત થાય છે. વ્યક્તિગત સેગમેન્ટના એલઇડી માટે કનેક્શન ડાયાગ્રામ આકૃતિઓમાં રજૂ કરવામાં આવ્યા છે.

આંકડાઓ પરથી જોઈ શકાય છે તેમ, દરેક અંક, જેને અંક કહેવાય છે, અંકની અંદર તેનું પોતાનું અલગ આઉટપુટ સામાન્ય છે. અમે 4-અંકના ગતિશીલ સંકેત પર વિચાર કરી રહ્યા હોવાથી, આવી ચાર પિન છે - digit1, digit2, digit3, digit4.

4-અંકના સાત-સેગમેન્ટ સૂચકનું પિનઆઉટ નીચેની આકૃતિમાં બતાવવામાં આવ્યું છે. આ કિસ્સામાં, દૃશ્ય ઉપરથી બતાવવામાં આવ્યું છે, એટલે કે, સૂચકને ઊંધું કરવાની જરૂર નથી.

ડાયનેમિક ડિસ્પ્લે કેવી રીતે કામ કરે છે?

હવે ચાલો જોઈએ કે સામાન્ય કેથોડ સાથે ડાયનેમિક ડિસ્પ્લે કેવી રીતે કામ કરે છે. ઉદાહરણ તરીકે, અમારે 1987 નંબર દર્શાવવાની જરૂર છે. આ કરવા માટે, સમયની પ્રથમ ક્ષણે, આપણે એકમ - b અને c ની રચના કરતા સેગમેન્ટ્સના એનોડ પર ઉચ્ચ સંભવિત લાગુ કરવી જોઈએ અને ઓછી સંભવિતતા લાગુ કરવી જોઈએ. પ્રથમ સ્રાવનો સામાન્ય કેથોડ. બાકીના ત્રણ અંકોના સામાન્ય કેથોડ્સ - digit2, digit3 અને digit4 - અનકનેક્ટેડ રહે છે.

સમયની બીજી ક્ષણે, અંક 9 બનાવતા વિભાગો પાવર મેળવે છે, બીજા અંકનો સામાન્ય કેથોડ નકારાત્મક સાથે જોડાયેલ છે, અને અંક 1 શક્તિ ગુમાવે છે; digit2, digit3, પહેલાની જેમ, અનકનેક્ટેડ રહે છે.

સમયની ત્રીજી ક્ષણે, ત્રીજા સૂચક પરનો નંબર 8 પ્રકાશિત થાય છે, અને બાકીના સૂચકો બહાર જાય છે.

સમયની ચોથી ક્ષણે, છેલ્લા સૂચક શક્તિ મેળવે છે અને નંબર 7 પ્રદર્શિત થાય છે.

પછી બધું ફરીથી પુનરાવર્તિત થાય છે. જ્યારે ડિસ્ચાર્જથી ડિસ્ચાર્જમાં સ્વિચ કરવાની આવર્તન 25 હર્ટ્ઝ કરતાં વધુ હોય છે, ત્યારે એલઇડીની પ્રકાશ જડતાને લીધે, સ્વિચિંગ કેવી રીતે થાય છે તે જોવા માટે આપણી આંખો પાસે સમય નથી, તેથી આપણે એક સાથે તમામ ડિસ્ચાર્જની અભિન્ન ગ્લોને દૃષ્ટિની રીતે સમજીએ છીએ.

માઇક્રોકન્ટ્રોલર સાથે ગતિશીલ સંકેતનું કનેક્શન ડાયાગ્રામ એટીમેગા 8

અમે ATmega8 માઇક્રોકન્ટ્રોલરના પોર્ટ Dના પિન સાથે 330 ઓહ્મના નજીવા મૂલ્ય સાથે વર્તમાન-મર્યાદિત ભાગો દ્વારા ગતિશીલ સંકેત વિભાગોને જોડીશું. digit1, digit2, digit3, digit4 ને અનુરૂપ પિન n-p-n પ્રકારના ટ્રાન્ઝિસ્ટર દ્વારા જોડવામાં આવશે, ઉદાહરણ તરીકે BC547 અથવા 2n2222 પોર્ટ B ના પિન સાથે.

ડાયનેમિક ડિસ્પ્લેને કનેક્ટ કરવા માટે કોડ લખવા માટે અલ્ગોરિધમ

ક્રિયાઓને વધુ ચોક્કસ બનાવવા માટે, અમે સામાન્ય કેથોડ સાથે 4-અંકના સાત-સેગમેન્ટ સૂચકનો ઉપયોગ કરીશું. પ્રથમ પગલું એ 0 થી 9 સુધીની સંખ્યાઓની હારમાળા બનાવવાનું છે. આપણે આ પહેલાથી જ શીખ્યા છીએ, . આગળ, તમારે 4-અંકની સંખ્યાને ચાર અલગ-અલગ અંકોમાં તોડવાની જરૂર છે. ઉદાહરણ તરીકે, 1987 નંબરને 1, 9, 8 અને 7 માં વિભાજિત કરવાની જરૂર છે. પછી એકને સૂચકના પ્રથમ અંકમાં, બીજામાં નવ, ત્રીજામાં આઠ અને ચોથામાં સાત દર્શાવવાની જરૂર છે.

બહુ-અંકની સંખ્યાને વ્યક્તિગત સંખ્યામાં તોડવા માટેના ઘણા અલ્ગોરિધમ્સમાં, અમે ભાગાકાર અને ભાગાકારના બાકીના કાર્યોનો ઉપયોગ કરીશું. ચાલો એક ઉદાહરણ જોઈએ:

1987/1000 → 1

1987%1000/100 → 9

1987%100/10 → 8

1987%10 → 7

પૂર્ણાંક ડેટા પ્રકારનો ઉપયોગ કરતી વખતે C ભાષામાં int ભાગાકાર કરતી વખતે, બધા દસમા, સોમા, વગેરે, એટલે કે, એક કરતા ઓછી બધી સંખ્યાઓ કાઢી નાખવામાં આવે છે. માત્ર પૂર્ણાંકો જ રહે છે. ગાણિતિક રાઉન્ડિંગ અહીં કામ કરતું નથી, એટલે કે, આ કિસ્સામાં 1.9 1 હશે, 2 નહીં.

"વિભાજનનો શેષ" આદેશ ટકાવારી ચિહ્ન દ્વારા સૂચવવામાં આવે છે " % " આ આદેશ બધા પૂર્ણાંકોને કાઢી નાખે છે અને બાકીની સંખ્યાને છોડી દે છે. ઉદાહરણ તરીકે, 1987%1000 → 987; 1987%100 → 87; 1987%10 → 7.

આગળ, તમારે એક આદેશ લખવો જોઈએ જે પહેલા પ્રથમ અંક અને અનુરૂપ નંબર પ્રદર્શિત કરશે, પછી, ચોક્કસ સમયગાળા પછી, બીજો અંક અને અનુરૂપ નંબર; અને તેથી વધુ. નીચે ટિપ્પણીઓ સાથેનો કોડ છે.

કોડ

#વ્યાખ્યાયિત કરો F_CPU 1000000L

# સમાવેશ થાય છે

# સમાવેશ થાય છે

# CHISLO PORTD વ્યાખ્યાયિત કરો

# RAZRIAD PORTB વ્યાખ્યાયિત કરો

સહી વિનાનું int razr1 = 0, razr2 = 0, razr3 = 0, razr4 = 0;

સહી વિનાની પૂર્ણાંક સંખ્યા = (

// 0 થી 10 સુધીની સંખ્યાઓ

0x3f, 0x6, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x7, 0x7f, 0x6f

};

રદબાતલ vse_chislo (અનહસ્તાક્ષરિત int rabivka_chisla)

{

razr1 = rabivka_chisla/1000; // હજારો

razr2 = rabivka_chisla%1000/100; // સેંકડો

razr3 = rabivka_chisla%100/10; // દસ

razr4 = rabivka_chisla%10; // એકમો

}

પૂર્ણાંક મુખ્ય (રદબાતલ)

{

DDRB = 0b00001111;

DDRD = 0b11111111;

RAZRIAD = 0b00000001; // શરૂઆતમાં 1 લી આંકડો

CHISLO = 0x3f; // નંબર 0

જ્યારે (1)

{

vse_chislo(1987); // ડિસ્પ્લે નંબર

RAZRIAD = 0b00000001; // 1 લી અંક ચાલુ કરો, બાકીનાને બંધ કરો

CHISLO = chisla ; // 1 લી અંક દર્શાવો

_delay_ms(3);

RAZRIAD = 0b00000010; // 2 જી અંક ચાલુ કરો, બાકીનાને બંધ કરો

CHISLO = chisla ; // 2જી અંક દર્શાવો

_delay_ms(3);

RAZRIAD = 0b00000100; // 3 જી અંક ચાલુ કરો, બાકીનાને બંધ કરો

CHISLO = chisla ; // 3જી અંક દર્શાવો

_delay_ms(3);

RAZRIAD = 0b00001000; // 4 થી અંક ચાલુ કરો, બાકીનાને બંધ કરો

CHISLO = chisla ; // 4મો અંક દર્શાવો

_delay_ms(3);

}

}

ડાયનેમિક ડિસ્પ્લે માટે પ્રોગ્રામમાં સુધારો

ઉપરોક્ત અલ્ગોરિધમ એ વધુ તાલીમ અલ્ગોરિધમ છે અને તેથી તે કંઈક અંશે સરળ છે, પરંતુ તે એવા પ્રોગ્રામ્સમાં પણ થાય છે જે વાસ્તવિક સમયમાં કોઈ ઝડપી ગણતરીઓ કરતા નથી. આ અલ્ગોરિધમનો એકમાત્ર ખામી એ વિલંબનો ઉપયોગ છે, જેની નકારાત્મક અસર અગાઉ ચર્ચા કરવામાં આવી હતી. વિલંબના ઉપયોગથી છુટકારો મેળવવા માટે, તમે ટાઈમર કાઉન્ટર્સમાંથી વિક્ષેપોનો ઉપયોગ કરી શકો છો. નીચેના કોડમાં, શૂન્ય ટાઈમર-કાઉન્ટરનો ઉપયોગ કરીને અને જ્યારે આ કાઉન્ટર ઓવરફ્લો થાય ત્યારે વિક્ષેપને કૉલ કરીને વિલંબ જનરેટ થાય છે.

દરેક વિક્ષેપ સાથે સંખ્યાઓ સૂચકના દરેક અંકમાં ક્રમિક રીતે પ્રદર્શિત થાય છે તેની ખાતરી કરવા માટે, bc547 ચલ ઉમેરવામાં આવ્યું છે, જે આગલી વખતે ISR વિક્ષેપ (TIMER0_OVF_vect) કહેવાય ત્યારે એકથી વધે છે. પછી ચલ bc547 ની કિંમત તપાસવામાં આવે છે અને અનુરૂપ બીટ પાવર સાથે સપ્લાય કરવામાં આવે છે. જ્યારે bc547 ચાર કરતા વધારે બને છે, ત્યારે તે એક પર રીસેટ થાય છે.

સૂચકાંકો સામાન્ય રીતે તેમના પર પ્રદર્શિત માહિતી જોવા માટે અનુકૂળ સ્થળોએ સ્થિત હોય છે. બાકીની ડિજિટલ સર્કિટરી અન્ય પ્રિન્ટેડ સર્કિટ બોર્ડ પર સ્થિત કરી શકાય છે. જેમ જેમ સૂચકોની સંખ્યામાં વધારો થાય છે તેમ, સૂચક બોર્ડ અને ડિજિટલ બોર્ડ વચ્ચેના વાહકની સંખ્યા વધે છે. આ ઉપકરણોની ડિઝાઇન અને કામગીરીના વિકાસમાં ચોક્કસ અસુવિધાઓ તરફ દોરી જાય છે. આ જ કારણ તેની કિંમતમાં વધારો તરફ દોરી જાય છે.

ઈન્ડિકેટર્સને પલ્સ મોડમાં ઓપરેટ કરીને કનેક્ટિંગ કંડક્ટરની સંખ્યા ઘટાડી શકાય છે. માનવ આંખમાં જડતા હોય છે, અને જો તમે સૂચકોને પર્યાપ્ત ઊંચી ઝડપે એક પછી એક માહિતી પ્રદર્શિત કરવા દબાણ કરો છો, તો તે વ્યક્તિને લાગશે કે તમામ સૂચકાંકો તેમની માહિતી સતત પ્રદર્શિત કરી રહ્યાં છે. પરિણામે, સમાન વાહક દ્વારા પ્રદર્શિત માહિતીને વૈકલ્પિક રીતે પ્રસારિત કરવાનું શક્ય છે. સામાન્ય રીતે 50 Hz નો રિફ્રેશ દર પૂરતો હોય છે, પરંતુ આ આવર્તનને 100 Hz સુધી વધારવું વધુ સારું છે.

ચાલો આકૃતિ 1 માં દર્શાવેલ સાત-સેગમેન્ટના LED સૂચકાંકોના બ્લોક ડાયાગ્રામને જોઈએ. આ સર્કિટ આઉટપુટ ડિજિટલ માહિતીના ગતિશીલ સંકેત પ્રદાન કરી શકે છે.


આકૃતિ 1. ગતિશીલ સંકેતનું બ્લોક ડાયાગ્રામ

આકૃતિ 1 માં બતાવેલ ડાયાગ્રામમાં, ચાર ડિજિટલ અંકો દર્શાવવામાં આવ્યા છે. દરેક બીટ સંક્ષિપ્તમાં સ્વીચના પોતાના ઇનપુટ સાથે જોડાયેલ છે. જનરેટરનો ઉપયોગ સૂચકો પર માહિતી અપડેટ કરવાની ઝડપ સેટ કરવા માટે થાય છે. દ્વિસંગી કાઉન્ટર ક્રમિક રીતે સર્કિટની ચાર સ્થિતિઓ ઉત્પન્ન કરે છે અને કી દ્વારા સાત-સેગમેન્ટના સૂચકોને વૈકલ્પિક વીજ પુરવઠો પૂરો પાડે છે.

પરિણામે, જ્યારે સ્વીચ સાત-સેગમેન્ટ ડીકોડરના ઇનપુટને ઇનપુટ A થી દ્વિસંગી દશાંશ કોડ સપ્લાય કરે છે, ત્યારે આ કોડ HL1 સૂચક પર પ્રદર્શિત થાય છે. જ્યારે સ્વીચ સાત-સેગમેન્ટ ડીકોડરના ઇનપુટને ઇનપુટ B થી દ્વિસંગી-દશાંશ કોડ સપ્લાય કરે છે, ત્યારે આ કોડ HL2 સૂચક પર પ્રદર્શિત થાય છે, અને તેથી વધુ, ચક્રમાં.

વિચારણા કરેલ યોજનામાં માહિતી અપડેટ દર જનરેટરની આવર્તન કરતા ચાર ગણો ઓછો હશે. એટલે કે, 100 Hz ની સૂચક ફ્લિકરિંગ આવર્તન મેળવવા માટે, 400 Hz ની જનરેટર આવર્તન જરૂરી છે.

પરિણામે અમે કનેક્ટિંગ કંડક્ટરની સંખ્યા કેટલી વખત ઘટાડી છે? તે તેના પર નિર્ભર છે કે આપણે સર્કિટનો ક્રોસ સેક્શન ક્યાં દોરીએ છીએ. જો આપણે સૂચક બોર્ડ પર માત્ર સૂચકાંકો છોડી દઈએ, તો તેમના ઓપરેશનને સેગમેન્ટ્સ માટે 7 માહિતી સંકેતો અને ચાર સ્વિચિંગ સિગ્નલોની જરૂર પડશે. કુલ 11 કંડક્ટર છે. સ્ટેટિક ડિસ્પ્લે સર્કિટમાં આપણને 7×4=28 કંડક્ટરની જરૂર પડશે. જેમ તમે જોઈ શકો છો, જીત સ્પષ્ટ છે. જ્યારે 8-બીટ ડિસ્પ્લે એકમ અમલમાં મૂકે છે, ત્યારે લાભ પણ વધુ હશે.

જો સર્કિટનો ક્રોસ સેક્શન સૂચકાંકોના ઇનપુટ્સ સાથે દોરવામાં આવે તો તેનાથી પણ વધુ ફાયદો થશે. આ કિસ્સામાં, ચાર-અંકના ડિસ્પ્લે યુનિટને માત્ર છ સિગ્નલ કંડક્ટર અને બે સર્કિટ પાવર કંડક્ટરની જરૂર પડશે. જો કે, ડાયનેમિક ડિસ્પ્લે સર્કિટના આવા ક્રોસ-વિભાગીય બિંદુનો ઉપયોગ ખૂબ જ ભાગ્યે જ થાય છે.

હવે ચાલો દરેક એલઇડી સેગમેન્ટમાંથી જ્યારે તે લાઇટ થાય ત્યારે તેમાંથી વહેતા પ્રવાહની ગણતરી કરીએ. આ કરવા માટે, અમે સૂચક વિભાગોમાંથી એક દ્વારા વર્તમાન પ્રવાહના સમકક્ષ સર્કિટનો ઉપયોગ કરીશું. આ રેખાકૃતિ આકૃતિ 2 માં બતાવવામાં આવી છે.


અગાઉ સૂચવ્યા મુજબ, LED ને સામાન્ય કામગીરી માટે 3 થી 10 mA નો કરંટ જરૂરી છે. ચાલો લઘુત્તમ LED વર્તમાનને 3 mA પર સેટ કરીએ. જો કે, ઓપરેશનના પલ્સ મોડમાં, સૂચકની તેજસ્વીતા N ગણી ઘટી જાય છે, જ્યાં ગુણાંક N આ સૂચકને પૂરા પાડવામાં આવેલ વર્તમાન કઠોળના ફરજ ચક્રની બરાબર છે.

જો આપણે ગ્લોની સમાન તેજ જાળવી રાખવા જઈ રહ્યા છીએ, તો આપણે સેગમેન્ટમાંથી વહેતા પલ્સ પ્રવાહની તીવ્રતા N ગણા વધારવી પડશે. આઠ-અંકના સૂચક માટે, ગુણાંક N આઠ બરાબર છે. ચાલો શરૂઆતમાં 3 mA ની બરાબર LED મારફતે સ્થિર પ્રવાહ પસંદ કરીએ. પછી, આઠ-અંકના સૂચકમાં LED ની સમાન તેજ જાળવવા માટે, સ્પંદનીય પ્રવાહની જરૂર પડશે:

I seg din = I seg stat× એન= 3mA×8 = 24mA.

માત્ર અમુક શ્રેણીના ડિજિટલ માઇક્રોસર્કિટ્સ ભાગ્યે જ આવા પ્રવાહ પ્રદાન કરી શકે છે. માઈક્રોસિર્કિટ્સની મોટાભાગની શ્રેણી માટે, ટ્રાન્ઝિસ્ટર સ્વીચો પર બનેલા એમ્પ્લીફાયર્સની જરૂર પડશે.

હવે આઠ-બીટ ડિસ્પ્લે યુનિટના વ્યક્તિગત બિટ્સમાં પાવર સ્વિચ કરતી સ્વીચમાંથી વહેતો પ્રવાહ નક્કી કરીએ. આકૃતિ 2 માં દર્શાવેલ આકૃતિ પરથી જોઈ શકાય છે તેમ, સૂચકના કોઈપણ વિભાગમાંથી વર્તમાન કીમાંથી વહી શકે છે. જ્યારે નંબર 8 પ્રદર્શિત થાય છે, ત્યારે સૂચકના તમામ સાત ભાગોને પ્રગટાવવાની જરૂર પડશે, જેનો અર્થ છે કે આ ક્ષણે કીમાંથી વહેતી પલ્સ વર્તમાન નીચે પ્રમાણે નક્કી કરી શકાય છે:

I cl = I segડીંગ× એન સેગ= 24mA×7 = 168mA.

તમને આ વર્તમાન કેવો ગમ્યો ?! કલાપ્રેમી રેડિયો સર્કિટ્સમાં, હું ઘણીવાર એવા ઉકેલો જોઉં છું જ્યાં સ્વિચિંગ કરંટ સીધો ડીકોડરના આઉટપુટમાંથી લેવામાં આવે છે, જે 20 એમએ કરતા વધુનો પ્રવાહ ઉત્પન્ન કરી શકતો નથી, અને હું મારી જાતને પ્રશ્ન પૂછું છું - આવા સૂચક ક્યાં જોવું? સંપૂર્ણ અંધકારમાં? પરિણામ એ "નાઇટ વિઝન ડિવાઇસ" છે, એટલે કે, એક ઉપકરણ જેનું વાંચન ફક્ત સંપૂર્ણ અંધકારમાં જ દેખાય છે.

હવે પરિણામી ડિસ્પ્લે યુનિટના સ્કીમેટિક ડાયાગ્રામને જોઈએ. તે આકૃતિ 3 માં બતાવેલ છે.



આકૃતિ 3. ડાયનેમિક ડિસ્પ્લે યુનિટનું સ્કીમેટિક ડાયાગ્રામ

હવે અમને ડાયનેમિક ડિસ્પ્લે સર્કિટ મળી છે, અમે તેના ફાયદા અને ગેરફાયદા વિશે ચર્ચા કરી શકીએ છીએ. ડાયનેમિક ડિસ્પ્લેનો અસંદિગ્ધ ફાયદો એ કનેક્ટિંગ વાયરની નાની સંખ્યા છે, જે તેને કેટલાક કિસ્સાઓમાં અનિવાર્ય બનાવે છે, જેમ કે મેટ્રિક્સ સૂચકાંકો સાથે કામ કરવું.

ગેરલાભ એ મોટા પલ્સ પ્રવાહોની હાજરી છે, અને કોઈપણ વાહક એન્ટેના હોવાથી, ગતિશીલ સંકેત દખલના શક્તિશાળી સ્ત્રોત તરીકે સેવા આપે છે. હસ્તક્ષેપનો બીજો સ્ત્રોત પાવર સપ્લાય છે.

મહેરબાની કરીને નોંધ કરો કે સ્વિચિંગ કઠોળની અગ્રણી કિનારીઓ ખૂબ જ ટૂંકી હોય છે, તેથી તેમના હાર્મોનિક ઘટકો અલ્ટ્રાશોર્ટ તરંગો સુધીની રેડિયો આવર્તન શ્રેણીને આવરી લે છે.

તેથી, ગતિશીલ સંકેતનો ઉપયોગ ડિજિટલ ઉપકરણ અને સૂચક વચ્ચેના કનેક્ટિંગ વાયરની સંખ્યાને ઘટાડવાનું શક્ય બનાવે છે, પરંતુ તે જ સમયે તે દખલગીરીનો એક શક્તિશાળી સ્ત્રોત છે, તેથી રેડિયો પ્રાપ્ત ઉપકરણોમાં તેનો ઉપયોગ અનિચ્છનીય છે.

જો કોઈ કારણોસર, ઉદાહરણ તરીકે, મેટ્રિક્સ સૂચકાંકોનો ઉપયોગ કરવાની જરૂર હોય, તો ગતિશીલ સંકેતનો ઉપયોગ કરવો જરૂરી છે, તો પછી દખલગીરીને દબાવવા માટે તમામ પગલાં લેવા જોઈએ.

ગતિશીલ સંકેતોથી દખલગીરીને દબાવવાના પગલાંમાં એકમનું રક્ષણ, કેબલ અને બોર્ડને જોડવાનો સમાવેશ થાય છે. પાવર સપ્લાય ફિલ્ટર્સનો ઉપયોગ કરીને, કનેક્ટિંગ વાયરની ન્યૂનતમ લંબાઈનો ઉપયોગ કરીને. બ્લોકને કવચ આપતી વખતે, સૂચકોને પોતાને સુરક્ષિત રાખવાની જરૂર પડી શકે છે. આ કિસ્સામાં, સામાન્ય રીતે મેટલ મેશનો ઉપયોગ થાય છે. આ ગ્રીડ એક સાથે પ્રદર્શિત અક્ષરોના કોન્ટ્રાસ્ટને વધારી શકે છે.

સાહિત્ય:

"ડાયનેમિક ડિસ્પ્લે" લેખ સાથે વાંચો:

સૂચકાંકો વ્યક્તિ માટે વિવિધ પ્રકારની માહિતી પ્રદર્શિત કરવા માટે રચાયેલ છે. માહિતીનો સૌથી સરળ પ્રકાર છે...
http://site/digital/Indic.php

ગેસ ડિસ્ચાર્જ સૂચકાંકોનો ઉપયોગ બીટ માહિતી દર્શાવવા અને દશાંશ માહિતી દર્શાવવા બંને માટે થાય છે. દશાંશ સૂચકાંકો બનાવતી વખતે, કેથોડ...
http://site/digital/GazIndic/

આજકાલ, દ્વિસંગી માહિતી પ્રદર્શિત કરવા માટે લગભગ દરેક જગ્યાએ LED નો ઉપયોગ થાય છે. આ કારણે છે...
http://site/digital/LED.php

લિક્વિડ ક્રિસ્ટલ ઈન્ડિકેટર્સના ઑપરેટિંગ સિદ્ધાંતો... લિક્વિડ ક્રિસ્ટલ ઈન્ડિકેટર્સના ઑપરેટિંગ મોડ્સ... કલર ઈમેજનું નિર્માણ...
http://site/digital/LCD.php

અપડેટ 4/3/15. કેમ છો બધા. છેલ્લા લેખમાં, અમે એલસીડી સાથે વાતચીત કરવા માટેના અલ્ગોરિધમ, તેમજ તેને માહિતી આઉટપુટ કરવા માટે જોયા, અને તેનું સિમ્યુલેટરમાં પરીક્ષણ કર્યું. આ પોસ્ટમાં, હું માહિતી પ્રદર્શિત કરવાની "સસ્તી" પદ્ધતિ વિશે ટૂંકમાં વાત કરીશ - આ છે સાત સેગમેન્ટ સૂચક , જે અરબી અંકો તેમજ તેના પર પ્રદર્શિત કરી શકાય તેવા કેટલાક પ્રતીકો પ્રદર્શિત કરવા માટે, સૂચકોમાં સૌથી સરળ છે. અમે AVR માટે C પ્રોગ્રામ અને હાર્ડવેર અને સિમ્યુલેટરમાં કનેક્શનને પણ ધ્યાનમાં લઈશું.

અક્ષરો પ્રદર્શિત કરવા માટે, વધુ જટિલ મલ્ટિ-સેગમેન્ટ અને મેટ્રિક્સ સૂચકાંકોનો ઉપયોગ થાય છે. પણ અહીં આપણે સાત સેગમેન્ટ વિશે વાત કરીશું... શું છે તે પણ ધ્યાનમાં લઈશું ગતિશીલ પ્રદર્શન , માપેલ મૂલ્યને તાત્કાલિક પ્રદર્શિત કરવાની રીત તરીકે. આ કરવા માટે, અમે પ્રોગ્રામમાં વિક્ષેપોના ઉપયોગને ધ્યાનમાં લઈશું.
તેથી તમારે જાણવું જોઈએ કે સૂચકો સામાન્ય એનોડ અને કેથોડ સાથે આવે છે, જેમ કે નીચેની આકૃતિમાં. મારી પાસે એક સામાન્ય કેથોડ (આકૃતિનો નીચેનો ભાગ) સાથેનો એક સૂચક હતો, જેનું નિયંત્રણ આઉટપુટ માઈનસ સાથે જોડાયેલું છે. આ તે છે જેની સાથે અમે કામ કરીશું.

જો ત્યાં ઘણા સૂચકાંકો છે, તો પછી કેથોડ્સ ઘણા એમકે પગ દ્વારા નિયંત્રિત થાય છે. !!! પરંતુ હંમેશા ટ્રાંઝિસ્ટરનો ઉપયોગ કરો, કારણ કે... પ્રમાણમાં ઊંચા પ્રવાહને કારણે I/O પોર્ટ બળી શકે છે. મેં નિયમિત 315 ટ્રાંઝિસ્ટરનો ઉપયોગ કર્યો. નીચેની આકૃતિમાં મેં તેમના દ્વારા, સૂચક અને નિયંત્રકના નિયંત્રણ આઉટપુટનું આશરે જોડાણ બતાવ્યું છે.ઇન્સ્ટોલેશન માટે અમને 11 માઇક્રોકન્ટ્રોલર પગની જરૂર છે, એટલે કે. વિભાગો પર માહિતી પ્રદર્શિત કરવા માટે 8 પગ (7 + બિંદુ) અને દરેક સૂચક માટે એક પગ તેને નિયંત્રિત કરવા માટે છે, મારી પાસે તેમાંથી ત્રણ છે, તેથી ત્રણ નિયંત્રણ પગ પણ છે. નીચે મેં પ્રોગ્રામ આપ્યો છે અને તેનું વર્ણન કર્યું છે. વિભાગોને નિયંત્રિત કરવા માટે, અમે એક પોર્ટમાંથી પિનનો ઉપયોગ કરીશું, જેથી મૂંઝવણમાં ન આવે. માઇક્રોકન્ટ્રોલર માટે લખ્યું ATmega8 . જો તમે "પથ્થર" થી છુટકારો મેળવવા માંગતા હો, તો આ કોઈ સમસ્યા નથી, ઉદાહરણ તરીકે, માં, જ્યાં તમે સરળતાથી બીજા "પથ્થર" માટે સેટિંગ્સ બદલી શકો છો, મુખ્યત્વે આ પિન અને પોર્ટ નંબરો છે. સાર્વત્રિકતા અને સ્થાનાંતરણના સામાન્ય નિયમો પણ ત્યાં વર્ણવેલ છે.

ટ્રાન્ઝિસ્ટરને MK અને સૂચક સાથે જોડવાનું ચિત્ર.

ચાલો આગળ વધીએ કાર્યક્રમ આ નાના કાર્યક્રમમાં (પર સિ ) મેં ત્રણ સૂચક ઘટકોનો સમાવેશ કરવાનું અને અલ્પવિરામ સાથે સંખ્યાને આઉટપુટ કરવાનું ઉદાહરણ આપ્યું. સૂચકના આઉટપુટ માટે ટાઈમર અને ઇન્ટરપ્ટનો ઉપયોગ કરીને. પ્રોગ્રામ લખતી વખતે, આપણે નક્કી કરવું જોઈએ કે કયો પોર્ટ પિન સૂચક પરના સેગમેન્ટને અનુરૂપ હોવો જોઈએ. સૂચક તત્વ પોતે નીચેની આકૃતિમાં બતાવેલ છે. બાજુ પર સૂચક તત્વના ભાગો સાથે પિનને કનેક્ટ કરવાનું વર્ણન છે (પોર્ટની પિન - તત્વના પગની સંખ્યા (ઉપરની આકૃતિ) - સેગમેન્ટનો અક્ષર - ચાલુ કરવા માટે જવાબદાર એરેમાંની સંખ્યા તત્વ પરના વિભાગો).

PB0 - 12 - પ્રથમ તત્વનું નિયંત્રણ

PB6 - 9 - બીજા તત્વનું નિયંત્રણ
PB7 - 8 - ત્રીજા તત્વનું નિયંત્રણ
PD7 – 11 – (A) – 128
PD6 – 10 – (F) – 64
PD5 – 7 – (B) – 32
PD4 – 5 – (G) – 16
PD3 – 4 – – 8
PD2 – 3 – (DP) – 4
PD1 – 2 – (D) – 2
PD0 – 1 – (E) – 1

# સમાવેશ થાય છે
# સમાવેશ થાય છે
# સમાવેશ થાય છે
/*ચાલો દરેક પોર્ટ પિન માટે સાત-સેગમેન્ટ તત્વ વ્યાખ્યાયિત કરીએ (ઉપરની આકૃતિ)*/
#128 વ્યાખ્યાયિત કરો
#બી 32 વ્યાખ્યાયિત કરો
#8 થી વ્યાખ્યાયિત કરો
# d 2 વ્યાખ્યાયિત કરો
# e 1 વ્યાખ્યાયિત કરો
# f 64 વ્યાખ્યાયિત કરો
#g16 વ્યાખ્યાયિત કરો
# ડીપી 4 વ્યાખ્યાયિત કરો
/*આ મેક્રોમાં પાવરમાં ઉભા કરાયેલા બેને અનુરૂપ સંખ્યાઓ હોય છે,પોર્ટના "લેગ" ની સંખ્યા જેટલો છે જેની સાથે સૂચક સેગમેન્ટ છેમેક્રો જેવું જ નામ.*/
ટૂંકી સહી વિનાની પૂર્ણાંક j, k = 0; /*ચલોનો ઉપયોગ ઇન્ટરપ્ટ મેક્રોમાં થાય છે*/
ફ્લોટ i = 0; /*સૂચકના આઉટપુટ માટે ચલ*/
ટૂંકી સહી ન કરેલ int w = 0; /*બિંદુ ચાલુ કરવા માટે ચલ સૂચક*/
સહી વગરનો ચાર સ્લોટ; /*એક એરે જે તમને જોઈતી સંખ્યાઓ સંગ્રહિત કરે છે
પોર્ટ દ્વારા સૂચક પર આઉટપુટ કરો જેથી તે સંખ્યાની સમાન આકૃતિ બતાવે
એરે તત્વ. સંખ્યાઓ ફક્ત મેક્રો પર આધાર રાખે છે.*/
void Slot_init() /*સૂચક આરંભ કાર્ય*/
{
સ્લોટ = (a+b+c+d+e+f);
સ્લોટ = (b+c);
સ્લોટ = (a+b+g+e+d);
સ્લોટ = (a+b+g+c+d); .
સ્લોટ = (f+g+b+c); /*મેક્રો નામો સૂચક સેગમેન્ટના નામોને અનુરૂપ છે*/
સ્લોટ = (a+f+g+c+d);
સ્લોટ = (a+f+g+c+d+e);
સ્લોટ = (a+b+c);
સ્લોટ = (a+b+c+d+e+f+g);
સ્લોટ = (a+b+c+d+f+g);
સ્લોટ = ડીપી; /*ડોટ*/
}
/*આ ચલો તે નંબરોને સંગ્રહિત કરે છે જેને દર્શાવવાની જરૂર છે*/
char Elem1, Elem2, Elem3;
/* ફંક્શન ત્રણ-અંકના નંબર નંબરમાંથી અંકો કાઢે છે */
રદબાતલ પ્રદર્શન (ફ્લોટ નંબર)
{
ફ્લોટ N1, N2; /*modf ફંક્શન માટે ચલ*/
N1 = modf(નંબર, &N2); /*સંખ્યાને પૂર્ણાંક અને અપૂર્ણાંક ભાગોમાં વિભાજિત કરો, N1 = અપૂર્ણાંક N2 = પૂર્ણાંક*/
જો (N1 != 0) /*જો શૂન્ય બરાબર ન હોય તો અપૂર્ણાંક છે*/
{
નંબર = નંબર*10; /*પછી સામાન્ય આઉટપુટ માટે સંખ્યાને 10 વડે ગુણાકાર કરોત્રણ-અંકની અપૂર્ણાંક સંખ્યા સૂચક*/
w = 1; /* સૂચક ચલ જેનો ઉપયોગ ડોટને સમાવવા માટે નીચેના લૂપમાં થાય છે*/
}
ટૂંકી સહી વિનાની પૂર્ણાંક Num1, Num2, Num3;
Num1=Num2=0;
જ્યારે (સંખ્યા >= 100) /*સેંકડો*/
{
સંખ્યા -= 100;
નંબર1++;
}
જ્યારે (સંખ્યા >= 10) /*દસ*/
{
સંખ્યા -= 10;
Num2++;
}
Num3 = Number; /*એકમો*/
Elem1 = સ્લોટ;
જો (w == 1) /*બીજા તત્વ પર બિંદુ સામેલ કરવા માટેની શરત*/
{
Elem2 = (સ્લોટ|0×04); /*બિંદુને અનુરૂપ પિન સાથે તાર્કિક ઉમેરો*/
w = 0; /*બિંદુ બંધ કરો*/
}
બીજું
Elem2 = સ્લોટ;
Elem3 = સ્લોટ;
}
પૂર્ણાંક મુખ્ય (રદબાતલ) /*મુખ્ય કાર્યક્રમની શરૂઆત*/
{
DDRB = 0Xff; /*બધા પોર્ટ B પિનને આઉટપુટ તરીકે ગોઠવો*/
DDRD = 0xff; /*પોર્ટ ડીના તમામ પિનને આઉટપુટ તરીકે ગોઠવો*/
PORTD = 0×00; /*સેટ 0*/
PORTB |= _BV(PB6);
PORTB |= _BV(PB0);
PORTB |= _BV(PB7);
slot_init();
sei(); /*સામાન્ય વિક્ષેપ સક્ષમ કરો*/
/*ટાઈમર T0 શરૂ કરી રહ્યા છીએ*/
TIMSK = (1</*T0 કાઉન્ટર ટાઈમર ઓવરફ્લો ફ્લેગ સક્ષમ કરો*/
TCCR0 = (0</* 1000000/8 = 125000= 125000/256 = 488.28 Hz */
જ્યારે (1) /*અંતહીન લૂપ, સૂચક પર ચલ દર્શાવો*/
{
_delay_ms(1000);
i=i+0.1;
જો (i == 99.9)
i = 0.0;
ડિસ્પ્લે(i);
} /*અંતહીન લૂપ બંધ કૌંસ*/
} /*મુખ્ય કાર્યક્રમનો બંધ કૌંસ*/

આગળનું પગલું એ ઇન્ટરપ્ટ ફંક્શન ઉમેરવાનું છે જે ખાસ વેક્ટર TIMER0_OVF_vect દ્વારા ટ્રિગર થશે, જે T0 ઓવરફ્લો ઇન્ટરપ્ટ્સ માટે જવાબદાર છે. આ માટે અમે હાર્ડવેર ટાઈમર/કાઉન્ટર T0 નો ઉપયોગ કરીએ છીએ. ઉપર, પ્રોગ્રામમાં, અમે ટાઈમર સેટિંગ્સ લખી છે, અને ગતિશીલ ડિસ્પ્લે કેવી રીતે થશે તેની પણ ગણતરી કરી છે.તે. ક્યારે કાઉન્ટર પરનું કાઉન્ટ રજીસ્ટર ઉભરાઈ રહ્યું છે, સામાન્ય પ્રોગ્રામ બંધ થઈ જાય છે અને નીચેનું ફંક્શન એક્ઝિક્યુટ થાય છે, તેમાંથી બહાર નીકળ્યા પછી મુખ્ય પ્રોગ્રામનું એક્ઝિક્યુશન ચાલુ રહે છે.

ISR (TIMER0_OVF_vect)
{
PORTB &= 0x3e; // PB7, PB6, PB0 સફાઈ
_માટે (j = 0; j<=30; j++) { } // ટ્રાન્ઝિસ્ટર બંધ કરવામાં વિલંબ
(k == 3) ? k = 0: k++; /*ચલ જે આગના ક્રમ માટે જવાબદાર છેત્રણ-તત્વ સૂચક, 0,1 અને 2. ચોક્કસ સંખ્યા પર, 1 ચોક્કસ પગ પર સેટ થાય છે, પછી ટ્રાન્ઝિસ્ટર ખુલે છે અને એલેમ વેરીએબલ લાઇટ અપને અનુરૂપ સૂચક સેગમેન્ટ્સ */
સ્વિચ(k)
{
કેસ 0: PORTB |= (1<< PINB7); // એકમો
PORTD = Elem3;
વિરામ;
કેસ 1: PORTB |= (1<< PINB6); // દસ
PORTD = Elem2;
વિરામ;
કેસ 2: PORTB |= (1<< PINB0); // સેંકડો
PORTD = Elem1;
}
}

ઉપરોક્ત પ્રોગ્રામનું હાર્ડવેર અને સિમ્યુલેટરમાં પરીક્ષણ કરવામાં આવ્યું હતું. નીચે મુજબ ચિત્રો છે.મેં છત્ર વડે લોખંડમાં બધું જ ઝડપથી સોલ્ડર કર્યું. જેમ તમે જોઈ શકો છો, ત્યાં ત્રણ સૂચક તત્વો છે, અનુક્રમે, ત્રણ ટ્રાન્ઝિસ્ટર (ગોળાકાર). અમને સિમ્યુલેટર (પ્રોટીઅસ) માં ટ્રાન્ઝિસ્ટરની જરૂર નથી. પ્રોગ્રામમાં એક નોંધપાત્ર તફાવત પણ છે, એટલે કે વિક્ષેપમાં, જ્યાં hટ્રાંઝિસ્ટર બંધ કરવામાં વિલંબ - સિમ્યુલેટરમાં 50 ઘડિયાળ ચક્ર દાખલ કરો. બધું કામ કરવું જોઈએ.

જેમ જેમ અમે પોસ્ટ્સ પ્રકાશિત કરી છે તેમ, સૂચક માટેનો અમારો પ્રોગ્રામ થોડો બદલાયો છે, એટલે કે, અમે ચોથું ઘટક ઉમેર્યું છે, તેના પર માઈનસ ચિહ્ન પ્રદર્શિત કર્યું છે, "H" અને "C", સમય આઉટપુટ ફોર્મેટ અને તમામ મોડ્સનું સંયોજન. તેથી વાંચો, વિશ્લેષણ કરો અને પ્રયોગ કરો.

નીચે સ્ત્રોતો અને ઉપરોક્ત સામગ્રી પર આધારિત પ્રોજેક્ટ છે.

(ડાઉનલોડ: 795 લોકો)

બસ એટલું જ. આગલા લેખમાં હું તાપમાન સેન્સર્સના જોડાણનું વર્ણન કરીશ અને સૂચક પરની માહિતી પ્રદર્શિત કરીશ. ફરી મળ્યા!

કેટલીકવાર કેટલાક સાત-સેગમેન્ટ સૂચકાંકો અથવા LED મેટ્રિક્સને માઇક્રોકન્ટ્રોલર સાથે કનેક્ટ કરવું જરૂરી છે, અને માહિતી પ્રદર્શિત કરવા માટે ગતિશીલ સંકેતનો ઉપયોગ થાય છે. ડાયનેમિક ડિસ્પ્લેનો સાર એ સૂચકો પરની માહિતીનું ક્રમિક પ્રદર્શન છે. નીચેનો આકૃતિ ગતિશીલ સંકેતને અમલમાં મૂકવા માટે ઘણા સાત-સેગમેન્ટ સૂચકાંકો (ઉદાહરણ તરીકે, સામાન્ય કેથોડ સાથે) કનેક્ટ કરવાનું ઉદાહરણ બતાવે છે; સામાન્ય રીતે, બિંદુને ધ્યાનમાં લેતા, 8 સેગમેન્ટ્સ મેળવવામાં આવે છે, પરંતુ જૂના જમાનાની રીતે તેમને કહેવામાં આવે છે. તે રીતે. સમાન નામના સેગમેન્ટના તમામ પિન (એનોડ) એકસાથે જોડાયેલા છે, કુલ 8 રેખાઓ છે જે રેઝિસ્ટર દ્વારા માઇક્રોકન્ટ્રોલર સાથે જોડાયેલ છે. દરેક સૂચકનો સામાન્ય કેથોડ ટ્રાન્ઝિસ્ટર દ્વારા માઇક્રોકન્ટ્રોલર સાથે જોડાયેલ છે.


સંકેત એલ્ગોરિધમ નીચે મુજબ છે: પ્રથમ અમે પ્રથમ સૂચક (ડાબેથી જમણે સંકેત) પર કયા સેગમેન્ટ્સને ચાલુ કરવાની જરૂર છે તેના આધારે રેખાઓ પર જરૂરી લોજિકલ સ્તરો સેટ કરીએ છીએ, ચાલુ કરવા માટે ઉચ્ચ લોજિકલ સ્તર સાથે, એક નીચું સેગમેન્ટ બંધ કરો. આગળ, અમે ટ્રાન્ઝિસ્ટર VT1 ના પાયા પર ઉચ્ચ તાર્કિક સ્તર લાગુ કરીએ છીએ, ત્યાં પ્રથમ સૂચકના સામાન્ય કેથોડને સામાન્ય વાયર સાથે જોડીએ છીએ, આ ક્ષણે તે સેગમેન્ટ્સ કે જે એનોડ પર લોજિકલ હોય છે તે પ્રકાશિત થાય છે. ચોક્કસ સમય (થોભો) પછી, અમે ટ્રાન્ઝિસ્ટરના આધાર પર નીચા તાર્કિક સ્તરને લાગુ કરીને સૂચકને બંધ કરીએ છીએ, પછી બીજા સૂચક માટે બનાવાયેલ આઉટપુટ માહિતી અનુસાર ફરીથી લીટીઓ પર લોજિકલ સ્તરો બદલીએ છીએ, અને ટ્રાન્ઝિસ્ટર VT2 માટે ટર્ન-ઓન સિગ્નલ. આમ, અમે તમામ સૂચકાંકોને ગોળ ચક્રમાં ક્રમમાં બદલીએ છીએ, અને તે સમગ્ર ગતિશીલ સંકેત છે.

નક્કર, ફ્લિકર-ફ્રી ઇમેજ મેળવવા માટે, સ્વિચિંગ હાઇ સ્પીડ પર થવી જોઈએ; LED ના ફ્લિકરિંગને ટાળવા માટે, રિફ્રેશ રેટ 70 Hz અથવા તેથી વધુ પર સેટ કરવો આવશ્યક છે, હું સામાન્ય રીતે તેને 100 Hz પર સેટ કરું છું. ઉપર ચર્ચા કરેલ ડિઝાઇન માટે, વિરામની ગણતરી નીચે પ્રમાણે કરવામાં આવે છે: 100 હર્ટ્ઝની આવર્તન માટે, સમયગાળો 10 એમએસ છે, કુલ 4 સૂચકાંકો છે; તે મુજબ, દરેક સૂચકનો લાઇટિંગ સમય 10/4 = 2.5 એમએસ પર સેટ કરેલ છે. . એક હાઉસિંગમાં બહુ-અંકના સાત-સેગમેન્ટ સૂચકાંકો છે, જેમાં સમાન નામના સેગમેન્ટ્સ હાઉસિંગની અંદર જ જોડાયેલા છે; સ્વાભાવિક રીતે, તેનો ઉપયોગ કરવા માટે ગતિશીલ સંકેતનો ઉપયોગ કરવો જરૂરી છે.

ગતિશીલ સંકેતને અમલમાં મૂકવા માટે, જ્યારે ટાઈમરમાંથી કોઈ એક ઓવરફ્લો થાય ત્યારે તમારે વિક્ષેપોનો ઉપયોગ કરવાની જરૂર છે. નીચે TMR0 ટાઈમરનો ઉપયોગ કરીને કોડ છે:

4 સાત-સેગમેન્ટના સૂચકાંકો માટે ગતિશીલ પ્રદર્શનનું અમલીકરણ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; સ્વેપફ સ્ટેટસ,ડબલ્યુ ; સીએલઆરએફ સ્ટેટસ ; movwf STATUS_TEMP ; ; bcf ind1 ;1લા સૂચક bcf ind2ને બંધ કરો ;2જા સૂચક bcf ind3ને બંધ કરો ;3જી સૂચક bcf ind4ને બંધ કરો ;4થા સૂચકને બંધ કરો; incf shet,F ;રજીસ્ટર ઇન્ક્રીમેન્ટ શેટ movlw .5 ;રજીસ્ટર સમાવિષ્ટો શેટ xorwf શેટ,W તપાસો;નંબર 5 btfss સ્ટેટસ,Zની સમાનતા માટે; goto met1 ;શેટ રજિસ્ટરમાં નંબર 5 movlw .1 ની બરાબર નથી ;શેટ રજિસ્ટરમાં નંબર 5 છે: નંબર 1 movwf શેટ લખો ;શેટ રજિસ્ટરમાં; met1 movlw .1 ;નંબર 1 btfss STATUS,Z ની સમાનતા માટે રજિસ્ટર શેટ xorwf sheet,W ની સામગ્રી તપાસી રહી છે; મેટ2 પર જાઓ ;શેટ રજિસ્ટરમાંની સંખ્યા 1 ની બરાબર નથી: met2 movf datind1,W પર જાઓ ;શેટ રજિસ્ટરમાં નંબર 1 છે: movwf PORTB ની નકલ કરવી; PORTB રજિસ્ટર bsf ind1 પર datind1 રજિસ્ટરની સામગ્રી ;ટર્ન 1લા સૂચક પર met2 movlw .2 ;નંબર 2 btfss STATUS,Z ની બરાબરી કરવા માટે રજિસ્ટર સમાવિષ્ટો શેટ xorwf sheet,W તપાસો; મેટ3 પર જાઓ ;શેટ રજિસ્ટરમાંનો નંબર 2 ની બરાબર નથી: met3 movf datind2,W પર જાઓ ;શેટ રજિસ્ટરમાં નંબર 2 છે: movwf PORTB ;કોપી કરો datind2 ની સામગ્રીઓ PORTB રજિસ્ટર bsf ind2 પર ;ટર્ન 2જા સૂચક પર જાઓ એક્ઝિટ પર જાઓ ;માર્ક એક્ઝિટ met3 movlw પર જાઓ .3 ;રજિસ્ટર શેટ xorwf શેટ,W ;નંબર 3 btfss STATUS,Z ની સમાનતા માટે ; મેટ4 પર જાઓ ;શેટ રજિસ્ટરમાંનો નંબર 3 ની બરાબર નથી: met4 movf datind3,W પર જાઓ ;શેટ રજિસ્ટરમાં નંબર 3 છે: movwf PORTB ;કોપી કરો datind3 ની સામગ્રીઓ PORTB રજિસ્ટર bsf ind3 પર ;ટર્ન 3જા સૂચક પર જાઓ એક્ઝિટ પર જાઓ ;માર્ક એક્ઝિટ met4 movf datind4,W પર જાઓ ;datind3 રજિસ્ટર movwf PORTB ની સામગ્રીની નકલ કરીને ;PORTB રજિસ્ટર bsf ind4 પર; 4થા સૂચકને ચાલુ કરીને; movlw .100 ;ટાઈમર રજીસ્ટર TMR0 movwf TMR0 પર નંબર 156 લખો ; ; movwf સ્ટેટસ ; swapf W_TEMP,F ; swapf W_TEMP,W ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;; ;મુખ્ય પ્રોગ્રામ ................... movlw b"11010011" ;OPTION_REG, ત્યાં આંતરિક સેટ કરે છે ;પ્રીસ્કેલર ગુણાંકને 1:16 પર સેટ કરે છે ; clrf શેટ ;શીટ રજિસ્ટરને શૂન્ય કરવું, શરૂ કરતા પહેલા; TMR0 ઓવરફ્લો વિક્ષેપ, એક્ઝિક્યુટ; clrf datind1 ;clrf datind2 પર માહિતી આઉટપુટ રજીસ્ટર સાફ કરવું ;ઇન્ડિકેટર્સ, clrf datind3 ;Indicators ને બંધ કરવા સમાન છે, કારણ કે સૂચકોમાં સામાન્ય clrf datind4 ;cathod; bcf INTCON,T0IF ;TMR0 ઓવરફ્લો ઇન્ટરપ્ટ ફ્લેગ bsf INTCON,T0IE ને ફરીથી સેટ કરો ;TMR0 ઓવરફ્લો ઇન્ટરપ્ટ્સને bsf INTCON,GIE સક્ષમ કરો ;ગ્લોબલ ઇન્ટરપ્ટ્સને સક્ષમ કરો; movlw b"00000110" ;નંબર 13.52 movwf datind1 ને આઉટપુટ કરવાનું ઉદાહરણ ; movlw b"11001111" ; movwf datand2 ; movlw b"01101101" ; movwf datand3 ; movlw b"01011011" ; movwf datand4 ; ; . ................; ............. ; ............. ; ; અંત ;સમગ્ર કાર્યક્રમનો અંત;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;4 સાત-સેગમેન્ટ સૂચકાંકો માટે ગતિશીલ પ્રદર્શનનું અમલીકરણ

;ક્લોક જનરેટર આવર્તન ઉદાહરણ તરીકે 4 MHz, મશીન સાયકલ 1 µs

org 0000h ;એડ્રેસ 0000h થી પ્રોગ્રામ એક્ઝેક્યુશન શરૂ કરો

સ્ટાર્ટ પર જાઓ;સ્ટાર્ટ લેબલ પર જાઓ

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;દિનચર્યામાં વિક્ષેપ

org 0004h ;સરનામા 0004h થી સબરૂટિનનો અમલ શરૂ કરો

movwf W_TEMP ; કી રજીસ્ટર મૂલ્યો સાચવો

સ્વેપફ સ્ટેટસ,ડબલ્યુ ;

movwf STATUS_TEMP ;

bcf ind1 ;1લા સૂચકને બંધ કરો

bcf ind2 ;2જા સૂચકને બંધ કરો

bcf ind3 ;3જા સૂચકને બંધ કરો

bcf ind4 ;4થા સૂચકને બંધ કરો

incf sheet,F ;રજીસ્ટર ઇન્ક્રીમેન્ટ શેટ

movlw .5 ;શેટ રજીસ્ટરની સામગ્રીઓ તપાસો

xorwf shet,W ;ક્રમાંક 5 ની સમાનતા માટે

btfss સ્ટેટસ,Z ;

goto met1 ;શેટ રજિસ્ટરમાં સંખ્યા 5 ની બરાબર નથી

movlw.1 ;શેટ રજિસ્ટરમાં નંબર 5 છે: નંબર 1 લખવો

movwf શેટ ;શીટ રજીસ્ટર કરવા માટે

met1 movlw .1 ;શેટ રજીસ્ટરની સામગ્રી તપાસી રહી છે

xorwf shet,W; નંબર 1 ની સમાનતા માટે

btfss સ્ટેટસ,Z ;

મેટ2 પર જાઓ ;શેટ રજિસ્ટરમાં નંબર 1 ની બરાબર નથી: મેટ2 પર જાઓ

movf datind1,W ;શેટ રજિસ્ટરમાં નંબર 1 છે: નકલ

movwf PORTB ;રજીસ્ટર datind1 ની સામગ્રી રજીસ્ટર PORTB માં

bsf ind1 ;1મું સૂચક ચાલુ કરો

એક્ઝિટ પર જાઓ ;એક્ઝીટ લેબલ પર જાઓ

met2 movlw .2 ;શેટ રજીસ્ટરની સામગ્રી તપાસી રહી છે

xorwf shet,W; નંબર 2 ની સમાનતા માટે

btfss સ્ટેટસ,Z ;

મેટ3 પર જાઓ ;શેટ રજિસ્ટરમાં નંબર 2 ની બરાબર નથી: met3 પર જાઓ

movf datind2,W ;શેટ રજિસ્ટરમાં નંબર 2 છે: નકલ

movwf PORTB; PORTB રજિસ્ટરમાં datind2 રજીસ્ટરની સામગ્રી

bsf ind2 ;2જી સૂચક ચાલુ કરો

એક્ઝિટ પર જાઓ ;એક્ઝીટ લેબલ પર જાઓ

met3 movlw .3 ;શેટ રજીસ્ટરની સામગ્રી તપાસી રહી છે

xorwf shet,W; નંબર 3 ની સમાનતા માટે

btfss સ્ટેટસ,Z ;

મેટ4 પર જાઓ ;શેટ રજિસ્ટરમાં નંબર 3 ની બરાબર નથી: met4 પર જાઓ

movf datind3,W ;શેટ રજિસ્ટરમાં નંબર 3 છે: નકલ

movwf PORTB; PORTB રજિસ્ટરમાં datind3 રજીસ્ટરની સામગ્રી

bsf ind3 ;3જી સૂચક ચાલુ કરો

એક્ઝિટ પર જાઓ ;એક્ઝીટ લેબલ પર જાઓ

met4 movf datind4,W; datind3 રજિસ્ટરની સામગ્રીની નકલ કરવી

movwf PORTB ;PORTB રજીસ્ટર કરવા માટે

bsf ind4 ;4થા સૂચકને ચાલુ કરો

બહાર નીકળો bcf INTCON,T0IF ;TMR0 ઓવરફ્લો ઇન્ટરપ્ટ ફ્લેગ રીસેટ કરો

movlw .100 ;TMR0 ટાઈમર રજિસ્ટરમાં 156 નંબર લખો

swapf STATUS_TEMP,W ;કી રજીસ્ટરની સામગ્રી પુનઃસ્થાપિત કરી રહ્યા છીએ

swapf W_TEMP,F ;

swapf W_TEMP,W ;

retfie ;એક્ઝિટ ઇન્ટરપ્ટ રૂટિન

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;મુખ્ય કાર્યક્રમ

............. શરૂ કરો ;પ્રારંભિક રજીસ્ટર સેટઅપ

............. ;ખાસ હેતુ

.................

bsf STATUS,RP0 ;રજીસ્ટર કરવા માટે બાઈનરી નંબર 11010011 લખો

movlw b"11010011" ;OPTION_REG, ત્યાં આંતરિક સેટિંગ

movwf OPTION_REG ;TMR0 માટે ઘડિયાળનો સ્ત્રોત

bcf STATUS,RP0 ;TMR0 પહેલા પ્રીસ્કેલર ચાલુ કરો

;પ્રીસ્કેલર પરિબળને 1:16 પર સેટ કરો

clrf શેટ ;શરૂ કરતા પહેલા શીટ રજીસ્ટરને શૂન્ય કરવું

;TMR0 ઓવરફ્લો પર વિક્ષેપ, એક્ઝિક્યુટ

;એકવાર, પાવર ચાલુ કર્યા પછી

clrf datind1 ;પર માહિતી પ્રદર્શિત કરવા માટે રજિસ્ટરો સાફ કરી રહ્યા છીએ

clrf datind2; સૂચકાંકો, બંધ કરવા માટે સમકક્ષ

clrf datind3 ;સૂચકો, કારણ કે સામાન્ય સાથેના સૂચકાંકો

clrf datind4;કેથોડ

bcf INTCON,T0IF ;TMR0 ઓવરફ્લો ઇન્ટરપ્ટ ફ્લેગ રીસેટ કરો

bsf INTCON,T0IE ;TMR0 ઓવરફ્લો ઇન્ટરપ્ટ્સને સક્ષમ કરો

bsf INTCON,GIE ;ગ્લોબલ ઇન્ટરપ્ટ્સને સક્ષમ કરો

movlw b"00000110" ;13.52 નંબરના આઉટપુટનું ઉદાહરણ

movlw b"11001111" ;

movlw b"01101101" ;

movlw b"01011011" ;

................. ;

................. ;

................. ;

અંત ;સમગ્ર કાર્યક્રમનો અંત

મુખ્ય પ્રોગ્રામમાં, અમે પ્રથમ OPTION_REG રજિસ્ટરનો ઉપયોગ કરીને ટાઈમર સેટ કર્યું; અગાઉ મેં માટે ટાઈમરનો ઉપયોગ કરવાની વાત કરી હતી. આગળ, અમે દરેક સૂચક માટે 1 થી 4 સુધીની ગણતરી દાખલ કરવા માટે બનાવાયેલ શીટ રજીસ્ટર સાફ કરીએ છીએ. આ રજિસ્ટરને ઇન્ટરપ્ટ હેન્ડલિંગ રૂટીનમાં વધારવામાં આવે છે અને ત્યાં એડજસ્ટ કરવામાં આવે છે (તે 1 થી 4 સુધી ગણાશે), તેથી આ ક્લિયરિંગ પાવર ચાલુ કર્યા પછી એકવાર કરવામાં આવે છે. આ રજિસ્ટરનો ઉપયોગ કરીને, અમે નક્કી કરીશું કે કયું સૂચક ચાલુ કરવું અને તેને અનુરૂપ ડેટા આઉટપુટ કરીશું. આગળનું પગલું એ ચાર સૂચકાંકોને અનુરૂપ માહિતી સંગ્રહ રજિસ્ટર, ચાર રજિસ્ટર ડેટાઇન્ડ1,2,3,4 સાફ કરવાનું છે. ક્લિયરિંગ એ સૂચકોને બંધ કરવા સમાન છે, કારણ કે વિક્ષેપ હેન્ડલિંગ રૂટિનમાં, આ રજિસ્ટરની સામગ્રીઓ PORTB રજિસ્ટરમાં સ્થાનાંતરિત થાય છે, જેની સાથે સૂચકોના એનોડ જોડાયેલા હોય છે. આ જરૂરી છે જેથી વિક્ષેપોને સક્ષમ કર્યા પછી સૂચકો પર કોઈ કચરો પ્રદર્શિત ન થાય; સૈદ્ધાંતિક રીતે, જો તમે આઉટપુટ માટે તરત જ સાચી માહિતી રેકોર્ડ કરો તો આને ટાળી શકાય છે. આગળ, અમે ટાઈમર ઓવરફ્લો ઈન્ટરપ્ટ ફ્લેગ રીસેટ કરીએ છીએ, TMR0 ઓવરફ્લો ઈન્ટરપ્ટ્સને સક્ષમ કરીએ છીએ અને અંતે, વૈશ્વિક ઈન્ટરપ્ટ્સને સક્ષમ કરીએ છીએ.

વિક્ષેપિત પ્રક્રિયા સબરૂટિનમાં, સૌ પ્રથમ આપણે બધા સૂચકાંકોને બંધ કરીએ છીએ (ટ્રાન્ઝિસ્ટરના પાયા પર નીચા તાર્કિક સ્તરો લાગુ કરીને), કારણ કે તે જાણતું નથી કે તેમાંથી કયું ચાલુ છે. અમે શીટ રજિસ્ટરમાં વધારો કરીએ છીએ, 5 નંબરની સમાનતા તપાસીએ છીએ; જો આવી મેચ હોય, તો અમે રજિસ્ટરમાં નંબર 1 લખીએ છીએ, કારણ કે તે 1 થી 4 સુધીની ગણતરી કરવી જરૂરી છે. આગળ, અમે તપાસ કરીએ છીએ કે કઈ સંખ્યા શેટ રજિસ્ટર, જેનો ઉપયોગ કરીને અમે સંબંધિત સૂચક માટે માહિતી સંગ્રહ રજિસ્ટર (ડેટાઇન્ડ) માંથી ડેટા લોડ કરીએ છીએ અને તેને ચાલુ કરીએ છીએ. પછી અમે TMR0 ઓવરફ્લો ઇન્ટરપ્ટ ફ્લેગ રીસેટ કરીએ છીએ, સમય વિલંબ માટે ટાઇમર પર 100 નંબર લખીએ છીએ (આ મૂલ્યની ગણતરી નીચે દર્શાવેલ છે) અને ઇન્ટરપ્ટ હેન્ડલરમાંથી બહાર નીકળીએ છીએ. પ્રથમ વિક્ષેપ પર, પ્રથમ સૂચક ચાલુ થાય છે, બીજા વિક્ષેપ પર બીજું, અને તેથી એક ગોળ ચક્રમાં. મુખ્ય પ્રોગ્રામમાં, દરેક સૂચક માટે માહિતી સંગ્રહ રજિસ્ટરમાં ડેટા લોડ કરવાનું બાકી રહે છે. વિક્ષેપ સબરૂટિનમાં, કી રજિસ્ટર્સના મૂલ્યોને સાચવવા અને પુનઃસ્થાપિત કરવાનું ભૂલશો નહીં, મેં આ વિશેના લેખમાં આ વિશે લખ્યું છે.

નંબરો આઉટપુટ કરવા માટે, ડેટા ટેબલના સ્વરૂપમાં અક્ષર જનરેટરનો ઉપયોગ કરવો વધુ સારું છે. ઉદાહરણ તરીકે, સૂચકાંકો પર નંબર 3456 પ્રદર્શિત કરવા માટે, તેને અંકોમાં વિભાજિત કરવું આવશ્યક છે, અને અંકોની સંખ્યા (0 થી 9 સુધી) સંગ્રહિત કરવા માટે અલગ રજિસ્ટરનો ઉપયોગ કરવો વધુ સારું છે, પછી આ રજિસ્ટરને અક્ષર જનરેટર દ્વારા ચલાવો, ત્યાંથી પ્રાપ્ત થાય છે. અનુરૂપ સેગમેન્ટને સળગાવવા માટે યોગ્ય બાઇટ્સ (ડેટાઇન્ડ રજિસ્ટરમાં લોડ થયેલ છે).

ચાલો ઘડિયાળ જનરેટરની આવર્તનને 4 મેગાહર્ટ્ઝ, મશીન ચક્ર 1 μs લઈએ. દરેક સૂચકની અપડેટ આવર્તન અનુક્રમે 100 Hz (પીરિયડ T = 10 ms) રહેવા દો, જરૂરી સમય વિલંબ 10/4 = 2.5 ms છે. અમે TMR0 માટે 1:16 માટે પ્રીસ્કેલર ગુણાંક સેટ કરીએ છીએ, જ્યારે મહત્તમ સંભવિત વિલંબ 256x16 = 4096 μs છે, અને અમને 2.5 ms ના વિરામની જરૂર છે. ચાલો TMR0 માં રેકોર્ડ કરવા માટેની સંખ્યાની ગણતરી કરીએ: 256-((256x2.5)/4.096) = 256-156.25 = 99.75. રાઉન્ડિંગ પછી આપણને 100 નંબર મળે છે.

નીચે તમે PIC16F628A માઇક્રોકન્ટ્રોલરનો ઉપયોગ કરીને સામાન્ય કેથોડ સાથે 4-અંકના સૂચક પર ગતિશીલ સંકેતના અમલીકરણ સાથે પ્રોટીઅસ પ્રોગ્રામ, ફર્મવેર અને સ્રોત કોડ માટે એક મોડેલ ડાઉનલોડ કરી શકો છો. ઉદાહરણ તરીકે, સૂચક 0000 નંબરો દર્શાવે છે; 0001; 0002; 13.52; 9764 છે.

હવે ચાલો 8x8 પિક્સેલ (LEDs) ના રિઝોલ્યુશન સાથે મેટ્રિક્સને કનેક્ટ કરવા જોઈએ. મેટ્રિક્સનું માળખું સામાન્ય રીતે પંક્તિઓ અને કૉલમના સંદર્ભમાં ગણવામાં આવે છે. નીચેના ચિત્રમાં, તમામ LEDs ના કેથોડ્સ દરેક કૉલમમાં જોડાયેલા છે, અને એનોડ દરેક હરોળમાં છે. રેખાઓ (8 રેખાઓ, એલઇડી એનોડ) રેઝિસ્ટર દ્વારા માઇક્રોકન્ટ્રોલર સાથે જોડાયેલ છે. દરેક કોલમ (LED કેથોડ્સ) માઇક્રોકન્ટ્રોલર સાથે 8 ટ્રાન્ઝિસ્ટર દ્વારા જોડાયેલ છે. સંકેત એલ્ગોરિધમ સમાન છે, પ્રથમ આપણે લીટીઓ પર જરૂરી તાર્કિક સ્તરો સેટ કરીએ છીએ, જે મુજબ એલઈડી સ્તંભમાં પ્રગટાવવા જોઈએ, પછી અમે પ્રથમ કૉલમ (ડાબેથી જમણે સંકેત) ને જોડીએ છીએ. ચોક્કસ વિરામ પછી, અમે કૉલમ બંધ કરીએ છીએ, અને બીજી કૉલમ પ્રદર્શિત કરવા માટે રેખાઓ પરના તાર્કિક સ્તરોને બદલીએ છીએ, પછી બીજા કૉલમને કનેક્ટ કરીએ છીએ. અને તેથી અમે એક પછી એક તમામ કૉલમ સ્વિચ કરીએ છીએ. નીચે મેટ્રિક્સને માઇક્રોકન્ટ્રોલર સાથે જોડવાનો આકૃતિ છે.


કુલ મળીને, આવા મેટ્રિક્સને કનેક્ટ કરવા માટે તમારે 16 માઇક્રોકન્ટ્રોલર પિનની જરૂર પડશે, જે ઘણી બધી છે, તેથી નિયંત્રણ રેખાઓ ઘટાડવા માટે સીરીયલ શિફ્ટ રજિસ્ટરનો ઉપયોગ કરવો વધુ સારું છે.

સૌથી સામાન્ય સીરીયલ રજીસ્ટર એ 74HC595 ચિપ છે, જેમાં ડેટા લોડ કરવા માટે એક શિફ્ટ રજીસ્ટર અને સ્ટોરેજ રજીસ્ટર છે જેના દ્વારા ડેટા આઉટપુટ લાઈનમાં ટ્રાન્સફર થાય છે. તેમાં ડેટા લોડ કરવું સરળ છે, અમે SH_CP ઘડિયાળના ઇનપુટ પર લોજિકલ 0 સેટ કરીએ છીએ, પછી DS ડેટા ઇનપુટ પર જરૂરી લોજિકલ લેવલ સેટ કરીએ છીએ, ત્યારબાદ અમે ઘડિયાળના ઇનપુટને 1 પર સ્વિચ કરીએ છીએ અને લેવલ વેલ્યુ (DS ઇનપુટ પર) છે. શિફ્ટ રજિસ્ટરની અંદર સંગ્રહિત. તે જ સમયે, ડેટા એક બીટ દ્વારા ખસેડવામાં આવે છે. ફરીથી અમે SH_CP પિનને 0 પર રીસેટ કરીએ છીએ, DS ઇનપુટ પર જરૂરી સ્તર સેટ કરીએ છીએ અને SH_CPને 1 પર વધારીએ છીએ. શિફ્ટ રજિસ્ટર સંપૂર્ણ રીતે લોડ થઈ જાય પછી (8 બિટ્સ), અમે ST_CP પિનને 1 પર સેટ કરીએ છીએ, આ ક્ષણે ડેટા ટ્રાન્સફર થાય છે. સ્ટોરેજ રજિસ્ટરમાં અને આઉટપુટ લાઇન્સ Q0... Q7 ને સપ્લાય કરવામાં આવે છે, જે પછી અમે ST_CP પિન રીસેટ કરીએ છીએ. સીરીયલ લોડિંગ દરમિયાન, ડેટા Q0 થી Q7 માં સ્થાનાંતરિત થાય છે. પિન Q7' શિફ્ટ રજિસ્ટરના છેલ્લા બિટ સાથે જોડાયેલ છે; આ પિન બીજી ચિપના ઇનપુટ સાથે કનેક્ટ થઈ શકે છે, જેથી તમે એક સાથે બે અથવા વધુ ચિપ્સમાં ડેટા લોડ કરી શકો. જ્યારે લોજિક 1 લાગુ કરવામાં આવે છે ત્યારે OE પિન આઉટપુટ લાઇનને ત્રીજી (ઉચ્ચ-પ્રતિરોધક) સ્થિતિમાં સ્વિચ કરે છે. MR પિન શિફ્ટ રજિસ્ટરને રીસેટ કરવા માટે રચાયેલ છે, એટલે કે, રજિસ્ટર ફ્લિપના આઉટપુટ પર લોજિક લેવલ સેટ કરે છે. -ફ્લોપ્સ, જે આઠ શૂન્ય લોડ કરવા માટે સમકક્ષ છે. નીચે 74NS595 ચિપમાં ડેટા લોડ કરવાનો ડાયાગ્રામ છે, જે આઉટપુટ લાઇન Q0...Q7 પર મૂલ્ય 11010001 સેટ કરે છે, જો કે શરૂઆતમાં ત્યાં શૂન્ય હતા:


બે 74HC595 શિફ્ટ રજિસ્ટરનો ઉપયોગ કરીને PIC16F628A માઇક્રોકન્ટ્રોલર સાથે 8x8 મેટ્રિક્સને કનેક્ટ કરવાનું વિચારો, આકૃતિ નીચે પ્રસ્તુત છે:


ડેટાને DD2 ચિપમાં લોડ કરવામાં આવે છે (પંક્તિઓ પરના તાર્કિક સ્તરોનું નિયંત્રણ, LED એનોડ) પછી Q7' પિન દ્વારા તે અનુક્રમે DD3 (કૉલમ્સનું નિયંત્રણ) પર સ્થાનાંતરિત થાય છે, અમે કૉલમને સક્ષમ કરવા માટે પ્રથમ બાઈટ લોડ કરીએ છીએ, પછી પંક્તિઓ પરના તાર્કિક સ્તરો સાથે બાઈટ. ટ્રાન્ઝિસ્ટર કે જે મેટ્રિક્સ (LED કેથોડ્સ) ના કૉલમ્સને સ્વિચ કરે છે તે DD3 ની આઉટપુટ રેખાઓ સાથે જોડાયેલા છે. મેટ્રિક્સ પર ઇમેજ પ્રદર્શિત કરવા માટેનો પ્રોગ્રામ કોડ નીચે છે:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;; ;8x8ના રિઝોલ્યુશનવાળા મેટ્રિક્સ માટે ડાયનેમિક ડિસ્પ્લેનું અમલીકરણ ;ઉદાહરણ તરીકે ઘડિયાળ જનરેટર ફ્રિક્વન્સી 4 મેગાહર્ટઝ છે, મશીન સાયકલ 1 μs org 0000h છે ;પ્રોગ્રામ એક્ઝેક્યુશન 0000h સરનામાંથી પ્રારંભ કરો ;સ્ટાર્ટ લેબલ પર જાઓ ;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;; ;સબરૂટિન ઓઆરજી 0004h હેન્ડલિંગમાં વિક્ષેપ; એડ્રેસ 0004h movwf W_TEMP થી સબરૂટિનનો અમલ શરૂ કરો; કી રજીસ્ટર સ્વેપ સ્ટેટસ,W ના મૂલ્યો સાચવો; સીએલઆરએફ સ્ટેટસ ; movwf STATUS_TEMP ; ; movwf FSR_osn ;FSR_osn રજિસ્ટર પર movf FSR_prer,W ;અગાઉ સાચવેલ મૂલ્ય movwf FSR પુનઃસ્થાપિત કરવું ;FSR_prer રજિસ્ટરમાંથી FSR રજિસ્ટર;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;; ;સ્ટોલ્બ રજીસ્ટરની સામગ્રીને ચિપ movf stolb માં લોડ કરી રહ્યું છે,W ;સ્ટોલ્બ રજીસ્ટર movwf var ની સામગ્રીની નકલ કરવી ;var રજીસ્ટર met2 btfsc var,0 માં ;ds આઉટપુટને btfss var,0 અનુસાર સેટ કરો; bcf ds; bcf sh_cp ; rrf var,F ;તૈયાર કરવા માટે, var રજિસ્ટરને જમણી તરફ શિફ્ટ કરો;આગલું બીટ met2 પર જાઓ;scetbit શૂન્ય નથી: met2 લેબલ પર જાઓ;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;INDF રજિસ્ટરની સામગ્રીને ચિપમાં લોડ કરવી;74HC595 (સીરીયલ શિફ્ટ રજિસ્ટર) movf INDF,W ;INDF રજિસ્ટર movwf var ની સામગ્રીની નકલ કરવી; var રજિસ્ટર movlw.8 પર; નંબર 8 લખીને scet register. movwf scetbit ;ટ્રાન્સમિટેડ બિટ્સ met1 btfsc var ,7ની ગણતરી માટે ;આઉટપુટ ds ને bsf ds અનુસાર સેટ કરો ;રજિસ્ટર var btfss var,7 ના 7મા બીટની કિંમત ; bcf ds; bsf sh_cp ; ડેટા bcf sh_cp લેચ કરવા માટે sh_cp પિનને ઘડિયાળ કરો ; rlf var,F ;રજીસ્ટર var ને ડાબી તરફ શિફ્ટ કરો, આગામી બીટ decfsz scetbit,F ;રજિસ્ટર શરત સાથે ઘટાડો scetbit goto met1 ;scetbit શૂન્યની બરાબર નથી: met1 લેબલ પર જાઓ; bsf st_cp ;લોડ કરેલ bcf st_cp ;બાઇટ્સને 74HC595 માઇક્રોક્રિકિટ્સની આઉટપુટ લાઇનમાં સ્થાનાંતરિત કરવા માટે st_cp પિનને ઘડિયાળ કરો; bcf STATUS,C ;rrf stolb,F ;સ્ટોલ્બ રજીસ્ટરની ડાબી બાજુએ શિફ્ટ કરતા પહેલા સ્ટેટસ રજીસ્ટરનો બીટ સી રીસેટ કરો; incf FSR,F ;FSR રજિસ્ટરમાં વધારો, આગળની તૈયારી; 74HC595 decfsz શેટ પર ડેટા મોકલવા માટે નોંધણી કરો, F ;રજિસ્ટર શરત શેટ સાથે ઘટાડવું ગોટો એક્ઝિટ ;શેટ રજિસ્ટર 0 ની બરાબર નથી: બહાર નીકળો movlw datagister1 માં સંક્રમણ; 0 ની બરાબર છે: પ્રથમ movwf FSR સરનામું લખવું; FSR રજિસ્ટર movlw.8 માં માહિતી સંગ્રહ રજીસ્ટર; movwf શેટ જાળવવા માટે, શેટ રજિસ્ટરમાં નંબર 8 લખો; કૉલમ ગણતરીઓ; બહાર નીકળો bcf INTCON,T0IF; TMR0 ઓવરફ્લો ઇન્ટરપ્ટ ફ્લેગ movlw રીસેટ કરો. 124 ;ટાઈમર રજીસ્ટર TMR0 movwf TMR0 પર નંબર 124 લખો ; ; movf FSR,W ;FSR રજિસ્ટર movwf FSR_prer ;FSR_prer રજિસ્ટર movf FSR_osn ,W માં સાચવી રહ્યું છે ;FSR_osn રજિસ્ટરમાંથી FSR રજિસ્ટરની અગાઉ સાચવેલ મૂલ્ય movwf FSR ;ની પુનઃસ્થાપિત કરવી; swapf STATUS_TEMP,W ;કી રજિસ્ટર્સની સામગ્રીને પુનઃસ્થાપિત કરવી movwf STATUS ; swapf W_TEMP,F ; swapf W_TEMP,W ; ; retfie ;એક્ઝિટ ઇન્ટરપ્ટ રૂટિન;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;મુખ્ય કાર્યક્રમ શરૂ કરો............. ......... bsf STATUS,RP0 ;રજિસ્ટરમાં movlw b"11010010" ;OPTION_REG પર દ્વિસંગી નંબર 11010011 લખો, ત્યાંથી આંતરિક movwf OPTION_REG ;TMR0 bcf સ્ટેટસ માટે ઘડિયાળનો સ્ત્રોત સેટ કરો, RP0 પર ; TMR0 પહેલાં; પ્રીસ્કેલર રેશિયો 1:8 પર સેટ કરો; movlw .8 ;movwf શીટ શરૂ કરતા પહેલા, શીટ રજિસ્ટરમાં નંબર 8 લખવું ;TMR0 ઓવરફ્લો વિક્ષેપિત થાય છે, એક્ઝિક્યુટ થાય છે; એકવાર, પાવર ચાલુ કર્યા પછી movlw b"10000000" ;બાઈનરી નંબર 10000000 લખીને movwf, stb, register. 1લી કૉલમ ચાલુ કરો;પાવર ચાલુ કર્યા પછી એકવાર એક્ઝિક્યુટ કરો; movlw data1 ;FSR_prer રજિસ્ટરમાં પ્રથમ રજીસ્ટર (movwf FSR_prer ;માહિતી સંગ્રહ રજીસ્ટર) નું સરનામું લખવાનું કરવામાં આવે છે;એકવાર, પાવર ચાલુ કર્યા પછી; movlw .8 ;movwf tmp ;મેટ્રિક્સને માહિતી આઉટપુટ કરવા માટે 8 રજીસ્ટર સાફ કરવું, movlw data1 ;matrix movwf FSR ને બંધ કરવા સમકક્ષ ; met3 CLrf INDF ; incf FSR,F ; decfsz tmp,F ; met3 પર જાઓ; ; bcf INTCON,T0IF ;TMR0 ઓવરફ્લો ઇન્ટરપ્ટ ફ્લેગ bsf INTCON,T0IE ને ફરીથી સેટ કરો ;TMR0 ઓવરફ્લો ઇન્ટરપ્ટ્સને bsf INTCON,GIE સક્ષમ કરો ;ગ્લોબલ ઇન્ટરપ્ટ્સને સક્ષમ કરો; m1 movlw data1 ;અક્ષર R movwf FSR ના આઉટપુટનું ઉદાહરણ ; movlw b"00000000" ; movwf INDF ; incf FSR,F ; movlw b"01111111" ; movwf INDF ; incf FSR,F ; movlw b"00001001" ; movwf INDF ; incf FSR,F ; movlw b"00011001" ; movwf INDF ; incf FSR,F ; movlw b"00101001" ; movwf INDF ; incf FSR,F ; movlw b"01000110" ; movwf INDF ; incf FSR,F ; movlw b"00000000" ; movwf INDF ; incf FSR,F ; movlw b"00000000" ; movwf INDF ; ; ............. ; ............. ; ............. ; ; અંત ;સમગ્ર કાર્યક્રમનો અંત;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;8x8ના રિઝોલ્યુશન સાથે મેટ્રિક્સ માટે ડાયનેમિક ડિસ્પ્લેનું અમલીકરણ

;ક્લોક જનરેટર આવર્તન ઉદાહરણ તરીકે 4 MHz, મશીન સાયકલ 1 µs

org 0000h ;એડ્રેસ 0000h થી પ્રોગ્રામ એક્ઝેક્યુશન શરૂ કરો

સ્ટાર્ટ પર જાઓ;સ્ટાર્ટ લેબલ પર જાઓ

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;દિનચર્યામાં વિક્ષેપ

org 0004h ;સરનામા 0004h થી સબરૂટિનનો અમલ શરૂ કરો

movwf W_TEMP ; કી રજીસ્ટર મૂલ્યો સાચવો

સ્વેપફ સ્ટેટસ,ડબલ્યુ ;

movwf STATUS_TEMP ;

movf FSR,W ;FSR રજિસ્ટરની વર્તમાન કિંમત સાચવો

movwf FSR_osn ;FSR_osn રજીસ્ટર કરવા માટે

movf FSR_prer,W ;અગાઉ સાચવેલ મૂલ્ય પુનઃસ્થાપિત કરો

movwf FSR ;FSR_prer રજિસ્ટરમાંથી FSR રજિસ્ટર

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;74HC595 (સીરીયલ શિફ્ટ રજીસ્ટર)

movf stolb,W ;સ્ટોલ્બ રજિસ્ટરની સામગ્રીની નકલ કરવી

movwf var ;var રજીસ્ટર કરવા માટે

movlw.8 ;ગણતરી માટે, scetbit રજિસ્ટરમાં નંબર 8 લખો

movwf scetbit ;પ્રસારિત બિટ્સ

met2 btfsc var,0 ;તે અનુસાર ds આઉટપુટ સેટ કરો

bsf ds; var રજિસ્ટરના 7મા બીટની કિંમત

bsf sh_cp; ડેટા લેચ કરવા માટે sh_cp પિનને ઘડિયાળ કરો

rrf var,F ;તૈયારી માટે var રજિસ્ટરને જમણી તરફ શિફ્ટ કરો

;આગલું બીટ

decfsz scetbit,F ;રજિસ્ટર શરત scetbit સાથે ઘટાડો

goto met2;scetbit શૂન્ય નથી: met2 પર જાઓ

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;74HC595 (સીરીયલ શિફ્ટ રજીસ્ટર)

movf INDF,W; INDF રજિસ્ટરની સામગ્રીની નકલ કરે છે

movwf var ;var રજીસ્ટર કરવા માટે

movlw.8 ;ગણતરી માટે, scetbit રજિસ્ટરમાં નંબર 8 લખો

movwf scetbit ;પ્રસારિત બિટ્સ

met1 btfsc var,7 ;તે અનુસાર ds આઉટપુટ સેટ કરો

bsf ds; var રજિસ્ટરના 7મા બીટની કિંમત

bsf sh_cp; ડેટા લેચ કરવા માટે sh_cp પિનને ઘડિયાળ કરો

rlf var,F ;તૈયારી માટે var રજિસ્ટરને ડાબી બાજુએ શિફ્ટ કરો

;આગલું બીટ

decfsz scetbit,F ;રજિસ્ટર શરત scetbit સાથે ઘટાડો

goto met1;scetbit શૂન્ય નથી: met1 પર જાઓ

bsf st_cp ;લોડ ટ્રાન્સમિટ કરવા માટે st_cp આઉટપુટને ઘડિયાળ કરો

bcf st_cp ;74HC595 માઈક્રોસિર્કિટ્સની આઉટપુટ લાઈનો માટે બાઈટ્સ

bcf STATUS,C; સ્થળાંતર કરતા પહેલા સ્ટેટસ રજિસ્ટરનો બીટ સી રીસેટ કરો

આરઆરએફ સ્ટોલ્બ,એફ ;રજીસ્ટર સ્ટોલ્બને ડાબી બાજુએ ખસેડો

incf FSR,F ;FSR રજિસ્ટરમાં વધારો કરો, આગળની તૈયારી કરો

;74HC595 પર ડેટા મોકલવા માટે નોંધણી કરો

decfsz shet,F ;રજિસ્ટર શરત શીટ સાથે ઘટાડો

જાઓ એક્ઝિટ ;શેટ રજિસ્ટર 0 ની બરાબર નથી: બહાર નીકળવા માટે સંક્રમણ

movlw data1 ;શેટ રજીસ્ટર 0 છે: પ્રથમનું સરનામું રેકોર્ડ કરો

movwf FSR ;FSR રજિસ્ટરમાં માહિતી સંગ્રહ રજીસ્ટર

movlw.8 ;નંબર 8 શીટ રજિસ્ટરમાં લખો, રાખવા માટે

movwf શેટ ;કૉલમ ગણતરીઓ

movlw b"10000000" ;બાઈનરી નંબર 10000000 લખે છે

movwf stolb; stolb રજિસ્ટર, 1લી કૉલમનો સમાવેશ કરવા માટે

બહાર નીકળો bcf INTCON,T0IF ;TMR0 ઓવરફ્લો ઇન્ટરપ્ટ ફ્લેગ રીસેટ કરો

movlw .124 ;TMR0 ટાઈમર રજિસ્ટરમાં 124 નંબર લખો

movf FSR,W ;FSR રજિસ્ટરની વર્તમાન કિંમત સાચવો

movwf FSR_prer ;FSR_prer રજીસ્ટર કરવા માટે

movf FSR_osn ,W ;અગાઉ સાચવેલ મૂલ્ય પુનઃસ્થાપિત કરો

movwf FSR ;FSR_osn રજિસ્ટરમાંથી FSR રજિસ્ટર

swapf STATUS_TEMP,W ;કી રજીસ્ટરની સામગ્રી પુનઃસ્થાપિત કરી રહ્યા છીએ

swapf W_TEMP,F ;

swapf W_TEMP,W ;

retfie ;એક્ઝિટ ઇન્ટરપ્ટ રૂટિન

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;મુખ્ય કાર્યક્રમ

............. શરૂ કરો ;પ્રારંભિક રજીસ્ટર સેટઅપ

............. ;ખાસ હેતુ

.................

bsf STATUS,RP0 ;રજીસ્ટર કરવા માટે બાઈનરી નંબર 11010011 લખો

movlw b"11010010" ;OPTION_REG, ત્યાં આંતરિક સેટિંગ

movwf OPTION_REG ;TMR0 માટે ઘડિયાળનો સ્ત્રોત

bcf STATUS,RP0 ;TMR0 પહેલા પ્રીસ્કેલર ચાલુ કરો

;પ્રીસ્કેલર રેશિયોને 1:8 પર સેટ કરો

movlw .8 ;શરૂ કરતા પહેલા શીટ રજિસ્ટરમાં નંબર 8 લખો

movwf શેટ ;TMR0 ઓવરફ્લો પર વિક્ષેપ, એક્ઝિક્યુટ

;એકવાર, પાવર ચાલુ કર્યા પછી

movlw b"10000000" ;બાઈનરી નંબર 10000000 લખે છે

movwf stolb; stolb રજિસ્ટર, 1લી કૉલમનો સમાવેશ કરવા માટે

દરેક સ્તંભની પંક્તિઓ માટે તાર્કિક સ્તરો સાથેની માહિતી 8 માહિતી સંગ્રહ રજિસ્ટરમાં સંગ્રહિત થાય છે, જેના દ્વારા ઍક્સેસ કરવામાં આવે છે. પ્રથમ રજીસ્ટરનું સરનામું ડેટા1 નામ આપવામાં આવ્યું છે. શીટ અને સ્ટોલ્બ રજીસ્ટરની પ્રારંભિક એન્ટ્રી ઉપરાંત, FSR_prer રજિસ્ટરમાં પ્રથમ માહિતી સંગ્રહ રજીસ્ટરનું સરનામું લખવું જરૂરી છે (રજિસ્ટર ડેટા1 છે, FSR_prer પર લખવાનું એકવાર કરવામાં આવે છે, પછી તેને હેન્ડલરમાં ગોઠવવામાં આવે છે. ), આ પછી જ TMR0 ઓવરફ્લો વિક્ષેપોને મંજૂરી આપો.

વિક્ષેપોને સક્ષમ કરતા પહેલા, માહિતી સંગ્રહ રજિસ્ટરને સાફ કરવાની સલાહ આપવામાં આવે છે; આ કામગીરી વધારાના tmp રજિસ્ટર (કાઉન્ટર તરીકે) અને પરોક્ષ સરનામાંનો ઉપયોગ કરીને કરવામાં આવે છે; ક્લિયરિંગ મેટ્રિક્સને બંધ કરવા સમાન છે.

ઇન્ટરપ્ટ હેન્ડલિંગ સબરૂટીનમાં, અમે સ્ટોલ્બ રજિસ્ટરની સામગ્રીને DD2 ચિપમાં લોડ કરીએ છીએ (જ્યારે તમે ઇન્ટરપ્ટ્સ સક્ષમ કર્યા પછી હેન્ડલર દાખલ કરો છો, ત્યારે ઉપર જણાવ્યા મુજબ રજિસ્ટરમાં 10000000 નંબર હોય છે). લોડિંગ સ્ટોલ્બ રજિસ્ટરના ઓછામાં ઓછા નોંધપાત્ર બીટથી શરૂ થાય છે, જે લોડ થતાં Q0 થી Q7 (DD2 ચિપની અંદર) તરફ જાય છે, લોડિંગ અલ્ગોરિધમ ઉપર ચર્ચા કરવામાં આવી હતી, તેથી મને લાગે છે કે તેને સમજવું મુશ્કેલ નહીં હોય. કોડ આગળ, અમે INDF રજિસ્ટરની સામગ્રીને DD2 માં લોડ કરીએ છીએ, આ માહિતી સ્ટોરેજ રજિસ્ટરમાંથી એક છે, જેનું સરનામું FSR માં છે (જ્યારે તમે ઇન્ટરપ્ટ્સ સક્ષમ કર્યા પછી હેન્ડલર દાખલ કરો છો, ત્યારે પ્રથમ માહિતી સ્ટોરેજ રજિસ્ટરનું સરનામું કહેવાય છે. ડેટા1 FSR માં છે). લોડિંગ INDF રજિસ્ટરના સૌથી નોંધપાત્ર ભાગથી શરૂ થાય છે. માનવામાં આવેલ 2 બાઈટ લોડ કર્યા પછી, અમે st_cp આઉટપુટને ઘડિયાળ કરીએ છીએ, ત્યાંથી લોડ થયેલ ડેટા DD2, DD3 માઈક્રોસિર્કિટ્સની આઉટપુટ લાઈનમાં ટ્રાન્સફર થાય છે. આમ, જ્યારે તમે પ્રથમ વખત પ્રોસેસર દાખલ કરો છો, ત્યારે મેટ્રિક્સનો પ્રથમ સ્તંભ સ્વિચ કરવામાં આવે છે, જેમાં એલઇડી પ્રકાશિત થાય છે, જેમાંના એનોડ્સમાં ઉચ્ચ તાર્કિક સ્તર હોય છે, ડેટા1 રજિસ્ટરની સામગ્રી અનુસાર (પ્રથમ માહિતી સ્ટોરેજ રજિસ્ટર).

આગળ, જ્યારે અમે ઈન્ટરપ્ટ હેન્ડલર દાખલ કરીએ ત્યારે મેટ્રિક્સના બીજા કૉલમને કમ્યુટેશન માટે તૈયાર કરવા માટે અમે સ્ટોલ્બ રજિસ્ટરને એક બીટ જમણી તરફ શિફ્ટ કરીએ છીએ. સ્થળાંતર કરતા પહેલા, સ્ટેટસ રજિસ્ટરનો ધ્વજ C સાફ કરવો જરૂરી છે, કારણ કે આ ધ્વજ દ્વારા શિફ્ટ થાય છે, અને શિફ્ટ સમયે તેની સ્થિતિ જાણી શકાતી નથી. શિફ્ટ પછી, અમે એફએસઆર રજિસ્ટરમાં વધારો કરીએ છીએ, બીજા કૉલમ માટે તાર્કિક પંક્તિ સ્તરો સાથે આગળની માહિતી સંગ્રહ રજિસ્ટર (ડેટા1 રજિસ્ટર પછી) તૈયાર કરીએ છીએ. આગળ, અમે શરત સાથે શીટ રજિસ્ટરને ઘટાડીએ છીએ, અને જો તે શૂન્યની બરાબર ન હોય, તો અમે TMR0 ઓવરફ્લો ઇન્ટરપ્ટ ફ્લેગ રીસેટ કરીએ છીએ, ટાઇમર પર નંબર લખીએ છીએ અને ઇન્ટરપ્ટ હેન્ડલરમાંથી બહાર નીકળીએ છીએ.

આગલી વખતે જ્યારે તમે હેન્ડલર દાખલ કરશો, ત્યારે મેટ્રિક્સનો બીજો કૉલમ શામેલ કરવામાં આવશે, વગેરે. જ્યારે શેટ રજિસ્ટર શૂન્ય પર રીસેટ થાય છે (8મી કૉલમ સ્વિચ કર્યા પછી), થાંભલાને સ્વિચ કરવાના આગલા ચક્ર માટે તેના પર નંબર 8 લખવામાં આવે છે, વધુમાં, સ્ટોલ્બ રજિસ્ટરનું મૂલ્ય એડજસ્ટ કરવામાં આવે છે, અને પ્રથમ માહિતીનું સરનામું સ્ટોરેજ રજિસ્ટર (ડેટા1) FSR રજિસ્ટરમાં લખવામાં આવે છે.

ચાલો TMR0 ટાઈમર, ઘડિયાળ જનરેટર આવર્તન 4 MHz, મશીન ચક્ર 1 μs માટે સમય વિલંબની ગણતરી કરીએ. LEDs ના ફ્લિકરિંગને ટાળવા માટે, અમે દરેક કૉલમના રિફ્રેશ રેટને 100 Hz (પીરિયડ T = 10 ms) તરીકે લઈએ છીએ, સમય વિલંબ 10/8 = 1.25 ms છે. અમે TMR0 પ્રીસ્કેલર પરિબળને 1:8 પર સેટ કર્યું છે, જેમાં મહત્તમ સંભવિત વિલંબ 256x8 = 2048 μs છે. 1.25 ms ના વિરામ માટે, ટાઈમર (256x1.25)/2.048 = 156.25 વખત ગણવું જોઈએ, રાઉન્ડ અપ કરીએ તો આપણને 156 કાઉન્ટ મળે છે. તદનુસાર, ટાઈમરમાં નંબર 256-156 = 100 લખવો જરૂરી છે. પરંતુ આ એકદમ સાચું મૂલ્ય નથી, કારણ કે વિક્ષેપિત પ્રક્રિયા સબરૂટિન ચલાવવામાં થોડો સમય લાગે છે, આ કિસ્સામાં તે લગભગ 190 μs લે છે, પુનઃગણતરી લેવામાં આવે છે. પ્રીસ્કેલર ગુણાંકને ધ્યાનમાં રાખીને આપણને 190/8 = 23.75 અથવા 24 ગણતરીઓ મળે છે. TMR0 પર લખવાની સાચી કિંમત છે: 100+24=124.

મુખ્ય પ્રોગ્રામમાં આપણે મેટ્રિક્સ પર જે પ્રદર્શિત કરવા માંગીએ છીએ તેના અનુરૂપ 8 માહિતી સંગ્રહ રજીસ્ટર લખીએ છીએ. ઉપરોક્ત કોડ માટે મેટ્રિક્સમાં માહિતીના આઉટપુટને સમજાવતી રેખાકૃતિ નીચે છે.


શિફ્ટ રજિસ્ટર ઉપરાંત, સાત-સેગમેન્ટના સૂચકાંકો અને એલઇડી મેટ્રિસિસમાં માહિતીને આઉટપુટ કરવા માટે વિશિષ્ટ ડ્રાઇવરો છે; આ કિસ્સામાં, ગતિશીલ સંકેત ડ્રાઇવર દ્વારા જ લાગુ કરવામાં આવે છે; જે બાકી રહે છે તે પ્રદર્શન માટે ડેટા મોકલવાનું છે. મેં વિશેના લેખમાં આ લોકપ્રિય ડ્રાઇવરોમાંથી એકની સમીક્ષા કરી.

નીચે, લિંક પરથી તમે PIC16F628A માઇક્રોકન્ટ્રોલર માટે ફર્મવેર અને સોર્સ કોડ ડાઉનલોડ કરી શકો છો, બે 74HC595 શિફ્ટ રજિસ્ટરનો ઉપયોગ કરીને 8x8 મેટ્રિક્સ પર ડાયનેમિક ડિસ્પ્લેના અમલીકરણ સાથે, કનેક્શન ડાયાગ્રામ ઉપર ચર્ચા કરવામાં આવી હતી. અક્ષરો R, L, નંબર 46, એક હસતો ચહેરો અને ક્રોસના રૂપમાં માત્ર એક પેટર્ન વૈકલ્પિક રીતે મેટ્રિક્સ પર પ્રદર્શિત થાય છે; આ એનિમેશન નીચેની વિડિઓમાં દર્શાવવામાં આવ્યું છે.

ટૅગ્સ સાથે, . વાંચવું .



શું તમને લેખ ગમ્યો? તમારા મિત્રો સાથે શેર કરો!