Wij moeten een paar robotjes programmeren voor school. Die werken met een avr en de democode is in c geschreven. Nu leren we natuurlijk niks als we die code gewoon overnemen dus willen we de code zelf maken in bascom (is wat makkelijker dan c).
Maar we krijgen de timer0 interrupt niet werkend.
We hebben nu deze code voor interrupt op te zetten:


Config Timer0 = Timer , Prescale = 256

Const Timer0_reload = 0

Enable Interrupts
Enable Timer0
On Timer0 Interupt_label Nosave

Nu blijft de avr ergens hangen en we weten niet waar. Als we “Enable Interrupts” weg doen dan is het probleem opgelost maar is er natuurlijk geen interrupt.

De code van de interupt routine:


Interupt_label:
   If Led_bit = 0 Then
      Sensor0 = 1
      Sensor1 = 1
      Sensor2 = 1
      Led_bit = 1
   Else
      Sensor0 = 0
      Sensor1 = 0
      Sensor2 = 0
      Led_bit = 0
   End If
    Timer0 = 0
Return
Return

De gebruikte avr is een Atmega8

Weet iemand waar het probleem zit? Heb al wat gegoogled maar overal wordt de interrupt zo gedefinieerd.
Alvast bedankt!

Op 3 februari 2009 20:03:17 schreef Stynus:

On Timer0 Interupt_label Nosave

Daarzo. Zoek even op wat de Nosave parameter doet.

Bereken om de hoeveel tijd de interrupt wordt aangeroepen.
Bereken vervolgens hoe lang de code in de interrupt routine duurt door in de asm file die bascom maakt te kijken. Aan de hand van het datasheet bepalen hoe veel kloktikken iedere instructie verbruikt.

Mooi uitzoek klusje en je leert er wat van, en dat is de bedoeling van school mi.

@klein is fijn
Ik had vandaag gelezen dat dit zorgt voor de registers terug te zetten maar heb blijkbaar te snel gelezen want betekend blijkbaar dat het niet wordt terug gezet.
Morgen even proberen of het zonder dat stukje werkt.

@Roland van Leusden
8Mhz/64 = 125KHz (Als ik het juist begrijp is bij een avr de klokfrequentie gelijk aan die van de oscilator en niet /4 zoals bij een pic)

Ik kan geen asm file vinden dus kan niet vinden of dat snel genoeg is. Maar in de c file is ook 64 gebruikt. (Ik heb dit deel een stukje van het c programma vertaald om te weten hoe ik de sensoren moet uitlezen)

EDIT:
Ik heb vandaag wat getest maar nog niet werkend gekregen.
Na 2 keer proggen hebben we de fuses verandert en nu kunnen we niet meer programmeren. ik meen hier een tijd geleden gelezen te hebben dat je dan een extern kristal eraan moet hangen. Dat gaan we morgen proberen.

EDIT2:
Alles werkt nu :d.
Alleen wil de avr niet meer proggen zonder highvoltage programmer.

EDIT3:
Misschien nuttig nog even te vertellen dat nu alles werkt :d.
Een filmpje van de robot in werking:
http://www.youtube.com/watch?v=snycNMNMDEY