Atmel ili Pic

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

zer0
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 250
Joined: 05-08-2005, 21:10

Re: Smrc

Post by zer0 »

InTheStillOfTheNight wrote:Posve sam novi u ovome a mislim da je vrijeme da nesto pametno naucim... Kako se to programira.. Koji software kakav programator.. Ev recimo idem za pocetak raditi nesto sa At90s1200 .. Kako bi ovo izgledalo u assembleru

Do
P3.1 = 0
wait 1
P3.0 = 1
wait 1
loop

treba mi zmigavac recimo... odakle da krenem.... smrc

AVR ulazno i izlazni portovi se označavaju kao PORTA, PORTB...... Svaki od portova može se deklarisati kao ulazni, izlazni ili mešovito po bitovima.
AT90S1200 poseduje dva porta B i D. Za početak neka izlaz za zmigavac bude pin PD6.

Code: Select all

; @4MHz
.include "1200def.inc"

.def a=r16		;registru opste namene R16 je dodeljen naziv A
.def b=r17
.def c=r18

.cseg
.org 0					; pocetak programske memorije, posle ukljucenja ili posle reseta
						; kontroler krece sa citanjem od ove adrese (0)

		rjmp	reset	; at90s1200 poseduje 4 interapta, na prvoj adresi prg. mem. je RESET
		reti			; INT0   * reti je komanda za povratak iz int. programa, kada se ne 
		reti			; TIMER0 * koristi onda se upise ova komanda
		reti			; ANA_COMP * analogni komparator
						; PDF strana 12

; ovih interapt vektora ima u zavisnosti od izabranog modela
reset:	; komanda rjmp je bezuslovni skok i ovo je prakticno pocetak izvrsenja programa
		; posle RESET vektora
		ldi		a,64	;a=64		       0   1   0   0   0   0   0   0   binarno 64
		out		DDRD,a	;PD6=izlaz		pd7 pd6 pd5 pd4 pd3 pd2 pd1 pd0
; DDRD je registar za deklarisanje ulaznih i izlaznih pinova porta D (PORTD), isto tako 
; DDRB se odnosi na PORTB

petlja:
		cbi		PORTD,PD6	;PD6=0	
		rcall	pauza	; rcall je komanda za pozivanje podprograma i povratka na adresu+1
		rcall	pauza	; analogija u bejziku je komanda gosub
		rcall	pauza	; povratak iz sub rutine je omogućen komandom ret, pogledaj reti
		rcall	pauza	; gosub pauza
		rcall	pauza
		sbi		PORTD,PD6	;PD6=1
		rcall	pauza
		rcall	pauza
		rcall	pauza
		rcall	pauza
		rcall	pauza
		rjmp	petlja

pauza:      ;pauza_200ms
; ovaj kod sluzi za "gubljenje vremena" mpu-a. u pitanju je ne tako efikasna petlja ali 
; je dovoljna za primer
		ldi		c,255	;c=255
		clr		a		;a=0
		clr		b		;b=0
pau1:
		inc		a		;a=a+1
		cpse	c,a		;uporedi c i a, ako su jednaki preskoci sledecu komandu
		rjmp	pau2	;goto pau2
		ret				;povratak iz sub rutine
pau2:	
		inc		b		;b=b+1
		cpse	b,c		;uporedi b i c, ako su jednaki preskoci sledecu komandu
		rjmp	pau2	;goto pau2
		clr		b		;b=0
pau3:
		inc		b		;b=b+1
		cpse	b,c		;uporedi b i c, ako su jednaki preskoci sledecu komandu
		rjmp	pau3	;goto pau3
		clr		b		;b=0
pau4:	
		inc		b		;b=b+1
		cpse	b,c		;uporedi b i c, ako su jednaki preskoci sledecu komandu
		rjmp	pau4	;goto pau4
		clr		b		;b=0
		rjmp	pau1	;goto pau1
www.atmel.com
Last edited by zer0 on 07-06-2006, 15:16, edited 2 times in total.
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Mcu

Post by InTheStillOfTheNight »

; @4MHz ovo kuzim
.include "1200def.inc" ; i ovo kuzim

.def a=r16 ; sto je R16 regirsat ili ?????
.def b=r17 ; ovo isto ne znam za cega je
.def c=r18 ; i ovdje sam kratak

.cseg ; a sto je pak ovo?
.org 0 ; ili sto je ovo?
rjmp reset ; ovo je valjda bezuvjetni skok na reset ili se varam???
reti ; a sta je ovo
reti ; ???
reti ;???
reset:
ldi a,64 ; ovo bi trebalo biti postavljanje vrijednosti 64 u A
out DDRD,a ;postavljanje PD6=izlaz ; ovo mi je jasno


petlja:
cbi PORTD,PD6 ;PD6=0 ; i ovo mi je jano
rcall pauza ;ovo je isto jasno
rcall pauza
rcall pauza
rcall pauza
rcall pauza
sbi PORTD,PD6 ;PD6=1 ;ovo je jasno
rcall pauza
rcall pauza
rcall pauza
rcall pauza
rcall pauza
rjmp petlja

pauza: ;pauza_200ms

ldi c,255 ;a ovo dalje sve mi je nejasno
clr a
clr b
pau1:
inc a
cpse c,a
rjmp pau2
ret
pau2:
inc b
cpse b,c
rjmp pau2
clr b
pau3:
inc b
cpse b,c
rjmp pau3
clr b
pau4:
inc b
cpse b,c
rjmp pau4
clr b
rjmp pau1




jel moze malo objasnjenje svake ove instrukcije ako nije problem... tnx
InTheStillOfTheNight
zer0
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 250
Joined: 05-08-2005, 21:10

Post by zer0 »

Dodao sam ojašnjenja, možeš copy/paste pa u avrstudio, bolje je pregledno zbog boja komandi i možeš uraditi simulaciju sa pogledom na portove.
User avatar
MladaNada
Stariji član
Stariji član
Posts: 2529
Joined: 20-05-2006, 14:57
Location: Banja Luka RS , Novi Sad RS , Herceg Novi CG

Post by MladaNada »

User avatar
trax
Administrator sajta
Administrator sajta
Posts: 3508
Joined: 08-01-2005, 18:04
Location: 75k, BA
Contact:

Post by trax »

MladaNada wrote:Evo jedna odlicna adresa: http://www.mstracey.btinternet.co.uk/pictutorial
ne radi ti ovo...
buco

Post by buco »

Sta nema taj AT 12000 timer !?? pa rijesi to s timerom jednostavnije i manje prostora , mozes i s indexnim brojacima [16 bitni] ako ih ima , a ima ih ako je AVR jezgra !! 800 000 ciklusa na 4MHz za 200miliS !! to bi islo i kao 65536 x12[ciklusa] znaci indexni par[65536] + 2cykl petlja + 2 ciklusa adiw naredba + 8 nop == oko 200miliS [ manje jer 12,2 ] .
Puza ti izgleda lose za assemblersku izvedbu , i vijeruj mi da bi tesko neko vijerovao da je to pisano u assembleru kad bi to vidija , kao da ga je HPL crsssompiler izbacija tu pauzu od 200 mili S !!!!!!!
zer0
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 250
Joined: 05-08-2005, 21:10

Post by zer0 »

@buco Od šume ne vidiš drvo.
Koliko sam primetio @InThe nije tražio šemu za žmigavac nego savet kako bi mogao to da napiše u asembleru. Kao početniku koji se prvi put sreće sa avr asemblerom, namerno nisam koristio TIMER0 i NAMERNO sam preporučio da prouči AT90S1200 jer je ovo najmanji član porodice AVR i znaje stečeno na ovom kontroleru može da prenese na druge.
User avatar
MladaNada
Stariji član
Stariji član
Posts: 2529
Joined: 20-05-2006, 14:57
Location: Banja Luka RS , Novi Sad RS , Herceg Novi CG

Post by MladaNada »

buco

Post by buco »

@zer0 !! ono sa sumom je dobro !! :D

Nemoj se dat' "navuc" da tako nekog poducavas, mnogi su nestrpljivi i htijeli bi odmah nesto pisat cim pozele da rade s racunalima . Nije im za zamijerit , ali ti moras znat da im tako uopce ne pomazes , izlistima primjera i k'tome koji su jos "anti primjeri" . Covijek mora prvo da prouci AVR jezgru , dokumente , i dokumentaciju a MASMu za Atmelove 8 bitne processore AVR jezgri ! i onda je tek spreman da pocne nesto radit i shvacat . A tako brzo to nije proucio 100% !!! Timeri nisu nikakv specijalan i tezak pocetak to je samo jos jedan [ jedni ] u nizu registara koje svaka AVR jezgra ima pa i ova "najmanja" , nema malih i velikih AVR jezgri ona je jedinstvena za cijlu seriju s modifikacijama i za Mega seriju . I svatko onaj tko pozeli programirat u assembleru atmele s AVR jezgrom valjda prvo treba naucit internu arhitekturu te iste jezgre da bi znao cime sve raspolaze i na koji nacin ce to koristit.
Molim te razmisli o tome jos jednom !! pa mi odgovori .

Ostali : O assembleru opcenito par rijeci .................. :
A onaj primjer pauze ne samo da ne postuje osnovna pravila assemblerskog programiranja vec lici na uradak jako loseg cross compilera !!!!!
Nije programiranje u assembleru samo nabacivanje naredbi koje ce se eto nekim cudom assemblirat u izvrsni kod , to je prije svega i nacin koristenja memorijskog prostora , resursa [ registri + dodatni HW], redukcije koda odabirom najprihvatljivijih rijesenja za odradit neki problem ...itd ! Ukratko poznavanje srca vaseg stroja prije svega i precizno definiranje problema na razini detalja. I zato je primarno da najprije dobro uipoznate jezgru processora s kojim zelite radit , njegovu internu arhitekturu ! Nije ona u dokumentaciji data eto tako da se trosi papir , i preskace , vec da se "zabuljite" u nju proucite je i kad vidite da bi mogli bit spremni krenete pist svoje prve uradke ili procavat primjere iz [examples direktorija] . Ja znam da je zelja jaka i da ce mnogi htijet to "eskivirat " ali to se vidi , neznaje se nemoze sakrit !! :?
Zato vas molim da suspregnete tu zelju i krenete redom , bit ce i vama i svima oko vas koji van zele pomoc puno lakse i sve ce ici brze !!
Kome se zuri najbolje mu je da se ostavi assemblera , ima HPL crosscompilera sasvim dovoljno , a uradci iz njih ce upravo licit na onaj primjer gore , ako su kvalitetniji i bolje !!!! Cak ce crosscompiler upotrijebit timere !!
Ja sam vam cijelo vrijeme pokusavao rec da cete izradom programa u assembleru dobit kvalitetniji program , manji , kompaktini , prisniji racunalu , brze izvodljiv ...itd..
A ne ono gore , tko vidi reci ce sta je ovo ako to assembler nebi hvala !!
Los primjer je gori u fazi ucenja nego 100 losih rijeci !!!!!!

Tko zeli ucit assembler nek razmisli o svemu recenom dobro jer pocetak mu je hrpa dokumentacije a ne nesto drugo , jer to nije crosscompiler pa je netko drugi za vas sve to naucio i postavio a vi cete samo rec koji lampicu ce upalit na kom portu [ koji je virtualan iz HPLa] i koliko ce biti delay ! Ja se nadam da sam bio i vise nego jasan . :D
zer0
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 250
Joined: 05-08-2005, 21:10

Post by zer0 »

Evo i verzije sa upotrebom TIMER0, koji je ujedno i jedin na ovom malom kontroleru. Nisam napisao pojašnjenje jer čak i onaj ko nije čuo za ovo polje nauke, može sa lakoćom da rastumači značenje pojedinih bikova :?


Code: Select all

; @4MHz
.include "1200def.inc"

.def a=r16		
.def b=r17

.cseg
.org 0				
		rjmp	reset
		reti
		rjmp	tajmer	
		reti			
reset:
		ldi		a,64	
		out		DDRD,a
		ldi		a,0
		out		TCNT0,a
		ldi		a,5
		out		TCCR0,a
		ldi		a,15
		ldi		a,2
		out		TIMSK,a
		ldi		a,15
		sei


petlja:
		cbi		PORTD,PD6	
		cpse	a,b
		rjmp	petlja
		ldi		b,0
petlja2:
		sbi		PORTD,PD6
		cpse	a,b
		rjmp	petlja2
		ldi		b,0

		rjmp	petlja


tajmer:
		inc		b
		reti


;vremenska baza t=(1/(4000000/(1024*256)))*15  ~0.98s
@buco
Ne slažem se sa tobom oko izjave "loš primer" (ne zato što branim svoj rad :D ) jer mislim da ne postoje loši primeri.
Kada sam počinjao da se zanimam za ovu oblast, jedino mesto gde je bilo programa pisanih u asembleru za Z80 (ZX) pa još i kratko obrazloženje!, bili su časopisi o računarima. Mnogo se može naučiti posmatrajući tuđe listinge a još više prekucavajući kratke programe, kompajliranje i simulaciju.
Puni su forumi onih koji pišu programe u C i BAS, a zapravo ne bi znali nacrtati poštenu šemu za svoj rad. Ko se iole bavi(o) digitalnim kolima i izradom PCB-a od nacrtane šeme, ima velike predispozicije da lako savlada pisanje u asembleru. Asembler predstavlja odličan izbor za kvalitetno bavljenje elektronikom.
Pitanje kvaliteta asemblera je sledeće što treba odlučiti. Prosečan PIC ima oko 32 komande a sa druge strane AVR svojih 110. Uporedbom ovih komandi nameće se utisak jednostavnosti komandi na strani AVR.
Danas se izbor svodi na PIC i AVR, ja sam se dvoumio i oko Motorole.

Na početniku je da pažljivo odabere "platformu" i da se zdušno baci na njeno proučavanje, kad savlada jednu, veoma lako se može prebaciti na koju drugu.
Pitanje je samo ko je spreman da se upusti u ovaj nemogući poduhvat :) :?:
buco

Post by buco »

@zer0 :D

Ono PIC /AVR a ne neki drugi , pa veliki broj su njihove modificirane jezgre a ovo su najpopularniji predstavnici roda 8 bitnih racunala i uglavnom je to razlog.
A kao sto si i rekao kad se stekne potrebna vjestina u assemblerskom programiranju lako se prebace na bilo koji drugi tip jezgre !! :D

Treba citati tudje primjere , to sam i ja rekao [ examples direktorij] ali bez da covijek ne nauci osnove arhitekture jezgre processora kojeg zeli programirat , i bez da nauci bar neke osnove upotrebe alata tj MASMa ic u primjere mislim da nece puno pomoc jer nece razumijet o cemu ti uopce "pricas" , tj postavke , sistemski registri , radni registri ...itd.. su mu nepoznanica i tesko ce to razumijet .
Zato mislim da je najbolje da se pocne od navedenog nacina !!
Iako koliko vidim ni ovaj ni onaj nacin nisu pomogli tj , niko ziv se nije javio da ga zanima programiranje u assembleru , bar ne po onom pozivu svim zainteresiranima !! :? Izgleda da iz najbolju volju da se ljudima pomogne nece od toga bas nista biti !! :(
Mozda sam skeptican ali.... cini mi se da ce to sve tako zavrsit !!
Sto ti mislis !??
zer0
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 250
Joined: 05-08-2005, 21:10

Post by zer0 »

Ja BiH se prijavio ali za ARM, međutim nije na spisku plana i programa :D.
buco

Post by buco »

ARM ludnica !! :P Ja sam poceo nesto kao pisat za Jtag programator ali sam ovih dana stao , moram reparirat neke recivere i tako..
Jesi li radio s kojim arm-om a moze i mips-om !
Ja volim ove u formi mikroracunala na chipu , sve je na jednom mjestu !
Posto nisam bio moga nac LPC2xxx seriju nasao sam STR7xx slicna pasta
, citam na forumima ljudi se prepiru koja je bolja serija !? :?
Meni i jedna i druga izgledaju OK!! :D
Ni za ove se ljudi nece prijavit kamoli za 32 bitne masine , pa jos assembler !! Najveci dio nih bi ti reka da si "out of mine" da se naoruzas krosscompilerom i vec drugi dan pravis "cuda" ! :-)
Nije vazno sto nebi kuzija kako i zasto !! :P Lipo je vidit da je covik u dan -dva napravia igricu za komputer ! pa makar i tudjim source kodom !! ionao 999,99% posto ljudi ni nezna sta to uopce znaci !! :?
zer0
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 250
Joined: 05-08-2005, 21:10

Post by zer0 »

Nisam radio ništa sa ARM, trenutno se "patim" sa M128A, parčencetom plastike. Najviše me zanima dostupnos, popularnost i oznake zbog PDFova kai i razvojni alati. Sigurno da je zanimljiva ova opcija "sve u jednom".
Odoh tražit STR7xx. ..
buco

Post by buco »

M128A , mislis na ATmegu128A ili !?
STR7xx serija je STov proizvod, LPC2xxx je Philipsov !! Ima alata uglavnom " specijaliziranih" proizvodjatja , ali ARMGCC [WINARM] i sl su public jedino sto su to crosscompileri nema assemblera ! Raisonance radi fr*e assembler/C/C++ alat dovoljan za pocetak za STR7xx seriju !
" Sve u jednom " ! :D da , usparas vrijeme na izradi plocice , nema puno dodatnog HW , tj vec s "golim" MCUom mozes radit funkcionalne projekte , cak i zahtijevnije . Dok npr kod 91R40008 moras bar programsku memoriju lemit na 16 bitnu data i bar 20 bitnu sabirnicu + kontrole .. ima interni sram [ mislim, ali nisam sasvim siguran] !! ....
MisterDr
Posts: 17
Joined: 22-08-2005, 13:28

Dje ste raja

Post by MisterDr »

Ima li tko da mi posalje STK500, i par Atiny2313 sa njim. Ovdje u BiH nisam naisao na shodnog distributera, hm izgleda da se ponovo vracam na ove stope.

CIJENA:?
UPLATA:?
buco

Post by buco »

Dobro znaci jos jedan "ljubitelj" MCUa !
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re:

Post by InTheStillOfTheNight »

Malo sam zapeo u guzvi... pa nisam bio na netu neko vrijeme..... Nabavio sam Atmega 16, At90s1200, Puno hvala na linkovima.. Javim se kada nesto zapne... Najprije cu rjesiti ovo za zmigavce u assembleru. Pa vam se javim-.-- Tnx buco i Zer0
InTheStillOfTheNight
MisterDr
Posts: 17
Joined: 22-08-2005, 13:28

Uh buco

Post by MisterDr »

Zar me se ne sjecas, bojim se da cu ti pokvariti raspolozenje cinjenicom da sam odavno ovdje, ali nisam bas bio "pre"aktivan ili aktivan. I sjahao sam sa asemblera na web sajtove, poslije na c# sada sam komparativno na c# i vjerujem opet na atmelu i njegovim instrukcijama. :lol:
Hm, ako nista, gdje mogu kupiti STK500, nisam nabasao niti na sajt niti kompaniju. www.chipoteka.hr ama bas nista nema sa dva pocetna slova "AT".
Udoban dan! :lol:
buco

Post by buco »

Pokvarit raspolozenje , zasto !? :? Sjetio sam se sada !! bar mislim .!?
:D
Chipoteka je obicno drzala At90s8515 , ATmega8515, mislim neke iz tiny serije i one stare 90s2323/2343 ...Probaj ukucat Atmel ili mirokontroleri .. ! Malo imaju "cudnu" trazilicu .
Sta ce ti STK500 !? dovoljno dobri ce ti bit i programatori kao pony programator i slicni !! A simulacije je ionako nabolje radit na "zivom uredjaju" ! tj on board uredjaja....!! No "budi volja tvoja".... :D
Post Reply