BASCOM za totalne neznalice.

Rasprava o AVR mikrokontrolerima, AVR projekti i drugo vezano za AVR...

Moderators: pedja089, stojke369, trax, InTheStillOfTheNight

mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

BASCOM za totalne neznalice.

Post by mojalovaa »

Pozdrav svima , evo kao sto sam naslov govori ovu temu otvaram za sve one koji su kao ja a to je za totalne početnike u programiranju sa BASCOM-om , znam da ce se sada naci milion onih koji kazu ma idi u AVR , ma ovo , ma ono , ukratko za sve koji to zele reci , kazem sljedece , ne zanima me.
To je kao da nekome kazes da umjesto bicikla kupi R600 ( motor) i neka odmah nauci voziti motor a ne zna osnove ravnoteze ni na biciklu.
Moj cilj je da ova tema postane totalno laka svakome tko uopste nema pojma o programiranju , ni sta su rutine , ni petlje , ni logaritmi a bogami ni kako napisati brojeve u heksadecimalnom prikazu , znaci za totalne pocetnike , i ako ja imam nesto jako malo znanja o nekim osnovama.
Sada ce se naci jos mnogo onih koji kazu da onaj tko ne zna programirati ustvari ne zna niti osnove elektronike , sto se ne bi moglo reci jer ja znam poprilicno toga i ako smatram da sam slab u elektronici sto se tice poceti od ideje a zavrsiti na gotovom proizvodu , ali imam iskustvo u popravljanju i sklapanju elektronike vise od 15 godina , ali jednostavno zivot ti nije dao tu mogucnost da to naucis , a sam ipak ako nista o tome ne znas je veoma tesko poceti.
Pa evo toliko za pocetak , nadam se da ce te me podrzati u ovome tako da i drugi mogu da nauce kako se to radi , i naravno pocet ce mo sa AT89C2051 , nista manje i nista vise od toga.
Volio bi da imam bar dva člana koji su veoma dobri programeri kako bi mogli da pomognu u ovome , pa odmah ako netko zeli bit ce mi drago .
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: BASCOM za totalne neznalice.

Post by mojalovaa »

Pa evo da počnemo sa temom.
Za početak nam je potreban
procesor AT89C2051
kristal od 12 Mhz
2 kondenzatora od 22pF
Stabilizator napona 5V
Kondenzator 470 uF 25V
Par otpornika od 4.7 kOhma
Nekoliko mikro tipkala
par LED
i par otpornika od 330ohm
Programator ( snadjite se nekako , samoizrada ili PG302)
I valjalo bi nekakvu proto pločicu , ima ih u elmatisu dosta jeftino.
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: BASCOM za totalne neznalice.

Post by mojalovaa »

Prema shemi spojite AT89C2051

http://www.stavi-sliku.info/image/Y6o

Kao sto vidite na slici je osnovna shema sa AT89C2051 koja ce nam posluziti za shvacanje same osnove spajanja i upravljanja sa AT89C2051 , a samim time i shvacanje osnova programiranja u BASCOM - u


Sljedece sto nam je uciniti je shvatiti kako ovaj sklop radi , naravno necemo ulaziti u samu dubinu rada mikroprocesora vec ce mo opisati cemu koja komponenta sluzi u ovom strujnom krugu.

Za sada toliko , natavljam sutra , i jos uvjek se nadam pomoci malo iskusnijih programera.
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: BASCOM za totalne neznalice.

Post by mojalovaa »

Kao sto se na shemi vidi ovo je naj jednostavniji sklop koji mozemo napraviti a da nam koristi za ucenje i osnove programiranja.
Na slici se vidi da je na procesor spojeno +5V i GND , sluze kao izvor napajanja , kvarc 12 Mhz i 2 kondenzatora od 22 pF sluze kao oscilator , otpornici od 330 Ohma i LED sluze kao prikazivaci logickog stanja na izlaznim portovima koji su u ovom slucaju P1.0 , P1.1 P1.2 , P1.3 , a otpornici od 4.7 kOhm sa tipkalima nam predstavljaju davatelje signala na portovima P1.4 , P1.5 , P1.6 , P1.7 .
Inace otpornici od 4.7 K ohm su nam PULL-UP otpornici , dok nam otpri od 330 Ohm sluze kao ogranicavaci struje kroz portove , jer struja u AT89C2051 je max. dozvoljena od 15 mA , ako bi smo pustili vecu struju doslo bi do ostecenja porta ili cak i cjelog procesora.
Takodjer je vazno napomenuti da procesor ne smije da se spaja na visi potencijal , odnosno na veci napon od +5V.
Kondenzator C3 i otpornik R9 sluze za resetiranje procesora , kod samog ukljucivanja procesora , posto je kondenzator prazan , ima veoma mali unutarnji otpor , te kod paljenja provede struju poput otpornika male vrednosti , pa je tako na RST doveden napon od +5V cime je procesor stavljen u stanje resetiranja , kako se kondenzator puni tako mu raste otpor i smanjuje se napon i struja kroz njega , te unutarnji otpor kondenzatora postaje nekoliko puta veci od otpornika R9 te tako otpornik R9 ima nekoliko puta manji otpor od kondenzatora , cime se stanje RST stavlja u GND i time procesor pocinje da radi.

Sada kada smo spojili sve po shemi koja se nalazi na ovoj slici : http://www.stavi-sliku.info/image/Y6o
Mozemo da krenemo sa sljedecim korakom a to je programiranje .
Sada kada bi upalili ovaj sklop ne bi se nista desavalo jer procesor sam po sebi ne predstavlja nikakav znacaj ako u njemu nemamo program , u ovom slucaju ce mo ga pisati u BASCOM -u , program koji je DEMO verzija se moze skinuti sa sljedece stranice :http://www.mcselec.com/
Takodjer i podatke o procesoru mozete da skinete sa sljedece stranice : http://pdf1.alldatasheet.com/datasheet- ... C2051.html , ili sa http://www.atmel.com/images/doc0368.pdf , naravno mozete i sa nekakve druge stranice ali nemate potrebe za tim jer ovdje imate sve sto vam treba.
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: BASCOM za totalne neznalice.

Post by mojalovaa »

PROGRAMIRANJE U BASCOM-u

Prvo sto uopste moramo da upisemo u program kada krenemo da pisemo program je sljedece , da definisemo kristal i DAT datoteku odredjenog procesora koji koristimo , pa tako bi sljedeci korak u programu bio upisivanje tih naredbi:


$crystal = 12000000 ' ovom definicijom upisujemo vrednost kristala u ovom slucaju je to 12 000 000Hz
( 12 miliona hertza , odnosno 12 Mhz)
$regfile = "89c2051.DAT" ' Ovdje se definise REGFILE procesora pa je to u ovom slucaju procesor 89C2051
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: BASCOM za totalne neznalice.

Post by mojalovaa »

PROGRAMIRANJE U BASCOM-u

Prvo sto uopste moramo da upisemo u program kada krenemo da pisemo program je sljedece , da definisemo kristal i DAT datoteku odredjenog procesora koji koristimo , pa tako bi sljedeci korak u programu bio upisivanje tih naredbi:


$crystal = 12000000 ' ovom definicijom upisujemo vrednost kristala u ovom slucaju je to 12 000 000Hz
( 12 miliona hertza , odnosno 12 Mhz)
$regfile = "89c2051.DAT" ' Ovdje se definise REGFILE procesora pa je to u ovom slucaju procesor 89C2051

Za sam pocetak ce mo napraviti program koji ce kod ukljucivanja procesora upaliti pa ugasiti LED na portu P1.0 .
Prije nego sto krenemo da radimo program treba da znamo sljedece , da kada je logicko stanje 0 na portu tada taj port vodi , a kada je logicko stanje 1 tada taj port je ugasen , malo zbunjujuce ali tako je kod atmela.
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: BASCOM za totalne neznalice.

Post by mojalovaa »

Za pocetak trebamo da sve portove postavimo u 1 , odnosno da budu ugaseni , to mozemo uraditi na dva nacina , jedan je da sve portove koji su na P1 (P1.0 , P1.1 .....P1.7) postavimo od jednom.

P1=1
ili
set P1
A drugi nacin je da sve portove pojedinacno stavimo u 1

P1.0 = 1
P1.1 = 1

ili

Set P1.O
Set P1.1
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: BASCOM za totalne neznalice.

Post by mojalovaa »

Znaci da bi smo napravili program koji bi palio gasio svjetlo na naj jednostavniji nacin trebali bi da uradimo sljedece:

$crystal = 12000000 'postavimo kristal na 12 Mhz
$regfile = "89C2051.DAT" ' postavimo DATREG fajl
$sim ' ako zelimo da mozemo program probati u simulatoru
Pocetak: 'napravimo ime programa recimo pocetak
Set P1 ' postavimo portove koji pocinju sa P1 na logicku 1 (ugaseni)
Wait 1 'sacekamo da prodje 1 sekunda
Reset P1.0 ' postavimo port P1.0 u stanje 0 ( upaljeno)
Wait 1 ' sacekamo 1 sekundu
Goto Pocetak ' kazemo mu idi na liniju "pocetak"

Ovaj program ce sada paliti i gasiti led diodu svake sekunde , naravno ima i jednostavnijih rjesenja ali sam ovaj odabrao kako bi shvatili kako funkcionira taj program.
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: BASCOM za totalne neznalice.

Post by mojalovaa »

Volio bi da mi sada malo pomogne netko tko zna raditi dobro u bascomu , valjda na ovom forumu ima takvih koji zele pomoci , hvala.
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: BASCOM za totalne neznalice.

Post by mojalovaa »

Druga mogućnost je kako kaze BOB4 da koristimo DO-LOOP petlju.
Znaci petlja radi ovako DO = kreni odavde sljedeci program , prolazi zadati program i zavrsava na LOOP . sto znaci vrati se na kreni odnosno vrati se na DO.
Prema tome zadatak je moguce rjesiti i na sljedeci nacin:

$crystal = 12000000 ' CPU Clock is 24MHz
$regfile = "89C2051.DAT"
$sim
Do
P1.2 = 1
Wait 1
P1.2 = 0
Wait 1
Loop

Tako da program radi sljedece , ocita kristal , pa ocita regfile , ova opcija $sim je samo ako hocemo testirati program u simulatoru , onda ide kreni odavde program , postavi P1.2 u stanje 1 (ugaseno) , sacekaj 1 sekundu , postavi P1.2 u 0 (upaljeno) , sacekaj 1 sekundu vrati se na kreni odavde , odnosno vrati se na DO , i sa da se program vrti od DO do LOOP i tako u krug.
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: BASCOM za totalne neznalice.

Post by mojalovaa »

Druga mogućnost je kako kaze BOB4 da koristimo DO-LOOP petlju.
Znaci petlja radi ovako DO = kreni odavde sljedeci program , prolazi zadati program i zavrsava na LOOP . sto znaci vrati se na kreni odnosno vrati se na DO.
Prema tome zadatak je moguce rjesiti i na sljedeci nacin:

$crystal = 12000000 ' CPU Clock is 24MHz
$regfile = "89C2051.DAT"
$sim
Do
P1.0 = 1
Wait 1
P1.0 = 0
Wait 1
Loop

Tako da program radi sljedece , ocita kristal , pa ocita regfile , ova opcija $sim je samo ako hocemo testirati program u simulatoru , onda ide kreni odavde program , postavi P1.2 u stanje 1 (ugaseno) , sacekaj 1 sekundu , postavi P1.2 u 0 (upaljeno) , sacekaj 1 sekundu vrati se na kreni odavde , odnosno vrati se na DO , i sa da se program vrti od DO do LOOP i tako u krug.

Bio sam krivo upisao portove ali evo popravljeno.
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: BASCOM za totalne neznalice.

Post by mojalovaa »

Sljedeci zadatak bi bio da se napravi program s kojim ce se naizmjenice paliti 1 i 3 pa 2 i 4 led dioda takodjer u razmaku 1 sekunde izmedju paljenja.

$crystal = 12000000 ' CPU Clock is 12MHz
$regfile = "89C2051.DAT"
$sim
Do
P1.0 = 1
P1.2 = 1
P1.1 = 0
P1.3 = 0
Wait 1
P1.1 = 1
P1.3 = 1
P1.0 = 0
P1.2 = 0
Wait 1
Loop

Ovdje se jasno vidi da se kod postavlja tacno onim redosljedom kako zelimo da se radnja u programu odvija , naravno ovo se moze rjesiti i naredbama SET i RESET (SET postavljamo u 1 , sa RESET postavljamo u 0)
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: BASCOM za totalne neznalice.

Post by mojalovaa »

Sljedeci zadatak nam je da se ove radnje odvijaju samo ako je pritisnuto tipkalo 1 , odnosno ako je P1.4 u logickoj 0.
To ce mo izvesti na sljedeci nacin:

$crystal = 12000000 ' CPU Clock is 12MHz
$regfile = "89C2051.DAT"
$sim
Do
If P1.4 = 0 Then
P1.0 = 1
P1.2 = 1
P1.1 = 0
P1.3 = 0
Wait 1
P1.1 = 1
P1.3 = 1
P1.0 = 0
P1.2 = 0
Wait 1
End If
Loop

Ovdje se jasno vidi da se od programa zahtjeva da se nesto radi samo ako je ispunjen gore trazeni uvjet , u ovom slucaju da je P1.4 u logickoj 0 ili stisnut.
Tu se koriste naredbe IF-Then i End if , te naredbe se stavljaju unutar DO - LOOP petlje , pa ovdje kaze sljedece , ako je P1.4 = 0 ( pritisnut ) Then ( tada napravi sljedece ) , pa postavlja portove kao prema programu , na kraj programa a prije zavrsetka DO-LOOP petlje se mora zatvoriti naredba IF , tako sto se stavlja zavrsetak naredbe END IF .
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: BASCOM za totalne neznalice.

Post by mojalovaa »

Medjutim , ako pustimo tipku tada ce portovi ostati u polozaju u kom su se u tom trenutku nasli , pa se tako moze desiti da ostanu 2 ili 3 ili 1 port u stanju 0 a ostali u stanju 1 , kako nam se to ne bi desavalo potrebno je ubaciti naredbu s kojom bi se svi portovi nakon pustanja tipke na P1.4 vratili u stanje 1 , odnosno ugaseni , to ce mo uraditi na sljedeci nacin:

$crystal = 12000000 ' CPU Clock is 12MHz
$regfile = "89C2051.DAT"
$sim
Do
If P1.4 = 0 Then
P1.0 = 1
P1.2 = 1
P1.1 = 0
P1.3 = 0
Wait 1
P1.1 = 1
P1.3 = 1
P1.0 = 0
P1.2 = 0
Wait 1
If P1.4 = 1 Then
P1.0 = 1
P1.1 = 1
P1.2 = 1
P1.3 = 1
End If
End If
Loop

Ovdje se vidi da smo dodali jos jednu IF-Then naredbu sa kojom smo zadali da ako je tipka ili port P1.4 u stanju logicke 1 , da se svi portovi od P1.0 do P1.3 stave u logicku jedinicu (da budu ugaseni) , naravno tu If-Then naredbu moramo na kraju zatvoriti sa "End if naredbom"
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: BASCOM za totalne neznalice.

Post by mojalovaa »

Evo posto sam od BOB4 dobio ljepo hrpu programcica iz originalne knjige , a ticu se naravno vjezbe i ucenja BASCOM-a vratit cu se na onaj prvi dio gdje sam govorio o paljenju i gasenju LED , znao sam da postoji i jednostavnija opcija ali nisam znao kako se radi pa evo sada primjer:

Do
P1.3 = Not P1.3
P1.4 = Not P1.3
Wait 1
Loop

Ovdje se vidi da program radi u DO-LOOP petlji , sada je ono sto mene muci a i vecinu drugih koji ne znaju kako radi ovo P1.3=NotP1.3 pa onda P1.4=NotP1.4 , i na kraju u simulatoru dobijemo da se pali jedna led , pa se gasi ta 1 led a pali se 2 led i tako to radi kao trcece svjetlo.
Dali bi sada netko od Iskusnig BASCOM programera znao da nam objasni kakav se tu proces desava.
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: BASCOM za totalne neznalice.

Post by mojalovaa »

Evo nasao sam objasnjenje za ovu naredbu NOT.
To bi u praksi znacilo sljedece P1.3=NotP1.3 , ovom naredbom smo invertirali stanje P1.3 porta , pa ako je ono u tom trenutku bilo logicka 0 , sada ce biti logicka 1 , nakon toga nam dolazi naredba P1.4=NotP1.3 , u ovom trenutku smo napravili sljedece , izdali smo naredbu u kojoj kazem P1.4 = NOT (invertiraj stanje da bude suprotno od stanja na )P1.3 , sto znaci da ako je zadnje logicko stanje na P1.3 jednako 1 , on ce logicko stanje na P1.4 postaviti suprotno od toga znaci na logicku 0.
Mozemo znaci zakljuciti da naredba NOT nam sluzi kao naredba za invertiranje , odnosno za davanje obrnute vrednosti naspram porta koji dolazi iza te naredbe.
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: BASCOM za totalne neznalice.

Post by mojalovaa »

TRCECE SVJETLO

Evo kako i sam naziv kaze sada nam je zadatak da napravimo trcece svjetlo.
To je u knjizi sa primjerima uradjeno na sljedeci nacin:

P1 = &B11111110
Do
Rotate P1 , Left
Waitms 100
Loop

Vidimo da je ovdje sada upotrebljo nesto sto do sada nismo koristili , to je "&B" (& je ono sto mi kazemo americko i , pa kao primjer kada vidite negdje da pise Ja & Ti , mislim da ce te vec shvatiti koji je to znak)
znaci & a uz njega dolazi slovo B , to dvoje cini zapis koji predstavlja nesto binarno.
Pa tako ovdje imamo da je P1 (svi portovi sa P1 , to su P1.0 , P1.1 ...P1.7) jednak binarnom zapisu brojeva , odnosno da je postavljen na sljedeci nacin : ugase , ugasen , ugasen , ugasen , ugasen , ugasen , ugasen i upaljen , odnosno u logickom stanju je sljedece : logicka :jedinica , jedinica , jedinica , jedinica , jedinica , jedinica , jedinica , nula)
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: BASCOM za totalne neznalice.

Post by mojalovaa »

Nakon ocitanja portova od P1.0 do P1.7 i postavljanja ih u zadato stanje program ulazi u DO-LOOP petlju .
Ispod je izdata naredba ROTATE (rotiraj) P1 (sve portove koji su na P1) , LEFT (u ljevo ) , ovdje ce sada procesor pomjeriti logicka stanja za 1 port u ljevo , WAITMS100 ( sacekat ce 100 mili sekundi) , LOOP (vrati se na DO ) , svaki put kako se bude ponavljala radnja izmedju DO i LOOP procesor ce mjenjati stanje po jednog porta u ljevo , kao da brojite recimo od 7 prema unazad pa kada dodjete na 0 onda opet idete na 7 i tako u nedogled.
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: BASCOM za totalne neznalice.

Post by Kukinjos »

Malo ću se uključit i pokušat odgovorit na tvoja pitanja postavljena u "Programiranje u Assembleru" i "Arduino platforma". Velika je razlika programiranja u "višim" programskim jezicima kao što su Basic (Bascom), Pascal, C, i ostale neću spominjat jer se ne koriste često za male kontrolere, i programiranja u asembleru. U ove "više" jezike možemo uključit i Arduina koji je sličan C-u, ali nije C. Program napisan u ARDUINU se prevede u C kod i onda kompajlira i gura u AVR kontroler, gnjavaža za računalo, olakšanje za programera. Nakon pisanja programa u bilo kojem višem programskom jeziku, dobiveni kod se provjerava na greške, linka, kompajlira tj. "prevodi" u asembler i na kraju iz asemblera se opet prevodi u strojni kod, tj. u jedinice i nule, dakle ono što glupi kontrolac jedino i razumije. Razlika između asemblera i strojnog koda je u tome što asembler koristi slovne oznake koje su ljudima donekle razumljive, najčešće skraćenice npr. BRNE x ili BRanch if Not Equal za x mjesta, i to prevede u 1111 01xx xxxx x001. Iz ovog primjera vidiš da to već nije najjednostavnije, a zamisli da moraš napisat soft i pri tom koristit samo jedinice i nule, vjerojatno bi ubrzo presudio sam sebi. Spomenut ću samo da su AVR i PIC RISC kontroleri ili skraćeno Reduced Instruction Set Computing. PIC ima oko 30 i nešto, a AVR i još više instrukcija, pa sad ti plivaj u tome. Uvijek mi za prikaz strojnog programiranja odlično dođe ovaj film iz NASA-e:
http://www.youtube.com/watch?v=RKbbJrB9 ... age#t=450sAko sam uspio barem malo razjasnit razliku između strojnog programiranja, asemblera i viših programskih jezika, bilo bi mi drago. Ukratko svi jezici ne preskaču ni jednu stepenicu ispod njega, jedino mi kao programeri to ne vidimo. Najdrastičniji je Arduino, jer program kojeg napišemo prvo prevede u C kod, onda C linker i kompiler to prevedu u asembler, a onda asembler to konačno prevede u strojni kod. Bascom radi slično kao i C, dakle napisani kod prevede u asembler (LDI, BRNE, CBR, ....), a nakon njega asembler to prevede u strojni kod 0110010100........
Nisam htio brljat po ovim drugim temama, ne bi imalo smisla, zato tebi prepuštam na volju ovaj post ovdje ostavit ili ga obrisat, ako misliš da više nije potreban. Ponekad ću ti se i ja priključit, ali mi vrijeme ne ide na ruku, a i malo sam lijen pisat ovakve trakavice, moram priznat i za to treba imat živaca, ja radije gasim vatru, tj. rješavam "akutne" probleme :)
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: BASCOM za totalne neznalice.

Post by mojalovaa »

Ja bi ipak da vi meni pomognete u BASCOM-u , odnosno kada dodjem do malo kompliciranijih tema da nam pomognete , znaci svima koje ova tema zanima sa svojim iskustvom i objasnjenjima , samo ako je ikako moguce da objasnjenja budu takva da stvarno onaj tko o tome pojma nema da shvati , jer naj cesca pogreska je kada netko objasnjava a ne vidi da onaj tko slusa nema pojma sta pricas , a ako on ne shvaca sta pricas , dzabe da se mucite i objasnjavate , zato kako vidite gore ja to pokusavam bas ono sto kazu seljacki opisati kako sta radi tako da svi shvate kako to zaista ide.
Post Reply