MCU boards - test og udvikling

MCU boards - test og udvikling

MCU boards

Tanken med denne blog er at samle nyttige links og andet til Micro Board.
Vi er i klubben startet op med et Arduino projekt og bloggen vil derfor være stedet hvor der kan deles "guldkorn" og der kan spørges, når / hvis I "kører fast" med Jeres eksperimenter
Gruppen lige nu er Istvan ( OZ1EYZ), Michael ( OZ5WU ), Niels ( OZ1JLT ), Jesper ( OZ9AFK ), Villads ( OZ3CM ) og Ole ( OZ8NZ ). Og alle er velkomne til at deltage og komme med gode idéer, så kom ud af "busken og deltag her til glæde for alle med interesse for disse små boards.

Timer interrupt i UNO board

Arduino UNOPosted by Ole Bent Nielsen Fri, February 13, 2015 18:38:54

Jeg har lavet en lille demo her på hvordan timer interrupt kan gøres på et UNO board.

Bemærk at den timer der bruges, somme tider anvendes i andre biblioteker, så det skal vi lige være opmærksomme på.
Jeg har fået inspiration fra denne side http://letsmakerobots.com/content/arduino-101-timers-and-interrupts , som giver et godt overblik over de funtioner der er til rådighed.

Kodestumpen er sakset på nettet og modificeret til demo. Ikke det store program; men det viser funktionen, så der er noget at gå videre med.
Timer interrupt er jo meget nyttige, når ting skal ske med bestemte intervaller, som f.eks. timebase o.lign.

------------ her er koden til at klippe ud og sætte i Arduino compileren -----------

/* Denne kode er sakset og modificeret så der tælles og udlæses hvert sekund
da det er en 500 mSec timer interrupt skal der tælles op med 2 for hver ganf der skrives ud
til terminalvinduet
OZ8NZ, Ole den 13.02.2015
*/
/*
Example Timer1 Interrupt
Flash LED every second
*/
#define ledPin 13
int cnt = 0 ; /* counter fra interupt */
int timer1_counter;
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
// initialize timer1
noInterrupts(); // disable all interrupts
TCCR1A = 0;
TCCR1B = 0;

// Set timer1_counter to the correct value for our interrupt interval
//timer1_counter = 64886; // preload timer 65536-16MHz/256/100Hz
//timer1_counter = 64286; // preload timer 65536-16MHz/256/50Hz
timer1_counter = 34286; // preload timer 65536-16MHz/256/2Hz

TCNT1 = timer1_counter; // preload timer
TCCR1B |= (1 << CS12); // 256 prescaler
TIMSK1 |= (1 << TOIE1); // enable timer overflow interrupt
interrupts(); // enable all interrupts
}

ISR(TIMER1_OVF_vect) // interrupt service routine
{
TCNT1 = timer1_counter; // preload timer
digitalWrite(ledPin, digitalRead(ledPin) ^ 1);
++cnt; /* add 1 ved interrupt */
}

void loop()
{
delay(1000);
Serial.print(" Counter har talt til ");
Serial.println(cnt);
if (cnt >= 100) /* Reset counter hvis > end = 100 */
{
cnt =0;
}
}





  • Comments(0)//mcu.oz8nst.dk/#post11