mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bitte Hilfe bei overflow Interrupt


Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
}
//---------------------------------------------------------------------- 
-----

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es heißt auch

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

und nicht
#include<avr\io.h>

Gruß Sebastian

Autor: Aufreger deluxe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das einzige ist, dass du anstatt SIG_OVERFLOW0 besser
> TIMER0_OVF_vect benutzt.

Woher hast du das?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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-Tu...

Autor: Aufreger deluxe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Karl-Heinz,

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

Dachte nur, daß es vielleicht daran liegt.

Gruß Sebastian

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.