Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

mikrokontroleri od A do Sh

[es] :: Elektronika :: Mikrokontroleri :: mikrokontroleri od A do Sh
(TOP topic, by veselinovic)
Strane: < .. 1 2 3 4 5 6 7 8

[ Pregleda: 64933 | Odgovora: 150 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

korak
Nis

Član broj: 125522
Poruke: 562
*.dynamic.sbb.co.yu.



+6 Profil

icon Re: mikrokontroleri od A do Sh06.02.2008. u 12:45 - pre 150 meseci
Mozda sam stekao pogresan utisak, ali nametnuo si ga ti. Dokazujes ono sa cime se i ja slazem, zato pokazi nesto drugo sto je blize realnim situacijama u netrivijalnim programima.

Pozdrav.
 
Odgovor na temu

_str_

Član broj: 53798
Poruke: 878
*.mainstream.co.yu.



+10 Profil

icon Re: mikrokontroleri od A do Sh06.02.2008. u 23:32 - pre 150 meseci
Ma ne dokazujem ja nista, iznosim neke tehnicke stvari za pocetnike ili drugacije receno obrađujem temu iz jednog ugla. Nije mi bila namera da omalovazavam druge kontrolere ali ne mogu pisati o njima kada ih ne koristim u praksi. Iznošenje tehničkih podataka nipošto nije cepidlačenje.
Nadam se da sam bar nešto razjasnio.

pozdrav
__*__
*___*
 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 562
*.dynamic.sbb.co.yu.



+6 Profil

icon Re: mikrokontroleri od A do Sh07.02.2008. u 11:49 - pre 150 meseci
OK _str_,
nemam ni ja nikakvu zlu nameru.

Do sada sam promenio nekoliko mikrokontrolera u radu (4) , ne probao vec projektovao uredjaje sa njima. Zbog toga me mnogo interesuje kakve rezultate danasnji MCU-ovi daju u resavanju softverskih zadataka razlicitih klasa. Ocekivao sam da das neki netrivijalni primer. Sigurno si napravio neki program od par kilobajta koda, pa bih voleo da znam koliko je linija izvornog koda napisano, koliko je bajta izvrsnog koda generisano, i kojom se brzinom to izvrsavalo. Jednostavno ta saznanja volim da imam, ne da bih dokazivao kako sam ja najpametniji jer radim sa ti i tim MCU-om, vec pratim sve sto se dogadja na tom polju i rado cu preci na drugi MCU kada naidjem na osetno bolji. Kada su se pojavili MCU-ovi sa flash-om kolebao sam se izmedju MC908 i AVR-a, i za malo je prevagnuo prvi.

Nadam se da si shvatio moje motive.

Pozdrav.
 
Odgovor na temu

stefic_kg
Kragujevac

Član broj: 119791
Poruke: 71
79.101.136.*



+2 Profil

icon Re: mikrokontroleri od A do Sh09.06.2008. u 14:46 - pre 145 meseci
Potrbna mi je pomoc oko jednog zadatka.

Realizovati sistem za kašnjenje uključenja mašine.
Mašina po ukljucenju ne radi 10 sec a zatim se uključuje trajno dok se ne pritisne taster Stop.
Pritiskom na taster Stop u toku ukljucenja masine ciklus se prekida i mašina se uopšte ne uključuje.

PORTB.0 Pogon mašine
PORTA.0 Start mašine
PORTA.1 Stop mašine


Zadatka treba da uradim u asembleru, tj. u MPLAB IDE.

Svaka pomoc je dobrodosla.
 
Odgovor na temu

Nenad Trifunovic
Nisam zaposlen
Sokobanja

Član broj: 178266
Poruke: 1
*.smin-1.sezampro.yu.



Profil

icon Re: mikrokontroleri od A do Sh09.06.2008. u 19:49 - pre 145 meseci
Program je relativno jednostavan. Evo ga za PIC16F84 i sa eksternim pull-up otpornicima.

Inace, zgodnije bi bilo korišćenje PORTB registra za tastere zbog integrisanih pull-up otpornika .

Hardver je sledeći

; XT oscilastor od 4MHz
; RA0 - ulaz Taster STOP sa eksternim pull-up otpornikom od 10k prema masi
; RA1 - ulaz Taster START sa eksternim pull-up otpornikom od 10k prema masi
; RA2 - n.c.
; RA3 - n.c.
; RA4 - n.c.

; RB0 - izlaz pogon
; RB1 - n.c.
; RB2 - n.c.
; RB3 - n.c.
; RB4 - n.c.
; RB5 - n.c.
; RB6 - n.c.
; RB7 - n.c.

Code:

    list      p=16F84                  ; Definiše mikrokontroler
    #include <p16F84.inc>         ; Definiše nazive registra

    __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

    cblock    0x0C
    CounterA
    CounterB
    CounterC
    endc

    errorlevel -302

    ORG     0x00        ; Definiše početak programa

    movlw     0x00 
    movwf    PORTA     ; Podešavanje Portova 
    movlw    0x00
    movwf     PORTB
         
    bsf    STATUS,RP0
    movlw    b'00000011'
    movwf    TRISA         ; Podešava ulazno izlazne pinove
    movlw    b'00000000'
    movwf    TRISB
    bcf    STATUS,RP0

Start
    btfsc      PORTA,1    ;Testira START prekidac
    goto       Start 

    ;PIC Time Delay = 10.038348 s with Osc = 4.000000 MHz

    movlw    D'51'
    movwf    CounterC
    movlw    D'237'
    movwf    CounterB
    movlw    D'173'      
    movwf    CounterA
loop    decfsz    CounterA,1
    goto    loop
    decfsz    CounterB,1
    goto    loop
    decfsz    CounterC,1
    goto    loop                  ;pauza od 10 sekundi

    movlw     b'00000001'    
    movwf    PORTB        ; uključuje mašinu
    
Poc
           btfsc PORTA,0
           goto Poc          ;Testira STOP prekidač 
 
; Prekidač je pritisnut

    movlw b'00000000'    
           movwf PORTB         ;Isključuje mašinu

Pet
    call Pet                        ;Mrtva petlja

    end                             ; kraj programa
 
Odgovor na temu

espresso
Beograd

Član broj: 31423
Poruke: 1756



+181 Profil

icon Re: mikrokontroleri od A do Sh10.06.2008. u 07:46 - pre 145 meseci
Code:
Pet
    call Pet                        ;Mrtva petlja


Ovde bi trebalo koristiti goto umesto call, jer ce ovako puci stek. U datom primeru nista nece smetati call, jer ionako kad program dodje do te tacke vise nista ne treba da radi, ali treba napomenuti. Dakle

Code:
Pet
    goto Pet                        ;Mrtva petlja
 
Odgovor na temu

stefic_kg
Kragujevac

Član broj: 119791
Poruke: 71
212.200.206.*



+2 Profil

icon Re: mikrokontroleri od A do Sh10.06.2008. u 16:08 - pre 145 meseci
Hvala za resenje zadatka.

Imao sam neku ideju za resavanje, a posto sam pocetnik i nisam bas naucio komande, nisam umeo da ispisem ceo program.

Hvala jos jednom.
 
Odgovor na temu

TRAJKO41
Msc Mechanical Engineer
Kragujevac

Član broj: 184547
Poruke: 32
147.91.203.*



+2 Profil

icon Re: mikrokontroleri od A do Sh13.06.2008. u 10:46 - pre 145 meseci
Molim Vas treba sto pre da uradim jedan zadatak u asembleru koji se realizuje pomocu mikrokontrolera PIC16F84 a nisam bas nesto radio do sada u asembleru. Molim vas ako neko zna neka pomaze. Sto pre. Hvala unapred.

Zadatak glasi:


Pritiskom na tastere pomerati upaljenu Led diodu na izlazu. U zavisnosti od toga koji se taster pritisne pali se prva leva ili prva desna Led dioda do diode koja je upaljena. Dioda koja je bila upaljena gasi se. Pomeranje prve Led diode (PORTB,0) udesno pali poslednju Led diodu (PORTB,7). Pomeranje poslednje Led diode (PORTB,7) udesno pali prvu Led diodu (PORTB,0).. Zadatak realizovati pomoću mikrokontrolera PIC16F84 na asembleru.
PORTB Prikaz
PORTA.0 Pomeranje ulevo
PORTA.1 Pomeranje udesno



Ako neko moze da pomogne neka me kontaktira na mail [email protected]
ili neka napise ovde
 
Odgovor na temu

sasha_kg
SasaLukic
student
Kragujevac

Član broj: 184565
Poruke: 11
*.uis.kg.ac.yu.



Profil

icon Re: mikrokontroleri od A do Sh13.06.2008. u 13:21 - pre 145 meseci
potrebna mi je pomic oko resavanja zadatka u asembleru koji se realizuje pomocu mikrokontrolera PIC16F84


Zadatka treba da uradim u asembleru, tj. u MPLAB IDE.

Svaka pomoc je dobrodosla.


zadatak glasi ovako

Realizovati sistem za uključenje i vremenski ograničen rad neke mašine. Mašina po ukljucenju radi 10 sec a zatim se isključuje. Pritiskom na taster stop ciklus se u svakom trenutku može prekinuti.

PORTB.0 Pogon mašine
PORTA.0 Start mašine
PORTA.1 Stop mašine


hvala unapred odgovore mozete slati na mail : [email protected]
 
Odgovor na temu

Struja01
Beograd

Član broj: 166347
Poruke: 190



Profil

icon Re: mikrokontroleri od A do Sh13.06.2008. u 15:11 - pre 145 meseci
Ne znam da programiram u asembleru ali u programu Pic Basic-u ovo zvuci veomaaaa lagano za uraditi.. I kakva je ovo navala za resevanja vasih seminarskih radova, morate se i vi malo potruditi. Pokusajte napisati program, pa ako nece da radi postavite ga ovde, pa ce vam mozda neko resiti i pomoci Vam. Ne ocekujte da vam neko radi seminarske, a vase je samo Copy, Paste, a posebno ne u asembleru...
pozdrav
 
Odgovor na temu

Stojan Trifunovic
Zajecar

Član broj: 15156
Poruke: 366
*.yu
Via: [es] mailing liste

Sajt: www.ptt.rs/korisnici/t/r/..


+8 Profil

icon Re: mikrokontroleri od A do Sh14.06.2008. u 13:24 - pre 145 meseci
Nije ni u asembleru neki problem. Ovo mogu biti osnovni algoritmi, a dalje krenite sami. Internet je pun raznih primera i uputstava.

@sasha_kg

1. Podesite U/I pinove (hardver) i inicijalno logicko stanje RB0 pina (pogon).

2. Cekajte u praznoj petlji dok se ne pritisne START taster na RA0 pinu.

3. Po pritisku START tastera ubacite pauzu od 10S. Da se ne bi bespotrebno mucili proracunima takta mozete koristiti program PicLoops sa mog sajta ili http://www.piclist.com/cgi-bin/delay.exe link.

4. Cekajte u praznoj petlji dok se ne pritisne STOP taster na RA1 pinu.

5. Na kraju programa postavite mrtvu petlju.

U programu nema potrebe za debouncingom tastera, jer se ionako samo jednom testiraju.


Uostalom, nije li malo iznad vec odgovoreno na isti takav zadatak?

@TRAJKO41

Budite precizniji prilikom opisa. Pretpostavljam da bi recenica "Pomeranje prve Led diode (PORTB,0) udesno pali poslednju Led diodu (PORTB,7)." trebalo da glasi "Pomeranje prve Led diode (PORTB,0) ulevo pali poslednju Led diodu (PORTB,7).".
U tom slucaju algoritam bi trebao izgledati ovako:

1. Inicijalizacija U/I pinova (hardver) i inicijalno ukljucenje jedne LED na PORTB.

2. Test tastera sa debouncingom. U zavisnosti od tastera LEVO i DESNO skociti na tacke 4 ili 6

3. Povratak na tacku 2

4. Pritisnut taster LEVO. Proveriti da li je LED dosla do bita 0 (npr. sa btfss PORTB,0) i ako jeste postaviti na PORTB stanje b'00000001'. Ako nije, bcf STATUS,C pa RLF PORTB,F

5. Povratak na tacku 2

6. Pritisnut taster DESNO. Proveriti da li je LED dosla do bita 7 (npr. sa btfss PORTB,7) i ako jeste postaviti na PORTB stanje b'10000000'. Ako nije, bcf STATUS,C pa RRF PORTB,F

7. Povratak na tacku 2.


U zavisnosti od strucnosti profesorke mozete se provuci i bez debouncinga.
Takodje je preporucljivo da se rlf i rrf instrukcije umesto nad PORTB izvrsavaju nad njegovim shaddow registrom, ali (opet u zavisnosti od strucnosti profesorke) mozda nece biti potrebno.

Vise o debouncingu i shaddow registrima imate na http://www.ganssle.com/debouncing.pdf i http://www.piclist.com/tecHREF/readmodwrite.htm .

I nemojte molim Vas postovati isto pitanje na razlicitim mestima unutar istog foruma.
 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 562
*.dynamic.sbb.rs.



+6 Profil

icon Re: mikrokontroleri od A do Sh21.06.2008. u 14:30 - pre 145 meseci
Mozda ce nekome biti interesantno:

Stojan Trifunovic je naveo link: http://www.piclist.com/tecHREF/readmodwrite.htm koji opisuje RWM probleme kod PIC-a kada se RWM tip naredbe primeni na port koji je konfigurisan kao output, a ciji su pinovi (ili pin) kapacitivno optereceni. Ja sam pogledao hardver I/O pinova svih danas popularnih 8-o bitnih mikrokontrolera i video sam sledece:

Kada je port konfigurisan kao output, a vi primenite naredbu citanja porta, bice procitana stanja na pinovima porta. Dakle, iako je port konfigurisan kao output, vi mozete da citate stanja na njegovim pinovima, ali se pretpostavlja da su to stanja koja su upisana u registar output podataka porta. Ovo je OK, ali ako neki pin ima kapacitivno opterecenje, onda ce upisom jedinice u taj pin, napon na pinu sporo rasti, tako da u trenutku citanja mozete dobiti log. 0 iako je pin setovan na log. 1. U nekim slucajevima ovo moze da izazove nepredvidljiv rad vaseg programa. Ovakvu konfiguraciju I/O pinova imaju PIC, AVR i 8051 bazirani MCU-ovi.

Naravno, zainteresovao sam se da isto to vidim i kod motorolinih MCU-ova. Konfiguracija I/O pinova je ovde malo drugacija. Kada se pin (ili port) konfigurise kao output, onda se prekida veza linije za citanje stanja na pinu od pina, a povezuje se direktno na izlaz registra output podataka. Treba reci da kod svih MCU-ova izmedju ovog registra i pina postoje tranzistori. Dakle, kada je pin konfigurisan kao output, a primeni se citanje porta, bice procitan registar output podataka, a ne stanje na pinovima. Zato opisani problem ne postoji kod Motorole.

Uvek je interesantni zaviriti u neki detalj anatomije MCU-a.

Pozdrav svima koji prate ovu temu.

 
Odgovor na temu

Stojan Trifunovic
Zajecar

Član broj: 15156
Poruke: 366
*.yu
Via: [es] mailing liste

Sajt: www.ptt.rs/korisnici/t/r/..


+8 Profil

icon Re: mikrokontroleri od A do Sh22.06.2008. u 21:49 - pre 145 meseci
Da, tako je to, ali samo za starije PIC serije. Kod PIC18 serija (i narednih) ovog problema nema.
Resenje za starije serije je jednostavno. Sve operacije koje bi se normalno izvrsavale nad portovima, izvrsavaju se nad njihovim shaddow registrima, a onda se njihovo stanje samo kopira u portove.

Dobru praksu predstavljaju redni otpornici na U/I pinovima (ne samo zbog ovog problema), ali najbolji su ipak shaddow registri.

Interesantno je da je poznavanjem i koriscenjem RMW problema moguce koristiti odredjene hardverske trikove.
Na primer ukoliko se kondenzator direktno poveze na U/I pin (ili preko rednog otpornika za vece kapacitivnosti) prema masi, pa se zatim pin konfigurise kao izlazni sa logickom 0, kondrenzator se isprazni do 0V. Onda se na pin dovede logicka 1, i vreme koje protekne do ocitavanja logicke 1 na njemu direktno zavisi od RC konstanre. Tako se moze lako napraviti jednostavan (ali ne previse precizan) merac kapacitivnosti ili otpornosti.
To je u nekom semama (npr. na www.romanblack.com ) primenjeno za detekciju pritisnutosti vise tastera samo jednim pinom.
 
Odgovor na temu

stefic_kg
Kragujevac

Član broj: 119791
Poruke: 71
77.46.199.*



+2 Profil

icon Re: mikrokontroleri od A do Sh27.06.2008. u 12:07 - pre 145 meseci
Pozdrav ljudi!

Evo samo da jevim i da pitam u vezi zadatka koji sam postavio, a koji je uradjen, ali nije bio do kraja (nije bilo sve definisano u tekstu zadatka, pa sam ja neksto dodao).

Tekst zadatka:
Realizovati sistem za kašnjenje ukljucenja mašine. Mašina po ukljucenju ne radi 10 sec, a zatim se ukljucuje trajno dok se ne pritisne taster Stop. Pritiskom na taster Stop u toku ukljucenja masine (ili u bilo kom trenutku), ciklus se prekida i mašina se uopšte ne ukljucuje.

PORTB.0 Pogon mašine
PORTA.0 Stop mašine (bilo je RA1)
PORTA.1 Start mašine (bilo je RA0)

Code:

;************************ ZADATAK *************************************************
    
    list   p=16F84A                       ; Definiše mikrokontroler
    #include <p16F84A.inc>             ; Definiše nazive registra

    __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC   ; Podešava konfiguracione bitove.

    cblock    0x0C      ; Definisanje bloka konstanti (rezervise mesto u memoriji)
   
    BrojacA             ; Brojac za prvu petlju
    BrojacB            ; Brojac za drugu petlju
    BrojacC            ; Brojac za trecu petlju
   
    endc          ; Kraj bloka za definisanje konstanti

    errorlevel -302       ; ignorise Message[302] koja podseca da upotrebljeni registri nisu u BANK0

    ORG     0x00          ; Definiše pocetak programa

;************************ Podešavanje Portova *********************************************
    
    movlw    0x00                ; U momentu ukljucenja mikrokontrolera svi pinovi
    movwf    PORTA          ; na PORTA i PORTB su u stanju log. nule da se onemoguci slucajno
    movlw    0x00                ; ukljucenje mašine a pre pritiska tastera Start
    movwf    PORTB                     

;************************** Podešava ulazno izlazne pinove *****************************

    bsf        STATUS,RP0     ; setuj bit RP0 u  registar STATUS ( prebacuje program u BANK1 )
    movlw    b'00000011'         ; pinovi RA1, RA0 su ulazni ostali izlazni
    movwf    TRISA              ; Prebaci 00000011 u TRISA – Pinovi RA1 i RA0 su ulazni
  
    movlw    b'00000000'     ; Svi pinovi PORTB su izlazni
    movwf    TRISB             ; Prebaci 00000000 u TRISB
    bcf    STATUS,RP0             ; resetuje bit RP0 u registar STATUS ( vraca program u BANK0 )

; ************************ testira START i STOP prekidac **************************************

Start
                        ; Testira STOP prekidac
        btfsc   PORTA,0        ; testiraj bit 0, registra PORTA, ako je bit 0 jednak 0 preskoci sledecu instrukciju
        goto    Iskljucenje    ; ako nije jednak 0 idi na Iskljucenje

                       ; Testira START prekidac,
    btfss      PORTA,1           ; testira bit 1, registra PORTA, ako je bit 1 jednak 1 preskoci sledecu instrukciju
    goto       Start             ; ako nije onda ide na labelu Start za ponovno testiranje START prekidaca

;*************************** Podesava vreme na 10 sekundi ***************************
       
;PIC Time Delay = 10.038348 s with Osc = 4.000000 MHz

    movlw    D'51'         ; ubacuje 51 u BrojacC,
    movwf    BrojacC       
   
    movlw    D'237'       ; Mora da se upiše ova vrednost u  BrojacB i BrojacA jer za slucaj da se desi pritisak tastera  
    movwf    BrojacB       ; u trenutku kada se program nalazi u petlji bice zapamcene trenutne vrednosti za 
    
    movlw    D'173'           ; BrojacB i BrojacA, pa pauza u sledecem ukljucenju može biti drasticno kraca od 10 sec.
    movwf    BrojacA        
 
;*********************** Pauza od 10 sekundi ******************************** 

Pauza    
                    ; Testira STOP prekidac            
    btfsc     PORTA,0         ; testiraj bit 0, registra PORTA, ako je bit 0 jednak 0 preskoci sledecu instrukciju
    goto    Iskljucenje        ; ako nije jednak 0 idi na Iskljucenje
   
    decfsz  BrojacA,1         ; smanji vrednost registra BrojacA za 1 i stavi vrednost u u registar f. (zato sto je  1)
    goto    Pauza             ; idi na labelu Pauza sve dok nije BancaA=0, kad je =0 onda nastavi dalje.
    
    movlw   D'173'              
    movwf   BrojacA
    
    decfsz  BrojacB,1
    goto    Pauza
 
    movlw   D'237'         
    movwf   BrojacB

 
    decfsz  BrojacC,1
    goto    Pauza       
           
;************************ Ukljuci masinu ********************************
   
    movlw    b'00000001'    
    movwf    PORTB             ; ukljucuje mašinu

    goto    Start


;************************* iskljuci masinu *************************

Iskljucenje
     
      movlw b'00000000'        ;iskljuci masinu stavljajuci 0 u registar W.
      movwf PORTB 
      
    goto    Start  

;******************** KRAJ ***************************

    end                             ; kraj programa


Asisitent mi je rekao da stavim i u pauzu:
movlw D'173'
movwf BrojacA
i
movlw D'237'
movwf BrojacB
da kad prvi BROJACA dodje do 0, u sledecem prolazu bice 0-1 a to ce biti 255 i opet ce poceti ispocetka.
Bez toga, pauza bi bila mnogo duza od 10 sekundi. (Ovako je pauza oko 10,43 sec. Merio sam na faxu)
Isto vazi i za BROJACB.

Meni nije jasno sta je: D'173', D'237', D'51'.
Jel to decimalan broj?

Nacrtao sam algoritam za ovaj program, ali ne znam da li je tacan.
Skenirao sam, ali ne znam da kako da postavim sliku na sajtu.
Ajde neka mi neko kaze kako da postavim sliku na sajtu.
Unapred hvala.

Hvala milovan_regodic.
Uploadovao sam sliku tako da ako neko moze da pogleda i da mi kaze da li sam ispravno uradio algoritam?
pozz

[Ovu poruku je menjao stefic_kg dana 27.06.2008. u 13:58 GMT+1]
Prikačeni fajlovi
 
Odgovor na temu

Struja01
Beograd

Član broj: 166347
Poruke: 190



Profil

icon Re: mikrokontroleri od A do Sh27.06.2008. u 12:24 - pre 145 meseci
@stefic_kg, dole gde imas izmenu za post koji si posto-ovao imas "upload uz poruku" tu klikni pronadji fajl na HD-u i postuj.
P.S drugi put pise, pobrkao forum :)
 
Odgovor na temu

Slavenko
Niš

Član broj: 75943
Poruke: 158
*.adsl-3.sezampro.yu.



+6 Profil

icon Re: mikrokontroleri od A do Sh29.06.2008. u 16:31 - pre 145 meseci
Stefic-u : Da li su tasteri vezani u Pull-up ili Pull-down kombinaciji. Pull-up ti je kombinacija u kojoj je otpornik jednim krajem vezan za +Vcc a Pull-down gde je jedan kraj otpornika vezan za minus pol ili GND !

Tek kada ovo kažeš ima smisla komentarisati kod koji si postavio mada i ovako bi se mogao dati komentar. Što se mene tiče ja ću sačekati da nam kažeš o kojoj vezi tastera se radi !

Pozdrav !
 
Odgovor na temu

stefic_kg
Kragujevac

Član broj: 119791
Poruke: 71
79.101.235.*



+2 Profil

icon Re: mikrokontroleri od A do Sh01.07.2008. u 15:09 - pre 145 meseci
Nisam siguran, ali mislim da je pull-up, mogu da proverim.
Neznam zasto ti to treba da bi video da li je algoritam dobar?

Inace zadatak radi dobro, samo me interesuje da li sam dobro uradio algoritam.

Pozz
 
Odgovor na temu

Slavenko
Niš

Član broj: 75943
Poruke: 158
*.adsl-1.sezampro.yu.



+6 Profil

icon Re: mikrokontroleri od A do Sh01.07.2008. u 20:55 - pre 145 meseci
Steficu iako zadatak radi ( tako si rekao ) on nije dovoljno dobro napisan a evo i zašto. Kada se piše kod u bilo kom programu teži se tome da taj kod bude napisan u što manje linija jer će ostati više mesta za ostatak koda ako ga ima a i sam program će se brže izvršavati. U kompleksnim programima to jeste problem ako se programira u asembleru i verovatno uvek postoji nešto kraće mada sve zavisi i od logike kojim si krenuo u pisanje koda. Konkretno u tvom zadatku je evidentno napisano previše koda pa mi malo čudno da to asistent toleriše a evo o čemu se radi :

Napisao si :

Code:

;************************ Podešavanje Portova *********************************************
    
    movlw    0x00                ; U momentu ukljucenja mikrokontrolera svi pinovi
    movwf    PORTA          ; na PORTA i PORTB su u stanju log. nule da se onemoguci slucajno
    movlw    0x00                ; ukljucenje mašine a pre pritiska tastera Start
    movwf    PORTB                     


Komentar na prethodni kod : Kada imaš ovakvu situaciju da na oba porta treba da postaviš stanja koja odgovaraju logičkoj nuli onda nema svrhe pisati 4 linije koda. Kada si na početku ovog koda napisao da je :
movlw 0x00 a to znači da u W - Working ili radni registar ubacuješ sve nule. Kada si to jednom uradio onda nema potrebe da pišeš i drugi put istu naredbu jer je u W registru još uvek stanje koje si "stavio" na početku. Poenta, je da će sadržaj W registra biti promenjen tek ako je u njega upisano nešto drugo a sve dotle zadržava stanje koje si postavio.

Kraći kod bi mogao da bude kao :

Code:

    movlw    0x00               
    movwf    PORTA                 
    movwf    PORTB                     


A još kraći kod koji bi obavljao istu funkciju bio bi ispisan u samo dve linije a to je :


Code:

    clrf PORTA
    clrf PORTB


Postoji još kraći kod s obzirom na uslove zadatka. Rečeno je da je na PORTB.0 vezan motor a na PORTA su tasteri a pošto je to tako onda nema svrhe postavljati PORTA na nulu jer je motor vezan na PORTB pa samo njega i treba uzeti u obzir pa onda deo koda od 4 linije može da se zameni sa :

Code:

    clrf PORTB


ili ako baš ciljaš na PORTB.0 jer je konkretno na taj izlaz vezan motor može da se napiše :

Code:

    bcf PORTB,0



Takođe deo koda koji si napisao :


Code:

;************************ Ukljuci masinu ********************************
   
    movlw    b'00000001'    
    movwf    PORTB             ; ukljucuje mašinu

    goto    Start



može kraće da se napiše kao :

Code:

;************************ Ukljuci masinu ********************************
   

    bsf PORTB,0           ; uključuje mašinu

    goto    Start




i naravno deo koda na kraju koji si napisao kao :

Code:


;************************* iskljuci masinu *************************

Iskljucenje
     
      movlw b'00000000'        ;iskljuci masinu stavljajuci 0 u registar W.
      movwf PORTB 
      
    goto    Start  


može kraće da se napiše kao za jednu programsku liniju kao :

Code:

;************************* iskljuci masinu *************************

Iskljucenje
     
      bcf PORTB,0       ;isključi mašinu stavljajući 0 na bit0, PORTB     
    goto    Start  



Nadam se da mi ne zameriš ovim konstatacijama, ali vas moraju učiti da napišete funkcionalan i što kraći kod. Opet ponavljam ovde se to jako dobro vidi ali u komplikovanijim zadacima može da se nađe koja linija više nego što bi trebalo a da to možda ostane neprimećeno.

Pitao si :
Citat:

Meni nije jasno sta je: D'173', D'237', D'51'.
Jel to decimalan broj?


Odgovor je : Da to je decimalan broj odsnosno decimalni brojevi !


Da li ti je algoritam dobar ?

Pa nisam baš siguran na čemu se kod vas insistira, tako da ja algoritam ne bih komentarisao ako mi ne zameraš !



[Ovu poruku je menjao Slavenko dana 03.07.2008. u 12:48 GMT+1]
 
Odgovor na temu

stefic_kg
Kragujevac

Član broj: 119791
Poruke: 71
93.86.71.*



+2 Profil

icon Re: mikrokontroleri od A do Sh02.07.2008. u 18:04 - pre 145 meseci
Komentari sa ovim krace napisanim kodom su potpuno ok.
Trenutno mi nije potrebno, ali u svakom slucaju hvala sto si mi skrenuo paznju na to, da u narednim programima, program bude optimalnije napisan.
pozz
 
Odgovor na temu

barum
Bojan Radosavljevic

Član broj: 52522
Poruke: 418
*.smin-1.sezampro.yu.



+1 Profil

icon Re: mikrokontroleri od A do Sh02.07.2008. u 20:46 - pre 145 meseci
Mislim da algoritam nevalja. Koristiš blok za ulaz i izlaz da obeležiš labele. Svaki put inicijalizuješ portove. Samo kada je stop DA moguće je upaliti mašinu. Kad je stop NE nakon pauze ideš na gašenje. Na dnu, nakon UKLJUČI_MAŠINU račvaš tok u multitasking !?

Evo mog malog primera za rešenje ovog zadatka s tim što sam se potrudio da udesim tačno 10 sekundi. Nisam isprobao pošto nemam pri ruci neki 16F.



Code:

                     list   p=16F84A        ; Definiše mikrokontroler
                 #include   <p16F84A.inc>   ; Definiše nazive registra
                                            ; Podešava konfiguracione bitove.                         
                 __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC 
                   cblock   0x0C            ; Definisanje bloka konstanti (rezervise mesto u memoriji)
                Brojac_ms : 2               ; 16 bit brojac za milisekunde
                Brojac_it                   ; Brojac iteracije za jednu milisekundu
                     endc                   ; Kraj bloka za definisanje konstanti

               errorlevel   -302            ; ignorise Message[302] koja podseca da upotrebljeni registri nisu u BANK0

                      ORG   0x00            ; Definiše pocetak programa
                      
                      
                      bsf   TRISA,0         ; RA0 je digitalni ulaz
                      bsf   TRISA,1         ; RA1 je digitalni ulaz
                      bcf   TRISB,0         ; RB0 je digitalni izlaz
                      
Ugasi
                      bcf   PORTB,0         ; 
                      
CekanjePaljenja     btfsc   PORTA,0         ; Dok god je RA0 = 1 (pulled up) taster nije pritisnut
                     goto   CekanjePaljenja ; program ostaje ovde
                     
PostavljanjeBrojacaMilisekundi

                    movlw   0x10            ; postavljanje vrednosti
                    movwf   Brojac_ms       ; u 16 bitni brojac za milisekunde
                    movlw   0x27            ;
                    movwf   Brojac_ms+1     ; 0x2710 = 10000


OdlaganjePaljenja
                     call   Milisekunda

                    movlw   0x00            ; postavljanje akumulatora za slucaj kada se samo nizi bajt smanjuje
                     decf   Brojac_ms,F     ; smanjuje se nizi bajt
                    btfsc   STATUS,C        ; ako se pojavi prenos
                    movlw   0x01            ; potrebno je za jedan
                    subwf   Brojac_ms+1,F   ; smanjiti visi bajt
                    btfsc   STATUS,C        ; ako se tada pojavi prenos
                     goto   Upali           ; odbrojavanje je zavrseno
                     
                    btfss   PORTA,1         ; Ako je RA1 = 0 taster je pritisnut
                     goto   Ugasi           ; tada se odustaje od paljena
                      nop                   ; dopuna iteracije do 12 Tcy
                     goto   OdlaganjePaljenja
                     
Upali
                      bsf   PORTB,0         ;


CekanjeGasenja      btfsc   PORTA,1         ; Dok je RA1 = 1 (pulled up) taster nije pritisnut
                     goto   CekanjeGasenja  ;

                     goto   Ugasi           ;

;===========================================;
Milisekunda                                 ; 2(call) + 2(setup) + 2(nop) + 248* 4(iteration) + 2(return) = 1000 Tcy = 1milisecond
                    movlw   0xF5            ; eksterna petlja (brojac milisekundi) ima dodatnih 12 ciklusa
                    movwf   Brojac_it       ; i to se kompenzuje ovde sa brojacem umanjenim jos za 3 iteracije po 4Tcy
                      nop                   ;
                      nop                   ;
SmanjiBrojacL                               ;
                      nop                   ; period od 10000000 je deljiv sa 4
                   decfsz   Brojac_it,F     ; Brojac_L = Brojac_L - 1
                     goto   SmanjiBrojacL   ; ako nije nula opet SmanjiBrojacL
                                            ; Brojac_L je 0
                      nop                   ; dopuna poslednjeg prolaza kroz petju do 4 Tcy
                                            ;
                   return                   ;
;===========================================;
                   
                   
                   
                   
                      end                   ; kraj izvornog koda




Pozdrav,
Bojan
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: mikrokontroleri od A do Sh
(TOP topic, by veselinovic)
Strane: < .. 1 2 3 4 5 6 7 8

[ Pregleda: 64933 | Odgovora: 150 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.