Archiv verlassen und diese Seite im Standarddesign anzeigen : Timerinteruppt will irgendwie nicht
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
#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;
};
};
}
Diese werte :
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 ?
michaelb
08.01.2006, 10:14
Hi,
in deinem Code fehlt was:
TIMSK |= (1 << TOIE1);
damit wird der Timerinterrupt aktiviert!
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;
k , aber wiso dieses
VOLATILE ???
michaelb
08.01.2006, 12:39
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.
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 ?
Schau' in die Include-datei vom Prozessor rein, ganz hinten ist die Speisekarte. Beleg' einfach alles, was dir in den Sinn kommt, was soll's
Und ev. schau auch da mal rein
https://www.roboternetz.de/wissen/index.php/Avr-gcc
Signal/Interrupt-Name vertippt oder Leerzeichen zu viel
SIGNAL (SIG_OVEFRLOW0)
{
/* mach was */
}
Nicht alle Compiler-Versionen meckern da. Der ISR-Code wird nicht in die Interrupt-Tabelle eingetragen. Kommt es zum Interrupt, dann landet man in RESET.
das könnte sein , mal schauen
ok , an dem Leerzeichen zwischen Signal und der klammer lags nicht, mit interuppt gehts auch nicht , ich hab echt keinen Plan mehr
JUHU
ich habs jetzt entlich geschafft das das ganze rennt
ich musste die
avr/signal.h noch includen , denn die aktiviert erst das SIGNAL() und das INTERUPPT()
](*,) ](*,)
ein very BIG THX @all die mir geholfen haben
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.