PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Zeiten



Emotionslos1
19.04.2007, 06:03
hallo

ich habe einen ATmega8535 und ein grosses problem

meine timer funktionieren nicht richtig. und mit den wait befehlen ist es das gleiche:(

Ich habe einen 8mhz quarz. wenn ich $crystal=8000000 verwende dauert waitms 1000 ca.2-3sekunden

wenn ich $crystal=950000 verwende funktionieren die wait befehle richtig aber nicht die timer

hate schon mal jemand ein solches problem? ich bin rat los
danke für die hilfe im voraus

Jon
19.04.2007, 06:17
Wie weit ist der Quarz vom µC weg?
Hast du die richtigen Kondensatoren an den Quarz angeschlossen?

jon

jar
19.04.2007, 06:38
hallo
ich habe einen ATmega8535 und ein grosses problem
meine timer funktionieren nicht richtig. und mit den wait befehlen ist es das gleiche:(
Ich habe einen 8mhz quarz. wenn ich $crystal=8000000 verwende dauert waitms 1000 ca.2-3sekunden
danke für die hilfe im voraus

ist bei mir auch fast so, interen Clock 8MHz dauert bei wait zu lange,

wait25 wird bei mir bei wait 19,5 erreicht, Abhilfe wait tunen oder die Oszillator clk

void _delay_up25(UBYTE n)
{ UBYTE tmp;
#ifdef F_CPU8000000
for(tmp=0; tmp<(n); tmp++)
_delay_ms(19.5);
#else
#ifdef F_CPU4000000
#else
#warning F_CPU4000000 not defined
#warning F_CPU8000000 not defined
#endif
#endif
} // void _delay_up50(UBYTE n)

aber ich nutze wait fast nicht mehr, habe eine IRQ auf einen 1ms Timer, dort zähle ich variablen hoch und die kann ich auf overflow prüfen, dann kann der prozzi noch was anderes tun ausser wait....


SIGNAL (SIG_OUTPUT_COMPARE2)
{ cli(); //Global Interrupt Disable
dcf.msec++; // Zeitgeber für DCF-Empfang weiterdrehen
fast_it++;
_ms++;
_500ms++;
if(dcf.msec>30000)
dcf.msec=0;
if(_500ms>1500)
_500ms=0;
if(_ms>1500)
_ms=0;
sei(); //Global Interrupt Enable
}

void cont_ausloesung(void)
{ if(bit_is_clear(PORTB, _camAUS_PB))
{ PORTB |= (1 << _camAUS_PB); // Cam Auslöser an
w0=fast_it+cam_delay;
}
if(fast_it>w0)
{ PORTB &=~ (1 << _camAUS_PB); // Cam Auslöser aus
_ausloes=0;
}
} // void cont_ausloesung(void)

void ausloesung(void)
{ PORTB &=~(1 << _camAUS_PB); _ausloes=1; cont_ausloesung();
}

Emotionslos1
19.04.2007, 11:21
das mit den kontensatoren werde ich mir anschauen guter tipp danke.

das mit den timern haut bei mir leider auch nicht hin. ich programmiere mit bascom und wenn ich versuche einen servo anzusteuern

Config Servos = 1 , Servo1 = Portb.0 , Reload = 10

die frequenz zur ansteuerung des servos sollte 50hz betragen wenn ich richtig rechne. und mit diesem config servo..... sollte ich auf diese 50herz kommen.

habe mal mit einem oszi gemessen und erreiche gerade mal 5-7herz wenn ich mit reload auf 2 runtergehe habe ich nur mehr 3hz.

Emotionslos1
19.04.2007, 22:54
habe das mit den kondensatoren geprüft habe 22pf laut meinem schaltplan richtig. immer noch die gleichen probleme.
hat noch jemand eine idee? oder kann mir jemand ein eigenbau testbord fur einen ATmega8535JI empfählen?
Danke