simulace 4313 v AVR studiu
Moderátor: Moderátoři
už 4313 mám, jen jsem se k tomu ještě nedostal.
V ruštině jsem dělal i odborné texty, ale domluvit se už byl taky problém. Angličtina ale teď chybí, protože ale vše skáče z hlavy rychleji, než to přečtu, nelámu to přes koleno. Pochopit nějakou funkci s google překladačem je jinak docela fuška.
JiříMS
koho toto téma ještě zajímá:
Ověřil jsem to a vyzkošel v reálu. Jak píše FHonza, procesor fungje podle datasheetu, t.j. podle masek přerušení PCIE0,1,2 a je třeba správně volit i PCMSK0,1,2 a správný vektor přerušení. Na simulátoru to nepůjde nastavit (jedině po úpravě souboru tn4313.def), PCIEx je tak nutné nastavovat číslem a ne názvem bitu. V každém případě to nebude vidět na registrech (GIMSK).
Ještě jednou dík za pomoc.
JiříMS
P.S.: Kde to je, u slona? Většinou kupuju v GM, pokud jde o větší množství, u TME.
Kód: Vybrat vše
#include <avr/io.h>
#include <avr/interrupt.h>
// LED sviti "na" log 0
// zapojeny katoda na PD0, PD1, anoda na VCC + rezistory
// testovani GIFR je tady zbytecne, zde jenom pro ukazku "ze to funguje"
ISR(PCINT_B_vect)
{
if (GIFR & (1 << PCIF0))
{
PORTD = 0xfd; // sviti druha LED
}
}
ISR(PCINT_A_vect)
{
if (GIFR & (1 << PCIF1))
{
PORTD = 0xfc; // sviti obe LED
}
}
ISR(PCINT_D_vect)
{
if (GIFR & (1 << PCIF2))
{
PORTD = 0xfe; // sviti prvni LED
}
}
int main()
{
DDRA = 0; // vsechny vstupni
PORTA = 0xff; // pull-up nastaveny
DDRB = 0;
PORTB = 0xff;
DDRD = 3; // vstupni vsechny krome PD0, PD1
PORTD = 0xff; // pull-up nastaveny, na PD0 a PD1 log. 1, tj. LED nesviti
GIMSK = (1 << PCIE0) | (1 << PCIE1) | (1 << PCIE2); // povoleno preruseni od vsech pinu PCINT0..17
PCMSK0 = (1 << PCINT0); // tj. PB0
PCMSK1 = (1 << PCINT9); // tj. PA1
PCMSK2 = (1 << PCINT17); // tj. PD6
sei();
while (1);
return 0;
}
P.S. u slona říkám GM podle loga