Probleme mit sei()

Gast #367961
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
Gast #367963
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
Gast #367965
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.
Gast #367966
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!!!!!.
Gast #367967
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.