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

PIC16F84a i koracni motor

[es] :: Elektronika :: Mikrokontroleri :: PIC16F84a i koracni motor

[ Pregleda: 3461 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

shpiki
Student
Novi Sad

Član broj: 50342
Poruke: 1651



+62 Profil

icon PIC16F84a i koracni motor23.11.2009. u 23:15 - pre 174 meseci
Pozdrav svima.
htedoh pokrenuti koracni motor pomocu PIC.a i imam problem. Naime, motor "zakuca" na jednom mestu, ne znam gde je problem, okacicu source i shemu
i molio bih za pomoc. Program je pisan u mikroC.

Code:
unsigned char i=0;

void interrupt() {

if(PORTB.B0){
   if(INTF_Bit){
      INTCON=0b10010000;   //ukljucuje TMR0 (unutrasnji clock)
      TMR0=65;
      if(T0IF_Bit){
         if(i<=3){
            PORTA=2^i;
            i++;
            }
         i=0;
      }
   }
   INTF_Bit=0;
   T0IF_Bit=0;
   INTCON=0b10110000;     //iskljucuje TMR0
}
}

void main() {
OPTION_REG=0b00000000;  //pull-up otpornici enabled; prescaler 1:2
INTCON=0b10010000;      //global interrupt ukljucen; RB0/int ukljucen
TRISA=0;                //svi izlazni
TRISB=0b00000001;       //RB0 ulazni, ostali izlazni
PORTA=0;                // pocetno stanje
PORTB=0;                // jednako 0

while(1) {}

}


Unapred hvala!
There are only 10 types of people in the world:
those who understand binary, and those who don't.
Prikačeni fajlovi
 
Odgovor na temu

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
93.86.200.*



+321 Profil

icon Re: PIC16F84a i koracni motor23.11.2009. u 23:47 - pre 174 meseci
Kao prvo, ne možeš da kačiš step motor direktno na kontroler. Možda u PROTEUS-u i može (nisam probao), ali u realnim uslovima nikako.
Kao drugo, ne treba ti onaj externi oscilator u simulaciji; obriši to i u properties upiši frekvencu na kojoj ti radi PIC.
Kao treće, imaš sasvim dovoljno instrumenata u PROTEUS-u da možeš da otkriješ gde je problem.
Kao četvrto, prelažem da pročitaš PDF-ove za L297 i L298; naučićeš mnogo, veruj mi.
Kao peto, ne vidim zašto za test koristiš TMR0? Imaš verovatno neku komandu "pauza" pa upotrebi nju. Da sam na tvom mestu za početak bih testirao sa pojedinačnim kombinacijama i pauzama izmedju njih.

Pozdrav.
Sinisha

 
Odgovor na temu

Branislav83
Branislav83
Lmb Technologie
Nis

Član broj: 180247
Poruke: 43
*.adsl-a-1.sezampro.yu.



Profil

icon Re: PIC16F84a i koracni motor24.11.2009. u 17:14 - pre 174 meseci
Ovo sam radio nekad ranije za neki seminarski zadatak. Nije nesto narocito, ali je zgodno za ucenje. Obrati paznju kako sam pokrenuo motor, a ostalo nemoj da te brine (nije toliko bitno).
Imas kompletan MikroC projekat i simulaciju. Kasnjenje je radjeno sa ugradjenim rutinama za kasnjenje u MikroC-u.
Pozzz



sema i kod
 
Odgovor na temu

shpiki
Student
Novi Sad

Član broj: 50342
Poruke: 1651



+62 Profil

icon Re: PIC16F84a i koracni motor26.11.2009. u 22:03 - pre 174 meseci
Zahvaljujem na odgovorima, pronasao sam gresku, ako nekog interesuje, mogu da okacim novi kod.

@Branislav83:
primer ti je super, dosta stvari na jednom mestu! Hvala jos jednom!

Pozdrav!
There are only 10 types of people in the world:
those who understand binary, and those who don't.
 
Odgovor na temu

Branislav83
Branislav83
Lmb Technologie
Nis

Član broj: 180247
Poruke: 43
*.com
Via: [es] mailing liste



Profil

icon Re: PIC16F84a i koracni motor27.11.2009. u 12:18 - pre 174 meseci
>
Pa postavi, što da ne. Možda još neko bude imao sličan problem.
 
Odgovor na temu

shpiki
Student
Novi Sad

Član broj: 50342
Poruke: 1651



+62 Profil

icon Re: PIC16F84a i koracni motor27.11.2009. u 13:20 - pre 174 meseci
ovako:
-prvo: prescaler: po mojim podesavanjima, faza bi se menjala za nekih cca. 190nS
-drugo: PORTA=2^i u C-u ne radi, ^ je u stvari XOr operacija
(ako neko zna kako da odradim x^n u C neka javi :) )
-trece: isao sam If u If petlju (sto bi mozda radilo na nekom boljem PIC.u), na 84a prebrzo punim stack.
znaci, treba prvo da proverim da li se desio interupt na RB0 (pritisnut taster) a tek onda u drugoj If petlji
(van ove prve) proveravam da li se tajmer napunio, itd..

evo koda:
Code:
unsigned char i=0;

void interrupt() {

//ako se desio interrupt na RB0
//postavi vrednosti za TMR0 i postavi T0IE na 1
//(TMR0 Overflow Interrupt Enable bit)
if(INTF_Bit){
     INTCON=0b10111000;
     TMR0=22;
     INTF_Bit=0;
     }

//ako se timer napunio i postavio T0IFlag na 1
//ukljucuje odg pin PORTa B (zavisi od i)     
if(T0IF_Bit){
     T0IF_Bit=0;
          switch(i){
          case 0: PORTA=1;  break;
          case 1: PORTA=2;  break;
          case 2: PORTA=4;  break;
          case 3: PORTA=8;  break;
          }
          
 i++;
if(i>3) i=0;

T0IF_Bit=0;
TMR0=22;
          
}
}

void main() {
OPTION_REG=0b00000111;   //prescaler 1:256
INTCON=0b10010000;
TRISA=0;
TRISB=0b00000001;

PORTA=0;
PORTB=0;
while(1) {}
}


Hvala kolegi zivadin_despot na pomoci!

Pozdrav!
There are only 10 types of people in the world:
those who understand binary, and those who don't.
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: PIC16F84a i koracni motor

[ Pregleda: 3461 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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