0-99sayıcı yardım

Başlatan mert3162, 24 Temmuz 2004, 21:13:18

mert3162

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
|^^^^^^^^^^^^\ ||\
|__PICPROJE.ORG __
||'""|""\___
| _____________ l | |__|__|___| )
(@!)!(@)"""""**|(@) (@)****|(@)---------

 Üstadlarım nonstradam & Logan

yıldırım ak

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...
"... Bana kulluk et; Beni anmak için namaz kıl" (Taha 14)

Veli B.

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

fsan

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/

Veli B.

Dostum tarama kullanarak 5 pinle çözebilirsin yada 595 ile 3 pin kullanarak çözebilirsin.

fsan

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..

Veli B.

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.

Fixxer

kendi vayaptığım sayıcı devreleri r sabredersen sana bi kaç gün içinde yollarım bana hatırlat...
...............................

arslan74

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