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

Pridružen-a: Ned 12 Nov 2006 23:49 Prispevkov: 13 Aktiv.: 0.06 Kraj: Ljubljana
|
Objavljeno: Pon Nov 13, 2006 12:11 am Naslov sporočila: _adconvert() - spreminjanje pina |
|
|
AD merjenje naj bi potekalo na ARMu na štirih pinih. Za to merjenje sem do sedaj uporabljal pin 0.27 in sicer tako, da sem pridobil z funkcijo _adconvert() število od 1-1023 kar je bilo linearno z izmerjeno napetostjo. Sedaj pa sem dobil še en senzor in me zanima, kako bi lahko uporabljal oba senzorja hkrati (torej kakšen košček kode ali pa vsaj pojasnilo kako in kaj je s spremembo pina). Pa če morda kdo ve kako točno poteka funkcija int _adconvert (void), saj namreč v knjižnici piše zgolj nek AD_READ...
Hvala za pomoč že v naprej _________________ Nobody is perfect - I am. |
|
Nazaj na vrh |
|
 |
. Član

Pridružen-a: Pon 23 Avg 2004 16:16 Prispevkov: 16777190 Aktiv.: 70801.38
|
Objavljeno: Pon Nov 13, 2006 1:40 am Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
Letme Član

Pridružen-a: Ned 12 Nov 2006 23:49 Prispevkov: 13 Aktiv.: 0.06 Kraj: Ljubljana
|
Objavljeno: Pon Nov 13, 2006 6:34 pm Naslov sporočila: |
|
|
Da, šlo je za ŠARM in težavo sva z asistentom rešila s pomočjo user manuala. Sedaj mi ostane samo še programiranje
V kolikor bodo pa še kakšne težave pa se bom javil. _________________ Nobody is perfect - I am. |
|
Nazaj na vrh |
|
 |
Roadracer Član


Pridružen-a: Ned 16 Okt 2005 18:41 Prispevkov: 482 Aktiv.: 2.03 Kraj: LJ/Litija
|
Objavljeno: Pon Nov 13, 2006 6:37 pm Naslov sporočila: |
|
|
Lahko pa nam zaupaš kako si rešil težavo.  |
|
Nazaj na vrh |
|
 |
Letme Član

Pridružen-a: Ned 12 Nov 2006 23:49 Prispevkov: 13 Aktiv.: 0.06 Kraj: Ljubljana
|
Objavljeno: Pon Nov 13, 2006 6:53 pm Naslov sporočila: |
|
|
Takoj ko bo zares rešena.
Drugače pa če bi bilo potebno branje samo iz AD0 in AD1 pina se v knjižnici io.h samo duplicira funkcije (in seveda preimenuje) in namesto AD0 doda AD1 (oba sta bitno definirana malce pred obema defineoma funkcij). Nato se v io.c spremeni še definicja funkcij in se doda int _adconvert1(void), ki bere nanovo ustvarjene AD funkcije (duplicirane z AD1...). Jaz pa hočem imeti malce več kot 2 senzorja in bom zato uporabil 4 senzorje. Uporabljal bom pine od 0.27-0.30 s pomočjo registra AD0CR (ki ima naslov 0xE0034000)pri katerem se zadnjih osem bitov spreminja po pinih in sicer z 0x01,0x02,0x04,0x08. Ko pa bom tole vse spravil v kodo pa jo lahko tudi prilepim. Pisana pa bo v winIDEA jezik C (oziroma C++).
Upam da sem na pravi poti  _________________ Nobody is perfect - I am. |
|
Nazaj na vrh |
|
 |
Letme Član

Pridružen-a: Ned 12 Nov 2006 23:49 Prispevkov: 13 Aktiv.: 0.06 Kraj: Ljubljana
|
Objavljeno: Čet Dec 14, 2006 5:17 pm Naslov sporočila: |
|
|
Koda: |
// AD0.0 pin 0.27
#define PINSEL1 (*((unsigned int *)0xe002c004))
#define ADC_PINSELMASK0 0xc00000
#define ADC_PINSELVAL0 0x400000
// AD0.1 pin 0.28
#define ADC_PINSELMASK1 0x3000000
#define ADC_PINSELVAL1 0x1000000
// AD0.2 pin 0.29
#define ADC_PINSELMASK2 0xc000000
#define ADC_PINSELVAL2 0x4000000
#define AD0 0xe0034000
#define AD1 0xe0060000
#define ADC_CR(base) (*((unsigned int *)(base)))
#define ADC_DR(base) (*((unsigned int *)(base+0x4)))
#define ADC_GSR (*((unsigned int *)(0xe0034008)))
// Divide VPB clock by 4 to get the ADC clock, burst=0
#define ADC_INIT0 { \
PINSEL1 = (PINSEL1 & ~ADC_PINSELMASK) | ADC_PINSELVAL; \
ADC_CR(AD0) = 0x1 | (0x4 << 8) | (0x1 << 21); \
}
#define ADC_CONVERT0 { \
unsigned int tmp; \
ADC_CR(AD0) = 0x1 | (0x4 << 8) | (0x1 << 21) | (0x1 << 24); \
do { \
tmp = ADC_DR(AD0); \
} while ((tmp & (0x1 << 31)) == 0); \
}
#define ADC_READ0 ((ADC_DR(AD0) & 0xffc0) >> 6)
//AD1
#define ADC_INIT1 { \
PINSEL1 = (PINSEL1 & ~ADC_PINSELMASK1) | ADC_PINSELVAL1; \
ADC_CR(AD0) = 0x1 | (0x4 << 8) | (0x1 << 21); \
}
#define ADC_CONVERT1 { \
unsigned int tmp; \
ADC_CR(AD0) = 0x1 | (0x4 << 8) | (0x1 << 21) | (0x1 << 24); \
do { \
tmp = ADC_DR(AD0); \
} while ((tmp & (0x1 << 31)) == 0); \
}
#define ADC_READ1 ((ADC_DR(AD0) & 0xffc0) >> 6)
//AD0.2
#define ADC_INIT2 { \
PINSEL1 = (PINSEL1 | ~ADC_PINSELMASK2) & ADC_PINSELVAL2; \
ADC_CR(AD0) = 0x1 | (0x4 << 8) | (0x1 << 21); \
}
#define ADC_CONVERT2 { \
unsigned int tmp; \
ADC_CR(AD0) = 0x1 | (0x4 << 8) | (0x1 << 21) | (0x1 << 24); \
do { \
tmp = ADC_DR(AD0); \
} while ((tmp & (0x1 << 31)) == 0); \
}
#define ADC_READ2 ((ADC_DR(AD0) & 0xffc0) >> 6) |
Tkole zadeva zgleda v knjižici io.h .
V io.c dodamo ad_convert1(); ad_convert2() in tudi ADC_Init1() ADC_Init2().
lp
Crt _________________ Nobody is perfect - I am. |
|
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: 495 dni
Powered by phpBB © 2001, 2005 phpBB Group
|