Interrupt problemos

A

adalah

Guest
Hi all ..
I need some apie mano kodas padėti.
tikiuosi visi nariai galėtų man padėti išspręsti problemas ..
I'm using:

MikroC,
PIC16F877A,
3 Siłownik.Citata:# define leftsensor porta.f0

# define rightsensor porta.f2

# define pradėti porta.f4

# define Reset porta.f5

# define servo1 portb.f0

# define servo2 portb.f2

# define servo3 portb.f4int i, cnt;tuščia nutraukti (tuščia)

(

cnt ;

if (CNT == 200)

(

cnt = 0;

portb = 0xFF;

)INTCON = 0x20;

)tuščia LCDfoward ();

tuščia walkfoward ();

tuščia servo1pos3 ();

tuščia servo3pos1 ();/ / Pagrindinis programos ...void main () (

TRISA = 0xFF;

TRISC = 0;

PORTA = 0;

PORTC = 0;while (1) (

if (start == 0) (

walkfoward ();

))

/ / return;

)
tuščia walkfoward (tuščia)

(LCDfoward ();

servo1pos3 ();

delay_ms (1000);

servo3pos1 ();

delay_ms (1000);

)

char * tekstas = "Perkelti";

void LCDfoward (void) (

TRISC = 0;

Lcd_Init (& PORTC);

Lcd_Cmd (Lcd_CLEAR);

Lcd_Cmd (Lcd_CURSOR_OFF);

Lcd_Out (1, 6, tekstas);

Lcd_Out (2, 5 ", nurodantį į");

}//~!
tuščia servo1pos3 (tuščia)

(

OPTION_REG = 0b10000000 / / priskyrimas Prescaler į TMR0

TRISB = 0; / / PORTB yra išėjimas

PORTB = 0xFF / / inicjalizacja PORTB

INTCON = 0xA0 / / Įjungti TMRO pertraukti

cnt = 0; / / inicjalizacja CNTdaryti

(

if (CNT == 20) (

PORTB.f0 = 0;

cnt = 0;

delay_ms (1000); / / Toggle PORTB LED

)

) While (1);

}//~!
tuščia servo3pos1 (tuščia)

(

OPTION_REG = 0b10000000 / / priskyrimas Prescaler į TMR0

TRISB = 0; / / PORTB yra išėjimas

PORTB = 0xFF / / inicjalizacja PORTB

INTCON = 0xA0 / / Įjungti TMRO pertraukti

cnt = 0; / / inicjalizacja CNTdaryti

(

if (CNT == 10) (

PORTB.f4 = 0; / / Toggle PORTB LED

cnt = 0;

delay_ms (1000);

)

) While (1);

}//~!
 
Hi adalah,

Manau, niekada palikite o-------------------------------------------------- --------
tuščia servo1pos3 (tuščia)
(
OPTION_REG = 0b10000000 / / priskyrimas Prescaler į TMR0
TRISB = 0; / / PORTB yra išėjimas
PORTB = 0xFF / / inicjalizacja PORTB
INTCON = 0xA0 / / Įjungti TMRO pertraukti
cnt = 0; / / inicjalizacja CNT

daryti
(
if (CNT == 20) (
PORTB.f0 = 0;
cnt = 0;
delay_ms (1000); / / Toggle PORTB LED
)

) While (1); <<<<<<<<<<<<<========================!!!!!!! !!!!!!!!!!!!!!!!!!!!

}//~!
-------------------------------------------------Gomez

PS.
yra blogo coding stilius aikštelė

 
Ačiū Gomez ..

Ar galite man padėti pataisyti kodavimo ..
I'm new apie tai.
tiesiog pabandykite ir klaida ..

 
Ne tai ne mano darbas

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Mirkčiojimai" border="0" />

)
Tai buvo tiesiog draugiškas užuomina peržiūrėti savo kodą dar kartą.
Geriausia praktika yra studijų kodą iš kito programuotojas.

Sėkmės!
Gomez

 
kitiems ..
PLZ help me ..

Ar yra koks nors sprendimas sukurti Siłownik kampas ..?
mano problema
I used 3 Siłownik.
kiekvieno servo turės 3 kampą.

dabar,
turėjau pabandykite naudoti nutraukti,
tačiau jis negali veikti tinkamai ..

 
Try this

-----------------------------------------------
unsigned char angle2time_u8 (unsigned char angle_u8);

statinis unsigned char Servo1Angle_u8 = 0;
statinis unsigned char Servo2Angle_u8 = 0;
statinis unsigned char Servo3Angle_u8 = 0;

tuščia timerirq_100us_v (tuščia)
(
statinis unsigned char Timer_u8 = 200;
statinis unsigned char Servo1_High_u8 = 0;
statinis unsigned char Servo2_High_u8 = 0;
statinis unsigned char Servo3_High_u8 = 0;

if ( Timer_u8> = 200) / / 20ms
(
Timer_u8 = 0;

Servo1_High_u8 = angle2time_u8 (Servo1Angle_u8);
Servo2_High_u8 = angle2time_u8 (Servo2Angle_u8);
Servo3_High_u8 = angle2time_u8 (Servo3Angle_u8);
Servo1_Portpin = 1;
Servo2_Portpin = 1;
Servo3_Portpin = 1;
)
else if (Timer_u8> = Servo1_High_u8)
(
Servo1_Portpin = 0;
)
else if (Timer_u8> = Servo2_High_u8)
(
Servo2_Portpin = 0;
)
else if (Timer_u8> = Servo3_High_u8)
(
Servo3_Portpin = 0;
)

)unsigned char angle2time_u8 (unsigned char angle_u8)
(
/ / Funkcija konvertuoti savo servo kampą PWM metas
)

void main (void)
(
init_v (); / / init uostų ir laikmačio

while (1)
(
/ / Get your kampu ir nustatyti ServoXAngle_u8
)

)
----------------------------------

Gomez

 
Tai CCS .. komanda?
Esmės
Aš naudoju mikroC ..

atsiprašau, jei nėra nurodoma, kad prieš ..
dabar,
Aš tiesiog pabandykite jį pakeisti mikroC komandą.

 
Tai ANSI-C ir jūsų sudarytojas neturėtų jokių problemų.Jūs ką tik apibrėžti savo uosto kaiščių.

# define Servo3_Portpin portb.f0
.....Gomez

 
Aš jau nustatyti uosto.
bet dabar
yra problemų šiuo metu:

init_v ();

Ką komandos turėčiau?.
Atsiprašau už mano klausimą ..

 
init_v () ist už tą dalį, kuri inits jūsų rezervavimo sistema.Bet aš pamiršau įterpti prototipas, ši funkcija.

Pridėti tiesiog

void init_v (void);

pradžioje ir užpildyti šią funkciją su jūsų tinkamai paleidimo kodas

tuščia init_v (tuščia)
(
Citata:OPTION_REG = 0b10000000 / / priskyrimas Prescaler į TMR0

TRISB = 0; / / PORTB yra išėjimas

PORTB = 0xFF / / inicjalizacja PORTB

INTCON = 0xA0 / / Įjungti TMRO pertraukti
 
Ir tai veikia?

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Mirkčiojimai" border="0" />
Gomez

 
Ačiū Gomez ..
I'm so sorry, kad aš negaliu atsakyti į jūsų pranešimą anksčiau.
Turėjau problemų su mano kompiuteris ..

Aš jį išbandyti ir pranešti Jums vėliau ..
ačiū ..

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />

Parašytas po 13 minučių:Atsiprašome Gomez,
Aš tikrai supainioti ir ne idėja, kaip rašyti.
Tai kodą, kad aš pabandyti.

Citata:# define servo1 portb.f1

# define servo2 portb.f2

# define servo3 portb.f3
unsigned char angle2time_u8 (unsigned char angle_u8);statinis unsigned char Servo1Angle_u8 = 0;

statinis unsigned char Servo2Angle_u8 = 0;

statinis unsigned char Servo3Angle_u8 = 0;tuščia timerirq_100us_v (tuščia)

(

statinis unsigned char Timer_u8 = 200;

statinis unsigned char Servo1_High_u8 = 0;

statinis unsigned char Servo2_High_u8 = 0;

statinis unsigned char Servo3_High_u8 = 0;if ( Timer_u8> = 200) / / 20ms

(

Timer_u8 = 0;Servo1_High_u8 = angle2time_u8 (Servo1Angle_u8);

Servo2_High_u8 = angle2time_u8 (Servo2Angle_u8);

Servo3_High_u8 = angle2time_u8 (Servo3Angle_u8);

servo1 = 1;

servo2 = 1;

servo3 = 1;

)

else if (Timer_u8> = Servo1_High_u8)

(

servo1 = 0;

)

else if (Timer_u8> = Servo2_High_u8)

(

servo2 = 0;

)

else if (Timer_u8> = Servo3_High_u8)

(

servo3 = 0;

))

tuščia init_v (tuščia)

(OPTION_REG = 0b10000000 / / priskyrimas Prescaler į TMR0

TRISB = 0; / / PORTB yra išėjimas

PORTB = 0xFF / / inicjalizacja PORTB

INTCON = 0xA0 / / Įjungti TMRO pertraukti)unsigned char angle2time_u8 (unsigned char angle_u8)

(

/ / Funkcija konvertuoti savo servo kampą PWM metas

)void main (void)

(

init_v (); / / init uostų ir laikmačiowhile (1)

(

/ / Get your kampu ir nustatyti ServoXAngle_u8

))
 
Nesu padaryti visą darbą už jus.
Kai kurios dalys yra užpildyti su savo kodą, nes nežinau jūsų poreikių.

1.Funkcija tuščia init_v (tuščia) yra užpildyti naudojant kodą inicijuoti savo kontrolierius.
- Laikrodžiai
- Uostų
- UART
- Pertraukia
- Laikmatis su 100Ls!
tt

Tai priklauso nuo tipo kontrolierius Microchip, Atmel, Renesas, kas kada ....2.Funkcija tuščia unsigned char angle2time_u8 (unsigned char angle_u8) yra užpildyti kodu apskaičiuoti metas savo servo PWM.
http://www.ermicro.com/blog/?p=771 priemonės
0.7ms į 1ms PWM laikas virsta CW
1.7ms iki 2ms PWM laikas virsta KO
1.5ms PWM laikas virsta centras
Taigi, tau reikia perdavimo funkcija apskaičiuoti pats laikas, nes

Pats laikas = f (Stebėjimo kampas)
90 ° = centro =>
0-180 ° => 0,7-2ms => 7-20

0 <= angle_u8 <= 180
7 <= angle2time () <= 203.
Citata:

while (1)

(

/ / Get your kampu ir nustatyti ServoXAngle_u8

)
 
Atsiprašau mano draugai, nes nėra atsakymo į šią temą.
iš tikrųjų,
šios problemos, susijusios su mano ankstesnį postą.

ftopic342783.html

ką aš noriu daryti yra sukurti 3 kampus už 1 servo variklis
kurie -90,0,90.
mano projektas
Yra 3 servo variklis.pavyzdžiui
servo1 bus pasukti 90,
servo3 taps -90,
servo1 taps -90,
servo2 bus pasukti 90,Man teko bandyti naudoti pertraukia,
bet vis dar negaliu sėkmę.

 

Welcome to EDABoard.com

Sponsor

Back
Top