Vragen staat vrij...
Ik begrijp dus goed dat TMR2IF_bit bit1 van het PIR Register is?
Maar de vraag: waarom moet je hier deze afvraging doen om te kijken of er sprake is van een interrupt conditie? Je zít toch immers al in de handler die werd aangeroepen ómdat er een interrupt was?
De pic heeft tientallen interruptbronnen (timers, comparator, spi, i2c, a/d,...) die allemaal in dezelfde routine terecht komen.
Je moet dus wel vaststellen of dit de juiste interrupt is (zelfs als je denkt dat er maar 1 interrupt aan staat blijft dat wel zo netjes)
Na alle rekenarij begrijp is dus dat er iedere 4 msec (250Hz) een aanroep van de Interrupt subroutine plaatsvindt. Voor iedere seconde dus 250 keer. Hierdoor bereik je dus een goede balans om multiplexen zonder knipperen te regelen?
Ja, je krijgt 250/4 is 62.5Hz multiplex voor ieder display, meeste mensen zien dat niet meer als knipperen.
Frequenties lager beter vermijden. Ook 50Hz of een veelvoud daarvan. Geeft bij aanwezigheid van TL of ledlamp soms onaangename interferentiepatronen.
- Wie reset het DP? Hij wordt nl wel op 1 gezet, maar ik zie geen 'clear'. Komt dat omdat DP als een sbit is gedefinieerd en automatisch wordt gereset?
Er hoeft niks te worden gereset. Standaard staan in de segmenttable de dp's uit. De regel:
pic basic code:
If (DigCount = 2) And (Seccount > 125) Then dp = 1 End If
zorgt ervoor dat als digit 2 aan de beurt is, en de laatste helft van de seconde bezig is, de dp ook aangestoken wordt in display 2.
Bij een MikroBasic project kan / moet je de klokfrequentie opgeven, alsmede hoe je het hebt ingericht (int, ext oscillator, etc).
Kan ik hieruit afleiden dat de compiler de setting van het OSCCON register dan voor zijn rekening neemt? Of moet je die toch zelf nog opgeven?
Nee, dat moet je zelf doen. Mikrobasic heeft die info alleen nodig om de delayloops uit te kunnen rekenen...
- Uit veel posts lees ik verschillende meningen over het gebruik van interrupts, Daar waar de een zegt "alleen gebruiken als het écht niet anders kan", beveelt een ander het direct weer aan als 'de' methode.
Los van wie het dichtst bij de waarheid ligt: een statement als Delay_MS of de timer maken beide gebruik van de systeemklok. Betekent dat dat een interrupt niet meer nauwkeurigheid oplevert dan een 'delay-oplossing?'
De interrupt is nauwkeuriger, omdat die op vaste tijden komt.
Een delay_ms(1000) kan bij veel interrupt-afhandelingen best wel eens 1500ms duren.
(iedere keer als een interrupt moet worden afgehandeld wordt de delay() onderbroken, en al die onderbrekingen moet je bij de delay optellen)