Hallo,
Ik probeer hier te beginnen met microcontrollers.
Nu probeerde ik de externe interupts te programmeren van de ATMEGA8 in AVR studio 4..
Alleen, Hij doet het niet...
In die simulator zie je duidelijk dat hij dat MCUCR en de GICR registers niet volschrijft, zoals ik wil...
Wat doe ik juist mis?
#include <avr/io.h>
void init_int (void)
{
//Externe interupt 1 reageerd op de stijgende flank
MCUCR = MCUCR & 0b11111100;
//initialiseer interupt 1
GICR= GICR & 0b10000000;
}
ISR(INT0_vect)
{PORTB = 0b01010101;}
int main (void)
{
DDRC=0xFF;
DDRB=0xFF;
init_int();
while(1)
{
PORTC = 0b01010101;
PORTC = 0b10101010;
}
}
Vriendelijke groeten,
plantrekker
True story bro!
binair in AVRStudio gaat niet dacht ik. Zet al je instellingen om naar hexadecimaal.
0b11111111 = 0xFF
0b00000000 = 0x00
[edit]
Je probeert ook op een verkeerde manier naar een register te schrijven
MCUCR = MCUCR & 0b11111100;
maar:
MCUCR |= 0xFC;
[/edit]
[Bericht gewijzigd door plantrekker op (39%)]
pcnerd
Take a parachute, and jump!
Meestal wordt schrijven naar registers zo gedaan:
REGISTER |= _BV(BITNAAM)|_BV(ANDEREBITNAAM);
_BV(x) komt neer op (1 << x).
REGISTER &= ~(_BV(BITNAAM)|_BV(ANDEREBITNAAM));
laag zetten van specifieke bitjes
Op deze manier is het voor iederen duidelijk welke bitjes je hoog of laag set, voor jezelf vooral, scheelt een hoop fouten e.d.
enneh, om vectoren gebruiken is het handig om ff avr/interrupt.h te includen. de _BV definitie zit in avr/sfr_defs.h als ik me niet vergis.
euh, en waar vind ik die .h files?
Ja, voor de rest lukt het schrijven nar die registers al. Maar ook die instructie SEI(); kent hij niet... zit dat ook in zo een .h?
en staat in deze .h file alle informatie over de ATmega8?
deze ===> #include <avr/io.h>
[Bericht gewijzigd door morelli op (21%)]
pcnerd
Take a parachute, and jump!
zit ook in een .h en die moet met kleine letters (cli() en sei() )
die .h zijn includes, die pas je net zo toe als die avr/io.h include die je al hebt staan.
Hier staan de standaard files die je hebt:
http://www.nongnu.org/avr-libc/user-manual/modules.html
maareh, als dit al niet lukt stel ik voor dat je met een knipper led begint. http://expand.xs4all.nl/avr/intro.html heeft een paar leuke inleidende tutorials.
Kijk ook ff op die website welke informatie ze allemaal bevatten.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Ik weet dat interrupts aan de praat krijgen altijd een gedoe is. Ik werk na een paar jaar met AVRs gewerkt te hebben dus nog steeds niet met interrupts. Foei!. Maar goed. Het is heel vaak zo dat je vergeet ergens een bitje te zetten wat nodig is om interrupts aan te zetten.
OFwel ergens in een register een "global interrupt enable" ofwel in de processor.
Verder zou ik even willen adviseren om een PORTB=0; aan eht begin te zetten, zodat je zeker weet dat je interrupt routine is langsgekomen en er niet toevallig nog 0x55 in portb stond.
Ah, dat zal ik zeker doen..
Op school hebben we ook wel leren werken met een AVR maar dan de ATmega32. Ook altijd zonder interupts, maar nu wou ik voor de verandering toch eens met die interupts leren gebruien..
Jawel, het werkt! 
Blijkbaar had ik per ongeluk een bitje hoog gemaakt dat niet hoog mocht, daarom ging hij telkens bij een interupt zoeken achter die routine of zo iets...