Problemer med brug af Timer med AVR - Page 2

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Danish to

Threaded View
Re: Problemer med brug af Timer med AVR
Quoted text here. Click to load it

Ja, det er ikke altid til at se skoven for bare træer ;)

/Thomas

Re: Problemer med brug af Timer med AVR
Thomas Lykkeberg <noway> skrev:
Quoted text here. Click to load it

Det må siges :-)

Hvad er det TIMSK gør? TIMer... SK???

--
Mvh.

Tomas


Re: Problemer med brug af Timer med AVR

Quoted text here. Click to load it
"Timer interrupt mask register". Det bruges til at maske de
forskellige interrupts associeret med timere/countere i AVR MCU'en

Sig mig en gang, har du ikke et datablad på den AVR du sidder med? :o)

Jeg regner med at det er en ATMega8515:
http://www.atmel.com/dyn/products/product_card.asp?part_id20%06

/Thomas

Re: Problemer med brug af Timer med AVR
Thomas Lykkeberg <noway> skrev:
Quoted text here. Click to load it

Jo jo :-)
Men når man masker interrupts, hvad gør man så?

Quoted text here. Click to load it

Jeps. 8515 it is ;-)

--
Mvh.

Tomas


Re: Problemer med brug af Timer med AVR
Quoted text here. Click to load it

SE5% tillader eller forbyder man interrupts fra en specific kilde. I dit
tilfE6%lde tillader du interrupts fra "Timer 0 Over Flow" kilden. Kort
sagt har du ved at skrive TMISK 3D% 0x02 fortalt interrupt kontrolleren
i AVR'en, at du gerne vil afbrydes (interrupt'es) nE5%r timer 0's tE6%ller
"flyder over".

/Thomas


Re: Problemer med brug af Timer med AVR
Quoted text here. Click to load it

OK - Takker. Det hjalp på min forståelse :-)
Må dybere ind i databladet og finde mig en liste over det
tilladte TMISK'ere...

--
Mvh.

Tomas


Re: Problemer med brug af Timer med AVR
Hej Tomas

Jeg har haft samme problem i starten men jeg lavede nogle macro'er der
løste problemet:

Eks:
  if(++timecount == 1000)
 >                 {
 >                 PORTA = PORTA ^ 0x80;   // Toggle bit 7 på PortA
 >                 timecount = 0;          // Clear for de næste 500 us
 >                 }
 >         }

til:

  if(++timecount == 1000)
 >                 {
 >                 tgl(PORTA, 7);   // Toggle bit 7 på PortA
 >                 timecount = 0;          // Clear for de næste 500 us
 >                 }
 >         }



/**
   * @brief Macro for bitmanipulation
   */
#define sbi(arg, BitNo) (arg |= (1 << BitNo))    // Set bit
#define cbi(arg, BitNo) (arg &= ~(1 << BitNo))   // Clr bit
#define tbi(arg, BitNo) (arg & (1 << BitNo))     // toggle bit
#define tgl(arg, BitNo) (arg^=(1<<BitNo))        // test bit


Prøv det....

Mvh

Christian..


Tomas . wrote:
Quoted text here. Click to load it

Re: Problemer med brug af Timer med AVR

Quoted text here. Click to load it


De der comments på toggle og test skal vidst lige byttes

Hilsen
Carsten


Re: Problemer med brug af Timer med AVR
Quoted text here. Click to load it

Jeg prøver forslagene af asap :-)

--
Mvh.

Tomas


Re: Problemer med brug af Timer med AVR
Nu ser min kode sådan ud.

Resultatet er desværre stadig det samme. :-( (PORTA.7 er stadig
konstant ON)

#include <90s8515.h>

/**
   * @brief Macro for bitmanipulation
   */
#define sbi(arg, BitNo) (arg |= (1 << BitNo))    // Set bit
#define cbi(arg, BitNo) (arg &= ~(1 << BitNo))   // Clr bit
#define tbi(arg, BitNo) (arg & (1 << BitNo))     // toggle bit
#define tgl(arg, BitNo) (arg^=(1<<BitNo))        // test bit


//Timer 0 overflow ISR
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
        {
        static unsigned int timecount = 0; //global time counter
        TCNT0 = 6;                      // start med at tælle
fra 6; Tæl til 250
        if(++timecount == 1000)
                {
                tgl(PORTA, 7);          // Toggle bit 7 på PortA
//                PORTA = PORTA ^ 0x80; // Toggle bit 7 på PortA
                timecount = 0;          // Clear for de næste
500 us
                }            
        }

void main(void)
        {
        DDRA = 0x80;                    // Port A bit 7 er output
        
        TCCR0 = 0x02;                   // Sæt Timer0 til
clock/8 som clock input
        TCNT0 = 0x00;                   // Start Timer med
værdien 0 i timer
        
        // Timer 0 interrupt initialisering
        TIMSK = 0x01;                   // Afmask Timer 0
overflow interrupt
        
        // Global aktivering af interrupts
        #asm("sei")
        
        while(1)
                ;
        }


--
Mvh.

Tomas


Re: Problemer med brug af Timer med AVR

Quoted text here. Click to load it
Tomas, læs nu mit tidligere indlæg......

/Thomas

Site Timeline