ADC
ADC
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
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
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ő....
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ő....
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
Loop
mi a hiba?????
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
Loop
mi a hiba?????
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
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!
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.
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...
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...
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!
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
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....
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....