ATtiny 84 Timer unerklärlich langsam

OP #1949855
Lesenswert?
• ▲
▼
Hallo Leute,

ich benötige Mal jemanden, der mein geistiges Dickicht lüftet. Ich will 
5 LEDs ansteuern, in einem synchronen Takt über den Timer1 eines ATtiny 
84.
Außerdem will ich über ein Poti(1kOhm) einstellen können, wie schnell 
der Timer1 läuft. Der Ausgang des Potis geht auf PA5 und die LEDs hängen 
an PA0-PA4. Bis jetzt ist ja nichts schweres dabei, aber irgend läuft 
der Timer1 total langsam. Eigentlich müsste er bei 1MHz Clock, einem 
Prescaler von 1024 und ein OCR1A von 1023, ca. jede 1,xx Sekunde ein 
Interrupt haben. Dem ist aber nicht so anscheinend. Also davon 
ausgegangen, dass Poti ist so eingestellt, dass praktisch VCC anliegt.
VCC ist 3,0V (2*AA-Batterien die voll sind) und Brownout-Detection ist 
bei 1,8 V gesetzt.
Der Clockoutput-Pin ist aktiviert und ich messe dort 1MHz.
Hier der Code:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <avr/pgmspace.h>
4
#define F_CPU 1000000
5
#include <util/delay.h>
6

7
#define ARRAY_SIZE 5
8

9
uint8_t step = 0;
10
const uint8_t figur_table[ARRAY_SIZE] PROGMEM = {(1<<PA0),(1<<PA1),(1<<PA2),(1<<PA3),(1<<PA4)};
11
int main()
12
{
13
  uint16_t adc_res = 0;
14
  DDRA = ((1<<PA0)|(1<<PA1)|(1<<PA2)|(1<<PA3)|(1<<PA4));
15
  ADCSRA = (1<<ADEN);
16
  ADMUX = 0b000101;
17
  ADCSRA = (1<<ADSC);
18
  while(ADCSRA & (1<<ADSC));
19
  adc_res = ADCW;
20
  adc_res = 0;
21
  ADCSRA |= (1<<ADSC);
22
  while(ADCSRA & (1<<ADSC));
23
  adc_res = ADCW;
24
  TCCR1B = (1<<CS12)|(1<<CS10)|(1<<WGM12);
25
  TIMSK1 = (1<<OCIE1A);
26
  OCR1A = adc_res;
27
  //OCR1A = 100;
28
  PORTA = ((1<<PA0)|(1<<PA1)|(1<<PA2)|(1<<PA3)|(1<<PA4));
29
  _delay_ms(100);
30
  //PORTA &= ~(1<<PA0)|~(1<<PA1)|~(1<<PA2)|~(1<<PA3)|~(1<<PA4);
31
  PORTA = 0x00;
32
  sei();
33
  while(1)
34
  {
35
    ADMUX = 0b000101;
36
    ADCSRA |= (1<<ADSC);
37
    while(ADCSRA & (1<<ADSC));
38
    adc_res = ADCW;
39
  }
40

41
}
42
ISR(TIM1_COMPA_vect)
43
{
44
  if(step > ARRAY_SIZE)
45
  {
46
    step = 0;
47
  }
48
  PORTA = 0x00;
49
  PORTA |= pgm_read_byte(&figur_table[step]);
50
  PORTA ^= (1<<PA4);
51
  step++;
52
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.