Nou, ben weer ff bezig geweest, maar kom er nog niet uit...
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/pgmspace.h>
#include "lcd.h"
#include "stdafx.h"
uint8_t i=0;
//Timer initialiseren
void initTimer(void)
{
TCNT0 = 0x00; //Preloaden
TCCR0 = 0x02; //Prescaler
}
//Interrupt initialiseren
void initInterrupt(void)
{
/* falling edge on Int0 or Int1 generates an interrupt */
GIMSK |= 0x40;
MCUCR = 0x00;
sei(); // enable interrupts
}
INTERRUPT (SIG_INTERRUPT0)
{
i++;
}
int main(void)
{
DDRD = 0x00;
initTimer();
initInterrupt();
sei();
INTERRUPT (SIG_INTERRUPT0);
lcd_init(LCD_DISP_ON);
lcd_puts("Encoder test...");
for(;;)
{
if((i%10)==1)
{
lcd_puts("ok");
}
}
}
Ik zal waarschijnlijk wel weer iets niet goed doen, maar ken er iemand mij een hint geven wat of waar....
Thanx!!!
Ik probeer GICR toe te voegen, maar hierop krijg ik de error: 'GICR' undeclared, thirst use in this function.
Hoe kan dat? Die moet ik toch gewoon kunnen neerzetten?
[edit] Heeft niemand een idee???? Kan ik de encoder wel gewoon op int0 (pd2) aansluiten? Kan ik in ieder geval verder met het schema!
[Bericht gewijzigd door xtreme_8ball op ]
Je hebt dus nog problemen om de interrupt aan de praat te krijgen?
Probeer eens dit simpele stukkie code:
void main (void)
{
DDRD = 0x00; /* poort D = input */
PORTD = 0x00; /* poort D alles laag */
GICR = 0x40; /* Enable INT0 op D2 */
MCUCR = 0x00; /* Low level generates interrupt */
sei(); /* enable interrupts */
lcd_init(LCD_DISP_ON);
lcd_puts("Encoder test...");
while(1);
}
INTERRUPT (SIG_INTERRUPT0)
{
lcd_puts("OK");
}
doet de interrupt het nu wel?
Marcel
AVR C tutorial http://expand.xs4all.nl/avr
waarschijnlijk een rare vraag, maar hoort de interrupt nu te gaan "tellen". Heb trouwens van INTERRUPT SIGNAL gemaakt. Heb er een schakelaar aan gehangen en als de schakelaar verbroken is loopt de waarde snel op. Als ik de schakelaar maak blijft de waarde stil staan...
Hoe kan dit ewn hoe kan ik dit verhelpen???
[edit]
Het probleem is al verholpen. Aantal aanpassingen gedaan.
Nu nog een laatste vraag, is het mogelijk om ergens in het programma, onafhankelijk van de positie, de interrupts te enabelen en disabelen?? Door mioddel van sei() en cli(). Heb het geprobeerd, maar het werkte helaas niet.
[Bericht gewijzigd door xtreme_8ball op ]
.