Bitte Hilfe bei overflow Interrupt

Gast #427356
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;
}
//---------------------------------------------------------------------- 
-----
Gast #427376
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.
#427379
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.
#427394
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren