Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Daljinsko zakljucavanje otkljucavanje
#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


Messages In This Thread
Daljinsko zakljucavanje otkljucavanje - by samuki - 08-02-2014, 02:04 PM
RE: Daljinsko zakljucavanje otkljucavanje - by npejcic - 08-24-2014, 10:22 PM

Forum Jump:


Users browsing this thread: 3 Guest(s)