www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Programiranje v bascom avr
Pojdi na stran Prejšnja  1, 2, 3 ... 15, 16, 17 ... 36, 37, 38  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Bascom sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
protoncek
Član
Član



Pridružen-a: Sre 31 Jan 2007 9:41
Prispevkov: 9573
Aktiv.: 45.67
Kraj: Mengeš

PrispevekObjavljeno: Pon Avg 31, 2009 10:10 pm    Naslov sporočila:   Odgovori s citatom

Š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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2066
Aktiv.: 9.27
Kraj: Ljubljana

PrispevekObjavljeno: Pon Avg 31, 2009 10:40 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
protoncek
Član
Član



Pridružen-a: Sre 31 Jan 2007 9:41
Prispevkov: 9573
Aktiv.: 45.67
Kraj: Mengeš

PrispevekObjavljeno: Tor Sep 01, 2009 6:53 am    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
LEDuser
Član
Član



Pridružen-a: Pon 31 Mar 2008 12:06
Prispevkov: 1104
Aktiv.: 5.65
Kraj: Ljubljana

PrispevekObjavljeno: Pet Sep 04, 2009 1:35 pm    Naslov sporočila:   Odgovori s citatom

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 pi 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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mucek
Član
Član



Pridružen-a: Tor 01 Avg 2006 10:47
Prispevkov: 5334
Aktiv.: 24.73
Kraj: Domzale

PrispevekObjavljeno: Pet Sep 04, 2009 2:31 pm    Naslov sporočila:   Odgovori s citatom

Sam sem pri mojem kontrolerju naredil naslednje:

Timer0 mi da interrupt vsaki 2 s.
Reed kontakt imam vezan kot eksterni interrupt, ki mi ob vsakem prehodu kolesa poveča nek števec.

Ob vsakem timer0 interruptu (torej, vsaki 2 sekundi) preštejem število impulzov, ki sem jih dobil do takrat in zmnožim (*2 pi r) in dobim pot v teh dveh sekundah. Na koncu števec prehodov kolesa postavim na 0.

Za generiranje timer interrupta lahko uporabiš Avr Timer.exe v priponki (preimenuj PDF v EXE), ki ti direktno generira Bascom kodo - vpišeš hitrost oscilatorja, željen čas za interrupt overflow in to je to Smile.

LP, Grega



Avr Timer.pdf
 Opis:
AVR Timer.exe - program za generiranje Bascom kode za Timerje. Preimenuj PDF v EXE !

Download
 Ime datoteke:  Avr Timer.pdf
 Velikost datoteke:  40 KB
 Downloadano:  79 krat

Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
LEDuser
Član
Član



Pridružen-a: Pon 31 Mar 2008 12:06
Prispevkov: 1104
Aktiv.: 5.65
Kraj: Ljubljana

PrispevekObjavljeno: Pet Sep 04, 2009 2:43 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mucek
Član
Član



Pridružen-a: Tor 01 Avg 2006 10:47
Prispevkov: 5334
Aktiv.: 24.73
Kraj: Domzale

PrispevekObjavljeno: Pet Sep 04, 2009 5:00 pm    Naslov sporočila:   Odgovori s citatom

Lahko narediš tudi tako. Vendar osveževanje na 2s preverjeno povsem zadostuje - celo zelo dobro izpade Smile - bolje kot (pre)hitro osveževanje.

LP, Grega
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1712
Aktiv.: 7.68
Kraj: Ig

PrispevekObjavljeno: Sob Sep 05, 2009 11:01 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1712
Aktiv.: 7.68
Kraj: Ig

PrispevekObjavljeno: Sob Sep 05, 2009 11:05 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
joze
Član
Član



Pridružen-a: Pet 26 Jan 2007 10:27
Prispevkov: 200
Aktiv.: 0.95

PrispevekObjavljeno: Sob Sep 05, 2009 11:51 am    Naslov sporočila:   Odgovori s citatom

LP!

Mucek, zanima me kam oziroma kako ta Avr Timer.exe generira kodo??
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mucek
Član
Član



Pridružen-a: Tor 01 Avg 2006 10:47
Prispevkov: 5334
Aktiv.: 24.73
Kraj: Domzale

PrispevekObjavljeno: Sob Sep 05, 2009 11:56 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3351
Aktiv.: 15.04
Kraj: Dragomer

PrispevekObjavljeno: Sob Sep 05, 2009 1:21 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1712
Aktiv.: 7.68
Kraj: Ig

PrispevekObjavljeno: Sob Sep 05, 2009 8:25 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
dkone
Član
Član



Pridružen-a: Sre 07 Mar 2007 18:53
Prispevkov: 2104
Aktiv.: 10.09
Kraj: Krško

PrispevekObjavljeno: Pon Sep 07, 2009 6:51 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
mucek
Član
Član



Pridružen-a: Tor 01 Avg 2006 10:47
Prispevkov: 5334
Aktiv.: 24.73
Kraj: Domzale

PrispevekObjavljeno: Pon Sep 07, 2009 7:07 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Bascom sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3 ... 15, 16, 17 ... 36, 37, 38  Naslednja
Stran 16 od 38

 
Pojdi na:  
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