Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit Interrupt bei Lauflicht

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.03.2014, 13:08 Uhr
~Compiler Klaus
Gast


Hallo ihr Programmer!

Ich habe einen groben Fehler in meiner Code.
Ich habe ein Lauflicht codiert, bei dem der Interrupt irgendwie kaputt ist!

Der Interrupt unterbricht immer mein laufendes Programm, was ist da los, das soll er nicht machen????

Ich bitte um Hilfe!

Hier die Code:


C++:
#include <avr/io.h>
#include <avr/interrupt.h>

//LEDs
#define LED1 PC4
#define LED2 PC3
#define LED3 PD0
#define LED4 PD1
#define LED5 PD2
#define LED6 PD3
#define LED7 PD4
#define LED8 PD5
#define LED9 PD6
#define LED10 PD7

volatile unsigned int sec;

ISR(TIMER1_OVF_vect)
{
  sec++;
  if (sec==9) {sec = 0;}

  // ATMEGA8 @ 1MHz; Prescaler 64 => 15625 Takte/sec
  // Vorzähler auf 65536 - 15625 = 49911 einstellen
  // ==> Hochzählen alle 1 sec

  TCNT1 = 49911;
}

int main(void)
{
  TIMSK |= (1<<TOIE1);    //Interrupt bei OVF
  TCCR1B |= (1<<CS10 | 1<<CS11);  //Prescaler 64
  TCNT1 = 0xFFFF;      //starte sofort mit Interrupt
  sei();
  DDRD = 0xFF;

  //Initialwerte
  PORTD = 0x00;
  sec = 0;

  while(1)
  {
    if (sec==1) {PORTD ^= (1<<LED3);}
    if (sec==2) {PORTD ^= (1<<LED4);}
    if (sec==3) {PORTD ^= (1<<LED5);}
    if (sec==4) {PORTD ^= (1<<LED6);}
    if (sec==5) {PORTD ^= (1<<LED7);}
    if (sec==6) {PORTD ^= (1<<LED8);}
    if (sec==7) {PORTD ^= (1<<LED9);}
    if (sec==8) {PORTD ^= (1<<LED10);}
  }

  return(0);
}



Liebe Code,
Klaus Compiler
----
Edit: code-Tags durch cpp-Tags ersetzt

Dieser Post wurde am 26.03.2014 um 02:10 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.03.2014, 02:59 Uhr
Hans
Library Walker
(Operator)


Hi,

Hm... könnte es sein, dass Du die Werte von TIMSK und TCCR1B nicht mit ODER-GLEICH, sondern nur mit GLEICH initialiieren musst, also so:

C++:
  TIMSK = (1<<TOIE1);    //Interrupt bei OVF
  TCCR1B = (1<<CS10 | 1<<CS11);  //Prescaler 64


Das erscheint mir jedenfalls logischer, sofern kein weiteres Programm auf dem Controller vorhanden ist. - Ich weis aber auch nicht, welchen Zustand die nach einem Hardware-Reset bzw. nach dem Einschalten haben. Sofern der nicht eindeutig definiert ist, würde ich jedenfalls so initialisieren, damit auch alle Bits so stehen, wie ich es brauche.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.03.2014, 08:51 Uhr
ao

(Operator)


Moin Klaus, es ist wahrscheinlich nur eine Kleinigkeit, aber ich habe noch nie mit AVR-Mikrocontrollern gearbeitet und sehe den Fehler daher nicht. Ich kann mit der Beschreibung "der Interrupt unterbricht das Programm" auch nicht wirklich was anfangen.

Ich würde dir empfehlen, mal www.mikrocontroller.net zu durchstöbern. Da gibts viel Info zu AVR-Programmierung, z.B. hier:

www.mikrocontroller.net/articles/AVR-Tutorial
www.mikrocontroller.net/articles/AVR-Tutorial:_Interrupts
www.mikrocontroller.net/articles/Interrupt
www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmieren_mit_Interrupts

Wenn du die Lösung da nicht schon findest, gibt es auch ein Forum, wo man seine Fragen direkt stellen kann: www.mikrocontroller.net/forum/mikrocontroller-elektronik

Eine Warnung halte ich aber für angebracht: Die Leute dort sind fachlich sehr kompetent, aber freundlicher Umgang mit Newbies gehört nicht immer zu ihren Stärken. Auf unpräzise Fragen reagieren sie schnell genervt.

Du solltest dort genauer beschreiben, was nicht funktioniert. Dass der Interrupt das normale Programm unterbricht, ist normal, dafür ist er da und darum heißt er auch so.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: