Ik ben momenteel bezig een laptimer/counter te maken waar ik het aantal rondjes kan zien en de laatst gereden tijd.

Nu wil ik dit maken met een doormiddel mijn bascom geprogrammeerde ATMEGA88 en deze zal later in een printje verwerkt worden.

Nu loop ik vast bij het volgende:

Ik wil een redelijk precies meting in hoeverre dit mogelijk is met deze chip maar mijn oplossing lijkt me niet erg precies aangezien hij ook wat "tijd" verbruikt met het tellen.


Do
Waitms(10)               'Wacht 0.01 sec
Timer_var = Timervar + 1 'telt er een honderdste seconde bij op
Loop Until Pind.4 = 1    'Loopt tot ingang hoog word'
Print Timer_var          'print aantal aantal hondertste'

Ik weet dat er iets van een timer functie zit in de chip, maar kom er niet uit hoe hij werkt. Is dit een betere oplossing ten opzichte van mijn bovenstaande code? of zou er een andere oplossing beter kunnen werken?

Alvast bedankt,
Tom

Er zitten wel drie timers in de ATmega88. Hoe je die kan gebruiken, zou je in de bascom-manual moeten terugvinden.

Ik heb net een voorbeeld programmaatje omgebouwd uit het bascom boekje. En op een of andere manier wil het niet helemaal werken hij loopt gelijk door naar het eind.

Wat doe ik verkeerd?

Alvast bedankt,
Tom


'------------------------------------------------------------------------------'
'                              Lapcounter                                      '
'------------------------------------------------------------------------------'


$regfile = "m88def.dat"
'  8000 leek mij een makkelijke waarde om mee te rekenen mag dit zomaar?'
'  of moet ik toch gaan voor de standaard 8000000?'
$crystal = 8000
$baud = 9600
$hwstack = 32
$swstack = 10
$framesize = 40

Config Pind.4 = Input
Config Rondjes As Byte

'First you must configure the timer to operate as a counter or as a timer
'You must also specify if it will count on a rising or falling edge
Config Timer0 = Counter , Edge = Rising

'lets reset it to 0
Tcnt0 = 0
Rondjes = 0

'Now configire it as a TIMER
'The prescale parameter excepts 1,8,64,256 or 1024
'   8000hz = 0.000125 seconde per puls x 8 = 0.001sec per puls
'   Dit leek mij een lekker makkelijke waarde om mee te rekenen 
'   omdat 1 puls dan een duizenste seconde is.
Config Timer0 = Timer , Prescale = 8

Do
  Do
  Loop Until Pind.4 = 1
  Stop Timer0

  Print Tcnt0

  Reset Tcnt0
  Incr rondjes
  Start Timer0

Loop Until Rondjes = 10

print "einde"

End

Top!

Zit veel tussen wat ik niet nodig heb maar kan er zeker de nodige informatie uithalen voor me eigen project! Ik ga ermee aan de slag.

' 8000 leek mij een makkelijke waarde om mee te rekenen mag dit zomaar?'
' of moet ik toch gaan voor de standaard 8000000?'
$crystal = 8000

Die waarde moet je het zelfde nemen als de snelheid van je kristal ofwel van de ingebouwde oscillator van de microcontroller. Hierdoor weet Bascom dan hoeveel code hij moet genereren voor een delay.
Dus niet zelf iets verzinnen, wel de snelheid van je microcontroller in Hertz invullen. Dus 8000000 voor 8MHz.