www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Bascom
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika za začetnike
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
thierryhenry
Neznanec
Neznanec



Pridružen-a: Sre 06 Jun 2007 15:45
Prispevkov: 8
Aktiv.: 0.04

PrispevekObjavljeno: Sre Jun 06, 2007 3:57 pm    Naslov sporočila: icon_idea Bascom Odgovori s citatom

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č Wink Rolling Eyes
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Domenius
Član
Član



Pridružen-a: Sre 30 Nov 2005 14:15
Prispevkov: 1188
Aktiv.: 5.00
Kraj: Medvode

PrispevekObjavljeno: Sre Jun 06, 2007 4:07 pm    Naslov sporočila:   Odgovori s citatom

Kaj od tega znaš pa sam naredit? Vezje? Kaj pa v Cju bo tudi v redu?
_________________
It's electric!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1715
Aktiv.: 7.22
Kraj: Ig

PrispevekObjavljeno: Sre Jun 06, 2007 4:47 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
thierryhenry
Neznanec
Neznanec



Pridružen-a: Sre 06 Jun 2007 15:45
Prispevkov: 8
Aktiv.: 0.04

PrispevekObjavljeno: Čet Jun 07, 2007 11:48 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
thierryhenry
Neznanec
Neznanec



Pridružen-a: Sre 06 Jun 2007 15:45
Prispevkov: 8
Aktiv.: 0.04

PrispevekObjavljeno: Čet Jun 07, 2007 12:11 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
simeon
Član
Član



Pridružen-a: Pon 21 Maj 2007 21:55
Prispevkov: 118
Aktiv.: 0.53
Kraj: Šentjernej

PrispevekObjavljeno: Čet Jun 07, 2007 2:01 pm    Naslov sporočila:   Odgovori s citatom

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 Very Happy
_________________
Sej bo bolš!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
thierryhenry
Neznanec
Neznanec



Pridružen-a: Sre 06 Jun 2007 15:45
Prispevkov: 8
Aktiv.: 0.04

PrispevekObjavljeno: Čet Jun 07, 2007 4:17 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1715
Aktiv.: 7.22
Kraj: Ig

PrispevekObjavljeno: Čet Jun 07, 2007 9:35 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
thierryhenry
Neznanec
Neznanec



Pridružen-a: Sre 06 Jun 2007 15:45
Prispevkov: 8
Aktiv.: 0.04

PrispevekObjavljeno: Pet Jun 08, 2007 10:08 am    Naslov sporočila:   Odgovori s citatom

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 Rolling Eyes Confused Sad


/* Še eno tako skropucalo, pa gre tema pod ključ. Obstaja možnost predogleda - izkoristi jo! */
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
thierryhenry
Neznanec
Neznanec



Pridružen-a: Sre 06 Jun 2007 15:45
Prispevkov: 8
Aktiv.: 0.04

PrispevekObjavljeno: Pet Jun 08, 2007 7:43 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
thierryhenry
Neznanec
Neznanec



Pridružen-a: Sre 06 Jun 2007 15:45
Prispevkov: 8
Aktiv.: 0.04

PrispevekObjavljeno: Pet Jun 08, 2007 7:49 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1715
Aktiv.: 7.22
Kraj: Ig

PrispevekObjavljeno: Pet Jun 08, 2007 10:29 pm    Naslov sporočila:   Odgovori s citatom

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 Wink

LP Gorazd

_________________
.
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._|
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
thierryhenry
Neznanec
Neznanec



Pridružen-a: Sre 06 Jun 2007 15:45
Prispevkov: 8
Aktiv.: 0.04

PrispevekObjavljeno: Sob Jun 09, 2007 10:32 am    Naslov sporočila:   Odgovori s citatom

hvala bom probala pa bom videl če to deluje Very Happy Very Happy


Dvospolnik ?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
integrerc
Član
Član



Pridružen-a: Sob 23 Sep 2006 14:50
Prispevkov: 424
Aktiv.: 1.85
Kraj: Novo mesto

PrispevekObjavljeno: Čet Jan 03, 2008 12:34 am    Naslov sporočila:   Odgovori s citatom

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č Cool

lp

_________________
Lep pozdrav!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
joze
Član
Član



Pridružen-a: Pet 26 Jan 2007 10:27
Prispevkov: 204
Aktiv.: 0.91

PrispevekObjavljeno: Čet Jan 03, 2008 9:44 am    Naslov sporočila:   Odgovori s citatom

Si definiral procesor in kristal (clock)?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika za začetnike Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
Pojdi na:  
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