|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
protoncek Član
Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 45.67 Kraj: Mengeš
|
Objavljeno: Pon Avg 31, 2009 10:10 pm Naslov sporočila: |
|
|
Še jaz z enim vprašanjem:
delam merilnik napetosti, toka in podobnih stvari za usmernik. Uporabil sem atmego 168.
Zanima me pa okoli merjenja toka - namreč največji tok bo 5 A, torej mora biti upor kar majhen da se ne bo pretirano grel, posledično bo napetost na njem majhna. Če prav razumem, lahko uporabim reference=internal in tako pri tem avr-ju dobim referenco 1,1V, kar bi bilo sprejemljivo?
Pa še nekaj - a je mogoče različnih kanalom ADC določiti različno referenco? Namreč jaz bi za merjenje napetosti uporabil Avcc, za tok pa Internal...
Hvala!
|
|
Nazaj na vrh |
|
|
int47 Član
Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2066 Aktiv.: 9.27 Kraj: Ljubljana
|
Objavljeno: Pon Avg 31, 2009 10:40 pm Naslov sporočila: |
|
|
BASCOM-a ne poznam.
Načeloma je v uC-ju le en AD pretvornik, na katerega je vezanih več vhodov preko MUX-a. Če vsakič, ko zamenjaš kanal tudi izvedeš inicializacijo AD-ja, lahko preklapljaš med referencami, ki so na voljo.
|
|
Nazaj na vrh |
|
|
protoncek Član
Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 45.67 Kraj: Mengeš
|
Objavljeno: Tor Sep 01, 2009 6:53 am Naslov sporočila: |
|
|
no, to bi res mogoče šlo. Bom popoldne poskusil. Medtem pa, če ima kdo še kakšno boljšo idejo...
malce sem sicer mislil uporabiti operacijski ojačevalnik za merjenje toka, ampak ne najdem nobenega pametnega načrta na netu. Neka sem sicer našel, a je napajanje samega opamp-a vezano kar na napajanje merjenega toka (torej izhod usmernika), pri meni se pa to napajanje spreminja od 0 do 40V, kar je lahko ali premalo ali preveč...torej bi rabil fiksno napajanje in potem merjenje preko upora...če ima kdo kaj.?
EDIT: če sem prav prebral v help-u od bascoma, je ukaz config ADC neponovljiv, kar pomeni da ga lahko uporabiš samo enkrat, torej rekonfiguracija odpade...?
|
|
Nazaj na vrh |
|
|
LEDuser Član
Pridružen-a: Pon 31 Mar 2008 12:06 Prispevkov: 1104 Aktiv.: 5.65 Kraj: Ljubljana
|
Objavljeno: Pet Sep 04, 2009 1:35 pm Naslov sporočila: |
|
|
Pri bascomu se mi je malo zataknilo. Rad bi izdelal merilec hitrosti a me malo heca timer. Zadevo sem si zamislil tako, da bi imel neko konstanto (2 r /r-radij kolesa) in to konstanto ustrezno delil s časom ki ga kolo potrebuje v enem obratu. Tukaj pa se mi pojavi problem. Kako bi uporabil Timer1 in v katerem načinu da bi mi točno preštel koliko impulzov je preteklo med enim obratom kolesa?
Nekaj sem googlal in našel tole kodo a mi ne deluje.
Koda: |
$regfile = "2313def.dat"
$crystal = 4000000
'Config Pind.6 = Output
Config Timer1 = Timer , Prescale = 64 , Capture Edge = Rising
Dim Wtime As Byte
Dim Timercounter As Word
On Capture1 Captmr
Wtime = 100
Timercounter = 0
Enable Interrupts
Enable Capture1
Do
'Set Portd.6
Waitms Wtime
'Reset Portd.6
Waitms Wtime
Cls
Lcd "pwidth: " ; " " ; Capture1
Loop
Captmr:
Timercounter = Capture1
Timer1 = 0
Return
End
|
_________________ Razsvetljujemo od leta 1920! |
|
Nazaj na vrh |
|
|
mucek Član
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5334 Aktiv.: 24.73 Kraj: Domzale
|
|
Nazaj na vrh |
|
|
LEDuser Član
Pridružen-a: Pon 31 Mar 2008 12:06 Prispevkov: 1104 Aktiv.: 5.65 Kraj: Ljubljana
|
Objavljeno: Pet Sep 04, 2009 2:43 pm Naslov sporočila: |
|
|
To sem tudi jaz razmišljal ampak mi ni preveč všeč ker potem je 2s mir na LCDju. Zakaj pa nisi znižal na mili sekunde?
Na neki strani sem zasledil kodo ki sem jo malo prej objavil zraven pa piše:
Citiram: |
Timer1 Capture
Timer1 can be configured in the 'Capture' mode. This means that Timer1 counts the controller clock through a prescaler, and when on the ICP input (PortD.6, pin 11) a pulse arrives, the contents of the Timer1 register is copied to the input capture register. In this way it is possible to measure the time between two pulse edges exactly:
Config Timer1 - Timer, Prescale = 1|8|64|256|1024, Capture Edge = Rising|Falling
interrupt-timer1-capture.bas
$regfile = "2313def.dat"
$crystal = 4000000
'Config Pind.6 = Output
Config Timer1 = Timer , Prescale = 64 , Capture Edge = Rising
Dim Wtime As Byte
Dim Timercounter As Word
On Capture1 Captmr
Wtime = 100
Timercounter = 0
Enable Interrupts
Enable Capture1
Do
'Set Portd.6
Waitms Wtime
'Reset Portd.6
Waitms Wtime
Cls
Lcd "pwidth: " ; " " ; Capture1
Loop
Captmr:
Timercounter = Capture1
Timer1 = 0
Return
End
In the interrupt routine the value of Timer1 (Capture1 is just another name for this register) is copied to Timercounter. Timer1 is then reset. The next time that a pulse on the ICP input arrives the same happens. So, Timercounter is a measure of the time between pulses on ICP. |
Mislim da je meritev veliko bolj točna če šteje čas v enem obratu in ne obrate v enem časovnem intervalu.
_________________ Razsvetljujemo od leta 1920! |
|
Nazaj na vrh |
|
|
mucek Član
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5334 Aktiv.: 24.73 Kraj: Domzale
|
Objavljeno: Pet Sep 04, 2009 5:00 pm Naslov sporočila: |
|
|
Lahko narediš tudi tako. Vendar osveževanje na 2s preverjeno povsem zadostuje - celo zelo dobro izpade - bolje kot (pre)hitro osveževanje.
LP, Grega
|
|
Nazaj na vrh |
|
|
RGorazd Član
Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1712 Aktiv.: 7.68 Kraj: Ig
|
Objavljeno: Sob Sep 05, 2009 11:01 am Naslov sporočila: |
|
|
Tole na merjenje na 2 sekundi lahko pri zelo majhni hitrosti deluje popolnoma nenatančno. Če se kolo ne zavrti v 2 sekundah za 1 obrat je hitrost 0, če pa se zavrti za 1 obrat in še 9/10 obrata, pa še vedno smatra, kot da se kolo zavrti 1x v 2 seundah. Sam bi števec hitrosti naredil takole, da bi reed vezal na zunanji interrupt, ter meril čas, ki ga potrebuje reed za en obrat. V kolikor je ta čas daljši odnevem 3 ali 4 sekunde, se smatra, kot da kolo stoji. Mislim, da bi bila taka dinamika merjenja dovolj natančna za počasne hitrosti in hkrati tudi dovolj dinamična pri večjih hitrostih. Itak je obseg kolesa znan, se pravi s=obseg, čas se izmeri in iz tega izračuna hitrost. Z mace domišljije se lahko izračuna tudi pospešek, oz. pojemek (sicer ne tako fejst natančno, vendar za kolesarje dovolj ugodno).
LP G
_________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
|
RGorazd Član
Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1712 Aktiv.: 7.68 Kraj: Ig
|
Objavljeno: Sob Sep 05, 2009 11:05 am Naslov sporočila: |
|
|
LEDuser, se bom pol priklopil z mojim računalnikom gor, kjer imam eno aplikacijo v Bascomu, ki meri čas pakiranja in deluje točno na tem principu. Zunanji interrupt proži timer. Časovi merjenja so razreda nekaj sekund, natančnost izmerjena na stotinko sekunde. Timer0 pa mislim da teče kar s CCLK, se pravi s hitrostjo 12MHz...
LP G
_________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
|
joze Član
Pridružen-a: Pet 26 Jan 2007 10:27 Prispevkov: 200 Aktiv.: 0.95
|
Objavljeno: Sob Sep 05, 2009 11:51 am Naslov sporočila: |
|
|
LP!
Mucek, zanima me kam oziroma kako ta Avr Timer.exe generira kodo??
|
|
Nazaj na vrh |
|
|
mucek Član
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5334 Aktiv.: 24.73 Kraj: Domzale
|
Objavljeno: Sob Sep 05, 2009 11:56 am Naslov sporočila: |
|
|
Vpišeš potrebne podatke in potem se ti v desni tabeli (8/16 bit timer) izpišejo variante. S klikom na eno izmed njih se ti odpre okno s kodo za Bascom.
RGorazd: pri meni s tem nisem imel problemov, ker je kolo izredno majhno (10''), pri kakšnem kolesu se pa strinjam s teboj ...
LP, Grega
|
|
Nazaj na vrh |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.04 Kraj: Dragomer
|
Objavljeno: Sob Sep 05, 2009 1:21 pm Naslov sporočila: |
|
|
joze je napisal/a: |
LP!
Mucek, zanima me kam oziroma kako ta Avr Timer.exe generira kodo?? |
Ko ti generira kodo, imaš tipko Copy in ti kopira kodo v odložišče - od koder jo z 'prilepi/paste' spraviš v tvoj program, ki ga imaš odprtega v Bascom-u
_________________ Prepričan sem, da je inteligentnih bitij v vesolju veliko. A ker so inteligenta, se nam nočejo prikazati. |
|
Nazaj na vrh |
|
|
RGorazd Član
Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1712 Aktiv.: 7.68 Kraj: Ig
|
Objavljeno: Sob Sep 05, 2009 8:25 pm Naslov sporočila: |
|
|
Mucek: To si najbrž naredil za svoj fensy skuter. Sem videl, da potegne za seboj marsikateri pogled!
No, tale koda šteje čas med dvema interruptoma, sicer ima zraven še drugo solato, vendar deluje, z natančno kalibriranim oscilatorjem je stvar precej natančna. Z malo telovadbe bi se dalo narediti tudi števec hitrosti.
LP G
Koda: |
$regfile = "at26def.dat"
$crystal = 8000000
Deflcdchar 1 , 10 , 4 , 14 , 17 , 16 , 17 , 14 , 32
Deflcdchar 0 , 10 , 4 , 15 , 16 , 14 , 1 , 30 , 32
Dim Vrednost As Integer , Desetinke As Byte
Dim Sekunde As Byte , Stotinke As Byte , I As Byte , Flag As Bit
Dim Sekold As Byte , Stotold As Byte , Desold As Byte
Dim X As Byte , S As String * 1
Config Lcd = 16 * 2
Config Timer0 = Timer , Prescale = 8
Config Int0 = Falling
Enable Int0
Enable Timer0
On Int0 Int0isr
On Ovf0 Ovf0isr
Load Timer0 , 250
Stop Timer0
Header:
Cls
Restore Dta1:
For X = 1 To 10
Locate 1 , X
Read S
Lcd " " : Lcd S
Waitms 150
Next X
Cls
Restore Dta2:
For X = 1 To 10
Locate 2 , X
Read S
Lcd " " : Lcd S
Waitms 150
Next X
Cls
Enable Interrupts
While Flag = 0
Lcd "Cakam na prvi "
Lowerline
Lcd "impulz... "
Wend
Main:
Do
Locate 1 , 1
If Flag = 1 Then
Cls
Flag = 0
End If
Lcd "Trenutni:" : Lcd Sekunde : Lcd ":" : Lcd Stotinke : Lcd Desetinke
Locate 2 , 1
Lcd "Prej" : Lcd Chr(0) : Lcd "nji:" : Lcd Sekold : Lcd ":" : Lcd Stotold : Lcd Desold
Loop
Int0isr:
Disable Int0
Stop Timer0
If Flag = 0 Then
Sekold = Sekunde
Stotold = Stotinke
Desold = Desetinke
End If
Sekunde = 0
Stotinke = 0
Desetinke = 0
Vrednost = 0
Timer0 = 0
Flag = 1
Enable Int0
Start Timer0
Return
Ovf0isr:
Load Timer0 , 250
Incr Vrednost
If Vrednost = 40 Then
Incr Desetinke
Vrednost = 0
End If
If Desetinke > 9 Then
Incr Stotinke
Desetinke = 0
End If
If Stotinke > 9 Then
Incr Sekunde
Stotinke = 0
End If
Return
Dta1:
Data "(" , "c" , ")" , "R" , "o" , "s" , "b" , "a" , "c" , "h"
Dta2:
Data "M" , "a" , "r" , "e" , "c" , " " , "2" , "0" , "0" , "6"
|
_________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
|
dkone Član
Pridružen-a: Sre 07 Mar 2007 18:53 Prispevkov: 2104 Aktiv.: 10.09 Kraj: Krško
|
Objavljeno: Pon Sep 07, 2009 6:51 pm Naslov sporočila: |
|
|
Pozdravljeni!
Zanima me kako v Bascomu uporabiti decimalna števila? Imam eno konstanto Faktor(vrednost naprimer 0,8333),ki bi jo rad pomnožil z spremenljivko Števec in to prikažem na LCD-ju. Gledal sem help,vendar nisem zasledil. Prosim za izkušene bascomaše za pomoč.
_________________ Denis |
|
Nazaj na vrh |
|
|
mucek Član
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5334 Aktiv.: 24.73 Kraj: Domzale
|
Objavljeno: Pon Sep 07, 2009 7:07 pm Naslov sporočila: |
|
|
Glej spremenljivko single.
Sicer je druga opcija, da tvojo konstanto pomnožiš z npr. 1000 in nato rezultat deliš s 1000. Pazi, da ne pride do overflowa pri izračunavanju.
Lp, Grega
|
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 70 dni
Powered by phpBB © 2001, 2005 phpBB Group
|