mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe benötigt mit Timer/Interrupt auf


Autor: svens (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich brauche ein bisschen Hilfe mit Timern. Habe ein kleines Prog in C 
geschrieben, dass eine LED immer nach ca. 1 Sekunde an-/ausschaltet. 
Leider geschieht rein gar nichts (Kompiliert problemlos durch, nur die 
LEDs bleiben im Anfangszustand).

Die LEDs hängen an PortB Pin 4,5,6,7. Sie funktionieren tadellos, wenn 
ich sie direkt ansteuere gehts. Deswegen gehe ich davon aus, dass ich 
beim initialisieren des Timers einen Fehler gemacht habe.
  TIMSK = 0b1 ;// _BV( 0 );
  TCCR0 = 0b1 ;//_BV( 0 );
  sei();

(Die auskommentierten Werte stammen aus nem Tutorial, nach ner Recherche 
im inet, hielt ich aber den Wert 1 in beiden Fällen für sinnvoller. Es 
klappt mit beiden nicht.)

Das ganze kommt dann auf einen ATmega32.

Sieht jemand gerade meinen Fehler? Habe ich was mit der globalen counter 
Variable falsch gemacht?

Danke schon jetzt.

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

sind die LED's gegen GND oder VCC?

Autor: svens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die LEDs hängen zwischen VCC und PB4 bis PB7. Sollte ich anstatt DDRB 
PORTB verwenden?

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In diesem fall stimmt das schon

Autor: Joan P. (joan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
svens wrote:
> Ich brauche ein bisschen Hilfe mit Timern.

Ein bisschen?! ;-)

> Habe ein kleines Prog in C
> geschrieben, dass eine LED immer nach ca. 1 Sekunde an-/ausschaltet.
> Leider geschieht rein gar nichts (Kompiliert problemlos durch, nur die
> LEDs bleiben im Anfangszustand).

Mei.. in dem Code ist so einiges im Ar****.. 'Signal' nimmt man zB. 
nicht mehr.. das heißt jetzt ISR.. am besten du guckst mal durch das 
GCC-Tutorial hier auf der Seite links oben..
// Testprogramm um LED's an PortB ein- und auszuschalten

// inlcudes -----------------------------------------------
#include <avr/io.h>
#include <avr/interrupt.h>

// defines ------------------------------------------------
#define LED_GROUP (0x78) // Bit 7-4

// variables ----------------------------------------------
uint16_t count_overflow=0;

// Hauptprogramm ------------------------------------------
int main()
{  // DataDirectionRegisterB -> Richtung PortPins (1=out, 0=in)
  DDRB = (1<<DDB7)|(1<<DDB6)|(1<<DDB5)|(1<<DDB4)|(0<<DDB3)|(0<<DDB2)|(0<<DDB1)|(0<<DDB0);
  
  // Timer0 (8Bit): Normal-Mode(0), TOP = 0xFF, Prescaler 1
  TCCR0A = (1<<COM0A1)|(0<<COM0A0)|(0<<COM0B1)|(0<<COM0B0)|(0<<WGM01)|(0<<WGM00);
  TCCR0B = (0<<FOC0A)|(0<<FOC0B)|(0<<WGM02)|(0<<CS02)|(0<<CS01)|(1<<CS00);
  TIMSK0 = (0<<OCIE0B)|(0<<OCIE0A)|(1<<TOIE0); // Overflow ON

  sei(); // interupts global on

  while (1) // loop forever
  {
    
  }
  return 0;
} //------------------------------------- Ende Hauptprog */

// Timer0 Overflow Interrupt ------------------------------
ISR (TIMER0_OVF_vect)
{
  count_overflow++; 
  if (count_overflow >= 40)
  {
    PORTB = (~PINB & LED_GROUP); // toggle Pins
    count_overflow = 0; // reset counter
  }
} //-------------------------------------- Ende TOV0_INT */

Autor: Joan P. (joan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
glatt noch ein 'OR' vergessen.. weiß ja nicht, was an den anderen Pins 
noch so geschieht.. also:
PORTB |= (~PINB & LED_GROUP); // toggle Pins

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.