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 

Branje 10-bitnega registra v 32-bitnem sistemu (C)
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
71GA
Član
Član



Pridružen-a: Tor 16 Jun 2009 18:53
Prispevkov: 391
Aktiv.: 2.00
Kraj: Ljubljana

PrispevekObjavljeno: Tor Nov 08, 2011 8:19 am    Naslov sporočila:  Branje 10-bitnega registra v 32-bitnem sistemu (C) Odgovori s citatom

Lep pozdrav!

Trenutno se ukvarjam s programiranjem 10-bitnega ADC znotraj mikrokrmilnika LPC3141. Mikrokrmilnik je 32 biten in ima jedro na osnovi ARM9. 10-bitni ADC ima 10-bitni register ADC_DATA_REG, kamor ADC shranjuje 10-bitne vrednosti, katere moram prebrati in primerjati z 32-bitno konstanto.

Kako bi to lahko naredil v C programu?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
Dorijan
Član
Član



Pridružen-a: Ned 22 Jun 2008 10:48
Prispevkov: 2564
Aktiv.: 12.37
Kraj: južnoprimorska

PrispevekObjavljeno: Tor Nov 08, 2011 8:57 am    Naslov sporočila:   Odgovori s citatom

kakšna je pa vrednost konstante?

Načeloma prebereš vrednost potem jo pa lahko "zashiftaš" << in >> tja kjer jo rabiš(npr. b = a << 22;)

_________________
Če nekaj deluje, razstavi in ugotovi zakaj.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
MitjaN
Član
Član



Pridružen-a: Sre 17 Avg 2011 15:40
Prispevkov: 91
Aktiv.: 0.54
Kraj: Ljubljana

PrispevekObjavljeno: Tor Nov 08, 2011 9:13 am    Naslov sporočila:   Odgovori s citatom

Če je mikrokrmilnik 32 biten, še ne pomeni, da je register v katerem se nahaja rezulat ADC-ja tudi 32 biten. V kolikor je potem je koda od Dorijana precej dober zgled. Če pa je register kjer se nahaja rezultat ADC-ja 16 biten, potem boš moral pred "shiftanjem" pretvoriti tip ("castanje")

LP, Mitja
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
71GA
Član
Član



Pridružen-a: Tor 16 Jun 2009 18:53
Prispevkov: 391
Aktiv.: 2.00
Kraj: Ljubljana

PrispevekObjavljeno: Tor Nov 08, 2011 9:58 am    Naslov sporočila:   Odgovori s citatom

MitjaN je napisal/a:
Če je mikrokrmilnik 32 biten, še ne pomeni, da je register v katerem se nahaja rezulat ADC-ja tudi 32 biten. V kolikor je potem je koda od Dorijana precej dober zgled. Če pa je register kjer se nahaja rezultat ADC-ja 16 biten, potem boš moral pred "shiftanjem" pretvoriti tip ("castanje")

LP, Mitja


No saj register ADC_DATA_REG je 10 biten. Da še odgovorim dorijanu, konstanta je ravno polovica 10-bitne vrednosti torej 10^n - 1 = 1023 in polovica tega je 511 kar je v šestnajstiškem zapisu 0x1FF.

Moja dosedanja koda za prebiranje registra in primerjavo je izgledala takole:

Koda:
unsigned int data;

data = ADC_DATA_REG;

if (data > 0x1FF){
     //sem pride koda za prižiganje LED
}
else{
     //sem pride koda za ugašanje LED
}


No v glavnem moja koda ni delala, najbrž zato, ker je data 32 bitna vrednost, ADC_DATA_REG pa 10 bitna. Mi lahko še kdo prilepi primer kode, ki pa bi mi mogoče deloval. Priznam malo sem lenuh Smile.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
Waldo
Član
Član



Pridružen-a: Pet 02 Nov 2007 10:50
Prispevkov: 316
Aktiv.: 1.47
Kraj: Maribor

PrispevekObjavljeno: Tor Nov 08, 2011 11:41 am    Naslov sporočila:   Odgovori s citatom

Čeprav je register 10-bitni, ne bi smelo biti težav z operacijami, če so željeni podatki desno poravnani. V primeru, da nulti bit željenih podatkov ni na nultem bitu registra, ga moraš ustrezno maskirati in zašiftati. Morda bi moral preveriti tudi "endianness", čeprav je na eni platformi načeloma vseposod enaka.

Če vrednosti iz adc izpisuješ, imajo smisel ali so kr-neki?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
71GA
Član
Član



Pridružen-a: Tor 16 Jun 2009 18:53
Prispevkov: 391
Aktiv.: 2.00
Kraj: Ljubljana

PrispevekObjavljeno: Tor Nov 08, 2011 12:26 pm    Naslov sporočila:   Odgovori s citatom

Waldo je napisal/a:
Če vrednosti iz adc izpisuješ, imajo smisel ali so kr-neki?

Na mikrokontrolerju še nisem uspel vspostavit komunikacije s PC tako da ne morem nikjer izpisovat vrednosti. Težko rečem ali so vrednosti smiselne ali ne, se mi pa dogaja, da program deluje pravilno vse do točke kjer preberem 10-bitno vrednost.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
žrepko
Član
Član



Pridružen-a: Tor 23 Mar 2010 20:12
Prispevkov: 700
Aktiv.: 3.76
Kraj: Ptuj-Maribor

PrispevekObjavljeno: Tor Nov 08, 2011 12:45 pm    Naslov sporočila:   Odgovori s citatom

Kot prvo vspostavi UART in se ga nauči uporabljati.
To ti bo v prihodnje prišlo neštetokrat prav!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
71GA
Član
Član



Pridružen-a: Tor 16 Jun 2009 18:53
Prispevkov: 391
Aktiv.: 2.00
Kraj: Ljubljana

PrispevekObjavljeno: Tor Nov 08, 2011 1:20 pm    Naslov sporočila:   Odgovori s citatom

žrepko je napisal/a:
Kot prvo vspostavi UART in se ga nauči uporabljati.
To ti bo v prihodnje prišlo neštetokrat prav!

To verjamem ja ampak najprej ADC Smile. JE pa UART naslednji korak da da Smile.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.65
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Tor Nov 08, 2011 2:13 pm    Naslov sporočila:   Odgovori s citatom

ADC beres isto kot katerikoli drugi 32-bitni register. Kako so pa poravnani podatki, pa pise v user manual-u - so samo dve opciji ali na MSB ali pa na LSB. Torej poskusi se zashiftati podatke v desno.

LP!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
71GA
Član
Član



Pridružen-a: Tor 16 Jun 2009 18:53
Prispevkov: 391
Aktiv.: 2.00
Kraj: Ljubljana

PrispevekObjavljeno: Tor Nov 08, 2011 2:24 pm    Naslov sporočila:   Odgovori s citatom

chaos je napisal/a:
ADC beres isto kot katerikoli drugi 32-bitni register. Kako so pa poravnani podatki, pa pise v user manual-u - so samo dve opciji ali na MSB ali pa na LSB. Torej poskusi se zashiftati podatke v desno.

LP!


Na žalost nič ne piše ali je MSB/LSB. Spodaj sem nalepil celotni opis omenjenega registra.



1.png
 Opis:
opis ADC data registra
 Velikost datoteke:  39.74 KB
 Pogledana:  9 krat

1.png


Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.65
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Tor Nov 08, 2011 2:26 pm    Naslov sporočila:   Odgovori s citatom

Seveda pise: bit 9:0.

LP!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
71GA
Član
Član



Pridružen-a: Tor 16 Jun 2009 18:53
Prispevkov: 391
Aktiv.: 2.00
Kraj: Ljubljana

PrispevekObjavljeno: Tor Nov 08, 2011 2:33 pm    Naslov sporočila:   Odgovori s citatom

chaos je napisal/a:
Seveda pise: bit 9:0.

LP!


Če se ne motim je tole LSB (Least Signifficant Bit), ker so le najnizji biti. To pomeni, da moram zashiftat v desno ali v levo in za koliko ???
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
S53DZ
Član
Član



Pridružen-a: Čet 28 Apr 2011 9:27
Prispevkov: 951
Aktiv.: 5.51
Kraj: Ljubljana

PrispevekObjavljeno: Tor Nov 08, 2011 4:12 pm    Naslov sporočila:   Odgovori s citatom

1. bit (9:0) pomeni 10 LSB bitov, torej je binarni rezultat že poravnan.
2. naredi izpis podatkov na UART ali na Display in preveri rezultat ADC pretvorbe.

EDIT: Za najenostavnejši prikaz pa na en output pin mikrokontrolerja LED preko tranzistorja in upora in prižigaj LEDico glede na vrednost ADC.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.62
Kraj: Kranj - struževo

PrispevekObjavljeno: Tor Nov 08, 2011 7:12 pm    Naslov sporočila:   Odgovori s citatom

Malo si na papir nariši registre in številke, pa vpisuj vrednosti.
Glede na to, da to delaš za diplomo, bi se pa že lahko malo bolj potrudil in tudi kakšno stvar sam preizkusil in naštudiral.
Ko jaz vem, na faksu v zadnjem času učijo tudi C, a ne? Si sedel na ušesih?
Če ne drugega, si dol potegneš skripto za C ali obe dve in jih naštudiraš.

Da ugotoviš, kako deluje branje ADC registra, potebuješ natanko dva poskusa pisanja kode. A Debugger ti pa ne dela ali kaj? Softverski simulator tudi ne?

p.s.
Glede na to, da je polovica foruma samo tvojih vprašanj, ki imajo po večini en ali dva odgovora - kaj ko bi vse skupaj držal v eni sami svoji temi??

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
Waldo
Član
Član



Pridružen-a: Pet 02 Nov 2007 10:50
Prispevkov: 316
Aktiv.: 1.47
Kraj: Maribor

PrispevekObjavljeno: Tor Nov 08, 2011 8:42 pm    Naslov sporočila:   Odgovori s citatom

Že dolgo nisem nič delal v C-ju, pa vseeno.
ADC_DATA_REG verjetno vsebuje naslov registra, ti pa potrebuješ njegovo vsebino. Preštudiraj pointerje, operaciji * in &.
Preveri tudi "endianness", to je kako se shranjujejo spremenljivke v pomnilnik (najprej MSB ali najprej LSB). Lahko da boš moral zamenjati bajte oz worde med sabo.

OT: ali kdo ve, kako se slovensko imenuje "endianness"?
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 -> ARM arhitektura Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

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


Powered by phpBB © 2001, 2005 phpBB Group