mikrocontroller.net

Forum: Compiler & IDEs Probleme mit sei()


Autor: Daniel H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

hab mir jetzt mal das neue winavr drauf gemacht und jetzt hab ich ein
ganz komisches Prob. . Immer wenn der Controller an den Punkt sei();
kommt hängt er sich da auf. Das war aber noch nicht mit der älteren
Version so denke ich. Gibts da jetzt was zu beachten? Solltet ihr den
Prog. code  brauchen sagt bescheid (ist auf einem anderen PC). Je
später ich sei(); im Prog setzt desto weiter komm ich im code.

MFG
Daniel

Autor: Thomas K. (thkais)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dir ist schon bewusst, was sei() macht?

Dann müsste Dir auch in den Sinn gekommen sein, dass der Fehler nicht
am sei()-Befehl liegt, sondern in einem anderen Programmbereich.

Nur mal so als Tipp: Checke Deine Interrupt-Routinen durch.

Gruß
Thomas

Autor: Daniel H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also wenn ich das Richtig verstanden habe macht sei(); nichts anderes
als den globalen Interrupt zu aktivieren. Ich poste mal mein kleinen
Text vielleicht fällt da ja jemanden was auf.

#include <stdlib.h>
#include <lcd.h>
#include <lcd.c>
#include <avr/interrupt.h>

int stat = 0;
unsigned long int temp = 50;
unsigned long int time = 10; //
char buffer[20]; //buffer

ISR(TIMER1_CAPT_vect)
{
  temp = 100;
  temp = ICR1;
}

void lcd(void)
{

  itoa( time , buffer, 10); //wandle integer in string
  lcd_gotoxy(0,1); // gehe zu LCD Position X Y
  lcd_puts(buffer); //schreibe auf den LCD den Inhalt von Var buffer
}

int main(void)
{
  TIMSK |= (1<<TICIE1) | (1<<TOIE1); // Input Capture Interrupt
aktiviert; Timer 1 Overflow Interrupt aktiviert
  TCCR1B |= (1<<CS10) | (0<<CS11) | (0<<CS12); // Timer CPU-Takt /

  sei();

  lcd_init(LCD_DISP_ON);
  lcd_clrscr();
  lcd_init(LCD_DISP_ON);

  lcd_puts("Impulsdauer:\n");

  for(;;)
  {
  time = temp;
  lcd();
  }

}

Soll das jetzt heißen der hängt in der input capture interrupt fest?
Aber der wird doch nicht dauern ausgelöst hab das teil ja schonmal an
Masse angeschlossen damit da ja kein Signal anliegt.

Vielleicht sieht ja jemand was was ich falsch mache sitze schon wieder
so lange dadran das es wieder so einfach ist das ich es nicht sehe.

MFG
Daniel

Autor: André Kronfeldt (freakazoid)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> TIMSK |= (1<<TICIE1) | (1<<TOIE1); // Input Capture Interrupt
> aktiviert; Timer 1 Overflow Interrupt aktiviert
Wo ist ISR(TIMER1_OVF_vect)?

Grüße, Freakazoid

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ...den globalen Interrupt zu aktivieren...
Wer ist denn "der globale Interrupt"? Eher wird das globale
Interrupt-Enable-Bit gesetzt, wodurch Interrupt-Bearbeitung global
freigegeben wird.

Ansonsten hat André völlig recht. Ein Interrupt ohne Handler führt
i.d.R. zu einem Reset, wenn er auftritt.

Autor: Daniel H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@andré

hmm ja was soll ich sagen hab es immer und immer wieder überlesen.
Danke für die Hilfe bin echt ein schussel. Prog funzt aber ich glaub
den Fehler mach ich so schnell nicht wieder. Hab lange dran
rumgedockter

@johnny

Danke für die korrektur hast natürlich recht. Werde es mir merken.

Also Problem behoben!!!!!.

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

>TCCR1B |= (1<<CS10) | (0<<CS11) | (0<<CS12); // Timer CPU-Takt /

Das (0<<CS11) und (0<<CS12) klappt, aber so nicht moechtest du Bits
loeschen TCCR1B &= ~(1<<CS11) & ~(1<<CS12). In deinem Fall ist es aber
voellig egal.

Gruß,
Dirk

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.