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

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