desesperada necessitat d'ajuda urgent amb microcontroladors

V

V

Guest
Necessito urgent amb un problema que no puc entendre.Sóc una principiant així que podeu imaginar que vaig fer grans errors, però si us plau que
m'ajudi perquè tinc un examen en un parell de dies

i va escriure un programa en mikroc, que té un caràcter i comença per USART 4 leds (en realitat hi ha 2 motors, sinó per la senzillesa que eliminen i circuit).i utilitza interrupcions i retards.
el problema és que si el límit actual a un valor molt baix, fins i tot dels indicadors LED no s'encenen, però parpelleja rapiddly d'acord amb el meu programa.pel que la feina ben.
però si l'augment actual, que es comporten de manera estranya.i la premsa (com és uts controlada) a l'esquerra i segueix a l'esquerra.el mateix és de dreta.i de premsa, que
s'activa a l'atzar esquerra,
i després una mica enrere per la qual cosa el motor s'atura,
a continuació, de nou ..No he vist un patró perfecte, només que la majoria de les vegades (no sempre) l'esquerra i la dreta
s'activen en el moment adequat, però es queden per sempre.
No crec que es tracta d'un problema de RF (hi ha mòduls RF entre PC i PIC 16F877) perquè en l'actualitat molt baixa (<50 mA) que parpellegen com cal.
Crec que el programa és bo, perquè en Proteus obres

pot ser que no és filtrada suficient?però em posi 2 condensadors al 7805, 2 en l'oscil lador ..

si us plau, una vegada més, que
m'ajudi amb una idee, alguna cosa.almenys per saber la causa, si no per resoldre'l.

 
char byte_read, i = 0, bandera = 0;
sense signar a curt cnt = 0;
# Defineix
Dir PORTD
# Defineix davant 0b00000001
# Defineix esquerra 0b00000010
# Defineix enrera 0b00000100
# Defineix dret 0b00001000
# Defineix Atura 0b00000000
# Defineix backleft 0b00000110
# Defineix backright 0b00001100
# Defineix frontleft 0b00000011
# Defineix frontright 0b00001001

interrompre buit ()
(
PIR1.TMR1IF = 0;
if (PIR1.RCIF)
(
byte_read = UART1_READ ();
bandera = 1;
)
Interrompre final)void main ()
(
j curt sense signar;
TRISD = 0;
INTCON.PEIE = 1;
T1CON = 1;
PIE1.RCIE = 1;
PIE1.TMR1IE = 1;
INTCON.GIE = 1;

UART1_Init (1200);

while (1)
(
if (bandera == 1)
(switch (byte_read)
(
cas "W": (
Dir = front;
bandera = 0;
delay_ms (420);
break;
)
case 'S': (
Dir = esquena;
bandera = 0;
delay_ms (420);
break;
)

...)
)
if (bandera == 0)
Dir = Atura;
)
)
Ho sentim, però necessita accés per veure aquest arxiu adjunt

 

Welcome to EDABoard.com

Sponsor

Back
Top