Forum: Mikrocontroller und Digitale Elektronik xmega - timer ovfl isr löst nicht aus


von xmega_gast (Gast)


Lesenswert?

moin moin

habe n kleines Prop. : Hardware : Xmega 128a3

so, ich wollt mit dem DAC einfach ein periodisches Signal ausgeben um 
den timer overflow interrupt zu testen habe also n Oszi dran um die 
genauigkeit anzugucken.

und es kommt nicht heraus was ich will ( ich will eine periodische 
treppe 2v -> 1v -> 0)

irgendwie löst der Interrupt nicht aus oder ich behandel ihn falsch.
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <stdint.h>
4
#include "function.h"
5
#include "avr_compiler.h"
6
7
//    2V = DEA = 3562
8
//    1V = 6F5 = 1781 DACB.CH0DATA
9
//    6000 U/min = per =5486 >> 0x156E
10
//    3000 U/min = per =10958 >> 0x2ACE
11
//    1000 U/min = per =32000 >> 0x7D00
12
//      32MHz => takt 31,25 ns
13
#define F_CPU 32000000UL
14
15
16
uint16_t Zeit[3]    = { 300, 400, 300};// absoluter zeitwert
17
18
uint16_t startWert[3]  = { 3562,  1781, 0 };// absolute Spannung 
19
  
20
int i, ii;
21
//====================================================================
22
int main( void )
23
{
24
  int CountZeit[3];
25
  
26
  inter_init();
27
  Clock_init();
28
  DACB_Channel0_Enable(DAC_REFSEL_AVCC_gc);
29
  for (i=0;i<3;i++)
30
  {
31
    CountZeit[i]=(Zeit[i]*100/3125);
32
  }
33
34
    while(1)
35
    {
36
    ii = 0;
37
    i = 0;
38
    sei();  
39
    do
40
    {
41
      TCC1.CNT=0;
42
      TCC1.PER=CountZeit[i];
43
      DACB.CH0DATA = startWert[i];
44
      while(ii==0)
45
      {
46
        
47
      }
48
      i++;
49
    }while(i<3);
50
    }
51
}
52
//----------------------------------------------------------------------
53
void DACB_Channel0_Enable(DAC_REFSEL_t convRef)
54
{
55
  DACB.CTRLB = ( DACB.CTRLB & ~DAC_CHSEL_gm ) | DAC_CHSEL_SINGLE_gc;
56
  DACB.CTRLC = ( DACB.CTRLC & ~DAC_REFSEL_gm) | convRef;
57
  DACB.CTRLA = ( DACB.CTRLA & ~DAC_CH1EN_bm ) | DAC_CH0EN_bm | DAC_ENABLE_bm;
58
}
59
//----------------------------------------------------------------------
60
void inter_init(void)
61
{
62
  PMIC.CTRL = PMIC_MEDLVLEN_bm;
63
}
64
void Clock_init(void)
65
{
66
  OSC.CTRL |= OSC_RC32MEN_bm;       // Oszillator auf 32Mhz stellen
67
  while(!(OSC.STATUS & OSC_RC32MEN_bm));// Warten bis Oszillator rdy
68
  CCP = CCP_IOREG_gc;
69
  CLK.CTRL = CLK_SCLKSEL_RC32M_gc;      // Clock auf 32MHz stellen
70
  timer1_init();
71
}
72
void timer1_init(void)
73
{
74
  TCC1.CTRLA = TC_CLKSEL_DIV1_gc;
75
  TCC1.CTRLB = TC_WGMODE_NORMAL_gc;
76
  //TCC1_CTRLC
77
  TCC1.INTCTRLA = TC_OVFINTLVL_MED_gc;
78
  
79
}
80
//----------------------------------------------------------------------
81
isr(TCC1_OVF_vect)
82
{
83
  ii =1;
84
}

jemand ne idee bzw einen verbesserungs vorschlag ( bitte konstriktiv :D 
)

von Peter II (Gast)


Lesenswert?

xmega_gast schrieb:
> jemand ne idee bzw einen verbesserungs vorschlag

> int i, ii

int i;
volatile int ii;

globale Variablen i und ii zu nenen sollte unter strafe gestellt werden!

von xmega_gast (Gast)


Lesenswert?

da es variablen sind, glaube ich nicht ;) der name is ja mein problem :D

habe volatile angepasst, danke

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.