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 

Vhodno izhodni pini pri pic
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
gl83
Član
Član



Pridružen-a: Pet 02 Mar 2007 12:01
Prispevkov: 20
Aktiv.: 0.09
Kraj: Ljubljana

PrispevekObjavljeno: Tor Mar 06, 2007 11:00 am    Naslov sporočila:  Vhodno izhodni pini pri pic Odgovori s citatom

Pozdravljeni!

Ali se da v podprogramu dolocati kdaj je pin izhoden in kdaj ne!!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.58

PrispevekObjavljeno: Tor Mar 06, 2007 11:20 am    Naslov sporočila:   Odgovori s citatom

Seveda - zakaj se pa ne bi dalo ?
_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
gl83
Član
Član



Pridružen-a: Pet 02 Mar 2007 12:01
Prispevkov: 20
Aktiv.: 0.09
Kraj: Ljubljana

PrispevekObjavljeno: Tor Mar 06, 2007 11:24 am    Naslov sporočila:   Odgovori s citatom

Kako, Wink
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.58

PrispevekObjavljeno: Tor Mar 06, 2007 11:25 am    Naslov sporočila:   Odgovori s citatom

Tako kot tudi izven podprograma; preberi datasheet za izbrani PIC (poglavje I/O Ports).
_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
gl83
Član
Član



Pridružen-a: Pet 02 Mar 2007 12:01
Prispevkov: 20
Aktiv.: 0.09
Kraj: Ljubljana

PrispevekObjavljeno: Tor Mar 06, 2007 11:27 am    Naslov sporočila:   Odgovori s citatom

hvala
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gl83
Član
Član



Pridružen-a: Pet 02 Mar 2007 12:01
Prispevkov: 20
Aktiv.: 0.09
Kraj: Ljubljana

PrispevekObjavljeno: Tor Mar 06, 2007 11:30 am    Naslov sporočila:   Odgovori s citatom

zdaj pa se to, ko mi pride stevec do devet bi jst rad klico izhod, pac enega od pinov ra. stevec je na pritisk tipke!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gl83
Član
Član



Pridružen-a: Pet 02 Mar 2007 12:01
Prispevkov: 20
Aktiv.: 0.09
Kraj: Ljubljana

PrispevekObjavljeno: Tor Mar 06, 2007 12:40 pm    Naslov sporočila:   Odgovori s citatom

Danes se mal igram pa se tu in tam zaletim v 'zid'!

Kako naj zgleda koda, ki mi ob pritisku tipke1 sproži ledico1, ob pritisku tipke2 pa ledico2, ki pa mora utripat v nekem intervalu. Intreval bi rad dolocil s timerjem!

Ce ma kdo idejo, lepo prosim!


LP

goran
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.01

PrispevekObjavljeno: Tor Mar 06, 2007 1:00 pm    Naslov sporočila:   Odgovori s citatom

Ena hitra ideja je tukaj: Temeljito se razglej , druga pa čez par dni tukaj: Priporočam nakup .

Potrebuješ pa ADC pretvorbo in dve zanki.
LP,
Igor

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
jur
Član
Član



Pridružen-a: Pet 02 Dec 2005 14:45
Prispevkov: 5142
Aktiv.: 21.71
Kraj: [color=zelena]Ljubljana[/color]

PrispevekObjavljeno: Tor Mar 06, 2007 2:05 pm    Naslov sporočila:  Re: Vhodno izhodni pini pri pic Odgovori s citatom

gl83 je napisal/a:
Ali se da v podprogramu dolocati kdaj je pin izhoden in kdaj ne!!


Za ta namen služi TRIS instrukcija. Deluje enako v programu in v podprogramu. Dva primera za različne porte in različne pine:

Koda:
MOVLW B’00001111’  ;RA 0 - 3 so inputi (vhodi),  RA 4-7  so outputi (izhodi)
TRIS PORT_A ;


Koda:
MOVLW B’00000011’  ;RB 0 in 1 sta inputa (vhoda),  RB 2-7  so outputi (izhodi)
TRIS PORT_B ;


Quote: "zdaj pa se to, ko mi pride stevec do devet bi [slovenščina je zame španska vas] rad klico izhod, pac enega od pinov ra. stevec je na pritisk tipke!"
Koda, ki prižge LED diodo na portu a, prvi pin, ko je števec 9.
Koda:
/*[slovenščina je zame španska vas] ne vem, kaj želiš tukaj */
If števec=9 then ra.1=1 /* če je števec 9, potem prižgeš led diodo */

Quote:"...rad klico izhod..."
Izhodov ne kličeš. Postaviš jih na nek logičen nivo. Če so izhodi digitalni, je vrednost običajno 1 ali 0.

V katerem programskem jeziku programiraš?

Jur
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
gl83
Član
Član



Pridružen-a: Pet 02 Mar 2007 12:01
Prispevkov: 20
Aktiv.: 0.09
Kraj: Ljubljana

PrispevekObjavljeno: Tor Mar 06, 2007 6:55 pm    Naslov sporočila:   Odgovori s citatom

programiram v asemblerju
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
jur
Član
Član



Pridružen-a: Pet 02 Dec 2005 14:45
Prispevkov: 5142
Aktiv.: 21.71
Kraj: [color=zelena]Ljubljana[/color]

PrispevekObjavljeno: Sre Mar 07, 2007 4:18 pm    Naslov sporočila:   Odgovori s citatom

Koda v ki prižge LED diodo na portu a, prvi pin, ko je števec 9.

Koda ki ni assembler:
Koda:
If števec=9 then ra.1=1

Koda od assemblerja:
Koda:
MOVF A,0 // v števcu imamo neko poljubno vrednost
SUBLW 9  //od nje odštejemo 9
BTFSS STATUS,Z //preverimo, ali je rezultat odštevanje nič
BSF PORTA,0 //prižgemo prvi bit na portu a, če je rezultat nič (9-9=0)
BCF PORTA,0 //ugasnemo prvi bit na portu a, če je rezultat različen od nič

Zadeva je videti komplicirana. PIC mikroji nimajo instrukcije kot je na primer CAIE (compare accumulator if equal), kar bi bilo videti tako:

Koda:
CAIE A,9 // ali je v registru 9?
BSF PORTA,0 //ja, je
BCF PORTA,0 //ni

To je elegantno in učinkovito. Ampak ne pri PICih. PICi uporabljajo harwardsko arhitekturo (ne von Neumannove), in imajo posebno vodilo za instrukcije in posebno vodilo za podatke. To ima dobre in očitno tudi slabe lastnosti Evil or Very Mad.

Jur
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.58

PrispevekObjavljeno: Sre Mar 07, 2007 5:54 pm    Naslov sporočila:   Odgovori s citatom

Jur, pozabil si se

btfsc status,z

pred zadnjo vrstico, sicer bos dobil samo kratek impulz na izhodu (ali pa se to ne, odvisno od stanja stevca).

Pri vecjih picih (18F) lahko uporabis

cpfseq naslov, vrednost

To sicer nima nobene zveze z arhitekturo; tudi x51 je recimo harvardska arhitektura, pa ima vseeno na voljo mnemonik cjne, ki pocne nekaj takega, kot tvoj primer.

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.17
Kraj: Ljubljana

PrispevekObjavljeno: Sre Mar 07, 2007 6:26 pm    Naslov sporočila:   Odgovori s citatom

Ali pa recimo..
Koda:
MOVF A, w     
SUBLW 9
; BTFSS STATUS, Z        ;ni vedno potrebno odvisno od dizajna
BCF PORTA, 0
BTFSC STATUS, Z
BSF PORTA, 0


LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
jur
Član
Član



Pridružen-a: Pet 02 Dec 2005 14:45
Prispevkov: 5142
Aktiv.: 21.71
Kraj: [color=zelena]Ljubljana[/color]

PrispevekObjavljeno: Čet Mar 08, 2007 10:09 am    Naslov sporočila:   Odgovori s citatom

Ja,res je napaka. Najprej sem hotel tja vtakniti goto stavek, ki bi preusmeril program. Zdelo se mi je, da bo potem (z goto stavki) zadeva bolj nepregledna, pa sem zaj*. Meni se vedno zdelo obupno zoprno, ko je za neko stvar podan primer uporabe, pri tem pa je vedno dodano še nekaj tretjega, ki z konkretno razlago nima nič.

Arhitektura: v Microchipovih datasheetih piše, da primerjava akumulatorja z neko konkretno vrednostjo ne deluje ravno zaradi harwardske arhitekture. To stvar (nedelujočo primerjavo) sem že nevemkolikokrat preklel. Instrukcije za primerjave: večje, večjealienako, manjše, manšjealienako bi z veseljem pogrešal, če bi delal preprosti: enako.

Compare bi se seveda dalo realizirati na PICih, vendar to ne bi bila več single cycle instrukcija. Instruction set ne bi bil več Reduced Instruction set (RISC).

Nekaj o arhitekturi PICov (dolgočasno in neuporabno): http://ww1.microchip.com/downloads/en/DeviceDoc/31004a.pdf

Popravljena koda, ki bi jo moral podpirati PIC, pa je ne:

Koda:
CAIE A,9 // ali je v registru 9?
BSF PORTA,0 //ja, je. Prižgemo diodo
GOTO NI:
<tu je neka koda>

NI: BCF PORTA,0 //ni  9, zato ugasnemo diodo

Jur
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.58

PrispevekObjavljeno: Čet Mar 08, 2007 11:59 am    Naslov sporočila:   Odgovori s citatom

jur je napisal/a:
Arhitektura: v Microchipovih datasheetih piše, da primerjava akumulatorja z neko konkretno vrednostjo ne deluje ravno zaradi harwardske arhitekture. To stvar (nedelujočo primerjavo) sem že nevemkolikokrat preklel. Instrukcije za primerjave: večje, večjealienako, manjše, manšjealienako bi z veseljem pogrešal, če bi delal preprosti: enako.


Tudi vecji PICi (18F) in drugi MCUji primer harvardske arhitekture, a tovrstne ukaze imajo (pri 18F je za operacije na "akumulatorju" ekvivalent tvojega primera "compare and skip if equal", torej mnemonik cpfseq).

Manjsi (14 in manj bitov na ukaz) jih ne morejo imeti preprosto zato, ker jih niso implementirali - so ze ocenili, da so drugi ukazi pomembnejsi, prostora za vse je pa ocitno zmanjkalo. Ker so vsi GPRji registri, nad katerimi je mogoce opravljati operacije (nekatere lahko celo samo na GPRjih in ne tudi na "akumulatorju"), ni tezko razumeti zakaj ni mogoce v 14 bitov stlaciti ukaza, ki bi primerjal vsebino registra (z 8-bitnim naslovom znotraj banke ali se sirsim absolutnim naslovom) z (spet 8-bitnim) neposredno v ukaz vkljucenim podatkom in se dodati par bitov za dekodiranje ukaza - skupaj bi jih prislo vsaj 8+8+1=17, kar je vec kot 12 oz. 14 pri malckih (ali 16 pri 18F !).

8051 ima po drugi strani razlicno dolge ukaze (od 1 pa do 3 bajte), zato lahko ukaz, kot je cjne deluje nad vsemi registri (vseh 256 bajtov internega RAMa & SFRjev). Tudi 8051 je primer harvardske arhitekture, celo malo bolj ekstremen kot PIC, ker nima zgolj locenega pomnilnika za ukaze in podatke, ampak ima kar dva naslovna prostora za podatke, torej skupaj tri.

Primerjavo kodiranja ukazov lahko vidis v datasheetu za PICe in tukaj za x51 (stran 31). Razlika ni v arhitekturi, kot je razvidno tudi iz opisa na strani 2 PDFja, katerega si omenil, temvec oblikovanju ukaznega nabora (RISC vs. CISC).

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit 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 -> Osnove programiranja PIC-a v Assembler-ju Č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: 491 dni


Powered by phpBB © 2001, 2005 phpBB Group