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

Pridružen-a: Tor 05 Avg 2008 18:14 Prispevkov: 629 Aktiv.: 3.06 Kraj: Domžale
|
Objavljeno: Čet Okt 09, 2008 10:03 pm Naslov sporočila: 12F675 začetniška težava |
|
|
S pici sem šele dobro začel! Prvi program sem v Cju napisal danes in ga počasi nadgrajeval! Stvar je taka, da sem začel s picom 12F675. Napisal sem program utripanja lučk, ki deluje. zadevo sem nadgradil, da se lučke vozijo gor in dol, kjer se pojavi problem, da se lučka na portu GP3 nikakor ne prižge!
void main() {
ANSEL = 0; // Configure AN pins as digital
CMCON = 7; // Turn off the comparators
TRISIO= 0;
// configure pins of GPIO as output
;
do {
GPIO = 0;
Delay_ms(1000);
GPIO = 0xF1;
Delay_ms(1000);
GPIO = 0xF2;
Delay_ms(1000);
GPIO = 0xF4;
Delay_ms(1000);
GPIO = 0xF8; <----- napaka oziroma težava
Delay_ms(1000);
GPIO = 0xF4;
Delay_ms(1000);
GPIO = 0xF2;
Delay_ms(1000);
GPIO = 0xF1;
Delay_ms(1000);
} while(1);
}
Zanima me, kje je napaka, če sploh je in kaj pomeni prvi F oziroma kaj določa? drugo številko razumem!! Hvala za pomoč! |
|
Nazaj na vrh |
|
 |
l-note Član

Pridružen-a: Sre 07 Jul 2004 12:32 Prispevkov: 100 Aktiv.: 0.42
|
Objavljeno: Čet Okt 09, 2008 10:18 pm Naslov sporočila: |
|
|
Na strani 4 tegale datasheeta boš opazil, da GP3 lahko deluje samo kot vhod, od tod težava.
Število predstavljeno v šestnajstiškem zapisu (npr. 0xF1) predstavlja vrednost 8-bitnega števila. Tako prva cifra, v tem primeru F, predstavlja zgornje/leve štiri bite, desna cifra pa spodnje/desne 4 bite. Za lažje razumevanje odpri kalkulator v Windowsih, pod View nastavi Scientific. Nato lahko izbiraš med razlišnimi zapisi števil (Hex = šestanjstiški zapis, Dec = decimalni/desetiški, Bin = binarni). Poskušaj preklapljati med njimi in opazuj kako se spreminja zapis števila, ki ga vneseš.
Nazadnje urejal/a l-note Čet Okt 09, 2008 10:25 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
Tonci Član

Pridružen-a: Tor 05 Avg 2008 18:14 Prispevkov: 629 Aktiv.: 3.06 Kraj: Domžale
|
Objavljeno: Čet Okt 09, 2008 10:23 pm Naslov sporočila: |
|
|
se oproščam! Nisem bil pogoren na puščice! Kako pa potem posebaj vklapljam GP5 in GP4? pišem 0x10 oz 0x20? ali je prvi F kaj drugega? |
|
Nazaj na vrh |
|
 |
l-note Član

Pridružen-a: Sre 07 Jul 2004 12:32 Prispevkov: 100 Aktiv.: 0.42
|
Objavljeno: Čet Okt 09, 2008 10:29 pm Naslov sporočila: |
|
|
Za začetek ti bo mogoče lažje, če namesto šestajstiškega zapisa uporabljaš kar binarnega.
Primer: 0b11110000 -> skrajno desna cifra predstavlja pin 0, leva pa pin 7.
V tem primeru imajo pini od 0-3 vrednost 0, pini od 4-7 pa vrednost 1
Na ta način boš točno videl kateri pin je postavljen na 1, kateri pa na 0.
Pa še tole, PIC 12F675 ima samo 6 uporabnih pinov, torej v zapisu 0b11110000 skrajno levi dve enici nimata nobenega učinka, tako da njuna vrednost ni pomembna (je lahko 0 ali pa 1). |
|
Nazaj na vrh |
|
 |
Tonci Član

Pridružen-a: Tor 05 Avg 2008 18:14 Prispevkov: 629 Aktiv.: 3.06 Kraj: Domžale
|
Objavljeno: Pet Okt 10, 2008 10:44 am Naslov sporočila: |
|
|
Najprej najlepša hvala za vse odgovore! Zanima me še, če obstaja možnost da kje preberem vrednost, koliko časa je preteklo od kar se je prižgal pic, kot je to možno v razvojnem okoljuš-arm, kjer obstaja funkcija clock(). |
|
Nazaj na vrh |
|
 |
matijap Član

Pridružen-a: Sob 05 Jun 2004 23:24 Prispevkov: 230 Aktiv.: 0.97 Kraj: Žirovnica, LJ
|
Objavljeno: Pet Okt 10, 2008 10:57 am Naslov sporočila: |
|
|
Kaj takšnega si boš moral kar sam napisati, uporabi en timer in prekinitve. |
|
Nazaj na vrh |
|
 |
Tonci Član

Pridružen-a: Tor 05 Avg 2008 18:14 Prispevkov: 629 Aktiv.: 3.06 Kraj: Domžale
|
Objavljeno: Pet Okt 10, 2008 1:21 pm Naslov sporočila: |
|
|
Ne razumem ravno Po datasheetu sem listal in če sem prav razumel moram v OPTION_REG pobrisat bit 5 naprej pa neznam! Uporabljam interni oscilator ki teče na 4Mhz kar po predvidevanjih pomeni, da en cikel opravi v 1/4000000 |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.40
|
Objavljeno: Pet Okt 10, 2008 4:24 pm Naslov sporočila: |
|
|
Malo bolj pozorno preglej datasheet... med drugim piše, da interni clock znaša fosc/4, torej je en cikel dolg ravno 1us pri 4MHz.
Sicer bi ti za začetek priporočal kaj večjega, recimo 16F628A ali 16F876A. _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
Tonci Član

Pridružen-a: Tor 05 Avg 2008 18:14 Prispevkov: 629 Aktiv.: 3.06 Kraj: Domžale
|
Objavljeno: Pet Okt 10, 2008 8:05 pm Naslov sporočila: |
|
|
@gumby na žalost mi ne uspe usposobit 16F628A!
void main()
{TRISA=0b11111111;
do{
PORTA=0b11111111;
Delay_ms(1000);
PORTA=0b00000000;}
while(1);
}
S to kodo se nič ne zgodi, samo ledica rahlo sveti! |
|
Nazaj na vrh |
|
 |
l-note Član

Pridružen-a: Sre 07 Jul 2004 12:32 Prispevkov: 100 Aktiv.: 0.42
|
Objavljeno: Sob Okt 11, 2008 12:23 am Naslov sporočila: |
|
|
Citiram: |
TRISA=0b11111111;
|
Tale vrstica nastavi pine na vhod. |
|
Nazaj na vrh |
|
 |
Tonci Član

Pridružen-a: Tor 05 Avg 2008 18:14 Prispevkov: 629 Aktiv.: 3.06 Kraj: Domžale
|
Objavljeno: Sob Okt 11, 2008 2:08 am Naslov sporočila: |
|
|
Hvala! sedaj deluje. Delam tako banalne napake  |
|
Nazaj na vrh |
|
 |
Tonci Član

Pridružen-a: Tor 05 Avg 2008 18:14 Prispevkov: 629 Aktiv.: 3.06 Kraj: Domžale
|
Objavljeno: Čet Okt 16, 2008 10:11 pm Naslov sporočila: |
|
|
Ponovno imam težavo! Stvar je taka, da imam spisan program in ko bi pritisniv gumb bi se del programa še izvajal del pa ne! napisal sem if stavek if((GPIO&&0b00010000)==0) in v tem primeru je gumb pritisnjen in naj bi se del kode izvajal! Zgodi pa se nič! V čem bi lahko bil problem? |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.40
|
Objavljeno: Pet Okt 17, 2008 6:14 pm Naslov sporočila: |
|
|
Saj ločiš operatorja && in & ane?  _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
Tonci Član

Pridružen-a: Tor 05 Avg 2008 18:14 Prispevkov: 629 Aktiv.: 3.06 Kraj: Domžale
|
Objavljeno: Pet Okt 17, 2008 7:31 pm Naslov sporočila: |
|
|
REs je:S sem malo površen! |
|
Nazaj na vrh |
|
 |
jabcek Član

Pridružen-a: Pet 14 Nov 2008 20:26 Prispevkov: 40 Aktiv.: 0.20 Kraj: Liboje
|
Objavljeno: Ned Jun 07, 2009 9:26 am Naslov sporočila: |
|
|
Zdravo,
bi mi mogoče lahko kdo povedal, kaj delam narobe v spodnjem programu, namreč ko v stimulusu nastavim GP4 in GP5 na toggle, ter jih pritisnem mi ne gre v if stavek. Uporabljam PIC 12F675.
Pravtako pa imam problem pri real pic simulator-ju, ko loadam .hex file mi takoj na začetku napiše out of code.
Ko sem probal s PIC 12F683 mi je delalo pravilno.
#include <pic.h>
#define SenzorL GPIO4 //Levi senzor
#define SenzorD GPIO5 //Desni senzor
void inicializacija(void)
{
//CMCON0
CM0=1;
CM1=1;
CM2=1;
//ANSEL
ANS0=0;
ANS1=0;
ANS2=0;
ANS3=0;
//ADCON0
ADON=0;
//SCS = 1;
//TMR1CS=0;
GPIO = 0b00000000; // Na vse izhode postavimo 0
TRISIO=0b00111000; // Vsi prikljueki kot izhodi
}
int main()
{
inicializacija(); //inicializirajmo potrebno periferijo
while (1)
{
if(SenzorL && SenzorD) //gremo naprej
{
GPIO0=1;
GPIO1=1;
}
else //stop
{
GPIO0=0;
GPIO1=0;
}
}
}
Hvala |
|
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: 497 dni
Powered by phpBB © 2001, 2005 phpBB Group
|