Forum: Mikrocontroller und Digitale Elektronik Bitte Hilfe bei overflow Interrupt


von Matthias (Gast)


Lesenswert?

Halli Hallo,

Benutze Atmega16
Ich hab ein großes Problem, bitte helft mir. Ich bekomm das mit den
Interrupts nicht auf die Reihe. Ich erhalte beim compilieren Warnungen,
kann also das Hex-file draufladen aber es tut sich nix. Ich will die
Variable Sek hochzählen und auf ein LCD schreiben, wie schnell ist mir
vorerst mal egal.
Laut den Warnungen kennt er die ISR nicht (no prototype), benutze ich 
ein
fasches interrupt.h?

#include <avr\io.h>
#include <avr\interrupt.h>
#include "xlcd16.h"

void initPortsMC(void);

volatile int Sek;

//---------------------------------------------------------------------- 
--
ISR(SIG_OVERFLOW0)
{
  Sek++;
}
//---------------------------------------------------------------------- 
--

//---------------------------------------------------------------------- 
--
int main( void )
{
  Sek = 0;

  initPortsMC();
  lcd_port_init16();
  lcd_init16();
  // Display-Hintergundbeleuchtung
  BelDisHintergrund(1);

  TIMSK = ( 1 << TOIE0 );  // Timer Overflow Interrupts zulassen
  TCCR0 = ( 1 << CS01 );   // Vorteiler von 8

  sei();

  while(1)
  {
    lcd_gotoxy16(1,1);
    lcd_show_intvalue16(Sek);
  }
}
//---------------------------------------------------------------------- 
--


//---------------------------------------------------------------------- 
--
void initPortsMC(void)
{
    DDRA  |= 0b11110000;
    PORTA |= 0b11110000;
    DDRB  = 0b11111000;
    PORTB = 0b11111111;
    DDRC  = 0b11111111;
    PORTC = 0b11111111;
}
//---------------------------------------------------------------------- 
-----

von crazy horse (Gast)


Lesenswert?

while(1)
  {
    lcd_gotoxy16(1,1);
    lcd_show_intvalue16(Sek);
  }

Das ist auf jeden Fall schon mal ein dicker Klops. Damit bist du 
ununterbrochen am LCD beschreiben, das kann sich durchaus so äussern, 
dass du gar nichts mehr siehst.
Brauchst ja nur zu schreiben, wenn sich was ändert. Oder in sinnvollen 
Zeitabständen (>200ms). Dafür gibts ganz viele Lösungen.

von Karl H. (kbuchegg)


Lesenswert?

> Laut den Warnungen kennt er die ISR nicht (no prototype), benutze ich
> ein fasches interrupt.h?

Hmm.
Das passt eigentlich schon.
Das einzige ist, dass du anstatt SIG_OVERFLOW0 besser
TIMER0_OVF_vect benutzt. Die SIGxxx sind alte Sachen und
sind nur noch aus Kompatibilitätsgründen vorhanden.

Hast du den richtigen Prozessor eingestellt?

> Das ist auf jeden Fall schon mal ein dicker Klops.
Im Prinzip hat crazy horse schon recht. Allerdings ist das jetzt
noch nicht so schlimm. Die Einer und mgl. Zehnerstelle wird
flackern wie wild. Aber was solls.

von Sebastian (Gast)


Lesenswert?

Es heißt auch

#include<avr/io.h>
...
...

und nicht
#include<avr\io.h>

Gruß Sebastian

von Aufreger deluxe (Gast)


Lesenswert?

> Das einzige ist, dass du anstatt SIG_OVERFLOW0 besser
> TIMER0_OVF_vect benutzt.

Woher hast du das?

von Karl H. (kbuchegg)


Lesenswert?

Aufreger deluxe wrote:
>> Das einzige ist, dass du anstatt SIG_OVERFLOW0 besser
>> TIMER0_OVF_vect benutzt.
>
> Woher hast du das?


zb. aus dem Tutorial
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Veraltete_Funktionen_zur_Deklaration_von_Interrupt-Routinen

von Aufreger deluxe (Gast)


Lesenswert?

Danke!

von Karl H. (kbuchegg)


Lesenswert?

> Es heißt auch
>
> #include<avr/io.h>
> ...
> ...
>
> und nicht
> #include<avr\io.h>

Wie Pfadangaben geschrieben werden ist in C selbst nicht
geregelt, sondern hängt vom Betriebssystem ab, auf dem
der Compiler läuft. Windows akzeptiert beides, wobei die
Schreibweise mit dem \ die Windows-übliche-Nicht-C Schreibweise
ist.
Wenn man die Entwicklung nicht auf ein anderes Host-System
verlagert, spielt es keine Rolle welche Version man benutzt.
Ansonsten fährt man mit der / Schreibweise besser, da die meisten
C Compiler diese Version zusätzlich zu der auf dem Hostsystem
üblichen unterstützen.

Ansonsten: Wenn der Compiler das File nicht gefunden hätte,
hätte er das schon in Form eines Errors mitgeteilt.


von Sebastian (Gast)


Lesenswert?

@Karl-Heinz,

Hmm liegt wohl daran, daß ich nicht an einem Windowsrechner
arbeite, sorry.

Dachte nur, daß es vielleicht daran liegt.

Gruß Sebastian

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.