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 

Atmega8 ADC in Bascom
Pojdi na stran 1, 2, 3, 4, 5  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
tilz0R
Član
Član



Pridružen-a: Čet 31 Maj 2012 15:39
Prispevkov: 898
Aktiv.: 5.65
Kraj: Črnomelj

PrispevekObjavljeno: Tor Jun 26, 2012 10:49 pm    Naslov sporočila:  Atmega8 ADC in Bascom Odgovori s citatom

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



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

PrispevekObjavljeno: Sre Jun 27, 2012 10:22 am    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Čet 31 Maj 2012 15:39
Prispevkov: 898
Aktiv.: 5.65
Kraj: Črnomelj

PrispevekObjavljeno: Sre Jun 27, 2012 10:24 am    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Ned 30 Maj 2004 21:57
Prispevkov: 774
Aktiv.: 3.27
Kraj: Topolšica

PrispevekObjavljeno: Sre Jun 27, 2012 10:45 am    Naslov sporočila:   Odgovori s citatom

Lp
priloži shemo


B
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
tilz0R
Član
Član



Pridružen-a: Čet 31 Maj 2012 15:39
Prispevkov: 898
Aktiv.: 5.65
Kraj: Črnomelj

PrispevekObjavljeno: Sre Jun 27, 2012 10:48 am    Naslov sporočila:   Odgovori s citatom

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



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

PrispevekObjavljeno: Sre Jun 27, 2012 10:56 am    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Čet 31 Maj 2012 15:39
Prispevkov: 898
Aktiv.: 5.65
Kraj: Črnomelj

PrispevekObjavljeno: Sre Jun 27, 2012 10:57 am    Naslov sporočila:   Odgovori s citatom

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



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

PrispevekObjavljeno: Sre Jun 27, 2012 11:00 am    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Ned 30 Maj 2004 21:57
Prispevkov: 774
Aktiv.: 3.27
Kraj: Topolšica

PrispevekObjavljeno: Sre Jun 27, 2012 11:00 am    Naslov sporočila:   Odgovori s citatom

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 Smile ,verjetno je notranja upornost adc 0 nižja kot adc 1 ali pa imas na pcb kakšno parazitno upornost.
B
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
tilz0R
Član
Član



Pridružen-a: Čet 31 Maj 2012 15:39
Prispevkov: 898
Aktiv.: 5.65
Kraj: Črnomelj

PrispevekObjavljeno: Sre Jun 27, 2012 11:05 am    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Čet 31 Maj 2012 15:39
Prispevkov: 898
Aktiv.: 5.65
Kraj: Črnomelj

PrispevekObjavljeno: Sre Jun 27, 2012 11:06 am    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Ned 30 Maj 2004 21:57
Prispevkov: 774
Aktiv.: 3.27
Kraj: Topolšica

PrispevekObjavljeno: Sre Jun 27, 2012 11:18 am    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Čet 31 Maj 2012 15:39
Prispevkov: 898
Aktiv.: 5.65
Kraj: Črnomelj

PrispevekObjavljeno: Sre Jun 27, 2012 11:34 am    Naslov sporočila:   Odgovori s citatom

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



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

PrispevekObjavljeno: Sre Jun 27, 2012 11:48 am    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Čet 31 Maj 2012 15:39
Prispevkov: 898
Aktiv.: 5.65
Kraj: Črnomelj

PrispevekObjavljeno: Sre Jun 27, 2012 11:52 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2, 3, 4, 5  Naslednja
Stran 1 od 5

 
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: 495 dni


Powered by phpBB © 2001, 2005 phpBB Group