Picproje Elektronik Sitesi

DERLEYİCİLER => PIC Assembly => Konuyu başlatan: mert3162 - 24 Temmuz 2004, 21:13:18

Başlık: 0-99sayıcı yardım
Gönderen: mert3162 - 24 Temmuz 2004, 21:13:18
acil yardıma ihtiyacım var pıclı bir devre yapmak istiyorum ama pıc hakkında yeteri kadar bilgim yok elimde sadece Orhan altınbaşakın pıc proglamlamaya giriş kitabı var
         

          istediğim devrenin şöyle çalışması gerekiyor. pıcin pinine buton bağlı olacak bu butona basıldıkça sayıcının değeri bir sayı artacak çıkışa bunu binary olarak çıkaracak çıkıştaki binary sayıyı ben 7447 entegresiyle desimal şekilde alabilirimdevre 3 dakika sonra kendine reset atacak yardımlarınızı bekliyorum sorusu olan arkadaşlar buraya mesaj atabilirler
Başlık: 0-99sayıcı yardım
Gönderen: yıldırım ak - 24 Temmuz 2004, 22:59:43
Nette elindeki kitapta bulunan bilgilerden daha çok bilgi bulabilirsin. O kitabı 2-3 yıl önce incelemiştim. Alan arkadaş yanlış hatırlamıyorsam 8 milyon gibi bir fiyatı olduğunu söylemişti. Yine yanlış hatırlamıyorsam 5. sınıf bir kağıt kullanılmış ve büyük punto metinler, büyük ebatlı fotograflar, büyük ebatlı akış diyagramları ve büyük ebatlarda şekillerle ancak 200-250 sayfayı bulabilmiş bir kitaptı. Amacım kitabı, yazarı kötülemek değil ama tamamen ticari yazılmış bir kitap. Eğitimcilik adına bir şey yok.

İşe forumda arama yaparak başlamanı tavsiye ederim.

Saygı ve Sevgiler...
Başlık: 0-99sayıcı yardım
Gönderen: Veli B. - 25 Temmuz 2004, 00:17:21
Hoşgeldin Mert,
İstersen buraya bir bak.Arama kısmından sayıcı yazıp aratırsan daha fazla sonuç bulabilirsin ;)

https://www.picproje.org/index.php/topic,3711&start=0
Başlık: Re: 0-99sayıcı yardım
Gönderen: fsan - 25 Temmuz 2004, 19:55:30
Alıntı yapılan: "mert3162"7447 entegresiyle desimal şekilde alabilirimdevre 3 dakika sonra kendine reset atacak yardımlarınızı bekliyorum sorusu olan arkadaşlar buraya mesaj atabilirler

@mert3162
kardes sayici 99 ulastiktan sonrami 3 dakika bekleyip reset atacak yoksa herhangi bir sayidan sonra buttona 3 dakika icinde tekrar basilmazsa mi ?

Sana örnek olarak bu semayi ve kodlari veriyorum..
(7447 ile iki display sürme yöntemi ve interrupt ile saat/timer)
geriye kalan kisminida beraber yapariz istersen ;)

'****************************************************************
'*  Name    : 59sec_Counter.BAS                                 *
'*  Author  : F.San                                             *
'*  Date    : 25.07.2004                                        *
'*  Version : 1.0.1                                             *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ device  xt_osc, wdt_off, pwrt_on, protect_off

Display var word
Counter var Byte
DoOnce  var bit
PBup    var PortA.0
PBdn    var PortA.1

TrisA = %00011
TrisB = %00000000
PortA = 0
PortB = 0

DoOnce = 0
Counter = 0

Hours   Var Byte      ' Holds the hours value (0-23)
Minutes Var Byte      ' Holds the minutes value (0-59)
Seconds Var Byte      ' Holds the seconds value (0-59)
Ticks   Var Byte      ' Holds the pieces of seconds value (0-59)
U_Flag  Var Byte      ' Indicator to allow the update of the display

T0IE Var INTCON.5  ' Timer0 Overflow Interrupt Enable
T0IF Var INTCON.2  ' Timer0 Overflow Interrupt Flag
GIE Var INTCON.7  ' Global Interrupt Enable
PS0 Var OPTION_REG.0  ' Prescaler division bit-0
PS1 Var OPTION_REG.1  ' Prescaler division bit-0
PS2 Var OPTION_REG.2  ' Prescaler division bit-0
PSA Var OPTION_REG.3  ' Prescaler Assignment (1= assigned to WDT)
 ' (0= assigned to oscillator)
T0CS Var OPTION_REG.5  ' Timer0 Clock Source Select (0=Internal clock)
 ' (1=External PORTA.4)
Hours = 0          ' Set the initial time to 00:00:00
Minutes = 0
Seconds = 0
Ticks = 0
U_Flag = 1        ' Allow the display to update initially

' Set TMR0 to interrupt every 16.384ms. Using a prescaler value of 64 (64*256)
GIE=0  ' Turn off global interrupts
While GIE=1:GIE=0:Wend  ' Make sure they are off
PSA=0  ' Assign the prescaler to external oscillator
PS0=1  ' Set the prescaler
PS1=0  ' to increment TMR0
PS2=1  ' every 64th instruction cycle
T0CS=0  ' Assign TMR0 clock to internal source
TMR0=0  ' Clear TMR0 initially
T0IE=1  ' Enable TMR0 overflow interrupt
GIE=1  ' Enable global interrupts

On Interrupt Goto Clock_Int    ' Point to the interrupt handler

Main:  

   If U_Flag = 1 then ' Check if the time has changed
       U_Flag = 0       ' Clear the flag
       Counter = Seconds
       Display.byte0 = (Counter Dig 1) << 4
       Display.byte1 = (Counter Dig 0)
       Display = Display >> 4
       PortB = Display.byte0
   Endif

Goto Main

' ** INTERRUPT ROUTINE TO HANDLE EACH TIMER TICK **
' The interupt will be called every 16.384ms.
' Each time the interupt is called the variable TICKS will be incremented.
' When TICKS reaches 61, an approximate second has elapsed.
' Calculated by:- (16.384*61)=999.424ms or .999424 of a second

Disable         ' Disable all interupts during the interrupt handler
Clock_Int:
Ticks=Ticks+1       ' Increment the TICKS variable
If Ticks <=61 then Clock_Exit       ' Have we reached a second yet?

' One second has elasped so update the time variables
Ticks=0 ' YES! so reset TICKS
Seconds=Seconds+1 ' and increment the SECONDS variable
If Seconds >=60 then ' Have we reached a minute yet?
Seconds=0 ' YES! so reset SECONDS
Minutes=Minutes + 1 ' and increment MINUTES
If Minutes >=60 then ' Have we reached an hour yet?
Minutes=0 ' YES! so reset MINUTES
Hours=Hours+1 ' and increment HOURS
If Hours >=23 then ' Have we reached a 24 hours yet?
Hours=0 ' YES! so reset HOURS
Endif
Endif
Endif
U_Flag=1       ' Inform the main program that the time has changed

Clock_Exit:
T0IF=0     ' Reset timer interrupt flag
Resume ' Exit the interupt
Enable ' Allow more interrupts

End

Alıntı YapCounter = Seconds
       Display.byte0 = (Counter Dig 1) << 4
       Display.byte1 = (Counter Dig 0)
       Display = Display >> 4
       PortB = Display.byte0
Bu kisim Displaylari PortB den sürmek icin benim kullandigim yöntem, daha baska bir kolay mantikli yöntem varsa bilmek isterim.

BAS, HEX, DSN dosyalar:
http://home.no/fsan/projects/Diverse/59sec_Counter/
Başlık: 0-99sayıcı yardım
Gönderen: Veli B. - 25 Temmuz 2004, 20:09:29
Dostum tarama kullanarak 5 pinle çözebilirsin yada 595 ile 3 pin kullanarak çözebilirsin.
Başlık: 0-99sayıcı yardım
Gönderen: fsan - 25 Temmuz 2004, 20:46:43
merhaba katana,
kardes 5 pinle çözebilirsin derken yine 7447 mi kullanacagiz yoksa cikislarinda LATCH özelligi olan baska bir entegremi?

tarama yöntemiyle (pbp) ile yapilmis devreler proteus ile simüle edilirken ben tamamen iyi bir netice alamiyorum. Belki cikislarinda LATCH özelligi olan (595 gibi) entegrelerle ile yapmak daha kolaydir. ?

Saygilar..
Başlık: 0-99sayıcı yardım
Gönderen: Veli B. - 25 Temmuz 2004, 21:50:59
5 pinle yaparken yine 4 bit çıkış vereceksin ama 5 pin 0 iken 1.displeyi 1 iken 2. displayi göstereceksin.Bu taramayı 65 ms altına indirdiğin zaman göz taramayı farkedemez.7447 kullanacaksın.

595 ise daha mantıklı hemen  hemen aynı fiat ama daha az pin ve daha hızlı sonuç


Yukarıda verdiğim linke bir göz at.Tarama için güzel bir kaynak oldu.
Başlık: biras sabret
Gönderen: Fixxer - 04 Şubat 2006, 18:16:38
kendi vayaptığım sayıcı devreleri r sabredersen sana bi kaç gün içinde yollarım bana hatırlat...
Başlık: 0-99sayıcı yardım
Gönderen: arslan74 - 05 Şubat 2006, 02:09:48
Merhaba,

Ben bu devreyi yaptım ve bütün kaynakları kodu ile bu foruma upload etmiştim.

Forumda aratma yaparsanız bulusunuz.

Eğer bulamassanız size linki vereyim.

https://www.picproje.org/index.php/topic,5730