mikrocontroller.net

Forum: Compiler & IDEs Timer 3 Signal löst reset aus


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute! Ich habe folgendes Problem mit Timer Counter 3 in einem 
Atmel Mega 128:
Wenn ich einen Interrupt durch den Vergleich mit OCIE3A auslöse, dann 
wird dieser ausgeführt. Nach einiger Zeit (ca. 2 Sekunden) führt der 
Prozessor einen Reset aus.
Die selbe Routine mit Timer Counter 1 funktioniert jedoch fehlerfrei.

Füge ich bei der Fehlerhaften Variante mit Timer 3 die Signalroutine von 
Timer Counter 1 ein, dann funktioniert diese  - führt allerdings beide 
Signalroutinen aus.

Mittlerweile gehn mir die Ideen aus, an was dies liegen kann.

Hier die drei Codevarianten:

Zuerst der funktionierende mit Timer 1:
#include "timing.h"
extern unsigned int msek;

void INITTIMING()             
{
  TCCR1A = 0b00000000;
  TCCR1C = 0b00000000;
  TCCR1B = 0b00000100;
  OCR1A =  4316;              //100mSek bei11,05 MgHz
  TIMSK |= (1<<OCIE1A);
  TCNT1 = 0;
 }


SIGNAL(SIG_OUTPUT_COMPARE1A)      
{
  TX0('T');
  TCNT1 = 0;
  msek++;             
} 

Ausgabe: TTTTTTTTTTTTTTT

Der selbe Code mit Timer 3 löst in regelmäßigen Abständen einen Reset 
aus
#include "timing.h"
extern unsigned int msek;

void INITTIMING()          
 {
  TCCR3A = 0b00000000;
  TCCR3C = 0b00000000;
  TCCR3B = 0b00000100;
  OCR3A =  4316;            
  ETIMSK |= (1<<OCIE3A);
  TCNT3 = 0;
 }

SIGNAL(SIG_OUTPUT_COMPARE3A)       
{
  TX0('T');
  TCNT3 = 0;
  msek++;           
} 

Ausgabe diese Codes:

TTTTTTTTTTTTTTTTTT - dann ein Reset - TTTTTTTTTTTTTT - Reset, ...


Wenn ich den Code so abändere, das die "Signalsprungadresse von 
Compare1a vorhanden ist, dann springt das Programm bei einem Macht mit 
Timer 3 zuerst in diese, und danach in die gewünschte mit Timer 3

So sieht das programm dann aus:
#include "timing.h"
extern unsigned int msek;


void INITTIMING()          
 {
  TCCR3A = 0b00000000;
  TCCR3C = 0b00000000;
  TCCR3B = 0b00000100;
  OCR3A =  4316;              
  ETIMSK |= (1<<OCIE3A);
  TCNT3 = 0;
 }



  

SIGNAL(SIG_OUTPUT_COMPARE1A)      
 {
  TX0('T');
  TCNT1 = 0;
  msek++;               
 } 


SIGNAL(SIG_OUTPUT_COMPARE3A)    
 {
  TX0('O');
  TCNT3 = 0;
  msek++;               
 } 

Die Ausgabe über die Serielle Schnittstelle ist dan TOTOTOTOTO.....
Hier tritt kein Reset auf

Im Buildfenster vom AVR Studio treten keine Fehler oder Warnungen auf.

Hier die Meldung:
Build started 21.6.2007 at 11:04:09
avr-gcc.exe  -mmcu=atmega128 -Wall -gdwarf-2   -Os -fsigned-char -MD -MP 
-MT timing.o -MF dep/timing.o.d  -c  ../timing.c
avr-objcopy -O ihex -R .eeprom  maniptctrl.elf maniptctrl.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" 
--change-section-lma .eeprom=0 -O ihex maniptctrl.elf maniptctrl.eep

AVR Memory Usage
----------------
Device: atmega128

Program:   15140 bytes (11.6% Full)
(.text + .data + .bootloader)

Data:        443 bytes (10.8% Full)
(.data + .bss + .noinit)


Build succeeded with 0 Warnings...
Ich Verwende AVR - Studio 4.12 Service Pack4, Build 498

Vielen Dank schon mal für Eure Hilfe!
 LG
 Peter

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal!
Ich vergass timing.h anzugeben!
#include <avr/io.h>
#include <stdio.h>
#include <avr/interrupt.h>



//Prototypendeklarationen:
void INITTIMING();      

LG
 Peter

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.