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

programcic za jedan PIC

[es] :: Elektronika :: Mikrokontroleri :: programcic za jedan PIC

Strane: 1 2

[ Pregleda: 8108 | Odgovora: 29 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

buha18
mali mirkec
vratisinec

Član broj: 57193
Poruke: 161
*.net.t-com.hr.



+10 Profil

icon programcic za jedan PIC20.04.2006. u 09:59 - pre 219 meseci
zadaca je sljedeca...
na LPT portu mogu ocitati 4 vrijednosti (ulazi). nije problem. to znam. e, sad...

potrebno je ocitati, npr, 6 mogucih stanja (logicka 1 ili 0), a posto imamo samo 4 pina sa kojih mogu citati, upotrijebio bi jedan mikrokontroler. ako je moguce, naravno...

imao bi 6 ulaza, koji registriraju logicku 1 ili 0. pri bilo kojoj promjeni od tih 6 pina, postavio bi odredenu kombinaciju na izlazu. izlaz bi se sastojao od 3 pina. ti izlazi iz mikrokontrolera bi se spojili na 3 ulaza LPT porta.

moze programcic...

p.s.

program bi mi sluzio za ucenje principa rada pic-a. pa ako nekom nije tesko, da napise takav ili slican program. za seriju 16Fccccc... ili slicne

hvala

>>Mirkec<<
 
Odgovor na temu

SASA M.
Pripyat

Član broj: 32850
Poruke: 3180
*.dial.InfoSky.Net.



+370 Profil

icon Re: programcic za jedan PIC22.04.2006. u 01:39 - pre 219 meseci
Kako samo 4? Trebao bi da mozes 8. koliko ima ul/izl linija.
 
Odgovor na temu

buha18
mali mirkec
vratisinec

Član broj: 57193
Poruke: 161
*.net.t-com.hr.



+10 Profil

icon Re: programcic za jedan PIC22.04.2006. u 22:23 - pre 219 meseci
ltp port ima 25 pina. od toga ih je 8 rezervirano za izlaz, 4 za ulaz, i mislim da 4 za ulaz/izlaz, ali ja ih nisam uspio natjerati da rade kao ulazi. manje bitno...

treba mi programcic, da vidim kako se pristupa ulazima na mikrokontroleru, i kako se postavljaju odredeni pinovi na logicke 1 ili 0. ako je to uopce moguce...
>>Mirkec<<
 
Odgovor na temu

plavsa2
Milan Plavsic
Beograd

Član broj: 26726
Poruke: 57
*.ptt.yu.

ICQ: 10572709


Profil

icon Re: programcic za jedan PIC13.05.2006. u 13:08 - pre 218 meseci
kako nije moguce, npr. mikrokontroler PIC16F84:


1. citanje ulaza sa mikrokontrolera
.
.
.
.
main program
.
.
.
BTFSC PORTB,5 ;cita pin10 na cipu
CALL pin_je_na_5V ;pomocna procedura
BTFSS PORTB,5
CALL pin_je_na_0V
.
.



2. postavljanje izlaza na mikrokontroleru:
.
.
.
BSF PORTB,5 ; stavlja 5V na pin10
BCF PORTB,5 ; stavlja 0V na pin10
.
.


OK?



 
Odgovor na temu

lord Vader

Član broj: 57936
Poruke: 757
217.65.192.*



+9 Profil

icon Re: programcic za jedan PIC19.05.2006. u 14:51 - pre 218 meseci
Na starom standardu za LPT port postoji 8 izlaza DATA LINIJE , 5 ulaza CONTROL LINIJE. Kod novog standarda i DATA linije mogu da se proglase ulaznim tako da ukupno imaš 13 pinova koji mogu biti ulazi, i 8 izlaza.
Pošto ti ne želiš da to radiš bez mikrokotrolera onda možeš i da tako uradiš ali vidiš da nema potrebe. PIC bi trebalo koristiti kada ti treba mnogo više linija, ali i tada se mogu koristiti SHIFT registri tako da nije dobra PRIMENA. Da bi koristio LTP port pod XP -om treba ti poseban dll.
2 sxy 4 ma shirt
 
Odgovor na temu

aty
Atila Deme
automaticar, konstruktor el. opreme
Senta

Član broj: 45925
Poruke: 47
*.sabotronic.co.yu.



+15 Profil

icon Re: programcic za jedan PIC20.05.2006. u 21:39 - pre 218 meseci
Umesto bilo kakvih mikrokontrolera mozes da koristis SHIFT registre.
CD4094 je univerzalac.

Drugo resenje je CD 4066 prekidac.
Press CTRL + Alt + Delete to Continue !!!
 
Odgovor na temu

buha18
mali mirkec
vratisinec

Član broj: 57193
Poruke: 161
*.net.t-com.hr.



+10 Profil

icon Re: programcic za jedan PIC30.05.2006. u 16:05 - pre 217 meseci
zahvaljujem na dosadasnjim odgovorima.

zelim nauciti sto sve mikrokontroler moze, i na koji nacin.

ono sa LPT portom je bio sam primjer-

primjetio sam da je sintaksa cpp. ili? (:

e sad, pitanje broj 2.

programcic koji ide u pic i radi sljedece:

kada na pinu X dode visoki napon, on pocinje brojiti, sve dok na istom pinu opet ne dode visoki napon.
ako je taj broj veci od, npr 10 na pinu Y se javlja log1, ilitiga visoki napon.
ako se to stavi u petlju, da stalno provjerava, kojom brzinom on to radi?? kojom frekvencijom?

moze jedan osnovni spoj gore primjera? i programcic, ili ispravak mojeg

int broj;
while(1){
broj=0;
if (BTFSC PORTB,X) broji;
if (broj>100)
{
BSF PORTB,Y
}
}

void broji{
broj++;
if !(BTFSC PORTB,X) broji;
return;
}


>>Mirkec<<
 
Odgovor na temu

lord Vader

Član broj: 57936
Poruke: 757
217.65.192.*



+9 Profil

icon Re: programcic za jedan PIC30.05.2006. u 23:02 - pre 217 meseci
Možeš li ti malo ovo da pojasniš? Šta hoćeš da se dešava? Ako ti je logička 1 na X ulazu da neki brojač broji, a ako je 0 da ne broji ili kako već? Paralelno sa brojanjem treba da proveravaš da li je brojač veći od 100? Ako jeste setuješ Y , da li ga ikada posle vraćaš na 0?

Malo se potrudi i potpuno definiši zadatak. Ja radim sa asemblerom, tako da ne mogu da ti pomognem oko C-a? Nadam se da nisi C zaluđenik. Što se tiče brzine ne može ti se ništa reći tačno dok ne definišeš pitanje, ali recimo da jedan red koda može da se izvrši za 100nS na PIC-u i 50nS na Atmelu (to su najveće moguće brzine). Naravno pričam za jeftine mikrokontrolere pošto i Microchip i Atmel imaju specijalizovane brze i nabudžene kontrolere. Ove možeš da nabaviš u većini prodavnica.
Ja radim na PIC-u i 100nS je max brzina na 18F seriji, a 200nS na 16F seriji mikrokontrolera. Dok kod Atmela noviji kontroleri serije AVR mogu da rade na 50nS, a stariji na 62,5 nS odnosno 20MHz i 16MHz. Atmel je jeftiniji kod nas i svi u seriji AVR imaju isto jezgro i instrukcije samo se menjaju periferije. Kod PIC-a imaš više serija 12F, 16F, 18F, prve dve imaju bankirane SFR registre pa tu može da bude zabune i 35 instrukcija, kod 18F ovaj problem je rešen i svaki ima mogućnost bootloader-a ali ih nem manjih od 28 pina.

Zaključak

Sve zavisi šta hoćeš, pošto hoćeš da učiš slobodno nastavi sa PIC-om i samo hrabro. Bukvalno svaki kontroler ima prednosti i mane, treba izabrati onaj koji se najviše uklapa u tvoju priču (nešto slično kao kod PC prgramskih jezika). Na kraju nije bitno toliko na kom kontroleru radiš, MNOGO je bitnije da znaš elektroniku i algoritme jako dobro. odnosno da imaš volje i dara za to.

Pitaj šta ti nije jasno.
2 sxy 4 ma shirt
 
Odgovor na temu

buha18
mali mirkec
vratisinec

Član broj: 57193
Poruke: 161
*.net.t-com.hr.



+10 Profil

icon Re: programcic za jedan PIC31.05.2006. u 07:15 - pre 217 meseci
ovako, znaci, brojac pocinje brojat kad se na ulazu X pojavi logicka jedinica. taj signal traje kratko, i opet se vraca u logicku 0. prestaje brojiti kad se opet na ulazu X pojavi logicka 1. i onda, ako je taj broj, koji izbroji, veci (ovo je samo primjer) od 100, na Y postavi logicku 1. ako je manji, na Y postavi logicku 0.

ajd napisi program u asembleru.
radio sam nesto malo u asembleru, tipa: u memorijske adrese 30-35 upisi pet brojeva. nadi najmanji broj i zapisi ga na adresu 45, te nadi najveci broj i zapisi ga na adresu 50.

int broj;
while(1){
broj=0;
if (BTFSC PORTB,X) broji;
if (broj>100)
{
BSF PORTB,Y
}
else BCF PORTB,Y;
}

void broji{
broj++;
if !(BTFSC PORTB,X) broji;
return;
}
>>Mirkec<<
 
Odgovor na temu

lord Vader

Član broj: 57936
Poruke: 757
217.65.192.*



+9 Profil

icon Re: programcic za jedan PIC01.06.2006. u 22:23 - pre 217 meseci
To bi trebalo ovako uraditi.

Uzmeš PIC-a koji ima tajmer i interapt na ivicu. To ima skoro svaki recimo 16F628.

Prvo inicijalizuješ interapt na uzlaznu ivicu signala pin X.
Sada obradjuješ interapt an ivicu tako da tada startuješ tajmer i postaviš neki fleg. Na sledeći ulazak proverom tog flega videćeš da li tajmer već broji i ako broji tada ga zaustavljaš i njegov broj ti je taj rezultat na osnovu koga treba postaviti stanje Y užizlaza. Posle toga gasiš tajmer i resetuješ fleg i to je sve.

Ako ti nešto stvarno treba napisaću ti kod ali ne mogu da ovako pišem otprilike. moraš da kažeš trajanja svih stanja šta znači 100 (čega) tj. u kojim jedinicama brojiš. Mora sve biti precizno da bi dobio kod. Objašnjenje je nadam se dovoljno dobro.

2 sxy 4 ma shirt
 
Odgovor na temu

grabik

Član broj: 32507
Poruke: 311
..nge86-129.btcentralplus.com.



+7 Profil

icon Re: programcic za jedan PIC02.06.2006. u 00:01 - pre 217 meseci
buha18 evo ti primer za mikroelektronika mikroC kompajler.

int brojac,brojac1;
char flag;
void main() {
PORTB = 0;
TRISB = 0b00000001; //pin RB0 je ulaz ostali izlazi
brojac=0;
brojac1=0;
flag=0;

do {

brojac1++; // broji stalno

if(PORTB.F0){ //provera RB0 pina
brojac++; //broji ako je ulaz HI
}

if(brojac>100){
brojac=0;
brojac1=0;
flag=1;
}

if(flag){ //provera da li je brojac izbrojao do 101
PORTB.F1=1; //ako jeste RB1 postaje HI
if(brojac1>50){ // ovaj deo drzi odredjeno vreme pin na visokom nivou
PORTB.F1=0;
brojac1=0;
flag=0;
}
}

} while (1);
}//~!



Broji ako je vrednost na RB0 na visokom nivou. Ako je vrednost brojaca veca od sto flag postaje jedan i RB1 pin ide na HI i tu ostaje dok brojac1 ne izbroji do 50 neovisno da li je RB0 na visokom nivou ili ne. Ne koristi se prekid, pic se vrti stalno u petlji i ispituje stanje na pinu i broji.


Skini sa njihovog sajta kompajler, otvori novi projekt izaberi pic koji ima portb i upisi frekvenciju na kojoj ce raditi pic , kopiraj gornji sors i kompajliraj i isprobaj na pic-u.




[Ovu poruku je menjao grabik dana 02.06.2006. u 01:58 GMT+1]
 
Odgovor na temu

grabik

Član broj: 32507
Poruke: 311
..nge86-129.btcentralplus.com.



+7 Profil

icon Re: programcic za jedan PIC03.06.2006. u 00:55 - pre 217 meseci
Sada sam procitao drugi puta i shvatio sta se trazi:) barem mislim da sam shvatio:)

Prvi nacin izvesti sa CAPTURE/COMPARE/PWM MODULES.
Znaci treba ti pic koji ima CAPTURE/COMPARE/PWM MODULES.

Drugi nacin koji je naveo lord Vader je jednostavniji setujes RB0 pin da generise prekid
na svaku rastucu ivicu, sa prvom opkidnom ivicom startujes neki od tajmera u picu a sa drugom ivicom koja naleti ocitas stanje iz tajmera , mozes prvo da zaustavi tajmer a i nemoras manje precizno nego prvo sa capture/compare mode ali zato se moze izvesti na skoro svakom pic-u.

Ili varijacija na drugi nacin kod prve ivice i prekida sa pina RB0 upises u tajmer svoju vrednost(100) i ako se desi prvo interapt iz tajmera, znaci da je zadana vrednost prekoracena podizes taj tvoj pin y na visoki nivo i drzis odredjeno vreme , signal je duzi nego sto tebi treba ,a ako se desi prvo da dobijes interapt sa RB0 pina znaci signal je kraci od ocekivanog i jednostavno ponovno ucitas vrednost u tajmer i cekas sta ce se desiti prvo, ako je prekid sa tajmera dizes y pin na visi nivo ili ako je interapt sa RB0 pina cekas dalje dovoljno "dug" signal na pinu(nadam se da je opis shvatljiv).

I trece softversko najmanje precizno.

Ako me popusti gripa mozda i napisem neki primercic u c-u za drugi nacin ako si jos zainteresovan.
Da li ti to treba u edukativne svrhe ili ?
I koji konkretno pic i kompajler koristis ili mislis koristiti?

 
Odgovor na temu

lord Vader

Član broj: 57936
Poruke: 757
217.65.192.*



+9 Profil

icon Re: programcic za jedan PIC03.06.2006. u 06:43 - pre 217 meseci
Ne verujem da je njemu toliko bitna preciznost. Ma najbolji je način što više koristiti hardverske module, tj najbolje je capture, ali nema ga svaki kontroler. Ovaj koji sam ja naveo PIC16F628 ga ima a košta oko 300 din. Postoji osiromašena verzija (što se tiče memorije) koja ima 1K FLASH-a, PIC16F627, ali sve periferije su identične, ona je verovatno još jeftinija. Oba su 18 pinci. Softversko poliranje linije treba raditi samo tamo gde se ne mogu koristiti interapti iz bilo kog razloga. Jako ej redak slučaj da zbog nečega ne možete koristiti interapte, to se skoro nikada ne dešava.
Ja , inače, izvlačim 101% iz hardverskih modula, a softverski radim samo ono za šta ne postoji hardverska periferija. Čak mislim da je bolje uzeti mikrokontroler koji ima tu periferiju nego raditi sa jeftinijim koji nema pošt je razlika u ceni minimalna.
2 sxy 4 ma shirt
 
Odgovor na temu

grabik

Član broj: 32507
Poruke: 311
..nge86-129.btcentralplus.com.



+7 Profil

icon Re: programcic za jedan PIC03.06.2006. u 11:11 - pre 217 meseci
Pre je naveo LPT port u kome treba da se nadgleda vise linija:) , pa onda jedna, kolika preciznost, da li hoce nesto da meri ili da ima samo indikaciju da se nesto dogadja .......
 
Odgovor na temu

buha18
mali mirkec
vratisinec

Član broj: 57193
Poruke: 161
*.net.t-com.hr.



+10 Profil

icon Re: programcic za jedan PIC04.06.2006. u 10:50 - pre 217 meseci
meni nije bitna preciznost u ovom slucaju.
posto sam poceo sa programiranjem mikrokontrolera i opcenito sa mikrokontrolerima raditi, zelio sam neki primjer, jer mi je puno lakse pomocu primjera shvatiti kak sve funkcionira.

napravio sam i AllPIC programator, ali ne radi.
prvo sam za izvor napajanja koristio napajanje racunala (-12V i 3.3V), ali mi je nakon prikljucenja na serijski port racunala napajanje pocelo zujati, a napon je nestao.
nakon toga sam nasao neki adapter, kojemu je na plocici bilo navedeno da je izlazni napon 15V. ja sam to sve prikljucio, ali se dogodilo nesto strasno... (:
nije vec bilo na mclr 13V! jedno vrijeme je davao neke cudne vrijednosti, oko 30V!!!

nakon kaj sam provjerio napon na izlazu adaptera, malo sam se zacudio, koji je bio 20.8V! )):

5V imam, onih -0.7 imam, ali nemam 13V.

pa ako netko moze pomoci, ili ako neko ima ideju kaj je greska, neka pomogne.
>>Mirkec<<
 
Odgovor na temu

lord Vader

Član broj: 57936
Poruke: 757
217.65.192.*



+9 Profil

icon Re: programcic za jedan PIC05.06.2006. u 13:10 - pre 217 meseci
Brate imaš temu za to u TOP sekciji, tamo pitaj šta god te zanima.
2 sxy 4 ma shirt
 
Odgovor na temu

buha18
mali mirkec
vratisinec

Član broj: 57193
Poruke: 161
*.net.t-com.hr.



+10 Profil

icon Re: programcic za jedan PIC05.06.2006. u 15:48 - pre 217 meseci
ma jesam i tamo postavio.
iako nema tih 13 volti, uspio sam isprogramirati pic. he he
niti sam ne znam kako, ali nema veze...

evo, imam jedan novi zadatak

pocetak... problem:
potrebno je "limitirati" broj okretaja motora. motor dobiva iskru preko platina i
bobine. broj okretaja motora je maksimalno 10 000 u minuti.
e sad, kad bi broj okretaja dosao do, npr 6 000 o/min, kratko bi se spojilo
napajanje bobine sa ramom (masom).

za ovaj program, ja bi koristio pic16f84a, te bi koristio ugradeni interupt.
PortB<7:4> interrupt-on-change -> pretpostavljam, da pokrece interupt kad se
promjeni stanje na jednom od pinova od rb7 do rb4.

znaci

Code:

int brojac;
brojac=1500;
char z=0;

void postavi_JEDINICU_NA_RB1(){
 brojac=0;
 do
 {
  portb.f1=1;
  brojac++;
 }
  while(brojac<50)
  portb.f1=0;


on RB7 change {
 if (rb7==1) 
    {
        if (z==1) z=0;
        if (brojac<NEKI_BROJ) postavi_JEDINICU_NA_RB1();
    }
 if (rb7==0) 
    {
        brojac=0;
        Z=1;
    }
}
void main(){
do{
if (z==1) brojac++;
}while(1);
}


>>Mirkec<<
 
Odgovor na temu

grabik

Član broj: 32507
Poruke: 311
..nge86-129.btcentralplus.com.



+7 Profil

icon Re: programcic za jedan PIC06.06.2006. u 00:38 - pre 217 meseci
Noviji pic-evi se programiraju i sa nizim naponom od 13v.

Nije li bolje i jeftinije napraviti ogranicenje broja obrtaja bez mikrokontrolera.

Okacicu ti primer za hi-tech kompajler, to je ono u biti sto si trazio pre.
 
Odgovor na temu

grabik

Član broj: 32507
Poruke: 311
..nge86-129.btcentralplus.com.



+7 Profil

icon Re: programcic za jedan PIC06.06.2006. u 11:36 - pre 217 meseci
#include <pic.h>

#define izlaz RB1
#define ogranicenje 39 //sa ukljucenim prescalerom od 256 to je oko 10ms
unsigned char vrednost_tajmera;




void interrupt //pocinje rutina za prekid
intt(void) {

if(T0IF){ //obradjuje tajmerski interapt
T0IF = 0; // resetuje TMR0 interrupt
TMR0=ogranicenje; //upisuje vrednost 39

}

if( INTF){ //obradjuje RB0/INT interapt
INTF=0; //resetuje vanjski interapt RB0/INT
vrednost_tajmera=TMR0; //ocitava tajmer
TMR0=0; //brise tajmer

}

} //zavrsava rutina za prekid




void main (void){
vrednost_tajmera=ogranicenje;
TMR0=ogranicenje;
PORTB=0b00000000;
TRISB = 0b00000001; //RB0 je ulaz ostali pinovi RB1...RB7 izlazi
OPTION=0b11000111; //prescaler je 256,RB0/INT generise prekid na uzlaznu ivicu
INTCON = 0b10110000; // ukljucen vanjski interapt RB0/INT, TMR0 interapt...



while(1){

asm(" clrwdt"); //brise watchdog timer ako je ukljucen

if(vrednost_tajmera<ogranicenje){ // ako je brzina ukljucivanja platina kraca od 10 ms
izlaz=1;
}
else{
izlaz=0; //brzina ukljucivanja platina je duza od 10ms
}

}
}


Prescaler ti je setovan na 256 sto znaci da ako pic radi na 4MHz ...... da pic interno radi na 1MHz odnosno jedan klok je 1uS.
Pic treba da napravi 256 klokova interno da bi se stanje brojaca povecalo za jedan.

Sto za vrednost u tajmeru od 39 dodje 256X39=9984uS ili 9.9mS.
Ako bi uzeli da je 6000o/min = 100 o/sek = svaki obrtaj vratila iznosi 10ms.

Ti za taj motor moras da izracunas koliko vreme protekne izmedju dva aktiviranja platina na 6000o/min i tu vrednost upisi umesto 39(koliko taktni motor koliko cilindara itd).

Na svaku rastucu ivicu koja se pojavi na RB0 pinu generise se interapt koji brise tajmer i ocitava isti (vrednost_tajmera).
Ako tajmer prekoraci 256x256=65536uS ili 65.5 mS generise interapt, kako je pocetna vrednost od 39 vec upisana u tajmer on generise interapt na svakih 55ms(65-10),kod generisanja interapta na tajmeru upisujeno vrednost od 39 u tajmer.

U glavnoj petlji usporedjumo vrednost tajmera koja je ocitana kod generisanog vanjskog interapta sa nasom vrednoscu od 10mS(39). Ako je vrednost manja od 10mS podizemo nivo na visoki nivo(prekoracenje zadane brzine obrtanja), ako je vrednost veca spustamo nivo na RB1 na niski nivo(prekoracenje se nije desilo).

Ako impulsi koji dolaze na RB0 dolaze sporije od 55ms , motor se vrti vrlo polako tajmer generise interapt i upisujemo vrednost od 39(10mS) u tajmer.


Mislim da znas da nemozes direkto sa platina da dovodis signal koji je 12V na pic ,treba ti optokoupler ili neko drugo resenje. Isto tako pic je osetljiv na smetnje iz napajanja i ulaza koje mogu da resetuju ili da uzrokuju druge probleme.

Prikačeni fajlovi
 
Odgovor na temu

buha18
mali mirkec
vratisinec

Član broj: 57193
Poruke: 161
*.net.t-com.hr.



+10 Profil

icon Re: programcic za jedan PIC06.06.2006. u 16:06 - pre 217 meseci
a cime opce kompajliras program??
kojim programom dobis .hex fajl??

na pic stavljam pomoci ICProg, a probao sam kompajlirati sa mikroC kompajlerom, ali mi nikako ne uspjeva... ):

ja sam mislio to ovako registrirati, promjenu stanja...

na bazu tranzistora bd135 ili bd139 vezati vodic koji ide do bobine-platine. emiter spojiti na masu, a na kolektor 7805 (sa kondenzatorima), 1k otpornik, pa PIC (pin koji registrira promjenu), nozica kolektora.

za napajanje 7805 sa kondenzatorima nesto veceg kapaciteta.
>>Mirkec<<
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: programcic za jedan PIC

Strane: 1 2

[ Pregleda: 8108 | Odgovora: 29 ] > FB > Twit

Postavi temu Odgovori

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