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
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
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
Roland van Leusden
It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.
AN #119 - RC LapTimer
http://www.mcselec.com/index.php?option=com_content&task=view&…
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.