mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATtiny1614 2 Interrupts heben sich auf?!


Autor: Mr. AVR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich scheitere gerade am Tiny1614. Ich habe dort einen Pin-ISR mit einem 
dort anliegenden Signal von ca. 20 khz. Wird auf beide Flanken 
getriggert.

Dann habe ich einen weiteren ISR für den Systemtimer der liegt bei 20 
khz für Servo, PWM usw.

Jetzt habe ich folgenden Effekt:

1. Ich aktiviere den TCD-ISR

TCD0.CMPBCLR = 31;
  TCD0.INTCTRL = TCD_OVF_bm;
  TCD0.CTRLB = TCD_WGMODE_ONERAMP_gc;
  TCD0.CTRLA = (TCD_CLKSEL_20MHZ_gc | TCD_CNTPRES_DIV32_gc | 
TCD_SYNCPRES_DIV1_gc | TCD_ENABLE_bm);

er funktioniert.

Aktiviere ich nun noch den PORTA.ISR ist der TCD Timer deaktiv. Der 
Port-ISR hingegen funktioniert jetzt. Was ist das?!

Autor: Mr. AVR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So mache ich übrigends den Pin-ISR

PORTA.PIN7CTRL = (PORT_ISC_BOTHEDGES_gc | PORT_PULLUPEN_bm);

Außerdem, mit deaktiv meine ich das er dort nicht mehr reinspringt.

Autor: MR. AVR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat keiner eine Idee?

Ich verstehe das nicht. Ich habe es mit mehreren Timern jetzt getestet 
(TCB, TCD - TCA wird bereits verwendet ohne Interrupt zur ermittlung des 
Signals am PORTA7 Interrupt).

Warum geht kein Timer-Interrupt mehr, sobald man Pin-Interrupt 
anschaltet=?!

Autor: Route 6. (route_66)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Die Glaskugel verzerrt deinen Quelltext so sehr, dass man keine richtige 
Antwort geben kann.
Vermutung: du überfährst deinen µC mit dem Flanken-INT an PortA alle 25 
µs.
Der Timer kommt nicht mehr zum Zuge.
Alles geraten!

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Route 6. schrieb:

> Vermutung: du überfährst deinen µC mit dem Flanken-INT an PortA alle 25
> µs.
> Der Timer kommt nicht mehr zum Zuge.
> Alles geraten!

Könnte auch ganz simpel an einer falschen Initialisierung des 
Interruptcontrollers liegen. Den entsprechenden Codeteil (namlich das 
Enablen des zweiten Interrupts) hat er uns aber auch vorenthalten, so 
dass auch hier die Glaskugel orakeln muss...

Autor: Mr. AVR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c-hater schrieb:
> Route 6. schrieb:
>
>> Vermutung: du überfährst deinen µC mit dem Flanken-INT an PortA alle 25
>> µs.
>> Der Timer kommt nicht mehr zum Zuge.
>> Alles geraten!
>
> Könnte auch ganz simpel an einer falschen Initialisierung des
> Interruptcontrollers liegen. Den entsprechenden Codeteil (namlich das
> Enablen des zweiten Interrupts) hat er uns aber auch vorenthalten, so
> dass auch hier die Glaskugel orakeln muss...

Vielen Dank für die Antworten. Anbei mal die Init der Sachen. Aktuell - 
aus Testzwecken - habe ich bereits alles auskommentiert. Es ist jetzt 
nur noch im programm die beiden ISR-Routinen (jeweils wird dort ein 
Port-Pin getoggelt) mehr nicht.


Die gleiche Software lief auf einem Attiny84 auch mit 20 Mhz. Da war 
alles kein Problem. Daher wundert mich das Ganze. Ich denke auch das ich 
etwas falsch initialisiert habe. Ich frage mich nur ernsthaft was.



//make clock system without prescaler
  CPU_CCP = 0xD8;
  CLKCTRL_MCLKCTRLA = CLKCTRL_CLKSEL_OSC20M_gc;
  CPU_CCP = 0xD8;
  CLKCTRL_MCLKCTRLB = 0;

  CPU_CCP = 0xD8;
  WDT.CTRLA = 0;


  PORTA.DIR = 0b11111001;
  PORTA.OUT = 0;

  PORTB.DIR = 0b11111100;
  PORTB.OUT = 0;

  ADC0.CTRLC = (ADC_SAMPCAP_bm | ADC_REFSEL_VDDREF_gc | 
ADC_PRESC_DIV256_gc);
  ADC0.MUXPOS = (ADC_MUXPOS_AIN2_gc);
  ADC0.CTRLA = (ADC_REFSEL1_bm | ADC_ENABLE_bm);  //8bit & enable
  ADC0.COMMAND = ADC_STCONV_bm;


//Timer init with 1ms/ovf (only for timing, e.g can dimming (soft)
  //Für den Timer (interrupt)  (20 kHz)
  TCD0.CMPBCLR = 31;
  TCD0.INTCTRL = TCD_OVF_bm;
  TCD0.CTRLB = TCD_WGMODE_ONERAMP_gc;
  TCD0.CTRLA = (TCD_CLKSEL_20MHZ_gc | TCD_CNTPRES_DIV32_gc | 
TCD_SYNCPRES_DIV1_gc | TCD_ENABLE_bm);

  //timer for detection cnt
  TCA0.SINGLE.PER = 0xFF;
  TCA0.SINGLE.CTRLA = (TCA_SINGLE_CLKSEL_DIV64_gc | 
TCA_SINGLE_ENABLE_bm);


//PCINT for DCC_DETECT, Pull Up for DCC
  PORTA.PIN7CTRL = (PORT_ISC_BOTHEDGES_gc | PORT_PULLUPEN_bm);

Autor: Mr. AVR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ISR(PORTA_PORT_vect)
{
  tgl other pin
}

ISR(TCD0_OVF_vect)
{
  tgl pin

  //reset int ctrl
  TCD0.INTFLAGS = TCD_OVF_bm;
}

Autor: Äxl (geloescht) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
stell mal das Projekt hier ein. wie soll man das sonst durch den 
Debugger jagen?

Autor: Simon G. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Äxl (geloescht) schrieb:
> stell mal das Projekt hier ein. wie soll man das sonst durch den
> Debugger jagen?

Sorry für die späte Rückmeldung! Anbei mal das Testprogramm. Ich 
verzweifel langsam echt, ich verstehe nicht warum das nicht geht. So 
eine Sache wäre bei einem "normalen" Tiny oder Mega kein Problem. Selbst 
bei einem XMega habe ich sowas am Laufen.

Bin echt mehr als Dankbar für jede Unterstützung und Hilfe.

Autor: axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Route 6. schrieb:
> Vermutung: du überfährst deinen µC mit dem Flanken-INT an PortA alle 25
> µs.
> Der Timer kommt nicht mehr zum Zuge.

Magst Du das bitte mal ernster nehmen?

Autor: axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Intflag muss im Pininterrupt manuell zurückgesetzt werden.

Autor: Mr. AVR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
axel schrieb:
> Das Intflag muss im Pininterrupt manuell zurückgesetzt werden.

H am Pinint? Beim Timer habe ich es gelesen das es gemacht werden muss, 
teste ich danke Timer. Finde das doof das man das manuell machen muss.

Autor: Simon G. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
axel schrieb:
> Das Intflag muss im Pininterrupt manuell zurückgesetzt werden.

Danke, das war es wiklich. Jetzt läuft alles wie vorher auf dem Tiny84 
auch. Super danke. Super Teil, dann kann ich den jetzt ersetzen den 
Tiny84.

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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.