Hi,
in deinem Code fehlt was:
damit wird der Timerinterrupt aktiviert!Code:TIMSK |= (1 << TOIE1);
statt TCNT1L = 0xf7; und TCNT1H = 0xc2; kannst du auch TCNT1 = 0x1B9 schreiben find ich übersichtlicher!
Gruß Michi
hi,
ich habe mir einen Timer programmiert, der nach einer Sekunde laufzeit den PD0 high schalten soll , das ganze in C mit AVR Studio 4, er amcht aber nichts, der Led rührt sich nicht
Diese werte :Code:#include <avr/io.h> #include <avr/interrupt.h> #include <avr/delay.h> uint8_t secound=0; SIGNAL (SIG_OVERFLOW1) { secound ++; } int main(void) { OCR1AL = 0x09; OCR1AH = 0x3d; TCNT1L = 0xf7; TCNT1H = 0xc2; TCCR1B |= (1<<CS11)|(1<<CS10); sei(); while(1) { if(secound == 1) { DDRD = 0x01; PORTD = 0x01; secound = 0; }; }; }
OCR1AL = 0x09;
OCR1AH = 0x3d;
TCNT1L = 0xf7;
TCNT1H = 0xc2;
Hab ich von nem tool auf AVRfreaks, die sollen bei 1Mhz Quarz eine Sekunde brauchen damit der Timer neu anfängt
was ist an meinem COde falsch ?
Hi,
in deinem Code fehlt was:
damit wird der Timerinterrupt aktiviert!Code:TIMSK |= (1 << TOIE1);
statt TCNT1L = 0xf7; und TCNT1H = 0xc2; kannst du auch TCNT1 = 0x1B9 schreiben find ich übersichtlicher!
Gruß Michi
hmmm,
ich hab das jetzt dazugeschrieben , aber da rührt sich irgedwie nichts am µC ,
stimmt das das man einen TImer schwer im AVRstudio Simulieren kann, denn der braucht eeeeeeeeewig bis der timer mal nen überlauf hat
AUF JEDEN FALL
VOLATILE uint8_t secound=0;
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
k , aber wiso dieses
VOLATILE ???
Hi,
damit man diese Variable auch in den Interrupts benutzen kann!! Klappt's jetzt?
Gruß Michi
ne es klappt nich , da rührt sich gar nix nur wenn ich als Bedinnung secound < 1 eingebe leuchtet die led dauernt, also kommt der zu keinem Overflow bzw. der interuppt geht nich
ich hab jetzt nen timer gemacht der alle 1000µs fertig ist , so hab ich das im studio gut überwachen können , also der timer fängt neu an , also er ladet die variablen neu ... ABER der interruppt geht nich , also diese Interuppt schleife ignoriert er einfach
Weiss jetzt nicht, ob du nicht den OutputCompare-Interrupt belegen müßtest.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
ich hab bei irgendeinem Tutorial gelesen das da bei de rinterupt funktion der signame des interuppts angegeben werden muss ich hab jetzt mal im datenblatt geschaut, aber keinen Signame gefunden , dann hab ich probiert die verschiedenen Namen für den 16BIT timer einzugeben , ohne erfolg,
vl passt dieses SIG_OVERFLOW1 nich ?
Lesezeichen