Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
JURCMAN Neznanec
Pridružen-a: Ned 21 Avg 2011 22:26 Prispevkov: 8 Aktiv.: 0.05 Kraj: kamnik
|
Objavljeno: Ned Jan 13, 2019 9:44 pm Naslov sporočila: Bascom Attiny13 SPROŽILEC |
|
|
Pozdravljeni
Prosil bi vas lepo prosim za pomoč
Že nekaj dni poskušam napisati program v Bascomu za Attiny13, ki bi ob pritisku tipke. Ki bi bila vezana na PB4 poslal pol sekundni signal na PB0. Ki bi ga nato vezal na lm272m. Kateri bi vklapljal pnevmatski ventil.
Program mora poslati samo en signal ob pritisku tipke ne glede na dolžino časa pritisnjene tipke.
lp.Pavlic |
|
Nazaj na vrh |
|
|
frenki Moderator
Pridružen-a: Ned 23 Feb 2003 21:26 Prispevkov: 6562 Aktiv.: 29.36 Kraj: Ljubljana (JN76GB)
|
Objavljeno: Ned Jan 13, 2019 11:01 pm Naslov sporočila: |
|
|
Je problem čas pritiska tipke, ali njeno odskakovanje? Nič nisi napisal, kje se ti pravzaprav zatakne. Debounce bi moral rešit problem pritiska tipke ... če je problem to. |
|
Nazaj na vrh |
|
|
rudiP Član
Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 6.05 Kraj: KOPER
|
Objavljeno: Pon Jan 14, 2019 7:14 am Naslov sporočila: |
|
|
Koda: |
'*******************************************************************************
$regfile = "m168def.dat "
$hwstack = 64
$swstack = 64
$framesize = 64
$crystal = 8000000
'-------------------------------------------------------------------------------
In_1 Alias Pinb.4 'pull up upor je potrenem proženje proti masi
Config In_1 = Input
Out_1 Alias Portb.0
Config Out_1 = Output
'------------------------- 1ms --- 8 Mhz --------------------------------------
Const Timer0reload = 57
Config Timer0 = Timer , Prescale = 256
Load Timer0 , 100
On Ovf0 Timer0_isr
Enable Ovf0
Start Timer0
'-------------------------------------------------------------------------------
Dim S1_1ms As Word
Dim D_impulz As Word
'-------------------------------------------------------------------------------
Do
If In_1 = 0 And D_impulz = 0 Then
D_impulz = 1000 '
Set Out_1
End If
Loop
End
'******************* TIMER1 INTERRUPT SERVICE RUTINE ***************************
Timer0_isr:
Load Timer0 , Timer0reload
Incr S1_1ms
If D_impulz > 0 Then Decr D_impulz
If D_impulz = 500 Then Reset Out_1
'od 500ms so 0 ms je še malo pavze da nebi takoj detektiral tipke
Return
'****************************************************************************** |
spremeni def za tiny procesor ! _________________ Lep pozdrav iz Kopra Rudi |
|
Nazaj na vrh |
|
|
rudiP Član
Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 6.05 Kraj: KOPER
|
Objavljeno: Pon Jan 14, 2019 8:12 am Naslov sporočila: |
|
|
manjka -> Enable Interrupts _________________ Lep pozdrav iz Kopra Rudi |
|
Nazaj na vrh |
|
|
JURCMAN Neznanec
Pridružen-a: Ned 21 Avg 2011 22:26 Prispevkov: 8 Aktiv.: 0.05 Kraj: kamnik
|
Objavljeno: Pon Jan 14, 2019 11:27 am Naslov sporočila: |
|
|
Hvala za tako hitri odgovor
Program sem stestiral na MikroPinu+ z Attiny2312 kot mi odgovarja na razvojni ploscici in se ledica na izhodu sama vklapla in izklaplja v intervalih?
Koda: |
$crystal = 8000000
$regfile = "ATtiny2313.dat"
$hwstack = 32
$swstack = 8
$framesize = 32
'-------------------------------------------------------------------------------
In_1 Alias Pind.2 'pull up upor je potrenem proženje proti masi
Config In_1 = Input
Out_1 Alias Portb.3
Config Out_1 = Output
Enable Interrupts
'------------------------- 1ms --- 8 Mhz --------------------------------------
Const Timer0reload = 57
Config Timer0 = Timer , Prescale = 256
Load Timer0 , 100
On Ovf0 Timer0_isr
Enable Ovf0
Start Timer0
'-------------------------------------------------------------------------------
Dim S1_1ms As Word
Dim D_impulz As Word
'-------------------------------------------------------------------------------
Do
If In_1 = 0 And D_impulz = 0 Then
D_impulz = 1000 '
Set Out_1
End If
Loop
End
'******************* TIMER1 INTERRUPT SERVICE RUTINE ***************************
Timer0_isr:
Load Timer0 , Timer0reload
Incr S1_1ms
If D_impulz > 0 Then Decr D_impulz
If D_impulz = 500 Then Reset Out_1
'od 500ms so 0 ms je še malo pavze da nebi takoj detektiral tipke
Return
'****************************************************************************** |
|
|
Nazaj na vrh |
|
|
rudiP Član
Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 6.05 Kraj: KOPER
|
Objavljeno: Pon Jan 14, 2019 11:35 am Naslov sporočila: |
|
|
Pomeri stanje na vhodu tipke. Izgleda, da je stalno na "0".
Si dal pull up upor na + 5v ? _________________ Lep pozdrav iz Kopra Rudi |
|
Nazaj na vrh |
|
|
JURCMAN Neznanec
Pridružen-a: Ned 21 Avg 2011 22:26 Prispevkov: 8 Aktiv.: 0.05 Kraj: kamnik
|
Objavljeno: Pon Jan 14, 2019 11:49 am Naslov sporočila: |
|
|
pull up upor imam na 0 |
|
Nazaj na vrh |
|
|
rudiP Član
Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 6.05 Kraj: KOPER
|
Objavljeno: Pon Jan 14, 2019 11:55 am Naslov sporočila: |
|
|
pull up pomeni - povleci gor !!
na vhod daj upor 10K proti plusu, tipko pa iz vhoda proti masi pa bo delalo.
V glavni zanki imaš If In_1 = 0 And D_impulz = 0 Then in d_impulz =0
Če je vhod na nuli in števec d_impulz =0 ti ponovno postavi izhod in tako se vrti.
Moraš dat pull up upor na +. ko stisneš na tipko gre vhod na nulo- _________________ Lep pozdrav iz Kopra Rudi |
|
Nazaj na vrh |
|
|
JURCMAN Neznanec
Pridružen-a: Ned 21 Avg 2011 22:26 Prispevkov: 8 Aktiv.: 0.05 Kraj: kamnik
|
Objavljeno: Pon Jan 14, 2019 2:00 pm Naslov sporočila: |
|
|
Hvala Odpravil sem napako. Sedaj moram spremeniti čas izhoda vse skupaj se more odviti zelo hitro. Pozabil sem omeniti da je progam za sprožilec za Airsoft puško.
spremenil sem v programu iz 500 na 100 sedaj zaznav dovol hitro se mi pa zdi da se je čas izhoda podvojil iz 6s na 12s potrebujem pa 500ms
Koda: |
Timer0_isr:
Load Timer0 , Timer0reload
Incr S1_1ms
If D_impulz > 0 Then Decr D_impulz
If D_impulz = 100 Then Reset Out_1
'od 500ms so 0 ms je še malo pavze da nebi takoj detektiral tipke |
|
|
Nazaj na vrh |
|
|
rudiP Član
Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 6.05 Kraj: KOPER
|
Objavljeno: Pon Jan 14, 2019 2:09 pm Naslov sporočila: |
|
|
Prosim pripni vso kodo ! _________________ Lep pozdrav iz Kopra Rudi |
|
Nazaj na vrh |
|
|
JURCMAN Neznanec
Pridružen-a: Ned 21 Avg 2011 22:26 Prispevkov: 8 Aktiv.: 0.05 Kraj: kamnik
|
Objavljeno: Pon Jan 14, 2019 2:19 pm Naslov sporočila: |
|
|
Koda: |
$crystal = 8000000
$regfile = "ATtiny2313.dat"
$hwstack = 32
$swstack = 8
$framesize = 32
'-------------------------------------------------------------------------------
In_1 Alias Pind.2 'pull up upor je potrenem proženje proti masi
Config In_1 = Input
Out_1 Alias Portb.3
Config Out_1 = Output
Enable Interrupts
'------------------------- 1ms --- 8 Mhz --------------------------------------
Const Timer0reload = 57
Config Timer0 = Timer , Prescale = 256
Load Timer0 , 100
On Ovf0 Timer0_isr
Enable Ovf0
Start Timer0
'-------------------------------------------------------------------------------
Dim S1_1ms As Word
Dim D_impulz As Word
'-------------------------------------------------------------------------------
Do
If In_1 = 0 And D_impulz = 0 Then
D_impulz = 1000 '
Set Out_1
End If
Loop
End
'******************* TIMER1 INTERRUPT SERVICE RUTINE ***************************
Timer0_isr:
Load Timer0 , Timer0reload
Incr S1_1ms
If D_impulz > 0 Then Decr D_impulz
If D_impulz = 100 Then Reset Out_1
'od 500ms so 0 ms je še malo pavze da nebi takoj detektiral tipke
Return |
|
|
Nazaj na vrh |
|
|
rudiP Član
Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 6.05 Kraj: KOPER
|
Objavljeno: Pon Jan 14, 2019 2:43 pm Naslov sporočila: |
|
|
spremenil sem v programu iz 500 na 100 sedaj zaznav dovol hitro se mi pa zdi da se je čas izhoda podvojil iz 6s na 12s potrebujem pa 500ms
s to spremembo si podaljšal inpulz na 900ms. kje pa imaš sekunde ne vem.
Povej kaj dejansko rabiš.
Na primer pritisnem na tipko, rabim impulz dolžine x milisekund.
tipka ne sme prožit še y ms. _________________ Lep pozdrav iz Kopra Rudi |
|
Nazaj na vrh |
|
|
JURCMAN Neznanec
Pridružen-a: Ned 21 Avg 2011 22:26 Prispevkov: 8 Aktiv.: 0.05 Kraj: kamnik
|
Objavljeno: Pon Jan 14, 2019 3:00 pm Naslov sporočila: |
|
|
Ob pritisku na tipko potrebujem signal dolg 500 mili sekund |
|
Nazaj na vrh |
|
|
rudiP Član
Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 6.05 Kraj: KOPER
|
Objavljeno: Pon Jan 14, 2019 3:38 pm Naslov sporočila: |
|
|
D_impulz = 1000 '
1000ms=1 sekunda
Set Out_1 ' začetek impulza
If D_impulz = 500 Then Reset Out_1 ' ko program odšteje do 500 konča impulz
to je točno. Mogoče imaš v fuse bitih odkljukano division/8 ? _________________ Lep pozdrav iz Kopra Rudi |
|
Nazaj na vrh |
|
|
JURCMAN Neznanec
Pridružen-a: Ned 21 Avg 2011 22:26 Prispevkov: 8 Aktiv.: 0.05 Kraj: kamnik
|
Objavljeno: Pon Jan 14, 2019 9:21 pm Naslov sporočila: |
|
|
Lahko prosim bol natančno opišete, kje najdem nastavitve za fuse bite.
Hvala. |
|
Nazaj na vrh |
|
|
|