ATtiny85 Timer/Counter1 will nicht funktionieren

Gast #6170968
Hallo,

ich bin gerade dabei zwei Timer im ATtiny85 zu programmieren.
Der Timer0 funktioniert wie er soll.

Timer1 macht mir Probleme. Ich habe schon ein komplett neues Projekt 
angefangen und alles unnötige auskommentiert.

Hier mein aktueller Code:
1
#define F_CPU 8000000UL
2

3
#include <avr/io.h>
4
#include <inttypes.h>
5
#include <avr/interrupt.h>
6
 
7
ISR(TIMER1_COMPA_vect){
8
  //PORTB ^= (1<<PB1);
9
}
10

11

12
int main(void) {
13
    DDRB |= (1<<PB1);    // set LED pin as output
14

15
    TCCR1 |= ((1<<CS13) | (1<<CS11) |(1<<COM1A1)) ;    //prescaler 32 ==> ca 1ms pulsbreite max// PB1 als Pin zuweisen
16
     TCCR1 |= (1<<CTC1);                  //Clear output on compare
17
     OCR1A =125;        //spaeter variabel
18
     //OCR1C =225;
19
     TIMSK |= (1<<OCIE1A);
20
    
21

22
sei();  //enable interrupts
23

24
  while (1)
25
  {  
26
  }
27
};

Bin ich nun richtig in der Annahme, dass PB1 auf ca. 50% Helligkeit 
leuchten sollte?

In der while(1) steht nix drin. Das sollte aber trotzdem den PB1 zum 
toggeln bringen oder?

Was könnte mein Problem sein?

Danke
Gast #6170995
Ich dachte COM1A1 setzt den Counterwert bei Compare auf 0 zurück und 
COM1A0 toggelt?

Ich habe mal COM1A1 gegen COM1A0 getauscht, aber es funktioniert genauso 
wenig.

Die ISR war zum testen, ob sich was ändert. Aber bin ich richtig in der 
Annahme, dass die leere ISR ausgeführt werden muss?
Gast #6171029
Um es abzukürzen, dies läuft bei mir:
1
#define F_CPU 8000000UL
2
#include <avr/io.h>
3

4
int main(void) {
5
    DDRB |= (1<<PB1);
6
    TCCR1 |= ((1<<CS13) | (1<<CS11) |(1<<COM1A0)) ;
7
    TCCR1 |= (1<<CTC1); 
8
    OCR1A =125;
9
  while (1)
10
  {  
11
  }
12
};
Gast #6171042
Jetzt zweifle ich doch an meinem Sehvermögen (oder gar an meinem 
Verstand?):

Jch schrieb:
> Ich dachte COM1A1 setzt den Counterwert
> bei Compare auf 0 zurück und COM1A0 toggelt?

Ja, richtig. Aber warum steht dann im originalen Programm COM1A1?
Gast #6171093
Andreas B. schrieb:

> Die ISR könnte vom Compiler wegoptimiert werden.

Dann wäre er schlicht kaputt. Er hat nämlich garnicht genug Information, 
um alle Seiteneffekte zu kennen, die dies u.U. zur Folge hätte.

Speziell beim AVR8: automatisches Rücksetzen der IRQ-Flags bei vielen 
Interrupts. Und natürlich das Zeug, was beim Wakeup aus den Sleep-Modi 
eine Rolle spielt.
Gast #6172725
Hallo Leute,

ja, das Programm funktioniert auch bei mir.

Das mit den Prescaler-Einstellungen lag daran, dass ich zuletzt in dem 
Kapitel "Timer/Counter 1 in Attiny 15 mode" gelesen hatte.

Ich sollte auch beim flashen auch die richtige HEX Datei verlinken.
Ich glaube das war gestern einfach nicht mein Tag.


Neuer Tag neues Glück:

Mein Ziel ist es eine Zeitschaltuhr zu bauen, welche ein PWM Signal 
ausgibt.
Nach einer Zeit X soll das PWM Signal ausgehen und der Ausgang LOW 
bleiben (bis ich es wieder aktiviere)


Leider funktioniert es nicht so ganz. Nach der Zeit X geht mein PWM 
schon aus, aber leider bleit der Ausgang HIGH. Auch wenn ich danach noch 
ein
1
  PORTB &= ~(1<<OUTPUT);  //ausschalten.
 hinschreibe.



Was kann der Grund dafür sein?

Meine PWM Ausschaltbedingung ist folgende:
1
TCCR1 &= ~((1<<CS12) | (1<<CS11));  //PWM AUS
CS12 und CS11 sind der einzig verwendete Prescaler
Aber warum kriege ich den Ausgangspin nicht auf LOW?

Danke schonmal
Gast #6172876
Danke. Ich habe das nicht so gelesen, als müsse es wirklich auf 0 
gesetzt werden.

In der Prescalertabelle sah es offensichtlicher aus.

Es funktioniert.
Danke

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.