Forum: Mikrocontroller und Digitale Elektronik Atmega328P Timer2 zu langsam


von RFZ (Gast)


Lesenswert?

Grüße,
1
void setup() {
2
    DDRB = DDRB | B00000011; // Arduino 8&9 output
3
    TIMSK2 |= 0x01; // Overflow interrupt enable
4
    TCCR2B |= 0x01; // Start Timer, no prescaler
5
}
6
7
void loop() {
8
    // nix
9
}
10
11
ISR (TIMER2_OVF_vect) {
12
    PORTB ^= B00000010; // Toggle Pin
13
    if((PORTB & B00000010) > 0) TCNT2 = 0x80;
14
}

Das ist der vollständige Code, nix gekürzt. Wird via Arduino IDE auf 
einen Pro Mini @ 16 MHz geladen.
Erwartet hatte ich, dass der Pin 16µs LOW und 8µs HIGH ist. Tatsächlich 
ist er aber 4ms LOW und 3ms HIGH (ja, ms, nicht µs)...
Jemand eine Idee? Danke :)

von Toni R. (torei55)


Lesenswert?

vlt. weil der Interupt nicht eingeschaltet ist? "sei()"

gruß toni

von RFZ (Gast)


Lesenswert?

Ist er wohl schon, sonst würde der Pin ja garnicht toggeln ;)
Mit sei(); im Code ändert sich nix...

von Peter D. (peda)


Lesenswert?

Schreib mal statt setup() und loop() ne normale main().
Dann sollte die Arduino-Lib nicht mehr eingebunden werden.

von RFZ (Gast)


Lesenswert?

1
void setup() {
2
    DDRB = DDRB | B00000011; // Arduino 8&9 output
3
    TIMSK2 |= 0x01; // Overflow interrupt enable
4
    TCCR2A = 0x00;
5
    TCCR2B = 0x01;
6
}
7
8
void loop() {
9
    // nix
10
}
11
12
ISR (TIMER2_OVF_vect) {
13
    PORTB ^= B00000010; // Toggle Pin
14
    if((PORTB & B00000010) > 0) TCNT2 = 0x80;
15
}

Okay, so geht es... Offensichtlich schreibt die Arduino Lib in der 
Timer2 Konfiguration herum. Dachte eigentlich die nutzt nur Timer0 (für 
delay...).

von Toni R. (torei55)


Lesenswert?

dann lass doch mal das arduino zeugs weg.
1
void main() 
2
{
3
    DDRB = DDRB | B00000011; // Arduino 8&9 output
4
    TIMSK2 |= 0x01; // Overflow interrupt enable
5
    TCCR2B |= 0x01; // Start Timer, no prescaler
6
7
    sei();
8
}
9
10
ISR (TIMER2_OVF_vect) {
11
    PORTB ^= B00000010; // Toggle Pin
12
    if((PORTB & B00000010) > 0) TCNT2 = 0x80;
13
}

von RFZ (Gast)


Lesenswert?

Peter D. schrieb:
> Schreib mal statt setup() und loop() ne normale main().
> Dann sollte die Arduino-Lib nicht mehr eingebunden werden.

Ja, die böse Arduino-Lib ;)
Im Gesamtprojekt wird die aber mit benötigt, daher muss es auch mit der 
Funktionieren...

von Peter D. (peda)


Lesenswert?

RFZ schrieb:
> Ja, die böse Arduino-Lib ;)

Ich würde fast wetten, daß es zu der Arduino-Lib auch ein Manual gibt, 
welche Ressourcen sie wofür belegt. Aber sowas liest sich natürlich 
keiner durch.

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
Noch kein Account? Hier anmelden.