C-Programm Softpwm Problem mit der ISR (oder mit der Main?)

Gast #3035190
Lesenswert?
• ▲
▼
Verwendeter MC: ATtiny2313

Das ganze soll eine sehr einfache SW PWM geben, ich weiß man könnte es 
auch mit dem PWM mode machen und einfach die OCx Pins nehmen, aber ich 
will es so und es müsste meiner Meinung nach auch so funktionieren?
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3

4
#define F_CPU         8000000L           // Systemtakt in Hz
5

6
volatile uint16_t t0_ovf_cnt=0;          // zähler der T0 Überläufe
7

8

9
ISR(TIMER0_COMPA_vect)
10
{
11
  PORTD|=(1<<PD5);          //beim Vergleichswert LED einschalten  
12
}
13

14
ISR(TIMER0_OVF_vect)
15
{
16
  t0_ovf_cnt++;            //zähler hochzählen
17
  PORTD=0x00;              //beim Überlauf LED ausschalten
18
}
19

20

21
//Compare Wert Register : OCR0A u. B
22
// Aktueller Zählerstand von T0: TCNT0
23

24
//TCCR0B  prescaler 0 ="1"  1024="5"
25
//TIMSK "INterrupts"  bits OCIE0A und OCIE0B
26

27

28

29
int main()
30
{
31
  
32
  TCCR0B|=3;                   //Prescaler 
33
  TIMSK |= (1<<OCIE0A|1<<OCIE0B|1<<TOIE0); //OUtputcompare interrupts und ovf
34
  
35
  DDRD |= 0x7F; //Ports als Ausgänge schalten
36
  // =1111111 (nur 7 einser, da es nur bis PD6 geht)
37
  
38
  OCR0A=230;
39
  
40
  sei();
41

42
  
43

44
  
45
  while(1)
46
  {
47
    if (t0_ovf_cnt>=500)  // Nach 500 PWM Durchläufen
48
    {
49
      PORTD^=(1<<PD5);  // PIN D5 Toggeln
50
    }  
51
  }  
52
  
53
  
54
  
55
  return 0;
56
  
57

58
  
59
}



Hab das ganze schon im Atmelstudio laufen lassen und festgestellt, dass 
sobald der zähler auf 1 gesetzt wurde nach der 2. oder 3. If abfrage der 
zähler einfach so wieder auf 0 gestellt wird. Ich verstehe aber einfach 
nicht warum. Vielleicht könnt ihr mir ja helfen.

mfg Jo
Gast #3035202
Lesenswert?
• ▲
▼
Ok danke für den Hinweis. Werd mich mal belesen.
Achja oben haben sich bei dem ganzen Copy&Paste noch im Code 2 
Fehlerchen eingeschlichen: in der Main soll PD6 getoggelt werden (dass 
ergibt mehr Sinn als jetzt) und der Counter wird auch innerhalb der IF 
Verschachtelung zurückgesetzt

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.