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?!
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.
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=?!
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!
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...
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);
ISR(PORTA_PORT_vect) { tgl other pin } ISR(TCD0_OVF_vect) { tgl pin //reset int ctrl TCD0.INTFLAGS = TCD_OVF_bm; }
stell mal das Projekt hier ein. wie soll man das sonst durch den Debugger jagen?
Ä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.
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?
Das Intflag muss im Pininterrupt manuell zurückgesetzt werden.
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.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.