Poštovani,
limač sam što se tiče programiranja i AVR, ali trenutno se učim na nekakvom programu, kodu, koji mi treba, a stvar je u tome da mi trebaju dva countera koji ce istovremeno brojati impulse na ulazima T0 i T1. Timer sam dekalrirao kao Timer1=Counter, a ne znam da li je moguće istovremeno koristiti dva countera, i ako je moguće na koji način to izvesti, ili nekako drukčije. (Kod sam pisao za Atmega32)
Unaprijed hvala, i hvala na razumjevanju.
AVR, Timer kao Counter - Bascom
Moderators: pedja089, stojke369, trax, InTheStillOfTheNight
Re: AVR, Timer kao Counter - Bascom
Stipa,
u reviji Svet elektronike je g. Mitrović objavio seriju članaka, gdje su razrađeni i timerji/counterji - jasno sve za Bascom-AVR.
Programi su ovdje: http://www.svet-el.si/za-download/progr ... -mikropin2
Članke traži na www.svet-el.si (išči članke MikroPin).
Svet elektronike će biti od 20.- 22. februarja na sajmu IFAM v Novem Sadu, vabljeni na sajam!
Lep pozdrav!
Jure
u reviji Svet elektronike je g. Mitrović objavio seriju članaka, gdje su razrađeni i timerji/counterji - jasno sve za Bascom-AVR.
Programi su ovdje: http://www.svet-el.si/za-download/progr ... -mikropin2
Članke traži na www.svet-el.si (išči članke MikroPin).
Svet elektronike će biti od 20.- 22. februarja na sajmu IFAM v Novem Sadu, vabljeni na sajam!
Lep pozdrav!
Jure
Re: AVR, Timer kao Counter - Bascom
juremm wrote:Stipa,
u reviji Svet elektronike je g. Mitrović objavio seriju članaka, gdje su razrađeni i timerji/counterji - jasno sve za Bascom-AVR.
Programi su ovdje: http://www.svet-el.si/za-download/progr ... -mikropin2
Članke traži na http://www.svet-el.si (išči članke MikroPin).
Svet elektronike će biti od 20.- 22. februarja na sajmu IFAM v Novem Sadu, vabljeni na sajam!
Lep pozdrav!
Jure
Poštovani, potrebno mi je da Atmega8 (ne 32) na pravi način koristi svoje tajmere i da služe istovremeno kao brojači impulsa u sekundi. Tj. koliko impulsa na ulazima T0 i T1 u nekoj poznatoj vremenskoj jedinici. Taj dio koda u Bascom-u mi je ključan za daljni moj rad,pa ako tko zna da mi pomogne.
Re: AVR, Timer kao Counter - Bascom
Evo ti kod za Bascom AVR i ATmegu8 u kojem koristiš 8 bitni Timer/Counter 0 kao brojač silaznih ivica impulsa sa PORTD.4 (T0) i 16 bitni Timer/Counter 1 kao brojač na PORTD.5 (T1). Timer/Counter 2 se koristi kao timer za generiranje interrupta svakih 4ms kako bi u finalu, nakon 250 tikova dobili jednu sekundu i tada pročitali stanje brojača 0 i 1, prebacili vrijednosti u varijable, te resetirali njihova stanja. LED spojen na PORTB.0 će blinkat u ritmu 1Hz, a na serijskom (rs232) izlazu (PORTD.0 - Rx i PORTD.1 Tx), ćeš imat ispis vrijednosti brojača T0 i T1. Program je provjeren i radi na stvarnom hardware-u.
Code: Select all
'****************************************************************
'* Name : Stipa_timer.bas *
'* Author : Kukinjos *
'* Notice : Copyright (c) 2013 *
'* : All Rights Reserved *
'* Date : 14.03.2013 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config Portb = Output ' PORT ZA IZLAZ SIGNALA
Config Portd = Input ' PORT ZA ULAZ SIGNALA
Dim A As Byte ' VARIJABLA ZA TIMER/COUNTER 0 (8 BITA)
Dim B As Word ' VARIJABLA ZA TIMER/COUNTER 1 (16 BITA)
Dim N As Byte ' POMOĆNA VARIJABLA ZA BROJENJE TIKOVA OD 4ms
Dim Led As Bit ' POMOĆNA VARIJABLA KOJOM SE PALI LED SVAKIH 1s
'------------------------- TIMER 2, 4ms INTERRUPT ------------------------------
Const Timer_reload = 125 ' TIMER2 RELOAD ZA 4ms NA 8MHz
Config Timer2 = Timer , Prescale = 256 ' PRESKALER ZA TIMER2
Load Timer2 , Timer_reload ' UPIŠI VRIJEDNOST ZA 4ms PRI 8 MHz
On Ovf2 Tick ' KAD TIMER ODBROJI IDI NA IRQ. TICK
Enable Timer2 ' DOPUSTI INTER. ZA TIMER2
Start Timer2 ' POKRENI TIMER2
Enable Interrupts ' DOPUSTI GLOBALNO INTERRUPTE
'------------------------------ POČETAK ----------------------------------------
Config Timer0 = Counter , Edge = Falling ' POSTAVI TIMER/COUNTER 0 U MOD BROJAČA ZA L IMP.
Config Timer1 = Counter , Edge = Falling ' POSTAVI TIMER/COUNTER 1 U MOD BROJAČA ZA L IMP.
Portb = 255 'NA MOJOJ PLOČI OVO GASI LED-ICE (STK500)
Portd = 255 ' POSTAVI PULL-UP NA ULAZE
'---------------------------- GLAVNA PETLJA ------------------------------------
Do
Portb.0 = Led ' UPALI ILI UGASI LED NA PORTB.0
If N = 10 Then ' KAD N BUDE 10 POŠALJI VRIJEDNOSTI
' NA SERIJSKI PORT (RS232) SA
Print "T0= " ; A ' BROJAČA T0 (PORTD.4) I
Print "T1= " ; B ' BROJAČA T1 (PORTD.5)
End If
Loop
'-------------------------------------------------------------------------------
'********************************* PODPROGRAMI *********************************
'******************************* INTERRUPT RUTINE ******************************
'----------------------------- INTERRUPT SVAKIH 4 ms ---------------------------
Tick:
Incr N ' POVEĆAJ BROJAĆ TIKOVA OD 4 ms.
If N = 250 Then ' AKO JE IZBROJANO 250 TIKOVA (1 SEKUNDA)
Toggle Led ' INVERTIRAJ STANJE LED-ICE
A = Tcnt0 ' PREBACI VRIJEDNOSTI IZ BROJAČA 0 U A
B = Tcnt1 ' ISTO NAPRAVI I S BROJAČEM 1 U B
Tcnt0 = 0 ' RESETIRAJ BROJAČ 0 ZA PONOVNO BROJANJE
Tcnt1 = 0 ' ISTA STVAR SAMO ZA BROJAČ 1
N = 0 ' RESETIRAJ BROJ TIKOVA
End If
Load Timer2 , Timer_reload ' UPIŠI VRIJEME I PONOVNO POKRENI TIMER
Return ' VRATI SE IZ INTERRUPT-A
'-------------------------------------------------------------------------------
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
Re: AVR, Timer kao Counter - Bascom
Uvaženi kolega, mnogo ti hvala. Hvala!. Može još samo jedno pitanje. Kad bi na sličan način radili mjerenje vremena između dva impulsa koje se pojave na nekom ulazu, kako to učiniti? Naravno, ne očekujem gotov prog, nego samo pomoć ako je moguće. Znači mjerenje impulsa između 1-2 (prvog pojavljenog i drugog impulsa),2-3,3-4,4-5,5-6,6,7...ili slično.Kukinjos wrote:Evo ti kod za Bascom AVR i ATmegu8 u kojem koristiš 8 bitni Timer/Counter 0 kao brojač silaznih ivica impulsa sa PORTD.4 (T0) i 16 bitni Timer/Counter 1 kao brojač na PORTD.5 (T1). Timer/Counter 2 se koristi kao timer za generiranje interrupta svakih 4ms kako bi u finalu, nakon 250 tikova dobili jednu sekundu i tada pročitali stanje brojača 0 i 1, prebacili vrijednosti u varijable, te resetirali njihova stanja. LED spojen na PORTB.0 će blinkat u ritmu 1Hz, a na serijskom (rs232) izlazu (PORTD.0 - Rx i PORTD.1 Tx), ćeš imat ispis vrijednosti brojača T0 i T1. Program je provjeren i radi na stvarnom hardware-u.
[/code]
Re: AVR, Timer kao Counter - Bascom
Zavisno od rezolucije koju hoćeš postići, koristiš timer0 ili timer2 za 8 bita, ili timer1 za 16 bita. Postaviš ga kao timer, odrediš preskaler, zavisno od minimalne rezolucije. Startaš ga na neki događaj (if PINB.x = 0 then start timerx) i zaustavljaš ga (if 'nešto' then stop timerx). Zatim pročitaš odbrojanu vrijednost iz varijable tcntx. To bi bilo u globalu mjerenje dužine nekog događaja.
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....