ADC

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00
Kapcsolat:

ADC

HozzászólásSzerző: szovhoz » 2007. július 30. hétfő, 22:25

Már egy ideje ismerkedem az Atmel kis aranyosaival!

Most épp analóg jelet szeretnék fledolgozni vele egyenlőre csak egy potit használok meg egy ledet a poti jelét bekérem és pwm ként küldöm a ledre amivel így szabályzom a fényerejét!

STK500-at hazsnálok meg egy mega16-ot most ezt akarom kipróbálni eddig tinny2313 volt

szóval a potit ha tekerm a fény 4x is maxra meg és kialszik szerintem ez tulcsordulás lenne!

Próbáltam változatokat internal referenciát externnált is de sehogy nem jön össze rendesen a lényeg hogy én 0-5v között szeretném szabályozni és nem 2.56 mert így 1.25v-nál a fényerő maxon van és utánna kialszik és újra mak és így tovább mi lehet a hiba?

$regfile = "M16def.dat"
$crystal = 16000000

Config Pind.5 = Output

Config Adc = Single , Prescaler = Auto , Reference = Avcc

Start Adc

Dim W As byte , Channel As Byte

Channel = 0

Do

W = Getadc(channel)

Pwm1a = W

Incr Channel

Loop

End

sanzol

HozzászólásSzerző: sanzol » 2007. július 30. hétfő, 23:27

Nem az a probléma véletlen, hogy te a konverzió során kapott 10 bites számot 8 bitesként dolgozod fel a pwm által?

Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00
Kapcsolat:

HozzászólásSzerző: szovhoz » 2007. július 31. kedd, 0:29

lehet én inkább az erősítőjére gondoltam hogy a jelet felerősíti 4x-re!

Channel As Byte


Amúgy majd később hömérsékletet akarom mérni csak ezzel kezdtem el az adc megismerésést!

hogy lehhet akkorfeldolgozni a 10 bites jelet?
tud e 0-5v között dolgozni az adc?

Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00
Kapcsolat:

HozzászólásSzerző: szovhoz » 2007. július 31. kedd, 10:24

Mennyi az adc max sebessége khz-ben?

sanzol

HozzászólásSzerző: sanzol » 2007. július 31. kedd, 11:12

Várd meg Robert hozzászólását szerintem, az enyém csak egy tipp!

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10013
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2007. július 31. kedd, 12:50

Csak én olvasom a könyvet? :)

http://avr.tavir.hu/modules.php?name=Co ... age&pid=29

Amúgy az ADC kimenete 10 bites szám!
Azaz nem Byte hanem Word!
ADC sebessége, ha 10 bitet kihasználod ~200kHz.
Bascom alatt az erősítés beállítást macerás behívni. A fejezetben van mintaproi, de én ilyen esetben nem használnám. Pláne, hogy 10x van csak, 4x nincs:)
Hogy méred a hőmérsékletet majd?
Amúgy a 5V tápfeszt én nem használnám referenciának. Inkább a belső 2.56V-osat. A felbontás jobb, és ha a tápfesz ingadozik (PWM meghajtás valamelyik lábon) és ez pl. LCD háttévilágítást hajt meg, gondot okoz.Nálam hőmérés van így megoldva, 5V referencia, és Pt1000-es hőmérővel. Hát ha az V ingadozik (alulméretezett induktív terhelés van rajta), beleng a szabályozás...
5V esetén 5mV ingadozás 1 helyiértékingadozást jelent!
5mV pedig lazán összeszedhető....

Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00
Kapcsolat:

HozzászólásSzerző: szovhoz » 2007. augusztus 1. szerda, 12:13

A másik problémám hogy a már elkészített pwm vezérlő progit ahol a pmw jelet kapcsolókkal lehet szabályozni nem megy a mega16ban vagyis megy csak a kapcsolók nemmennek!

Egyszerű kapcsoló led párosítás és nem megy!

$regfile = "m16def.dat"

$crystal = 1000000

Config Pinb.2 = Input 'kapcsoló
Config Pinb.3 = Output 'led

Set Portb.2
Set Portb.3

Do

If Portb.2 = 0 Then Portb.3 = 1 Else Portb.3 = 0 ' ha megynomom a kapcsolót a led felgyulad ha nem akkor pihizik :D

Loop

mi a hiba?????

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10013
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2007. augusztus 1. szerda, 12:15

Bemenetvizsgálat PIN és nem PORT :).

Kód: Egész kijelölése

If Pinb.2 = 0 Then Portb.3 = 1 Else Portb.3 = 0 ' ha megynomom a kapcsolót a led felgyulad ha nem akkor pihizik 

Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00
Kapcsolat:

HozzászólásSzerző: szovhoz » 2007. augusztus 1. szerda, 15:07

ez nem igaz emiatt idegeskedtem annyit tegnap hogy nem megy! kössz ezer hála és köszönet.

de így akkorse megy!!

Nézzétek már meg lécci!

a program lényege lenne!

egy pwm jelet csinálok ami előpször felkell pörgesse a motort fullra és utánna visza szedje a kakaót 20%-ig- ami eddig sikerült is!

tánna 2db nyomógombal tudjam állítani a pwm jelet fel vagy le de egy meghatározott érték laá nem mehet a jel!

Közben azt figyeljük hogy egyik adc lábon jön e fesz mert ha egy meghatározoztt adc érték közt /323-656/ kapunk az adc 0-án jelet akkor mehet a pwm jel ki ha e fölöt vagy alat vagyunk akkor állni kell az egésznek!

a részek külön külön működtek de egybe valahogy nem akar mennia dolog!
A hozzászólást 1 alkalommal szerkesztették, utoljára szovhoz 2007. augusztus 3. péntek, 23:43-kor.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10013
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2007. augusztus 3. péntek, 12:26

Tippek:

sub-ban ha a W-t átírod, miért bemenő paraméter?

Confog output az nem pinb.5, hanem portb.5! Legalábbis az alapszintaktika szerint (kompatibilitás miatt!)


ADMUX nem piszkálható a főprogramból!
Csak config adc= és a getadc sor piszkálja a háttérben!

A config ADC ne single, hanem free legyen. Ne kelljen mindíg ujraindítni az adc-t, hanem mehet folyamatosan....


A B byte. Igy nem adhatsz hozzá törtszámot!
A gob elengedése alaphelyzetbe rakja a motort? Most így van, a do utani 3-4.sor...
If utáni ELSE részen. Vmint NE ne pwm-t írdd, hanem a B értékét!
A pwm nem változó. Ne így tessék kezelni! Az előtte bevezetett B értéket tessék helyette....
És ha leszabályozások megvannak Bre, akkor írdd csak ki pwmre...

Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00
Kapcsolat:

HozzászólásSzerző: szovhoz » 2007. augusztus 3. péntek, 23:40

itt a program sikerült összehozni és ez úgy működik ahogy kell!

elmondom mit tesz!

Tehát a pwm jelel felpörgeti a motort majdnem 100%-ra és utánna szépen vissza pörgeti 20%-ig.
Utánna van kettő nyomógomb amivel lehet fel le szabályozni a motor fordulatát! de nem lehet 80 alatt és 250 felett a pwm jel soha!

Van még egy adc bemenet ami azt figyeli hogy azon a lábon hogyan érkezik a feszültség ha az adott tartomány alá esik vagy felé megy akkor beállítja a pwm lábát fullra. ez egy védelem lesz majd egy áramfigyelő van ide rákötve ne hogy több jusson amocinak vagy kevesebb mert ha kap egy pofont akkor vége lessz!

Kérlek most nézzétek mit hogyan javítsak ki !

De ez pontosan úgy működik ahogyan kell! stk500-ban tesztelve!
A pwm kitöltési tényezőjé egy fluke műszer mérte + szkóp.
a voltot egy sima műszer figyelte mert az adc jelet most még csak a bemeneti feszt egy potival csináltuk!

azt sueretném tudni mi a jobb a belső referencia vagy a külső mia pontosab és ha belső használom akkor az adc értékei hogyan változnak ebben a fügbvényben!

És azt szeretném még tudni most pontosan 16khz jön kia pwm lábon nekem ennyi kell! de a procit ahogy láttam nem szabad csak mondjuk 10mhz-en járatni a legtöbb ember nem a maxra teszi de nekem így jött ki csak a 160khz és a belső oszcilátort beállítottam az isp programozásnál az stk500-ban 4mhz-esre. hogy a belső a jobb vagy a külső mertén úgy tudom hogy a külső apontosabb de én csak a szoftot csinálom a hardvert egy zseni hihihi!!!


Confog output az nem pinb.5, hanem portb.5! Legalábbis az alapszintaktika szerint (kompatibilitás miatt!)

ha ezt átírom portb.5 -re akkor azt hibának jelzi a bascom

az admux beállítása az adatlapon volt olvasható a mega16 nak!!!!!

ROBERT leírása alapján javítottam a programot!

Kód: Egész kijelölése


$regfile = "M16def.dat"                                   
$crystal = 16000000                                       


Rem Konfiguráljuk a portokat
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Up , Prescale = 1      ' pwm
Config Pind.5 = Output                   ' pwm kimenet


Config Adc = Free , Prescaler = Auto , Reference = Avcc
Config Pina.0 = Input

Config Pind.5 = 1

' megszakításhoz       ------------------------
Config Int0 = Low Level

On Int0
Enable Interrupts
Enable Int0
' megszakításhoz vége  -------------------------

Rem Nyomógombok
Fgomb Alias Pinb.6                           ' fel állítása
Lgomb Alias Pinb.5                           ' le állítása

Dim W As Word , Channel As Word
Channel = 0

Admux = &B01000000

Declare Sub Adccurrent(byval Channel As Word , W As Word )

Start Adc

Rem Változók deklarálása
Dim A As Byte

A = &B01010000

Call Adccurrent(channel , W)

Rem a pwm felpörgetés 0% - 100%
For A = 0 To 250 Step 1
Pwm1a = A
Waitms 10
Next A

Call Adccurrent(channel , W)

Rem vissza pörgés 20% ig
For A = 250 To 80 Step -1
Pwm1a = A
Waitms 10
Next A


Call Adccurrent(channel , W)


Do
Call Adccurrent(channel , W)

A = Pwm1a
If Fgomb = 0 Then A = A + 1

Call Adccurrent(channel , W)


Waitms 10

If Lgomb = 0 Then A = A - 1

Call Adccurrent(channel , W)


If A <= 79 Then A = 80       

Call Adccurrent(channel , W)

If A >= 251 Then A = 250

Call Adccurrent(channel , W)

Pwm1a = A

Loop


Sub Adccurrent(byref Channel As Word , W As Word )  ' adc sub
W = 0

W = Getadc(0)

If W <= 670 Then Config Pind.5 = 1          'enged
If W => 320 Then Config Pind.5 = 1          'enged
If W => 656 Then Config Pind.5 = 0           'tilt
If W <= 323 Then Config Pind.5 = 0           'tilt

End Sub


Avatar
Robert
Elektronbűvölő
Hozzászólások: 10013
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2007. augusztus 4. szombat, 5:05

Az adatalap írja. DE: a Bascom kezeli! Pont hogy NEM kell ilyen szinten foglalkoznod vle, ezért jó a Bascom. Ha kell, elrejti a belső HW-t:).

A belső referencia 2.56V. Én ahol lehet ezt használom. Az 5V táp csak nagyon szűrve jó...Eléggé érzékeny az ADC.És a tápot ha vmi megrántja, akkor bizony az adc mérés is elkóvályog...

A chipet annyin járatod, amennyin akarod. Nálam a sorosport a szempont, hogy a Baudrate ne hibázzon... Jellemzően 14.7456 MHz. A PWM meg ebből számolható (lsd adatlap, ill a könyvben is írom vhol). külső jobb, mert nem hőfok és gyártási szórás függő... Meg a belsőre én sorosportot nem bíznék....

Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00
Kapcsolat:

HozzászólásSzerző: szovhoz » 2007. augusztus 5. vasárnap, 22:22

Config Adc = Free ez nem működik így!

csak single ben!!!!!!!!!4

If A >= 251 Then A = 250 ez sem jó csak így
If pwm1a >= 251 Then pwm1a = 250

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10013
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2007. augusztus 6. hétfő, 7:05

A Start ADC utasítást kihagyogatod....
Az IF sor utan kell egy Pwm1a=A sor....

Avatar
padum
Biztosítékgyilkos
Hozzászólások: 60
Csatlakozott: 2007. június 14. csütörtök, 6:00
Kapcsolat:

HozzászólásSzerző: padum » 2007. augusztus 12. vasárnap, 18:50

Üdv mindenki!
5 és 12V-os méréshatárt, hogy lehet megvalósítani ADC-s méréshez?
Fesz osztó számításba jöhet?


Vissza: “Bascom-AVR nyelvű programozás (AVR programozásának lehetőségei)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég