Forum: Mikrocontroller und Digitale Elektronik ATtiny2313 Timer Speed


von Mathias Burkhard (Gast)


Lesenswert?

Ich habe folgenden Code auf meinen ATtiny2313 hochgeladen.
Die LED an PD1 blinkt wie erwartet.

Nun mein Problem, wie kann ich den Speed des Timers verstellen ?

TCCR0B und die nachfolgenden Werte habe ich schon probiert, die LED 
blink immer gleich schnell.
1
#include "Arduino.h"
2
3
#define ledPin 1
4
5
void dw(unsigned char port, bool on) {
6
  if (on) {
7
    PORTD |= (1 << port);
8
  } else {
9
    PORTD &= ~(1 << port);
10
  }
11
}
12
13
ISR(TIMER1_COMPA_vect) {
14
  int t = 5000;
15
  static int b;
16
  b = b + 1;
17
  dw(ledPin, (b > t));
18
19
  if (b > t * 2)
20
    b = 0;
21
}
22
23
void setup() {
24
  DDRD = DDRD | (1 << ledPin);
25
26
  TIMSK |= (1 << OCIE1A);
27
28
  TCCR1A = 1 << COM1A0;            // toggle OC1A on Compare Match
29
  TCCR1B = 1 << WGM12 | 1 << CS10; // CTC, no prescaler
30
  OCR1A = 9;                       // compare A register value to 10 (zero relative)
31
  TCCR0A = 0x83;                   // Timer/Counter 0 initialization
32
  TCCR0B = 0x01;                   // Clock source: System Clock and Clock value: 16000,000 kHz
33
  TCNT0 = 0x00;                    // Mode: Fast PWM top=FFh
34
  OCR0A = 0x00;                    // OC0A output: Non-Inverted PWM
35
  OCR0B = 0x00;                    // OC0B output: Disconnected
36
37
  sei();
38
}
39
40
// The loop function is called in an endless loop
41
void loop() {
42
}

von Peter II (Gast)


Lesenswert?

Mathias Burkhard schrieb:
> TCCR0B

passst halt nicht zu

> ISR(TIMER1_COMPA_vect) {

willst du nun Timer0 oder Timer1 verwenden?

von Mathias Burkhard (Gast)


Lesenswert?

>willst du nun Timer0 oder Timer1 verwenden?

Dies wäre mir momentan egal, Hauptsache ich könnte den Speed einstellen.

von Karl M. (Gast)


Lesenswert?

Was er sagen wollte ist,
Du musst nach dem Datenblatt dich für einen Timer entscheiden und dann 
über dessen Register die passenden und richtigen Einstellungen machen.

Mathias Burkhard schrieb:
>>willst du nun Timer0 oder Timer1 verwenden?
>
> Dies wäre mir momentan egal, Hauptsache ich könnte den Speed einstellen.

Im Augenblick ist das nicht der Fall.

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Die Null deuten auf 'Timer0'
>> TCCR0B

Und hier die Eins auf 'Timer1'
>> ISR(TIMER1_COMPA_vect) {

Der Vergleich-Interrupt von Timer1 wird NICHT durch den laufenden Timer0 
ausgelöst.

Wenn Du eine der beiden Zeilen änderst (1<->0), sollte sich eine 
Funktion zeigen.

MfG

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.