TODOPIC
Simuladores, editores de PCB, etc => Simuladores de circuitos => Proteus ISIS => Mensaje iniciado por: c4chus en 10 de Septiembre de 2009, 14:06:27
-
HOla a todoss!!! saludos desde México!!! :mrgreen:
Pues les comento, y espero me puedan ayudar!!! :O estoy generando un programa simple de generación de un pulso alto y uno bajo cada 4 us, según yo está bien programado!!!(en ccs), pero a la hora de simularlo en proteus 7.2 sp2 :S no veo los 4 us en el osciloscopio :O!!!...
Mi pregunta es :s el problema es el simulador???... proteus no puede simular us's ??
aki les dejo el código para ver si no soy yo el problema :S jajaja de antemano muchas gracias!!!! :-/
#include <16f877a.h>
#fuses HS, NOWDT, PUT, NOPROTECT, NOLVP
#use delay(clock = 4000000)
#BYTE portb = 6
#bit rb0 = 6.0
#bit rb1 = 6.1
#use fast_io(b)
#int_rtcc
void isr_timer() {
output_toggle(pin_b0);
}
void main () {
set_tris_b(0);
enable_interrupts(int_rtcc);
enable_interrupts(global);
set_rtcc(252); // timer0 overflow = 4 * 4/4000000 = 4us por lo tanto valor en timer = 256 - 4 = 252
setup_timer_0(rtcc_internal|rtcc_div_8);
while(1);
}
-
Lo que pasa es que no estas teniendo en cuenta tooodas las instrucciones que realiza CCS para salvaguardar los registros al ocurrir la interrupción ;-)
Saludos!
-
Y además de lo que comenta Suky...
- Cada instrucción toma 1us al PIC y tú quieres hacer un toggle cada 4us... el pic simplemente no puede hacer tanto en tan poco tiempo.
- Y aún cuando el pic pudiera ser rápido... cuando entras a la subrutina de atención a interrupción no recargas el valor de tmr0 con 252.
Debes correr a más MHz el pic para poder controlar todo en tiempo y forma.
Para 4us lo mejor es no usar interrupciones y hacerlo en el while(1).
while(1) //2us en el goto en ASM
{
output_low(pin_b0); //1us
delay_cicles(3); //3us
output_high(pin_b0); //1us
delay_cicles(1); //1us
}
-
Por ejemplo la única manera de lograr un toggle cada 4us exactos con oscilador de 4MHz:
while(1){
output_high(PIN_B0);
delay_cycles(3);
output_low(PIN_B0);
delay_cycles(1);
}
Saludos!
-
si quieres saber que es lo que te hace consumir tiempo, corre el programa (desde el ISIS) linea por linea y CTRL+D para ver el asm de cada linea en C
-
:shock: Cada día aprendo más :mrgreen: Esa no la sabia, gracias Pali ;-)
-
yo tampoco la sabía :shock:
grande pali!
-
de nada amigos, jeje yo siempre sigo aprendiendo con el proteus, lo último que descubrí son los breakpoints por rangos condicionales, eso ahorra mucho tiempo de trabajo.
-
que? :shock: :shock:
y como se hace? :mrgreen:
-
Eso, eso cuenta!! :D Hay que abrir un hilo con tips para proteus :-/
-
Yo he usado los breakpoints normalitossss ...
(http://img34.imageshack.us/img34/8128/breakpoint.png)
Como son los otros?
-
hey muchas gracias a todossss :)!!!! aumentaré el reloj y probaré de nuevo :)!!!!... ufff muy buenos tipsss :D :mrgreen:
-
No solo hay que aumentar el reloj !!! Hay que tener otras cosas en cuenta ya mencionadas anteriormente.
Saludos!