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

Pridružen-a: Pon 11 Dec 2006 12:20 Prispevkov: 123 Aktiv.: 0.54 Kraj: Ljubljana
|
Objavljeno: Ned Nov 13, 2011 2:17 pm Naslov sporočila: [NEWBIE] FRI-SMS razvojni board vprasanje [NEWBIE] |
|
|
Spostovani!
Letos sem kupil razvojni sistem FRI-SMS, ki so ga razvili na Fakulteti za Racunalnistov in Informatiko in sedaj probam krmilit 4 LED diode preko PIO Port C, vendar naletim na sledeca problema:
1) Port skonfiguriram pravilno in nato posljem same enice v PIO_SODR register, da se diode prizgo. Nato podam delay in nato posljem same enice v PIO_CODR register, da ugasnem LED diode. Ta postpek je vgnezden v neskocno zanko, vendar ko stvar pozene, mi diode gorijo nesprestano. Ob debugiranju (step-by-step) se lucke prizigajo in ugasajo pravilno. Ni mi jasno, kako je to mogoce!? Prilagam se kodo:
Koda: |
#include "Main.h"
#include "AT91SAM9260.h"
/* Zaradi napake v prevajalniku mora biti definirana ta spremenljivka */
int dummy = 1;
#define nop() __asm__ __volatile__("nop")
volatile AT91PS_PIO pPortC=AT91C_BASE_PIOC; // memory mapped PIO Port C allocation
const int iMAX_INDEX=100; // delay index
const int iREG_SIZE=32; // register size
void loopNop();
void trioNop();
int iRegValue=0xffffffff;
void initPortC()
{
pPortC->PIO_PER=iRegValue;
trioNop();
pPortC->PIO_OER=iRegValue;
trioNop();
} // initPortB
void turnPortC_LED_On()
{
pPortC->PIO_SODR=iRegValue;
trioNop();
} // turnPortC_LED_On
void turnPortC_LED_Off()
{
pPortC->PIO_CODR=iRegValue;
trioNop();
} // turnPortC_LED_Off
void loopNop(const int iOuterIndexMax,
const int iIndexInnerMax)
{
int iIndexOuter=0; // outer loop index
int iIndexInner=0; // inner loop
for(iIndexOuter=0; iIndexOuter<iOuterIndexMax; iIndexOuter++)
for(iIndexInner=0; iIndexInner<iIndexInnerMax; iIndexInner++)
nop();
} // loopNop
void trioNop()
{
loopNop(3,
1);
}
int main(void)
{
int iIndexOuter=0; // outer loop index
int iIndexInner=0; // inner loop
initPortC();
while(1)
{
//for(iIndexOuter=0; iIndexOuter<iREG_SIZE; iIndexOuter++)
//{
turnPortC_LED_On();
//pPortC->PIO_SODR=(1<<iIndexOuter);
loopNop(iMAX_INDEX,
iMAX_INDEX*2);
turnPortC_LED_Off();
loopNop(iMAX_INDEX,
iMAX_INDEX*2);
//} // for
} // while
return(0); // exit
} |
2) Na Port C sem preko breadboarda zvezal 4 LED diode. Ob posiljanju samih enic na Port C se prizgejo 3 diode, ena vedno "brli". Napetost na port pinih je ok, torej 3,26 Volta. Je mogoce, da plosci zmanjka toka?? Plosca se napaja preko USB kabla, ki je priklopljen na samostojen USB hub, KI IMA LASTNO NAPAJANJE (iz 220 V). Zakaj 4-ta dioda vedno "brli"? |
|
Nazaj na vrh |
|
 |
red_mamba Član


Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.26 Kraj: Yogyakarta
|
Objavljeno: Ned Nov 13, 2011 2:28 pm Naslov sporočila: |
|
|
Poizkusi najprej povecati delay med vklopi in izklopi _________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
 |
SkunkyLee Član

Pridružen-a: Čet 12 Feb 2009 16:59 Prispevkov: 198 Aktiv.: 0.99 Kraj: Maribor, Ljubljana
|
Objavljeno: Ned Nov 13, 2011 2:31 pm Naslov sporočila: |
|
|
Po vsej verjetnosti imaš frekvenco procesorja par MHz.
Veliko inštrukcij rabi 1 strojni cikel, da se izvede, dolžina enega strojnega cikla pa je 1/frekvenca čipa.
Pomisli.
S kakšno frekvenco ti utripajo LED diode, če jih v enem strojnem ciklu prižgeš, v drugem ugasneš?
Zakaj ti potem izgleda kot da so prižgane?
Glede na to da pišeš v C-ju ni čisto tako kot sem napisal, ker ne rabiš točno enega cikla, ampak več... Zgoraj pišem za ilustracijo, da boš malo premislil. |
|
Nazaj na vrh |
|
 |
MarkoSan Član

Pridružen-a: Pon 11 Dec 2006 12:20 Prispevkov: 123 Aktiv.: 0.54 Kraj: Ljubljana
|
Objavljeno: Ned Nov 13, 2011 3:38 pm Naslov sporočila: |
|
|
SkunkyLee je napisal/a: |
Po vsej verjetnosti imaš frekvenco procesorja par MHz.
Veliko inštrukcij rabi 1 strojni cikel, da se izvede, dolžina enega strojnega cikla pa je 1/frekvenca čipa.
Pomisli.
S kakšno frekvenco ti utripajo LED diode, če jih v enem strojnem ciklu prižgeš, v drugem ugasneš?
Zakaj ti potem izgleda kot da so prižgane?
Glede na to da pišeš v C-ju ni čisto tako kot sem napisal, ker ne rabiš točno enega cikla, ampak več... Zgoraj pišem za ilustracijo, da boš malo premislil. |
Uhh, saj res, hvala obema, sem ze utrujen, ke rnisem skoraj nic spal ... Ok, kaj pa drugi problem? |
|
Nazaj na vrh |
|
 |
SkunkyLee Član

Pridružen-a: Čet 12 Feb 2009 16:59 Prispevkov: 198 Aktiv.: 0.99 Kraj: Maribor, Ljubljana
|
Objavljeno: Ned Nov 13, 2011 7:27 pm Naslov sporočila: |
|
|
Pogosto se zgodi, da imajo kakšni pini posebne lastnosti in niso GIO z običajnimi tokovnimi zmogljivostmi. Najdi opis porta v datasheetu in preveri zadevo. |
|
Nazaj na vrh |
|
 |
MarkoSan Član

Pridružen-a: Pon 11 Dec 2006 12:20 Prispevkov: 123 Aktiv.: 0.54 Kraj: Ljubljana
|
Objavljeno: Ned Nov 13, 2011 9:35 pm Naslov sporočila: |
|
|
SkunkyLee je napisal/a: |
Pogosto se zgodi, da imajo kakšni pini posebne lastnosti in niso GIO z običajnimi tokovnimi zmogljivostmi. Najdi opis porta v datasheetu in preveri zadevo. |
Ja, hvala, sem pogledal, mi je pa prijatelj, ki stvar obvlada povedal, da sem dobil najbrz cist drugo LED diodo (drug proizvajalec in drug model) in da ima drugacne karakteristike od ostalih treh. Najlepsa hvala vsem za pomoc! |
|
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: 6 dni
Powered by phpBB © 2001, 2005 phpBB Group
|