 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
thierryhenry Neznanec

Pridružen-a: Sre 06 Jun 2007 15:45 Prispevkov: 8 Aktiv.: 0.04
|
Objavljeno: Sre Jun 06, 2007 3:57 pm Naslov sporočila: Bascom |
|
|
Rad bi da program deluje tako:
imam stikalo, ki ob vsaki spremembi logičnega stanja poveča spremenljivko I za 1,
rad bi števec v programu, ki bo štel npr. 10 sekund in v tem času štel kolikokrat se je povečala spremenljivka I in to prikazal na drugem mestu na lcd zaslonu. Vsakič ko prešteje ponovno začne šteti 10 sekund in zopet prikeže prešteto vrednot.
V bistvu je to prikazovenje hitrosti na 10 sekend (npr. 15 obratov/10sekund)
Prosim za pomoč  |
|
Nazaj na vrh |
|
 |
Domenius Član



Pridružen-a: Sre 30 Nov 2005 14:15 Prispevkov: 1188 Aktiv.: 5.00 Kraj: Medvode
|
Objavljeno: Sre Jun 06, 2007 4:07 pm Naslov sporočila: |
|
|
Kaj od tega znaš pa sam naredit? Vezje? Kaj pa v Cju bo tudi v redu? _________________ It's electric! |
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1715 Aktiv.: 7.22 Kraj: Ig
|
Objavljeno: Sre Jun 06, 2007 4:47 pm Naslov sporočila: |
|
|
To počne nekaj podobnega, le da je čas merjenja 1s, kako boš to spremenil, je tvoja naloga, jaz pa ti dajem osnovo v Bascoumu AVR.
$regfile = "at26def.dat"
$crystal = 8000000
Dim Clock As Word , St_impulzov As Word
Config Timer0 = Timer , Prescale = 1 'timer nic je izbrankot casovnik, njegova frekvenca je enaka notranji uri procesorja
Config Int0 = Rising 'zunajni interupt na pinu (int0), se prozi na prednjo fronto (prehos iz 0 v 1)
Config Lcd = 16 * 2
Cls
On Ovf0 Tim0_isr 'ob prelivu se izvede rutina Tim0_isr
On Int0 Int0_int 'ob interuptu se izvede rutina Int0_int
Enable Interrupts 'omogoci nterupte
Enable Timer0 ' omogoci timer interupt
Enable Int0 'omogoci znuanji interupt int0
Clock = 0
St_impulzov = 0
Stop Timer0 'timerja se ne rabimo
Do
If St_impulzov = 1 Then 'ko smo ujeli prvi impulz
Start Timer0 'startamo timer
While Clock < 31250 'zanka se izvaja 1s
Wend
Disable Int0 ' izklopimo zun. interupt
Stop Timer0 'ustavimo timer
Locate 1 , 1
Lcd "st.imp. :" ; St_impulzov 'izpisemo na rs232 st impulzov ki smo jih namerili v 1s
Clock = 0 'spremanljivke pobrisemo
St_impulzov = 0
Enable Int0 'omogocimo interupt, spet se zacne stetje takoj ko pride naslednji impulz
End If
Loop
'*******************************************************
' prekinitvena rutina, ki se izvede vsake 32 mikro sekunde
' in povecuje spremenljivko clock
'******************************************************
Tim0_isr:
Incr Clock
Return
'*******************************************************
' prekinitvena rutina, ki se izvede ko dobimo zunanji interupt,
' prehod na pinu iz 0 v 1
'******************************************************
Int0_int:
Incr St_impulzov
Return _________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
thierryhenry Neznanec

Pridružen-a: Sre 06 Jun 2007 15:45 Prispevkov: 8 Aktiv.: 0.04
|
Objavljeno: Čet Jun 07, 2007 11:48 am Naslov sporočila: |
|
|
torej spremenim samo čas in štetje impulzov je v mojem primeru prva spremenljivka ??....drugače samo kopiram v program spodaj pod štetjem?????
pa hvala za pomoč |
|
Nazaj na vrh |
|
 |
thierryhenry Neznanec

Pridružen-a: Sre 06 Jun 2007 15:45 Prispevkov: 8 Aktiv.: 0.04
|
Objavljeno: Čet Jun 07, 2007 12:11 pm Naslov sporočila: |
|
|
Dim I As Word
'********************************Program****************************************
Cls 'počistimo zaslon
I = 0
Do 'začetek programa
Gosub Vhodi
If Vhod7 = 1 Then
Incr I
Waitms 100
End If
Locate 1 , 1
Lcd "obr="
Locate 1 , 5
Lcd I
Loop
'*************************Konec programa***************************************
End
Vhodi:
Vhod1 = Not Di1
Vhod2 = Not Di2
Vhod3 = Not Di3
Vhod4 = Not Di4
Vhod5 = Not Di5
Vhod6 = Not Di6
Vhod7 = Not Di7
Vhod8 = Not Di8
Return
...........do sedaj imam narejeno samo to, ob vsakem zaznamku induktivnega stikala se I poveča za 1, zdej me zanimam kako bi sedaj zgornji program od RGorazda vstavil not in da bi števec reagiral glede na spremenjlivko I, ki šteje obrate spodaj na LCDju pa bi rad, da prikaže samo hitrost???? |
|
Nazaj na vrh |
|
 |
simeon Član


Pridružen-a: Pon 21 Maj 2007 21:55 Prispevkov: 118 Aktiv.: 0.53 Kraj: Šentjernej
|
Objavljeno: Čet Jun 07, 2007 2:01 pm Naslov sporočila: |
|
|
Saj ti je RGorazd lepo napisal program. Vse kar moraš ti poskrbeti je to, da zagotoviš da bo tvoj induktivni senzor dal zadosti velik impulz (da ga bo mikrokontroler zaznal) in pretvort impulze v določenem časovnem intervalu glede na velikost kolesa (predvidevam) v km/h. Upam, da se ti je posvetila formula  _________________ Sej bo bolš! |
|
Nazaj na vrh |
|
 |
thierryhenry Neznanec

Pridružen-a: Sre 06 Jun 2007 15:45 Prispevkov: 8 Aktiv.: 0.04
|
Objavljeno: Čet Jun 07, 2007 4:17 pm Naslov sporočila: |
|
|
sej pravim, do sedaj imam končan program za štetje obratov. Ko stikalo zazna, se poveča sprmenljivka I za 1 in to mi prikazuje na displayu AVR krmilnika. Tu vse vredu dela.
Rad bi pa še, kot sem napisal, da mi števec šteje do deset in pol prikaže na drugem mestu displaya to vrednost kolikokrat se je v tistem času povečal I (vrtljaji moje vetrnice), vsakič pa ko prešteje, izpiše, in ponovno šteje 10 sekund in ponovno izpiše itd. .......to je torej moj proble, ne vem kako naj moj dosedanji program povežem z zgornjim programom, ki mi ga je napisal RGorazd
????? |
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1715 Aktiv.: 7.22 Kraj: Ig
|
Objavljeno: Čet Jun 07, 2007 9:35 pm Naslov sporočila: |
|
|
Program, ki si ga napisal, ne bo najbolje deloval, ker če se bo vetrnica ustavila na senzorju in bo Vhod7 skozi na "1", bo I povečalo vsakih 100ms za 1, čeprav bo vetrnica stala. Take stvari lažje delaš z zunanjim interruptom (INT0,INT1...) Vetrnico obesiš na ta vhod, in poveš programu, naj gleda prednjo flanko (prehod iz 0>1), in to je to. Potem pa samo še čas šteješ s pomočjo timerja.
Če hočeš nekaj v baskomu prikazati na lcd v prvi vrsti in da bo to 7 karakter, potem narediš takole
LOCATE 7,1
LCD "A"
In bo to tako izpisal
LOCATE 16,2
LCD"C"
bo v drugi vrstici, zadnji karakter izpisal črko C
V tvojem primeru spremenljivko "I"
LP GOrazd _________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
thierryhenry Neznanec

Pridružen-a: Sre 06 Jun 2007 15:45 Prispevkov: 8 Aktiv.: 0.04
|
Objavljeno: Pet Jun 08, 2007 10:08 am Naslov sporočila: |
|
|
hvala res za odgovore ampak osprostite men štetje ne dela in ne dela, vse razumem glede prikaza in to pa ampak ta števc, vedno mi kaže 1, in nastavim na 10 sekund pa po 10 sekundah še vedno kaže 1, to bi moral se [slovenščina je zame španska vas] tu z nekom slišat po telefonu pa da mi bolj natančno pove.......drugača pa res hvala za pomoč vsaj približno vem
/* Še eno tako skropucalo, pa gre tema pod ključ. Obstaja možnost predogleda - izkoristi jo! */ |
|
Nazaj na vrh |
|
 |
thierryhenry Neznanec

Pridružen-a: Sre 06 Jun 2007 15:45 Prispevkov: 8 Aktiv.: 0.04
|
Objavljeno: Pet Jun 08, 2007 7:43 pm Naslov sporočila: |
|
|
oprostite za prejšnje napačne besede...
tukaj bom podal program, ki sem ga s pomočjo enega prijatelja skupaj napisal in me zanima kaj je tu napačno, kakšen bi moral biti pravilen vrstni red programa, da bi program deloval tako??:
Spremenljivka I se povečuje za vrednost 1, vsakič ko je vhod7 v 1, to prikazuje na displayu. Timer v tem času od začetka štetja šteje 10 sekund (10 proti 0), ko pride na vrednost 1, prkaže tisto vrednot (na displayu) ki je trenutna I (število obratov) potem se spet vse ponovi in spet timer šteje 10 sekund in spet izpiše itd.
Kot sem že sgoraj pisal, na displayu mi mora vsakih 10 sekund prikazati trenutno vrednost obratov......to je to
Pa oprostite res, če sem napisal kaj nerazumljivo, zlo težko tu razložim, imam to za maturo, ko pa bom končal ta del programa pa me čaka še nekaj, to bom napisal kasneje to ni tako težko
Hvala!!!!!! |
|
Nazaj na vrh |
|
 |
thierryhenry Neznanec

Pridružen-a: Sre 06 Jun 2007 15:45 Prispevkov: 8 Aktiv.: 0.04
|
Objavljeno: Pet Jun 08, 2007 7:49 pm Naslov sporočila: |
|
|
Tukaj je program, ki sem ga uspel nekako sam napisati ampak je seveda napačen vrstni red:
Dim I As Word
'********************************Program****************************************
'poeistimo zaslon
Dim Timer As Byte
Dim W As Word
Cls
Do
'zaeetek programa
Gosub Vhodi
'štetje obratov'
If Vhod7 = 1 Then
Incr I
Waitms 100
End If
Locate 1 , 1
Lcd "OBR="
Locate 1 , 5
Lcd I
'časovnik'
Timer = 10
Wait 1
Timer = Timer - 1
If Timer = 0 Then
Timer = 0
End If
If Timer = 1 Then
I = W
Locate 2 , 1
Lcd "H.OBR="
Locate 2 , 8
Lcd W
Loop
'*************************Konec programa***************************************
End
'invertiranje vhodov krmilnika'
Vhodi:
Vhod1 = Not Di1
Vhod2 = Not Di2
Vhod3 = Not Di3
Vhod4 = Not Di4
Vhod5 = Not Di5
Vhod6 = Not Di6
Vhod7 = Not Di7
Vhod8 = Not Di8
Return |
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1715 Aktiv.: 7.22 Kraj: Ig
|
Objavljeno: Pet Jun 08, 2007 10:29 pm Naslov sporočila: |
|
|
Zakaj invertiraš vhode?
Odštevanje časa boš najlažje naredil s Timer0
Glej moj program, če tisto spremenljivko ki je 31250 povečaš za 10, potem boš namest 1s imel meritev 10s. Če na vhod INT0 pripelješ impulze, ti jih bo štelo 10s in potem prikazalo rezultat.
Lahko pa narediš tudi brez INT0, vedar moraš sam narediti detektor prehoda iz 0 na 1 ali obratno. Torej
IF Vhod7 = 1 THEN
waitms 10 'počakaš 10ms da preide prehodni pojav
if vhod7=1 THEN
FLAG=1
end_if
end if
IF FLAG = 1 then
I = I+1
FLAG = 0
END IF
To je to. Ko se Vhodz postavi na 1, postaviš zastavico na 1, in potem gledaš zastavico. Impulz ti bo štelo zopet pri naslednjemu prehodu iz 0 na 1. Če slučajno ostane vetrnica tako, da bo Vhod7 skozi ena, ti ne bo povečevalo I-ja v nedogled.
Tebi pa ne šteje, ker se ti časovna zanka in zanka za štetje dogajata zaporedno. Najprej ti prešteje 1 potem se ti 10s odvija časovna zanka, izpiše vrednost I in jo nazaj pobriše. Zato imaš skozi ena. Zato ti pa pravim, da si malce preberi uporabo TIMER0 ali TIMER1 registra. Naj ura teče v ozadju, v ospredju pa šteješ impulze.
Pa še to. Timer je skozi na vrednosti 9. SPloh ne pride do 0.
If timer = 0 then
timer=0
to je nesmisel. Timer je že itak nič, pa ga ni treba postavljati na 0
LP Gorazd _________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
thierryhenry Neznanec

Pridružen-a: Sre 06 Jun 2007 15:45 Prispevkov: 8 Aktiv.: 0.04
|
Objavljeno: Sob Jun 09, 2007 10:32 am Naslov sporočila: |
|
|
hvala bom probala pa bom videl če to deluje
Dvospolnik ? |
|
Nazaj na vrh |
|
 |
integrerc Član



Pridružen-a: Sob 23 Sep 2006 14:50 Prispevkov: 424 Aktiv.: 1.85 Kraj: Novo mesto
|
Objavljeno: Čet Jan 03, 2008 12:34 am Naslov sporočila: |
|
|
Nikakor mi ne dela ta , že zgoraj opisani program v bascom-u, z Atmega 16!
Ne vem več, kaj delam narobe!
Koda: |
Dim Clock As Word , St_impulzov As Word
Config Timer0 = Timer , Prescale = 1 'timer nic je izbrankot casovnik, njegova frekvenca je enaka notranji uri procesorja
Config Int1 = Rising 'zunajni interupt na pinu (int0), se prozi na prednjo fronto (prehos iz 0 v 1)
Config Lcd = 16 * 2
Cls
On Ovf0 Tim0_isr 'ob prelivu se izvede rutina Tim0_isr
On Int1 Int0_int
'ob interuptu se izvede rutina Int0_int
Clock = 0
St_impulzov = 0
Enable Interrupts 'omogoci nterupte
Enable Timer0 ' omogoci timer interupt
Enable Int1 'omogoci znuanji interupt int0
Stop Timer0 'timerja se ne rabimo
Do
If St_impulzov = 1 Then 'ko smo ujeli prvi impulz
Start Timer0 'startamo timer
While Clock < 31250 'zanka se izvaja 1s
Wend
Disable Int1 ' izklopimo zun. interupt
Stop Timer0 'ustavimo timer
Locate 1 , 1
Lcd "st.imp. :" ; St_impulzov 'izpisemo na rs232 st impulzov ki smo jih namerili v 1s
Clock = 0 'spremanljivke pobrisemo
St_impulzov = 0
Enable Int1 'omogocimo interupt, spet se zacne stetje takoj ko pride naslednji impulz
End If
Loop
'*******************************************************
' prekinitvena rutina, ki se izvede vsake 32 mikro sekunde
' in povecuje spremenljivko clock
'******************************************************
Tim0_isr:
Incr Clock
Return
'*******************************************************
' prekinitvena rutina, ki se izvede ko dobimo zunanji interupt,
' prehod na pinu iz 0 v 1
'******************************************************
Int0_int:
Incr St_impulzov
Return |
Prosim za pomoč
lp _________________ Lep pozdrav! |
|
Nazaj na vrh |
|
 |
joze Član


Pridružen-a: Pet 26 Jan 2007 10:27 Prispevkov: 204 Aktiv.: 0.91
|
Objavljeno: Čet Jan 03, 2008 9:44 am Naslov sporočila: |
|
|
Si definiral procesor in kristal (clock)? |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 7 dni
Powered by phpBB © 2001, 2005 phpBB Group
|