Přerušení u ATTiny2313
Moderátor: Moderátoři
Přerušení u ATTiny2313
Poradí mi někdo?
Díky
díky za radu, problém je ale v tom, že to co mi radíš jsem zkusil alespoň 10x a stejně to nefunguje. Problém je dost možná v adresaci obslužné rutiny, nebo také v AVR Studio, kde ručně měním nastavení registrů. Také je možné, že už pro oči nevidím a tak podobně. Pro jistotu, zde je můj zkušební kód.
Díky
Kód: Vybrat vše
ldi R16,(1<<2) ; Povoleni PCINT2
out PCMSK,R16
ldi R16,(1<<PCIF) ; Shozeni PCIF
out EIFR,R16
in R16,GIMSK
sbr R16,(1<<PCIE) ; Povoleni preruseni od Pin Change
out GIMSK,R16
Tak tady je ten kod?
int cnt = 0;
// Global variable cnt
void interrupt_ISR() org 0x0b
{ // Interrupt rutine
SREG_I_bit = 0; // Disable Interrupts
cnt++; // Increment variable cnt
SREG_I_bit = 1; // Enable Interrupts
}
void main()
{ int a; // Main program
DDRD = 0xF7; // Set PD3 as input
DDRB = 0xFF; // Set PortB as output
PORTD = 0x00;
PORTB = 0xFF; // Starting value for PortD
// Set the Interrupts
// MCUCR = 0b00000100; // Configure Interrupt for falling edge on PortD.3
// gimsk=0b10000000;
SREG_I_bit = 1; // Enable Interrupts
while(1){ // Unending loop
PORTB = cnt; // Write on PortB value of varibale cnt
}
}
Jinak assembler jsem už asi 50 let neviděl, ale řekl bych, že je to co dělám ručně v AVR Studiu.
Kód: Vybrat vše
volatile int cnt = 0; Nastavím PCIE v GIMSK a PCMSKO v PCMSK - takže jestli se nemýlím, PINB0 by měl reagovat na změnu hodnoty vyvoláním přerušení.
Při krokování programu ve smyčce WHILE změním hodnotu pinu B0 - nato reaguje pouze bit PCIF v EIFRu a nic jiného se neděje, jprogram pokračuje stále ve smyčce While.
Přitom pokud použiji INT0 či INT1 a nastavím MCUR a GIMSK, tak to funguje.
Vzhledem k tomu, že už mě máš nejspíš dost a patrně si už dáváš nějakou dobrou večeřičku, jdu dělat něco podobného, neboť mám plné zuby a prázdný bachor.
Přeji hezký večer
Přerušení u ATTiny2313
I když se již neozýváš, chtěl bych Ti touto cestou poděkovat za snahu pomoci mně s mým trápením.
Problém se vyřešil v momentě kdy jsem naprogramoval jednu AT2313 a zapojil ji s pár ledkami a spustil program. Přerušení fungovalo jak mělo!!! i když simulátor v AVR Studiu ukazoval něco jiného. AVR Studio jsem odinstlaloval a nainstaloval jej znovu se všemi aktualizacemi. Chování simulátoru se troch změnilo k lepšímu - přerušení začalo fungovat, nic méně signalizace nastavení registru GIMSK nefunguje stejně. A vzhledem k tomu, že se takto AVR Studio chová na dvou PC stejně, usuzuji spíše na chybu ve Studiu než na nepodařené instalaci.
Pokud máte někdo podobné zkušenosti, dejte vědět.
Hezký víkend všem.