Számláló konfigurálés/beállítás (Timer CTC mód)

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
troby
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2016. március 22. kedd, 11:16

Számláló konfigurálés/beállítás (Timer CTC mód)

Hozzászólás Szerző: troby »

Sziasztok, nem tudom jó helyre írok-e de nem találtam jobb témát. Segítséget szeretnék kérni egy Ardunio Uno programozásában ugye ebben 328 as ic van és ilyet még nem programoztam. CTC időzítést szeretnék készíteni amit a Timer0 van szeretnék megoldani hogy minden 0,001s ban az isr vektorban megadott kód lefusson. De valamiért kb. 20 másodper után elcsúszik és nem jöttem rá sehogy se hogy miért. pedig szinte mindenhol ugyan ezt a kódot láttam a neten. Kérlek nézzetek rá nekem, ha van egy kis időtök. Ennél az ic nél azt, hogy amikor túlcsordul a beállított 250 nél akkor újrakezdjen számolni az aútómatikus vagy be kell állítani csak mert nem találtam meg hogyan kellene, picit fura nekem hogy van A-B regiszter kölün a timer0 hoz. Köszönöm.

Kód: Egész kijelölése

[code]
#include <avr/io.h>
#include <avr/interrupt.h>


int ledPin = 12;
volatile int a = 0;
volatile int b = 0;
volatile int c = 1;
int inPin = A1;
int volatile flag = 0;

void setup()
{
  pinMode(inPin, INPUT);
  pinMode(ledPin, OUTPUT);
  timer();
}

void loop()
{
  b = digitalRead(inPin);
  if (b == 0) flag = 1;
  digitalWrite(ledPin, c);
}

void timer() {

  cli(); // letiltom a megszakításokat
  TCCR0A = 0; // nullázom
  TCCR0B = 0;

  TCCR0A = (1 << WGM01); // CTC mód
  OCR0A = 250; // eddig számol
  TIMSK0 = (1 << OCIE0A);    //isr vektor eng
  TCCR0B  = (1 << CS00) // ez 64as osztás
            |  (1 << CS01)
            |  (0 << CS02);
  sei();         //globális megszakitás eng
}

ISR (TIMER0_COMPA_vect)  // ez minden 0.001s enként lefut
{
  if (flag == 1) { // ezt csak azért tettem bele hogy gombal tudjam indítani hogy tudjam figyelni az órámon a másodperceket. 
    if (a <= 999) {
      a++;
    }
    else {
      a = 0;
      c = !c; //ezzel csak annyit szeretnék hogy 1-1 mp ig világítson és aludjon el a led
    }
  }

}


[/code]
troby
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2016. március 22. kedd, 11:16

Re: Számláló konfigurálés/beállítás (Timer CTC mód)

Hozzászólás Szerző: troby »

Közben, meg lett oldva.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Számláló konfigurálés/beállítás (Timer CTC mód)

Hozzászólás Szerző: Robert »

Mi volt a megoldás vagy a kulcsa?
troby
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2016. március 22. kedd, 11:16

Re: Számláló konfigurálés/beállítás (Timer CTC mód)

Hozzászólás Szerző: troby »

USB analizátorral megmértem a megszakítás pontosságát és hát nem volt pontos. A szoftveres osztást ami 1000 volt 995 re kellett levenni így már tökéletesen pontos.
Válasz küldése