Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Daljinsko zakljucavanje otkljucavanje
#41
Da bas to, mogao sam i ja da iskompaliram program ali nije to poenta.
Drugacije ne bi mogao da savladas tu inace prostu proceduru.

Tu smo da ti pomognemo sve sto te muci oko tih koraka. Posle ce ti biti drasticno lakse Wink
Reply
#42
Hoce li se moci frekvencija ir prijemnika podesavati, da ne prima bilo koji daljinsku komandu?
Reply
#43
Moze, to je sad sve stvar programa.
Inace nije tu "frekvencija", tu su "kodovi", svaki taster ima svoj kod i kako se u progamu namesti tako ce da radi.
Reply
#44
U prilogu je kod koji je prilagodjen za PIC12F629. Obrati pažnju da je ovo polazni program koji nema dekodiranje IR koda, vec samo prihvata stanje 1-0 na ulaznom pinu kao što si tražio na stranici jedan. U ovom trenutku mislim da je ovo dobar start, jer bi se u slučaju dekodiranja kod malo više zakomplikovao čime bi postao nerazumljiv za praćenje. Predlažem da idemo postepeno:
Code:
// Program RemoteMotorControl.c
// Hardware: PIC12F629, IntOSC, Input on GPIO0, OUTM1 on GPIO1, OUTM2 on GPIO2
// Compiler: XC8

#include "htc.h" // umesto znaka navoda staviti znak za vece i manje

#define ULAZNI_PIN_TRIS     TRISIO0
#define ULAZNI_PIN          GPIO0
#define RELE_1_TRIS         TRISIO1
#define RELE_1_IO           GPIO1
#define RELE_2_TRIS         TRISIO2
#define RELE_2_IO           GPIO2

bit FlipFlopFlag;
bit Debounce;

// Ukoliko je mikrokontroler na 4 MHz (IntOSC) jedna instrukcija traje 4MHz/4 = 1uS, Nop() traje 1 masinsku instrukciju
#define Delay10Us() NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP();

// Kasnjenje u ms, Maksimalna vrednost count moze biti do 255
void DelayMs(unsigned char count)
{
    unsigned char DelayUSecLoop;
    while(count)
    {
        DelayUSecLoop = 100; // 100 x 10uS = 1ms
        while(DelayUSecLoop)
        {
            Delay10Us();
            DelayUSecLoop--;
        }
        count--;
    }
}

// Kasnjenje u sekundama, Maksimalna vrednost count moze biti do 255 sek
void DelayS(unsigned char count)
{
    while(count)
    {
        DelayMs(250);
        DelayMs(250);
        DelayMs(250);
        DelayMs(250);
    }
}

void main(void)
{
    CMCON = 0b00000111;  // Comparatori iskljuceni

    RELE_1_TRIS = 0; // Podesavamo da je RELE 1 pin IZLAZNI
    RELE_2_TRIS = 0; // Podesavamo da je RELE 2 pin IZLAZNI
    ULAZNI_PIN_TRIS = 1; // Podesavamo da ulazni pin bude ulazni pin
    FlipFlopFlag = 0;

    while(1) ////////////////////// GLAVNA PETLJA PROGRAMA
    {
        DelayMs(10); // Cekamo 10mS, jer nema razloga da nam se petlja vrti suvise brzo, dobijamo neku vrstu filtra za digitalni ulaz

        if(ULAZNI_PIN == 0) // Ako detektuje daljinski zahtev, podrazumeva se da je aktivnno stanje na nuli, bolja imunost na smetnje
        {
            if(Debounce == 1) // Da sprecimo lazna okidanja
            {
                Debounce = 0;
                if(FlipFlopFlag == 1)
                {
                    RELE_1_IO = 1;
                    DelayS(1); // Sacekaj 1 sekundu
                }
                else if(FlipFlopFlag == 0)
                {
                    RELE_2_IO = 1;
                    DelayS(1); // Sacekaj 1 sekundu
                }
                RELE_1_IO = 0; // Iskljuci izlaz 1
                RELE_2_IO = 0; // Iskljuci izlaz 2

                FlipFlopFlag ^= 1; // ako je 1 prelazi u 0, ako je 0 prelazi u 1 i tako u krug
            }
        }
        else
        {
            Debounce = 1;
        }
    }
}

Kod sam kompajlirao XC8 kompajlerom 1.12 bez optimizacije i zauzetost Flash, RAM memorije je svega 10%
Memory Summary:
Program space used 67h ( 103) of 400h words ( 10.1%)
Data space used 7h ( 7) of 40h bytes ( 10.9%)
EEPROM space used 0h ( 0) of 80h bytes ( 0.0%)
Configuration bits used 0h ( 0) of 1h word ( 0.0%)
ID Location space used 0h ( 0) of 4h bytes ( 0.0%)

Pokušaj da kreiraš projekat u MPLABX-u, za izvorni kod ubaci gore navedeni i probaj.
Reply
#45
@npejcic
da li mozes da mi objasnis ovo:
ako u bilo kom kodu napisem ovako:

DelayMs(10); //primer za 10ms

u kompajliranju imam gresku tipa

main.c61 warning: (1464) number of arguments passed to function "_DelayMs" does not match function's prototype
:0: error: undefined symbol:

ako napisem:

__delay_ms(10); //primer za 10ms

CODE se izkompajlira bez greske ali na toj liniji (u ovom slucaju 61 linija koda) umesto broja linije stoji !

koristim MPLABX
kompajler xc8 v1.30

ovo se desava u bilo kom primeru recimo pali gasi LED najprostiji
Reply
#46
@sax778
Kompajler XC8 ima u sebi ugrađene rutine za kašnjenje, koje sudeći po net forumima, ponekad prave probleme, bar u nekim edicijama XC8. Nisam ih koristio, jer više volim da sam izradim pomoćne funkcije kao što je Delay.

Ja sam za ovu našu priču izradio rutine za kašnjenje, i ukoliko možeš, upotrebi ih u svom kodu i nećeš imati problema sa kompajliranjem.

Napominjem da moraš u zavisnosti od frekvencije oscilatora da podesiš broj NOP() instrukcija koje imaš u DelayUs makrou. Za naš primer podrazumevan je 4MHz oscilator.

Evo šta treba da ubaciš u tvoj kod:
Code:
// Ukoliko je mikrokontroler na 4 MHz (IntOSC) jedna instrukcija traje 4MHz/4 = 1uS, Nop() traje 1 masinsku instrukciju
#define Delay10Us() NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP();

// Kasnjenje u ms, Maksimalna vrednost count moze biti do 255
void DelayMs(unsigned char count)
{
    unsigned char DelayUSecLoop;
    while(count)
    {
        DelayUSecLoop = 100; // 100 x 10uS = 1ms
        while(DelayUSecLoop)
        {
            Delay10Us();
            DelayUSecLoop--;
        }
        count--;
    }
}

// Kasnjenje u sekundama, Maksimalna vrednost count moze biti do 255 sek
void DelayS(unsigned char count)
{
    while(count)
    {
        DelayMs(250);
        DelayMs(250);
        DelayMs(250);
        DelayMs(250);
    }
}

Uzgred, ove moje rutine nisu baš 100% egzaktne tako da očekivati neki malu grešku kod tačnosti.

Što se tiče tvog pitanja oko kompajliranja, primetio sam da MPLABX hoće ponekad greškom da prikaže te uzvičnike, tako da ukoliko je iskompajlirao kod verujem da će raditi.

Za korišćenje ugrađenih rutina za delay (__delay_ms(10)) moraš negde u kodu da definišeš koji XTAL koristiš. To se radi sa:
#define _XTAL_FREQ 4000000

Pogledaj ovaj doc na strani 59 za detalje:
http://ww1.microchip.com/downloads/en/De...52053B.pdf
Reply
#47
Pade mi na pamet , da se sa ovim pic 12f629 napravi daljinska kontrola za ova nasa pojacala, posto ima 5 izlaza ,
power on
mute
volume+
volume-
to su cetiri i jedna led indikacija ir prijema. i sa pga2511 .
Da li je to izvodivo?
Reply
#48
Ima gotov projekat bas za to ovde na forumu, isto je npejcic pravio, potrazi.
Nije bas sa tim 12Fxxx PIC-evima, ima (mora) neki malo jaci kontroler i neki PGA kao opcija. Zaboravio sam detalje …

Napravi ovu prostu varijantu koju si krenuo i dok ne napravis nemoj da dodajes nove funkcije jer neces onda uopste zavrsiti Smile
Sa mikrokontrolerima moze da se napravi bukvalno sta hoces ali sve to zahteva malo detaljniji pristup, iskustvo i znajnje u nekim segmentima.
Moras korak po korak da ides, samo strpljivo i temeljno, docice sve na svoj red.

Tek ces ti da pravis zaniljive spravice sa PIC-evima Wink
Reply
#49
Da znam da ima projekat sto je pravio Npejic , to je malo komlikovanije i treba skuplji Pic , ai nema da se kupi ovde, a sa ovim bi bilo jednostavnije i jeftinije , predpostavljam da je komplikovanije pisanje programa za codove daljinskog.
A ovaj je skoro gotov treba prebaciti program sto je Npejic postavio u Hex file i programirati.
Reply
#50
Program mikroc pro pic, i u njega sam metodom copy paste , prepisao program sto je Npejić napisao. Kako ga konvertovati u hex file?


Attached Files Thumbnail(s)

Reply
#51
Pogledaj "zupčanike" pored ikonice za štampač, to je Build, klikom na tu ikonu kreće kompajliranje. Ukoliko je sve u redu, dobićeš u istom folderu HEX fajl.
Međutim, prilično sam siguran da neće moći Copy-Paste jer mikroC ima drugačiju definiciju pinova, tako da ćeš umesto:
#define ULAZNI_PIN_TRIS TRISIO0
...

pisati
#define ULAZNI_PIN_TRIS TRISIO.F0
#define ULAZNI_PIN GPIO.F0
#define RELE_1_TRIS TRISIO.F1
#define RELE_1_IO GPIO.F1
#define RELE_2_TRIS TRISIO.F2
#define RELE_2_IO GPIO.F2

Takođe izbaci #include "htc.h red.

Trebalo bi da tada bude sve u redu...
Reply
#52
Da pokazivao mi je gresku za include htc.h Smile

Sad ne prijavljuje gresku Big Grin I napravio je hex.file Smile

ali mi winpic800 kada hoću da ga ubacim u 12f629 prikaze ovo , kliknem na yes i on nastavi sa ubacivanjem jel to ispravno?


Attached Files Thumbnail(s)

Reply
#53
Instalirao sam i Mxlab i kopirao napisano i napravio sam hexe file


Attached Files Thumbnail(s)


.hex   2222.hex (Size: 513 bytes / Downloads: 3)
Reply
#54
Prva liga!

Vidis onu poruku "Build successful!", e to je jedna od najomiljenijih poruka svih programera Smile
Reply
#55
Brisem MicroC a ostaje Mplabx, prebacio sam hex file u pic i nije javljalo gresku, jel treba na kraju da bude ono 4p?

Jos da vidim raspored pinova i da pravim.
Reply
#56
Cekam sta ce reci Npejcic , jeli ok? Smile
Reply
#57
To je ok sve, sklapaj to da vidimo jel radi Smile
Reply
#58
Sve je Ok. Sklapaj harver da vidimo da li radi kako smo želeli Smile
Reply
#59
Znaci pin 7 ulaz , pin 6 jedan izlaz i pin 5 drugi izlaz .Prvo cu staviti led diode preko otpornika .


Attached Files Thumbnail(s)

Reply
#60
Napravio sam hardware Smile
pin1 5v
pin 8 -v
pin 7ulaz direktno sa Ir Tsop
pin 6 izlaz led dioda preko 1k na 5v
pin 5 izlaz led dioda preko 1k na 5v
i nece da radi Sad


Attached Files Thumbnail(s)

Reply


Forum Jump:


Users browsing this thread: 18 Guest(s)