int main(void) { DDRA = 0xFF; DDRC = 0xFF; DDRD = 0xFF; // PortB als eingang alle Pull up Widerstände acktiviert DDRB = 0x00; PORTB = 0xFF; //Timer einstellen TCCR1B = (1<<CS10); //setzt den Prescaler 64 OCR1A = 11000; TCNT1 = 0; //startewert des Counters TIMSK = 1<<OCIE1A; //Compare-Int aktivieren sei(); for(;;) { //hier werden die Ports gesetzt ! //set_Porta(PA1); //set_Porta(PA0); } } SIGNAL (SIG_OUTPUT_COMPARE1A) { //hier nicht Warum ? set_Porta(PA1); set_Porta(PA0); ) Was könnte das Problem sein wenn der Interrupt nicht ausgeführt wird. Kopiere ich die Befehle in main werden die Ports gesetzt ! Eigentlich hat der Code schon einmal funktioniert. Der einzige unterschied ist das ich jetzt den interne Quarz verwende.
Aus den Registernamen und Interrupt-Handlern schlußfolgere ich einfach mal, daß es vermutlich um einen AVR geht. Jetzt müßtest du nur noch verraten, um welchen Prozessor es konkret geht. > unterschied ist das ich jetzt den interne Quarz verwende. Es gibt beim AVR keinen internen Quarz. Meinst du den RC-Oszillator?
Micha wrote:
>
1 | > TCCR1B = (1<<CS10); //setzt den Prescaler 64 |
2 | >
|
Sieht seltsam aus. was set_Porta macht, weiß allein ger Geier. Ebenso, um welche Hardware es geht. In der Kristallkugel erscheint ein verschwommen Etwas, das nach ATmega32 aussieht... Johann
Sollte es sich um einen ATMega16 handeln dann hier die Auflösung
1 | ...
|
2 | void initTimer() |
3 | {
|
4 | // CTC Mode aktivieren
|
5 | TCCR1A |= (0<<WGM11)|(0<<WGM10); |
6 | TCCR1B |= (0<<WGM13)|(1<<WGM12); |
7 | // Timer 1 Vorteiler setzen
|
8 | TCCR1B |= (0<<CS12)|(1<<CS11)|(1<<CS10); // Vorteiler 64 |
9 | // Vergleichswert setzen
|
10 | OCR1A = 11000; |
11 | // Interrupt wird durch Compare Match ausgelöst
|
12 | TIMSK |= (1<<OCIE1A); |
13 | //ISR wird ausgelöst
|
14 | TIFR |= (1<<OCF1A); |
15 | sei(); |
16 | }
|
17 | |
18 | //Timerinterrupt Compare
|
19 | ISR(TIMER1_COMPA_vect) |
20 | {
|
21 | // Toggle Pin
|
22 | PORTA ^= (1<<PA0); |
23 | }
|
24 | ...
|
Achja, Vorteiler 64 und Vergleichswert 11.000 macht bei 1MHz 0,704s. Ich weiß, der OP hat natürlich nicht geschrieben welchen Takt er hat (warum auch). Aber der interne Oszi kann doch nur 1, 2, 4 und 8 MHz macht dann 0,704s, 0,352s, 0,176s und 0,088s. So gewollt? Ich weiß, dass es nicht mehr akut sein wird ;-) Ich hatte bloß gerade eben das gleiche Problem und eigentlich keinen Bock auf Datenblatt lesen. Vielleicht kann sich der ein oder andere das jetzt sparen. bye Datasheet
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.