 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
tilz0R Član


Pridružen-a: Čet 31 Maj 2012 15:39 Prispevkov: 898 Aktiv.: 5.65 Kraj: Črnomelj
|
Objavljeno: Tor Jun 26, 2012 10:49 pm Naslov sporočila: Atmega8 ADC in Bascom |
|
|
Zdravo vsem!
Imam en kratek problem, namreč na Atmega8 bi rad imel AD pretvornik.
Zakaj se s tem ukvarjam: Razviti poskušam stereo Vu meter s matričnim sistemom diod velikosti 5x4
V bascomu ga konfiguriram:
Koda: |
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc |
Problem nastane sledeč:
Na vhod ADC0 (PORTC0) in ADC1 (PORTC1) pripeljem levi in desni kanal iz zvočnikov iz računalnika.
Preko diode ga polvalno usmerim tako da zadeva mora delovati.
Sedaj pa, ko v baskomu preberem Getadc(0) (bere ADC0) zadeva dela kot mora, ko pa želim prebrati Getadc(1) (bere ADC1) pa se stvar zakomplicira in ni več to kar bi moralo biti.
Če kontakt od ADC1 spojim na maso bo 0, če pa na + bo pa polno kazalo, če pa ni nikjer (ali na signalu iz računalnik) je pa še vedno polno.
Ampak kar je pa tle najhujše: ADC1 tudi dela vrhunsko, ampak le v primeru, da sta ADC0 in ADC1 oba npr na levem kanalu iz računalnika ali oba na desnem. ADC0 dela in na levem lepo in na desnem, tudi če je samostojen.
povedano drugače: ADC0 deluje vedno pravilno, ADC1 pa samo če je na istem potencialu kot ADC0.
Upam da razumete moj problem in mi znate rešiti zakaj to ne deluje pravilno.
Edit:
Poskušal sem tudi z uporabo npr ADC3 pa je bilo enako kot pri ADC1.
Pri konfiguraciji ADC-ja sem tudi poskušal z "Free" mode namesto "Single" pa je bil rezultat enak.
PS: Sem pa bolj kot ne začetnik v tem. _________________ Knowledge sharing is caring.
majerle.eu | stm32f4-discovery.net |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3360 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Sre Jun 27, 2012 10:22 am Naslov sporočila: |
|
|
Nimam izkušenj, a razmišljam tako:
Ni dovolj, da pripelješ signal preko polvalnega usmernika, tak signal moraš še obremeniti z RC parom, katereta časovna konstanta bodi večja od periode najnižje tonske frekvence, recimo 50Hz alias 20msec.
Sicer z adc konverterjem na AVR-u nisem imel težav, a nisem nikdar meril hitro spreminajočih se napetosti. _________________ Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart |
|
Nazaj na vrh |
|
 |
tilz0R Član


Pridružen-a: Čet 31 Maj 2012 15:39 Prispevkov: 898 Aktiv.: 5.65 Kraj: Črnomelj
|
Objavljeno: Sre Jun 27, 2012 10:24 am Naslov sporočila: |
|
|
vilko je napisal/a: |
Nimam izkušenj, a razmišljam tako:
Ni dovolj, da pripelješ signal preko polvalnega usmernika, tak signal moraš še obremeniti z RC parom, katereta časovna konstanta bodi večja od periode najnižje tonske frekvence, recimo 50Hz alias 20msec.
Sicer z adc konverterjem na AVR-u nisem imel težav, a nisem nikdar meril hitro spreminajočih se napetosti. |
že mogoče, imam kondenzator proti masi in upor pred tem, ampak če ta isti signal dam na ADC0 dela vrhunsko, tako kot mora, če pa na ADC1 pa kr naenkrat "crkne" sistem. _________________ Knowledge sharing is caring.
majerle.eu | stm32f4-discovery.net |
|
Nazaj na vrh |
|
 |
pirpy Član


Pridružen-a: Ned 30 Maj 2004 21:57 Prispevkov: 774 Aktiv.: 3.27 Kraj: Topolšica
|
Objavljeno: Sre Jun 27, 2012 10:45 am Naslov sporočila: |
|
|
Lp
priloži shemo
B |
|
Nazaj na vrh |
|
 |
tilz0R Član


Pridružen-a: Čet 31 Maj 2012 15:39 Prispevkov: 898 Aktiv.: 5.65 Kraj: Črnomelj
|
Objavljeno: Sre Jun 27, 2012 10:48 am Naslov sporočila: |
|
|
pirpy je napisal/a: |
Lp
priloži shemo
B |
Klik
Shema je takšna, razlika je samo v tem, da imam jaz drugi čip (Atmega8) in pa drugačno matrico na izhodu (5x4) _________________ Knowledge sharing is caring.
majerle.eu | stm32f4-discovery.net |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3360 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Sre Jun 27, 2012 10:56 am Naslov sporočila: |
|
|
Še en upor paralelno konednzatorju, tisti proti ADC ne pomeni dosti, v poštev bi prišel, če bi hotel zmanjšati napetost predno pride na ADC, (napetostni delilnik), toda tega ni v shemi. _________________ Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart |
|
Nazaj na vrh |
|
 |
tilz0R Član


Pridružen-a: Čet 31 Maj 2012 15:39 Prispevkov: 898 Aktiv.: 5.65 Kraj: Črnomelj
|
Objavljeno: Sre Jun 27, 2012 10:57 am Naslov sporočila: |
|
|
vilko je napisal/a: |
Še en upor paralelno konednzatorju, tisti proti ADC ne pomeni dosti, v poštev bi prišel, če bi hotel zmanjšati napetost predno pride na ADC, (napetostni delilnik), toda tega ni v shemi. |
Razumem čist vse vas, ampak zakaj ADC0 dela na levem in desnem kanalu, ADC1 pa samo če je na ISTEM potencialu kot ADC0, to mi negre v glavo.
ADC0 dela tudi če ni upora paralelno s kondenzatorjem :S _________________ Knowledge sharing is caring.
majerle.eu | stm32f4-discovery.net |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3360 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Sre Jun 27, 2012 11:00 am Naslov sporočila: |
|
|
Eee, tega pa tudi sam ne vem, pripni še program! _________________ Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart |
|
Nazaj na vrh |
|
 |
pirpy Član


Pridružen-a: Ned 30 Maj 2004 21:57 Prispevkov: 774 Aktiv.: 3.27 Kraj: Topolšica
|
Objavljeno: Sre Jun 27, 2012 11:00 am Naslov sporočila: |
|
|
vhodna upornost adc pretvornikov je zelo velika tako da poskusi z pull down uporom pred adc pinom, recimo kakšnih 10k
zakaj dela adc0 1 pa ne ? nikomur ni jasna notranja zgradba procesorja razen stvaritelju ,verjetno je notranja upornost adc 0 nižja kot adc 1 ali pa imas na pcb kakšno parazitno upornost.
B |
|
Nazaj na vrh |
|
 |
tilz0R Član


Pridružen-a: Čet 31 Maj 2012 15:39 Prispevkov: 898 Aktiv.: 5.65 Kraj: Črnomelj
|
Objavljeno: Sre Jun 27, 2012 11:05 am Naslov sporočila: |
|
|
vilko je napisal/a: |
Eee, tega pa tudi sam ne vem, pripni še program! |
Nisem nekaj preveč navajen tukaj programirat (sem PHP programer) tako da koda ni blesteče napisana.
Koda: |
$regfile = "m8def.dat"
$crystal = 1000000
Config Portb = Output
Config Portd = Output
Config Portc = Input
Stolp1 Alias Portb.0
Stolp2 Alias Portb.1
Stolp3 Alias Portb.2
Stolp4 Alias Portb.3
Stolp5 Alias Portb.4
Vrsta1 Alias Portd.0
Vrsta2 Alias Portd.1
Vrsta3 Alias Portd.2
Vrsta4 Alias Portd.3
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc
Dim W As Integer , W1 As Integer
Dim Wt As Double
Wt = 15000
Dim I As Integer
Stolp1 = 0
Stolp2 = 0
Stolp3 = 0
Stolp4 = 0
Stolp5 = 0
Vrsta1 = 0
Vrsta2 = 0
Vrsta3 = 0
Vrsta4 = 0
Do
W = Getadc(0)
Gosub Rightprogram
W = Getadc(1)
Gosub Leftprogram
Loop
Resetit:
Waitus 1000
Stolp1 = 0
Stolp2 = 0
Stolp3 = 0
Stolp4 = 0
Stolp5 = 0
Vrsta1 = 0
Vrsta2 = 0
Vrsta3 = 0
Vrsta4 = 0
Return
Rightprogram:
'1, 1
If W > 4 Then
Vrsta1 = 1
Stolp1 = 1
Gosub Resetit
End If
'1, 2
If W > 12 Then
Vrsta1 = 1
Stolp2 = 1
Gosub Resetit
End If
'1, 3
If W > 24 Then
Vrsta1 = 1
Stolp3 = 1
Gosub Resetit
End If
'1, 4
If W > 40 Then
Vrsta1 = 1
Stolp4 = 1
Gosub Resetit
End If
'1, 5
If W > 60 Then
Vrsta1 = 1
Stolp5 = 1
Gosub Resetit
End If
'2, 1
If W > 84 Then
Vrsta2 = 1
Stolp1 = 1
Gosub Resetit
End If
'2, 2
If W > 112 Then
Vrsta2 = 1
Stolp2 = 1
Gosub Resetit
End If
'2, 3
If W > 144 Then
Vrsta2 = 1
Stolp3 = 1
Gosub Resetit
End If
'2, 4
If W > 180 Then
Vrsta2 = 1
Stolp4 = 1
Gosub Resetit
End If
'2, 5
If W > 220 Then
Vrsta2 = 1
Stolp5 = 1
Gosub Resetit
End If
Return
Leftprogram:
'3, 1
If W > 1 Then
Vrsta3 = 1
Stolp1 = 1
Gosub Resetit
End If
'3, 2
If W > 3 Then
Vrsta3 = 1
Stolp2 = 1
Gosub Resetit
End If
'3, 3
If W > 6 Then
Vrsta3 = 1
Stolp3 = 1
Gosub Resetit
End If
'3, 4
If W > 10 Then
Vrsta3 = 1
Stolp4 = 1
Gosub Resetit
End If
'3, 5
If W > 15 Then
Vrsta3 = 1
Stolp5 = 1
Gosub Resetit
End If
'4, 1
If W > 21 Then
Vrsta4 = 1
Stolp1 = 1
Gosub Resetit
End If
'4, 2
If W > 28 Then
Vrsta4 = 1
Stolp2 = 1
Gosub Resetit
End If
'4, 3
If W > 36 Then
Vrsta4 = 1
Stolp3 = 1
Gosub Resetit
End If
'4, 4
If W > 45 Then
Vrsta4 = 1
Stolp4 = 1
Gosub Resetit
End If
'4, 5
If W > 55 Then
Vrsta4 = 1
Stolp5 = 1
Gosub Resetit
End If
Return
|
_________________ Knowledge sharing is caring.
majerle.eu | stm32f4-discovery.net |
|
Nazaj na vrh |
|
 |
tilz0R Član


Pridružen-a: Čet 31 Maj 2012 15:39 Prispevkov: 898 Aktiv.: 5.65 Kraj: Črnomelj
|
Objavljeno: Sre Jun 27, 2012 11:06 am Naslov sporočila: |
|
|
pirpy je napisal/a: |
vhodna upornost adc pretvornikov je zelo velika tako da poskusi z pull down uporom pred adc pinom, recimo kakšnih 10k
zakaj dela adc0 1 pa ne ? nikomur ni jasna notranja zgradba procesorja razen stvaritelju ,verjetno je notranja upornost adc 0 nižja kot adc 1 ali pa imas na pcb kakšno parazitno upornost.
B |
Pirpy, vse bi jaz tole razumu kar govorite in bi blo logično, če nebi adc1 delal lepo v primeru da je skupaj spojen z adc0, takrat dela, če pa adc0 stran dam pa error v glavi kontrolerja, obupan :S _________________ Knowledge sharing is caring.
majerle.eu | stm32f4-discovery.net |
|
Nazaj na vrh |
|
 |
pirpy Član


Pridružen-a: Ned 30 Maj 2004 21:57 Prispevkov: 774 Aktiv.: 3.27 Kraj: Topolšica
|
Objavljeno: Sre Jun 27, 2012 11:18 am Naslov sporočila: |
|
|
tilz0R je napisal/a: |
pirpy je napisal/a: |
vhodna upornost adc pretvornikov je zelo velika tako da poskusi z pull down uporom pred adc pinom, recimo kakšnih 10k
zakaj dela adc0 1 pa ne ? nikomur ni jasna notranja zgradba procesorja razen stvaritelju ,verjetno je notranja upornost adc 0 nižja kot adc 1 ali pa imas na pcb kakšno parazitno upornost.
B |
Pirpy, vse bi jaz tole razumu kar govorite in bi blo logično, če nebi adc1 delal lepo v primeru da je skupaj spojen z adc0, takrat dela, če pa adc0 stran dam pa error v glavi kontrolerja, obupan :S |
meni je čisto logično imaš pač na vhodu adc0 parazitni pull down upor ki ti popravi shemo in ko sta adc0 in 1 skupaj adc1 uporablja adc0 pulldown upor ...
dejstvo je da imas napako v shemi !
poskusi zgoraj navedeno |
|
Nazaj na vrh |
|
 |
tilz0R Član


Pridružen-a: Čet 31 Maj 2012 15:39 Prispevkov: 898 Aktiv.: 5.65 Kraj: Črnomelj
|
Objavljeno: Sre Jun 27, 2012 11:34 am Naslov sporočila: |
|
|
pirpy je napisal/a: |
tilz0R je napisal/a: |
pirpy je napisal/a: |
vhodna upornost adc pretvornikov je zelo velika tako da poskusi z pull down uporom pred adc pinom, recimo kakšnih 10k
zakaj dela adc0 1 pa ne ? nikomur ni jasna notranja zgradba procesorja razen stvaritelju ,verjetno je notranja upornost adc 0 nižja kot adc 1 ali pa imas na pcb kakšno parazitno upornost.
B |
Pirpy, vse bi jaz tole razumu kar govorite in bi blo logično, če nebi adc1 delal lepo v primeru da je skupaj spojen z adc0, takrat dela, če pa adc0 stran dam pa error v glavi kontrolerja, obupan :S |
meni je čisto logično imaš pač na vhodu adc0 parazitni pull down upor ki ti popravi shemo in ko sta adc0 in 1 skupaj adc1 uporablja adc0 pulldown upor ...
dejstvo je da imas napako v shemi !
poskusi zgoraj navedeno
|
Poskušal z 10k, 100k, 1M, pred diodo, za diodo, vzporedno, iz obupa tudi zaporedno...NIČ :S _________________ Knowledge sharing is caring.
majerle.eu | stm32f4-discovery.net |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3360 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Sre Jun 27, 2012 11:48 am Naslov sporočila: |
|
|
Hm. Program je pisan pregledno, in to je važno, takoj sem se znašel v njem.
Tako kot piše:
Koda: |
Do
W = Getadc(0)
Gosub Rightprogram
W = Getadc(1)
Gosub Leftprogram
Loop
Resetit:
Waitus 1000
Stolp1 = 0
Stolp2 = 0
Stolp3 = 0
Stolp4 = 0
Stolp5 = 0
Vrsta1 = 0
Vrsta2 = 0
Vrsta3 = 0
Vrsta4 = 0
Return
Rightprogram:
'1, 1
If W > 4 Then
Vrsta1 = 1
Stolp1 = 1
Gosub Resetit
End If
.. itd
|
Se vsako branje konča za wait 1 sekunda v podprogramu Resetit
Dako kot piše, torej gledaš eno sekundo levi kanal, drugo sekundo desni kanal.
Si to imel v mislih?
V tem slučajo bi moral biti časovna konstanta veliko večja, kot 20msec, pravzaprav celo sekundo, da bi dobil na adc povprečje napetosti preko cele sekunde.
Sicer ti kažejo ledice neko slučajnostno napetost, ki jo je imel adc tisti hip, ko se je zbudil, da pa se preko cele sekunde zelo spreminja. _________________ Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazadnje urejal/a vilko Sre Jun 27, 2012 11:52 am; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
tilz0R Član


Pridružen-a: Čet 31 Maj 2012 15:39 Prispevkov: 898 Aktiv.: 5.65 Kraj: Črnomelj
|
Objavljeno: Sre Jun 27, 2012 11:52 am Naslov sporočila: |
|
|
vilko je napisal/a: |
Hm. Program je pisan pregledno, in to je važno, takoj sem se znašel v njem.
Tako kot piše:
Koda: |
Do
W = Getadc(0)
Gosub Rightprogram
W = Getadc(1)
Gosub Leftprogram
Loop
Resetit:
Waitus 1000
Stolp1 = 0
Stolp2 = 0
Stolp3 = 0
Stolp4 = 0
Stolp5 = 0
Vrsta1 = 0
Vrsta2 = 0
Vrsta3 = 0
Vrsta4 = 0
Return
Rightprogram:
'1, 1
If W > 4 Then
Vrsta1 = 1
Stolp1 = 1
Gosub Resetit
End If
.. itd
|
Se vsako branje konča za wait 1 sekunda v podprogramu Resetit
Dako kot piše, torej gledaš eno sekundo levi kanal, drugo sekundo desni kanal.
Si to imel v mislih? |
Vilko hvala za pohvalo prvo.
Vbistvu je mišljeno tako:
Prebere ADC0 in gre preverjat, če je več ADC digitalno več kot 4 prižge prvo ledico (multipleksiran način) in počaka 1ms (Waitus 1000), nato resetira vsa polja (vgasne vse prižgane ledice) in gre naprej na ledico 2, 3, do 10. Ko konča z "Leviprogram" prebere vrednost ADC1 in nadaljuje z "Desniprogram", spet po istem postopku, preveri vse vrednosti, če so izpolnjene prižge ledico, počaka milisekundo in resetira vsa polja. Če dam čas Waitus npr na 5000 (5ms) se zelo lepo vidi kako ledice potujejo (leteče luči). _________________ Knowledge sharing is caring.
majerle.eu | stm32f4-discovery.net |
|
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: 494 dni
Powered by phpBB © 2001, 2005 phpBB Group
|