www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik einzelne interrupts ein- bzw ausschalten


Autor: andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo bin grad wieder mal beim programmieren auf ein kleines problemchen 
gestoßen. und zwar hab ich das problem, dass ich mit meinem atmega16 
zwei timer mit interrupts benutze. jetzt stehe ich vor dem problem, dass 
mir bisher nur die möglichkeit die interrupts global ein- bzw. 
auszuschalten mit sei() bzw. cli().

in meinem fall ist es aber wichtig, dass ich die interrupts einzeln ein- 
und ausschalten muss, weil sonst mein piezosummer ständig piepst.

hier mein kurzer programmausschnitt:

ISR(TIMER2_OVF_vect)
{
  PORTB |= (1<<PB4);
}
               //PWM für LEDs
ISR(TIMER2_COMP_vect)
{
  PORTB &=~ (1<<PB4);
}
 

ISR(TIMER0_COMP_vect)
{
PORTD ^= (1<< PD6);      //PD6 togglen für Piezosummer
}

int main(void)
{
  DDRB = 0xFF;   //Gesamtes Portregister als Ausgang
  DDRD = 0b11110000; // PD0 bis PD3 als Eingang
 
  PORTB = 0b00000000;    //Alle Pins von PortB auf 0
  PORTB |= (1<<PB3);    //SCL auf high => Reset von Schieberegister aus
  DDRD |= (1<<PD6);    //Ausgang für Piezosummer
  PORTD &=~ (1<<PD6);    //  nötig, da Piezo schwingt, wenn er dauerhaft an Vcc liegt


  
  /* Timer2 Initialisierung */
  
  TCCR2 |= (1<<CS22) | (1<<CS21);                //Prescaler auf 256
  TIMSK |= (1<<TOIE2) | (1<<OCIE2);    // Interrupt bei Overflow und  Compare Match
 
  /* Timer0 Initialisierung */

  TIMSK |= (1<< OCIE0);  //Interrupt bei Compare Match (hier Zählerstand auf 0 zurücksetzen, da CTC- Modus)
  TCCR0 = (1<<WGM01);    // CTC- Modus
  TCCR0 |= (1<<CS00) | (1<<CS01); //Prescaler auf 64
  
  sei();                //globale Interrupts ein
 
 
  LED_Fading();
  long_delay(1000);

  lauflicht();
  long_delay(1000);

  lichtschweif();
  long_delay(1000);
  schlussakkord_schnell();

  while(1)
  {  
    
  }

  return 0;
}


mein problem ist jetzt, dass der interrupt von timer0 nur ausgeführt 
werden darf, wenn der piezo töne von sich geben soll.

wer kann mir weiterhelfen?

mfg andi

Autor: Michael Roek (mexman) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Andi,

schau bitte mal auf Deinen Bildschirm.
Genau oberhalb des Fensters, in dem Du Deine Postings schreibst.

Was steht da?


Ich Kopier´s hier nochmal hin:

###################################
Groß- und Kleinschreibung verwenden
###################################

Scheinbar kannst Du das, denn in Deinem Code finde ich prima 
Grossbuchstaben.
Aber herzlichen Dank dafuer, dass Du - im Unterschied zu vielen Anderen 
- wenigstens weisst, wann man "dass" mit zwei "s" schreibt und auch 
Satzzeichen kennst Du.
Dann duerfte die "Shift"-Taste doch auch noch zu bedienen sein, oder?


Gruss

Michael






> hallo bin grad wieder mal beim programmieren auf ein kleines problemchen
> gestoßen. und zwar hab ich das problem, dass ich mit meinem atmega16
> zwei timer mit interrupts benutze. jetzt stehe ich vor dem problem, dass
> mir bisher nur die möglichkeit die interrupts global ein- bzw.
> auszuschalten mit sei() bzw. cli().
>
> in meinem fall ist es aber wichtig, dass ich die interrupts einzeln ein-
> und ausschalten muss, weil sonst mein piezosummer ständig piepst.
>
> hier mein kurzer programmausschnitt:
>
> mein problem ist jetzt, dass der interrupt von timer0 nur ausgeführt
> werden darf, wenn der piezo töne von sich geben soll.
>
> wer kann mir weiterhelfen?
>
> mfg andi

Autor: Michael D. (michael_2001)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun,

Du hast hier:
TIMSK |= (1<<TOIE2) | (1<<OCIE2);    // Interrupt bei Overflow und  Compare Match
TIMSK |= (1<< OCIE0);  //Interrupt bei Compare Match (hier Zählerstand auf 0 zurücksetzen, da CTC- Modus)
die Interrupts eingeschaltet.

Z.B. durch setzen des entsprechenden Bits auf Null kannst Du sie auch 
wieder ausschalten. Achte darauf, das Du die anderen Bits nicht 
unbeabsichtigt änderst.

Siehe dazu auch den Artikel: 
http://www.mikrocontroller.net/articles/Bitmanipulation

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>hier mein kurzer programmausschnitt:

Sieht nicht so aus.

> TIMSK |= (1<<TOIE2) | (1<<OCIE2);    // Interrupt bei Overflow und  Compare 
Match

Wenn man die Interrupts durch Setzen der Bits einschaltet, kann man sie 
durch Löschen auch wieder ausschalten.

Man sollte wenigstens verstehen, was man kopiert.

MfG Spess

Autor: andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ganz ehrlich. ich halte es in so einem forum nicht für nötig die 
shiftaste zu benutzen. manchmal kommt es mir hier so vor, als könnte 
eine korrekte Groß- und Kleinschreibung leute glücklich machen.

aber das war jetzt ja auch nicht der grund für meinen post. ich habe ja 
ein ganz anderes problem.

mfg

Autor: Grossschreiber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
andi schrieb:
> ganz ehrlich. ich halte es in so einem forum nicht für nötig die
> shiftaste zu benutzen.
>
dann hast du ja Glück, dass du jemanden in diesem Forum gefunden hast, 
der es für notig hielt dir zu antworten...

Ich finde diese Ignoranz dt. Rechtschreibung zeugt von einer gehörigen 
Portion Ignoranz und Aroganz!

Autor: andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 schrieb:
> Hi
>
>>hier mein kurzer programmausschnitt:
>
> Sieht nicht so aus.
>
>> TIMSK |= (1<<TOIE2) | (1<<OCIE2);    // Interrupt bei Overflow und  Compare
> Match
>
> Wenn man die Interrupts durch Setzen der Bits einschaltet, kann man sie
> durch Löschen auch wieder ausschalten.
>
> Man sollte wenigstens verstehen, was man kopiert.
>
> MfG Spess

danke spess. es ist nicht so, dass ich nicht verstehe was ich 
programmiere. aber hatte wohl grad einfach ein brett vor dem kopf. hab 
viel zu kompliziert gedacht.

mfg

Autor: andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grossschreiber schrieb:
> andi schrieb:
>> ganz ehrlich. ich halte es in so einem forum nicht für nötig die
>> shiftaste zu benutzen.
>>
> dann hast du ja Glück, dass du jemanden in diesem Forum gefunden hast,
> der es für notig hielt dir zu antworten...
>
> Ich finde diese Ignoranz dt. Rechtschreibung zeugt von einer gehörigen
> Portion Ignoranz und Aroganz!

tut mir leid. ich weiß echt nicht was das problem einiger hier ist. was 
bringt es denn bitte außer mehr zeitaufwand wenn man hier auf penible 
Groß/Kleinschreibung achtet.
dieses forum beschäftigt sich mit mikrocontrollern und allem was dazu 
gehört. dazu ist es eine hervorragende möglichkeit bei fragen und 
antworten zu diesem thema mit anderen auszutauschen bzw. anderen zu 
helfen.

vielleicht sollte sich der ein oder andere hier im forum mal darüber 
gedanken machen, ob er nicht in einem "deutschgrammatikforum" besser 
aufgehoben wäre.

mfg andi

Autor: Grossschreiber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
andi schrieb:
> tut mir leid. ich weiß echt nicht was das problem einiger hier ist. was
> bringt es denn bitte außer mehr zeitaufwand wenn man hier auf penible
> Groß/Kleinschreibung achtet.
>
...wenn deine Programme auch so oberfläch hingeschludert sind, na dann 
gute Nacht.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
andi schrieb:
> was
> bringt es denn bitte außer mehr zeitaufwand wenn man hier auf penible
> Groß/Kleinschreibung achtet.

Es erleichtert das Lesen.  Ohne groß/klein drückst Du aus, dass Dir der 
Leser egal ist.  Soll er sich ruhig ein bisschen mehr Mühe geben als 
mit.

Statt dass sich der ganze Rest bemüht, könnte sich der Eine, der 
schreibt, vielleicht Mühe geben?  Wäre das nicht besser?

Der Sinn ist mit Groß/Kleinschreibung einfach schneller zu erfassen (und 
manchmal nur mit ihr:  er hat in moskau liebe genossen).

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>vielleicht sollte sich der ein oder andere hier im forum mal darüber
>gedanken machen, ob er nicht in einem "deutschgrammatikforum" besser
>aufgehoben wäre.

Warum fragst du dann nicht in einem englischsprachigen Forum?

Für mich ist ist eine (möglichst) korrekte Schreibweise, incl. 
Groß-/Kleinschreibung ein Ausdruck der Bildung. Und die schaltet man 
auch nicht einfach an und ab. Also wenn du deine, hoffentlich vorhanden, 
Bildung weiter verheimlichen willst, dann bleib bei deiner Schreibweise.

MfG Spess

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.