Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

PIC16F887 problem sa funkcijama

[es] :: Elektronika :: Mikrokontroleri :: PIC16F887 problem sa funkcijama

Strane: 1 2 3

[ Pregleda: 6638 | Odgovora: 40 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

zivadin_despot
Živadin Despotović
Novi Sad

Član broj: 175438
Poruke: 704
*.mbb.telenor.rs.



+5 Profil

icon PIC16F887 problem sa funkcijama22.02.2013. u 23:23 - pre 135 meseci
Pozdrav svima, interesuje me sledece, kada u kodu imam funkcije za PWM, I2C, SPI i UART i kada ih sve inisijalizujem u main, kontroler je jednostavno mrtav, zasto?
Kada zakomentarisem inisijalizaciju UART funkcije onda radi, tj imam signal PWM-a, u suprotnom ne... Evo i kod:
Code:

void Init_RS232(unsigned int baud_rate,unsigned int oscilator_MHz)
{
     unsigned int baud;
     unsigned long vrednost_reg;
     unsigned long fcy;
     //podesavanje baudrate=====================
     baud=baud_rate;
     fcy=oscilator_MHz*1000000;
     vrednost_reg=fcy/baud/64; //formula
     vrednost_reg=vrednost_reg-1; //formula
     SPBRG=vrednost_reg&0x00FF; //registri za baud
     SPBRGH=(vrednost_reg&0xFF00)>>8;
     BRG16_bit=0; //8mo bitni baud generator
     //BRGH_bit=1; //visok baud //ovo se ne sme staviti
     //=========================================
     //podesavanje rs232modula===================
     GIE_bit=1; //globalni interrupt
     PEIE_bit=1; //periferijski interrupt
     SYNC_bit=0; //asinhroni mod
     SPEN_bit=1; //omogucuje serijski modul;
     //podesavanje transmitera==================
     //TXIE_bit=1; //omogucen interrupt za TX
     TXEN_bit=0; //onemoguceno slanje
     //======================================
     //podesavanje prijemnika================
     RCIE_bit=1; //omogucen RX interrupt
     CREN_bit=1; //omogucuje recivera
     //=======================================
     RCIF_bit=0;        //================dodato====================
     TXIE_bit=1;        //================dodato====================
}
unsigned char RS232_Read(void)
{
     unsigned char read_buf;
     read_buf=RCREG;
     CREN_bit=1;
     return read_buf;
}
void RS232_Write(unsigned int podatak)
{
     unsigned char prijem;
     prijem=podatak;
     TXREG=podatak;
     Delay_ms(10);
     TXEN_bit=1;
     Delay_ms(10);
     TXEN_bit=0;
     TXREG=0;
}
//====== Inicijalizacija SPI  ===============================================================================/
void Init_SPI(void)
{
     SSPCON=0x20; //omogucen SPI i takt je Fosc/4
     SSPSTAT=0x00;
     SSPSTAT.BF=0; //pin koji se setuje kada je bafer pun
     TRISC.B5=0; //SD0 izlazni
     TRISC.B3=0; //SCK izlazni
     TRISC.B4=0; //SDI ulazni
}
void Upis_SPI(char data_SPI)
{
     SSPCON=0x20;
     SSPBUF=data_SPI;
     SSPCON=0x00;
}
//====Inicijalizacija PWM-a ===============================================================================/
void PWM1_Init(unsigned int PWM_frekvencija_Hz,unsigned char Frekvencija_oscilatora_MHz){
     unsigned int fre;
     unsigned char osc;
     unsigned char perioda;
     unsigned int obrada;
     unsigned int ispuna;
     osc=Frekvencija_oscilatora_MHz;
     fre=PWM_frekvencija_Hz;
     if(fre<620) fre=620;
     if(fre>4800) fre=4800;
     T2CON=0b00011010; //pres 16, pos 4
     perioda=(osc*3906/(fre));  //perioda PWM signala
     perioda=(perioda*4)-1;
     PR2=perioda;
     TMR2=0;
     //GIE_bit=1;
     //PEIE_bit=1;
     //TMR2IE_bit=1;
     TMR2IF_bit=0;
     CCP1CON=0x0C;   //PWM mod, ne invertovan
     ispuna=0;       //inicijalno ugasen PWM
     obrada=ispuna;       //popunjavanje registara
     ispuna=ispuna&0x03;
     ispuna=ispuna<<4;
     CCP1CON=0x0C|ispuna;
     CCPR1L=obrada>>2;
     TRISC.B2=0;
     PORTC.B2=0;
     TMR2ON_bit=1;
}
void PWM1_Set_Parameters(unsigned int Frekvencija_Hz,unsigned char Procenat_ispune,unsigned char Frekvencija_oscilatora_MHz){
     unsigned int fre;
     unsigned char osc;
     unsigned int perioda;
     unsigned int rezolucija;
     unsigned char osnova;
     unsigned char dodavanje;
     unsigned int ispuna_max;
     unsigned int ispuna;
     unsigned int max;
     unsigned int obrada;
     unsigned char procenat;
     osc=Frekvencija_oscilatora_MHz;
     fre=Frekvencija_Hz;
     if(fre<620) fre=620;
     if(fre>4800) fre=4800;
     procenat=Procenat_ispune;
     perioda=(osc*3906/(fre));
     perioda=(perioda*4)-1;
     PR2=perioda;
     rezolucija=(log10(4*(perioda+1))/log10(2))*10;
     osnova=rezolucija/10;
     dodavanje=rezolucija%10;
     switch (osnova){
            case 6: ispuna_max=64; break;
            case 7: ispuna_max=128; break;
            case 8: ispuna_max=256; break;
            case 9: ispuna_max=512; break;
     }

     switch (dodavanje){
            case 1: max=ispuna_max*1.07177; break;
            case 2: max=ispuna_max*1.14869; break;
            case 3: max=ispuna_max*1.23144; break;
            case 4: max=ispuna_max*1.31951; break;
            case 5: max=ispuna_max*1.41421; break;
            case 6: max=ispuna_max*1.51571; break;
            case 7: max=ispuna_max*1.62450; break;
            case 8: max=ispuna_max*1.74110; break;
            case 9: max=ispuna_max*1.86607; break;
     }
     ispuna=procenat*max/100;
     obrada=ispuna;
     ispuna=ispuna&0x03;
     ispuna=ispuna<<4;
     CCP1CON=0x0C|ispuna;
     CCPR1L=obrada>>2;
}

void main() {
     OPTION_REG=0;
     INTCON=0;
     ANSEL=0;
     ANSELH=0;
     TRISA=255;
     PORTA=0;
     TRISB=0;
     PORTB=0;
     I2C1_Init(100000);      // initialize I2C communication
     Delay_ms(100);
     //Init_RS232(9600,10);
     Delay_ms(100);
     Init_SPI();
     Delay_ms(100);
     PWM1_Init(800,10);
     Delay_ms(100);
     PWM1_Set_Parameters(800,20,10);
     Delay_ms(100);
     while(1){
     
     }
}
 
Odgovor na temu

zivadin_despot
Živadin Despotović
Novi Sad

Član broj: 175438
Poruke: 704
*.mbb.telenor.rs.



+5 Profil

icon Re: PIC16F887 problem sa funkcijama22.02.2013. u 23:37 - pre 135 meseci
Da napomenem, ne treba da stoji funkcija za SPI, ali sve jedno, kad nju izbacim i dodam neku funkciju takodje nece da funkcionise... Dodata je funkcija za ispis na 7-segmentni displej (dvocifren broj)

Code:

void Ispis_displej(unsigned char podatak){
     unsigned char obrada,jedinica,desetica;
     obrada=podatak;
     jedinica=obrada%10;
     desetica=obrada/10;
     PORTD.B2=jedinica;
     PORTD.B3=jedinica>>1;
     PORTD.B4=jedinica>>2;
     PORTD.B5=jedinica>>3;
     PORTD.B1=1;
     Delay_ms(100);
     PORTD.B1=0;
     PORTD.B2=desetica;
     PORTD.B3=desetica>>1;
     PORTD.B4=desetica>>2;
     PORTD.B5=desetica>>3;
     PORTD.B0=1;
     Delay_ms(100);
     PORTD.B0=0;
}
 
Odgovor na temu

zivadin_despot
Živadin Despotović
Novi Sad

Član broj: 175438
Poruke: 704
*.mbb.telenor.rs.



+5 Profil

icon Re: PIC16F887 problem sa funkcijama23.02.2013. u 00:10 - pre 135 meseci
Evo sta se jos desava, kada sadrzaje funkcija Init_RS232 i PWM1_Init ubacim direktno u main, onda radi normalno, ali ako u while(1) dodam samo Delay_ms(1000), onda se desava da jednu sekundu imam PWM, a onda nemam, tj neki sum na osciloskopu u Proteusu... Evo i kod:
Code:

unsigned char RS232_Read(void)
{
     unsigned char read_buf;
     read_buf=RCREG;
     CREN_bit=1;
     return read_buf;
}
void RS232_Write(unsigned int podatak)
{
     unsigned char prijem;
     prijem=podatak;
     TXREG=podatak;
     Delay_ms(10);
     TXEN_bit=1;
     Delay_ms(10);
     TXEN_bit=0;
     TXREG=0;
}
//====Inicijalizacija PWM-a ===============================================================================/
void PWM1_Set_Parameters(unsigned int Frekvencija_Hz,unsigned char Procenat_ispune,unsigned char Frekvencija_oscilatora_MHz){
     unsigned int fre;
     unsigned char osc;
     unsigned int perioda;
     unsigned int rezolucija;
     unsigned char osnova;
     unsigned char dodavanje;
     unsigned int ispuna_max;
     unsigned int ispuna;
     unsigned int max;
     unsigned int obrada;
     unsigned char procenat;
     osc=Frekvencija_oscilatora_MHz;
     fre=Frekvencija_Hz;
     if(fre<620) fre=620;
     if(fre>4800) fre=4800;
     procenat=Procenat_ispune;
     perioda=(osc*3906/(fre));
     perioda=(perioda*4)-1;
     PR2=perioda;
     rezolucija=(log10(4*(perioda+1))/log10(2))*10;
     osnova=rezolucija/10;
     dodavanje=rezolucija%10;
     switch (osnova){
            case 6: ispuna_max=64; break;
            case 7: ispuna_max=128; break;
            case 8: ispuna_max=256; break;
            case 9: ispuna_max=512; break;
     }

     switch (dodavanje){
            case 1: max=ispuna_max*1.07177; break;
            case 2: max=ispuna_max*1.14869; break;
            case 3: max=ispuna_max*1.23144; break;
            case 4: max=ispuna_max*1.31951; break;
            case 5: max=ispuna_max*1.41421; break;
            case 6: max=ispuna_max*1.51571; break;
            case 7: max=ispuna_max*1.62450; break;
            case 8: max=ispuna_max*1.74110; break;
            case 9: max=ispuna_max*1.86607; break;
     }
     ispuna=procenat*max/100;
     obrada=ispuna;
     ispuna=ispuna&0x03;
     ispuna=ispuna<<4;
     CCP1CON=0x0C|ispuna;
     CCPR1L=obrada>>2;
}

void Ispis_displej(unsigned char podatak){
     unsigned char obrada,jedinica,desetica;
     obrada=podatak;
     jedinica=obrada%10;
     desetica=obrada/10;
     PORTD.B2=jedinica;
     PORTD.B3=jedinica>>1;
     PORTD.B4=jedinica>>2;
     PORTD.B5=jedinica>>3;
     PORTD.B1=1;
     Delay_ms(100);
     PORTD.B1=0;
     PORTD.B2=desetica;
     PORTD.B3=desetica>>1;
     PORTD.B4=desetica>>2;
     PORTD.B5=desetica>>3;
     PORTD.B0=1;
     Delay_ms(100);
     PORTD.B0=0;
}

void main() {
     unsigned long vrednost_reg;
     unsigned int fre;
     unsigned char perioda;
     unsigned int obrada;
     unsigned int ispuna;
     //RS232====================================================================
     //podesavanje baudrate=====================
     vrednost_reg=100000/96/64; //formula
     vrednost_reg=vrednost_reg-1; //formula
     SPBRG=vrednost_reg&0x00FF; //registri za baud
     SPBRGH=(vrednost_reg&0xFF00)>>8;
     BRG16_bit=0; //8mo bitni baud generator
     //BRGH_bit=1; //visok baud //ovo se ne sme staviti
     //=========================================
     //podesavanje rs232modula===================
     GIE_bit=1; //globalni interrupt
     PEIE_bit=1; //periferijski interrupt
     SYNC_bit=0; //asinhroni mod
     SPEN_bit=1; //omogucuje serijski modul;
     //podesavanje transmitera==================
     //TXIE_bit=1; //omogucen interrupt za TX
     TXEN_bit=0; //onemoguceno slanje
     //======================================
     //podesavanje prijemnika================
     RCIE_bit=1; //omogucen RX interrupt
     CREN_bit=1; //omogucuje recivera
     //=======================================
     RCIF_bit=0;        //================dodato====================
     TXIE_bit=1;        //================dodato====================
     //==PWM====================================================================
     fre=800;
     if(fre<620) fre=620;
     if(fre>4800) fre=4800;
     T2CON=0b00011010; //pres 16, pos 4
     perioda=(10*3906/(fre));  //perioda PWM signala
     perioda=(perioda*4)-1;
     PR2=perioda;
     TMR2=0;
     //GIE_bit=1;
     //PEIE_bit=1;
     //TMR2IE_bit=1;
     TMR2IF_bit=0;
     CCP1CON=0x0C;   //PWM mod, ne invertovan
     ispuna=0;       //inicijalno ugasen PWM
     obrada=ispuna;       //popunjavanje registara
     ispuna=ispuna&0x03;
     ispuna=ispuna<<4;
     CCP1CON=0x0C|ispuna;
     CCPR1L=obrada>>2;
     TRISC.B2=0;
     PORTC.B2=0;
     TMR2ON_bit=1;
     Delay_ms(100);
     I2C1_Init(100000);
     Delay_ms(100);
     PWM1_Set_Parameters(800,20,10);
     Ispis_displej(0);
     
     OPTION_REG=0;
     INTCON=0;
     ANSEL=0;
     ANSELH=0;
     TRISA=0;
     TRISB=0;
     PORTA=0;
     PORTB=0;
     
     while(1){
              Delay_ms(1000);

     }
}


Evo i kako to izgleda u simulaciji
Prikačeni fajlovi
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: PIC16F887 problem sa funkcijama23.02.2013. u 07:56 - pre 135 meseci
Koji kompajler koristiš i da li ti izbacuje neko upozorenje ili grešku? Problem sigurno nema veze sa time šta od funkcija dodaješ već kolike su te funkcije u pogledu veličine koda. Mogao bi da vidiš šta se dešava ako analiziraš generisani asemblerski kod. Jeste smor ali ti je to jedino rešenje.
gorankg
 
Odgovor na temu

zivadin_despot
Živadin Despotović
Novi Sad

Član broj: 175438
Poruke: 704
217.65.192.*



+5 Profil

icon Re: PIC16F887 problem sa funkcijama23.02.2013. u 11:23 - pre 135 meseci
Koristim MikroC, i nije mi prijavljivao greske, popunjenost kontrolera je oko 25 posto...Uzeo sam i prebacio kod u Mplab 8.56, kompajler HITECH, i ono delimicno radi, kad stignem kuci okacicu kod. Posto sam slabo radio u Mplab okruzenju, nisam siguran kako se setuju konfiguracioni bitovi. Cim stignem kuci, okacicu kod, pa da probam tu resiti. A sto se tice MikroCa, ovo mi je drugi put da mi desi, gde su mi funkcije manje, samo ih ima dosta...Koje bi bilo resenje ako je problem do velicine funkcija, da li ih onda smestiti u neki drugi c file pa prwko h file ubaciti? Hvala na odgovoru.
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: PIC16F887 problem sa funkcijama23.02.2013. u 14:10 - pre 135 meseci
Ma veličina koda ne treba da ima nikakve veze al ko zna šta kompajler izmulja. Postaviću ti konfiguracione bitove iz HiTech samo reci šta ti treba.
gorankg
 
Odgovor na temu

zivadin_despot
Živadin Despotović
Novi Sad

Član broj: 175438
Poruke: 704
*.mbb.telenor.rs.



+5 Profil

icon Re: PIC16F887 problem sa funkcijama23.02.2013. u 16:05 - pre 135 meseci
Evo kod iz Mplab-a

Code:

#include "htc.h"
#include "delay.h"
#include "math.h"

unsigned int i;
unsigned int k;
unsigned char temp;
//unsigned int tabela[20]={277,332,391,452,512,574,631,683,730,772,810,843,870,893,913,930,945,957,967,975};
unsigned char j,razlika,vrednost,tabela;

void Init_RS232(unsigned int baud_rate,unsigned int oscilator_MHz)
{
     unsigned int baud;
     unsigned long vrednost_reg;
     unsigned long fcy;
     //podesavanje baudrate=====================
     baud=baud_rate;
     fcy=oscilator_MHz*1000000;
     vrednost_reg=fcy/baud/64; //formula
     vrednost_reg=vrednost_reg-1; //formula
     SPBRG=vrednost_reg&0x00FF; //registri za baud
     SPBRGH=(vrednost_reg&0xFF00)>>8;
     BRG16=0; //8mo bitni baud generator
     //BRGH_bit=1; //visok baud //ovo se ne sme staviti
     //=========================================
     //podesavanje rs232modula===================
     GIE=1; //globalni interrupt
     PEIE=1; //periferijski interrupt
     SYNC=0; //asinhroni mod
     SPEN=1; //omogucuje serijski modul;
     //podesavanje transmitera==================
     //TXIE_bit=1; //omogucen interrupt za TX
     TXEN=0; //onemoguceno slanje
     //======================================
     //podesavanje prijemnika================
     RCIE=1; //omogucen RX interrupt
     CREN=1; //omogucuje recivera
     //=======================================
     RCIF=0;        //================dodato====================
     TXIE=1;        //================dodato====================
}
unsigned char RS232_Read(void)
{
     unsigned char read_buf;
     read_buf=RCREG;
     CREN=1;
     return read_buf;
}
void RS232_Write(unsigned int podatak)
{
     unsigned char prijem;
     prijem=podatak;
     TXREG=podatak;
     DelayUs(1000);
     TXEN=1;
     DelayUs(1000);
     TXEN=0;
     TXREG=0;
}
void PWM1_Init(unsigned int PWM_frekvencija_Hz,unsigned char Frekvencija_oscilatora_MHz){
     unsigned int fre;
     unsigned char osc;
     unsigned char perioda;
     unsigned int obrada;
     unsigned int ispuna;
     osc=Frekvencija_oscilatora_MHz;
     fre=PWM_frekvencija_Hz;
     if(fre<620) fre=620;
     if(fre>4800) fre=4800;
     T2CON=0b00011010; //pres 16, pos 4
     perioda=(osc*3906/(fre));  //perioda PWM signala
     perioda=(perioda*4)-1;
     PR2=perioda;
     TMR2=0;
     //GIE_bit=1;
     //PEIE_bit=1;
     //TMR2IE_bit=1;
     TMR2IF=0;
     CCP1CON=0x0C;   //PWM mod, ne invertovan
     ispuna=30;       //inicijalno ugasen PWM
     obrada=ispuna;       //popunjavanje registara
     ispuna=ispuna&0x03;
     ispuna=ispuna<<4;
     CCP1CON=0x0C|ispuna;
     CCPR1L=obrada>>2;
     TRISC2=0;
     RC2=0;
     TMR2ON=1;
}
void PWM1_Set_Parameters(unsigned int Frekvencija_Hz,unsigned char Procenat_ispune,unsigned char Frekvencija_oscilatora_MHz){
     unsigned int fre;
     unsigned char osc;
     unsigned int perioda;
     unsigned int rezolucija;
     unsigned char osnova;
     unsigned char dodavanje;
     unsigned int ispuna_max;
     unsigned int ispuna;
     unsigned int max;
     unsigned int obrada;
     unsigned char procenat;
     osc=Frekvencija_oscilatora_MHz;
     fre=Frekvencija_Hz;
     if(fre<620) fre=620;
     if(fre>4800) fre=4800;
     procenat=Procenat_ispune;
     perioda=(osc*3906/(fre));
     perioda=(perioda*4)-1;
     PR2=perioda;
     rezolucija=(log10(4*(perioda+1))/log10(2))*10;
     osnova=rezolucija/10;
     dodavanje=rezolucija%10;
     switch (osnova){
            case 6: ispuna_max=64; break;
            case 7: ispuna_max=128; break;
            case 8: ispuna_max=256; break;
            case 9: ispuna_max=512; break;
     }

     switch (dodavanje){
            case 1: max=ispuna_max*1.07177; break;
            case 2: max=ispuna_max*1.14869; break;
            case 3: max=ispuna_max*1.23144; break;
            case 4: max=ispuna_max*1.31951; break;
            case 5: max=ispuna_max*1.41421; break;
            case 6: max=ispuna_max*1.51571; break;
            case 7: max=ispuna_max*1.62450; break;
            case 8: max=ispuna_max*1.74110; break;
            case 9: max=ispuna_max*1.86607; break;
     }
     ispuna=procenat*max/100;
     obrada=ispuna;
     ispuna=ispuna&0x03;
     ispuna=ispuna<<4;
     CCP1CON=0x0C|ispuna;
     CCPR1L=obrada>>2;
}
void Ispis_displej(unsigned char podatak){
     unsigned char obrada,jedinica,desetica;
     obrada=podatak;
     jedinica=obrada%10;
     desetica=obrada/10;
     RD2=jedinica;
     RD3=jedinica>>1;
     RD4=jedinica>>2;
     RD5=jedinica>>3;
     RD1=1;
     DelayUs(1000);
     RD1=0;
     RD2=desetica;
     RD3=desetica>>1;
     RD4=desetica>>2;
     RD5=desetica>>3;
     RD0=1;
     DelayUs(1000);
     RD0=0;
}
void Slanje(void)
{
     TXEN=1;
}
static void interrupt
zile(void)
{
    if(TXIF)
     {
         DelayUs(255);
         RS232_Write(5|0x30);     
         DelayUs(255);
     }
}
//dodato===================================
char temperatura(int temp)
{
 i=0;
 while(temp>=tabela) i++;
 razlika=tabela;
 i--;
 razlika=razlika-tabela;
 razlika=razlika/5;
 j=0;
 while(temp>=(tabela+razlika*j)) j++;
 j--;
 vrednost=5+i*5+j;
 if(temp>tabela) vrednost=0;
 if(temp<tabela) vrednost=0;
 return vrednost;
}
//=========================================
void main(){
    OPTION=0;
    INTCON=0;
    ANSEL=0;
    ANSELH=0;
    TRISA=0;
    TRISB=0;
    PORTA=0;
    PORTB=0;
    Init_RS232(9600,10);
    PWM1_Init(2000,10);
    PWM1_Set_Parameters(2000,10,10);
    Ispis_displej(0);
    i=0;
    DelayUs(255);
    while(1){
        DelayUs(255);
        PORTB=~PORTB;
        i++;
        temp=temperatura(760);
        if(i==4000){
            Slanje();
            i=0;
            k++;
            Ispis_displej(temp);
        }
    }

}


Interesuje me sintaksa kako se postavljaju konfiguracioni bitovi? A treba mi sledece, eksterni oscilator 10MHz, iskljucen Brown, iskljucen WDT, ukljucen HS, i valjda je to to... Ja sam pokusavao to podesiti u konfiguracionom prozoru ali i nakon toga kada probam da ubacim hex PicKIT2 mi prijavi da hex ne sadrzi konfiguracione bitove!!!, kada iz Mplab-a exportujem 8bitni hex, pickit mi prijavi da je hex veci od memorije kontrolera?
Predpostavljam da ne znam da izbacim hex :)
Jos negde sam citao o problemu delay funkcije, Ja sam ovde koristio DelayUs(255) a merenje mi pokazuje 310us, ali predpostavljam da je to zbog ne podesenih konfiguracionih bitova ( simulirao sam u Proteus-u)
Znaci pomoglo bi mi sledece:
sintaksa za podesavanje konfiguracionih bitova
kako se exportuje hex
i da li mi je dobra sintaksa za interrupt
Hvala na pomoci
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: PIC16F887 problem sa funkcijama23.02.2013. u 21:01 - pre 135 meseci
Podešavanje za konfiguracione bitove dodaješ odmah nakon #include i to ovako:


__CONFIG(DEBUG_OFF & LVP_OFF & FCMEN_OFF & IESO_OFF & BOREN_OFF & CPD_OFF & CP_OFF & MCLRE_ON & PWRTE_ON & HS);
__CONFIG(WRT_OFF);


Moj picc za 16 seriju Microchip kontrolera je neka stara varijanta pa ne mogu da prevedem ceo kod jer nemam definicije za PIC16F887. Najverovatnije je da se definicije za konfiguracione bitove razlikuju od ovog što sam ti gore naveo. Ovo gore je prevedeno sa XC8 free vezijom kompajlera. Kako se definišu konfig bitovi i svi ostali registri naći ćeš u include direktorijumu fajl se najverovatnije zove pic16f887.h. Obavezno dodaj sve bitove bez obzira što ti recimo trenutno nije interesantan BOR ili code protection.
DelayUs smo već objašnjavali u nekoj temi ispod. Interrupt ti je OK.Jel ti testiraš u PROTEUS-u ili na realnom hardveru? Za export hex najpre odaberi PICKit2 iz Programmer padajućeg menija pa onda ideš na Program. Ne znam da li koristiš in'circuit pa zato obrati pažnju na to odakle bi da napajaš PIC prilikom programiranja. XC8 je preveo ovaj tvoj kod i zauzeo nekih 50% programske memorije. Da li ti je baš neophodna ovolika matematika za PWM? Nisam sve detaljno gledao...
gorankg
 
Odgovor na temu

grabik

Član broj: 32507
Poruke: 311
*.adsl.net.t-com.hr.



+7 Profil

icon Re: PIC16F887 problem sa funkcijama23.02.2013. u 21:26 - pre 135 meseci
Vrlo optimisticki je ocekivati da ce pic16F odraditi tu matematiku u realnom vremenu, pogotovo ovo sa pokretnim zarezom koje pretpostavljam ni ne izracuna kako treba.

Sto se tice konfiguracije itd. mikrocip je to kulturno uradio i sa svakim c kompajlerom recimo c30 ili xc16 po novom imas u doc fajlu sve kulturno odradjeno sta i kako , odnosno koji *.h pozvati i koje funkcije i makroi sta rade.

Ako mislis da kompajliras sa mikrocipovim kompajlerima odmah preskoci 16f i 18f jer ovaj xc8 ubacuje jos jedno 60% smeca da uspori mikrokontroler ako nije placen kompajler ,dok xc16 i xc32 to ne rade.

 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: PIC16F887 problem sa funkcijama24.02.2013. u 00:03 - pre 135 meseci
grabik,

Kakvu matematiku u realnom vremenu!? Kako misliš da ne izračuna dobro!? Kakve veze ima to što radi na 16F? Čovek generiše pwm signal, ispisuje nešto na displeju i ima UART. Ne treba mu ARM11 za to. Ja sam pre par dana uradio kao primer nešto vrlo vrlo slično za PIC16F1827 sa XC8. Jedino nemam UART. I radi sasvim normalno. I ne vidim zašto ne bi radilo.
gorankg
 
Odgovor na temu

grabik

Član broj: 32507
Poruke: 311
*.adsl.net.t-com.hr.



+7 Profil

icon Re: PIC16F887 problem sa funkcijama24.02.2013. u 04:07 - pre 135 meseci
Cekaj malo, covjek se nije izjasnio sta radi, prije je radio frekventni za motor ako ne grjesim. Ja koliko me sjecanje sluzi hi tec ovo nije dobro racunao ako se napisalo na ovakav nacin ,ima dosta godina, provjeri u simulatoru.....
sad vidim da je ovo malo rafiniraniji kod ;) ja pricam o float a covjek stavi max kao int a onda sto me zbunilo;) "max=ispuna_max*1.07177;max=ispuna_max*1.14869; max=ispuna_max*1.23144;" .
 
Odgovor na temu

grabik

Član broj: 32507
Poruke: 311
*.adsl.net.t-com.hr.



+7 Profil

icon Re: PIC16F887 problem sa funkcijama24.02.2013. u 07:52 - pre 135 meseci
@zivadin_despot , probaj da iskljucis optimizacije u hitec c-u jer taj kompajler zna da generise kod koji sa jednom verzijom radi a sa slijedecom verzijom kompajlera isti kod ne radi, imao sam takav problem prije dok sam radio sa 16f. Takodje probaj da napravis simulaciju u mplab ili jos bolje u mplabx ako jos podrzava tvoju verziju kompajlera i to tako da otvoris registre koji su sa uart i pwm , setujes breakpointe i gledas da li program u radu mjenja setovanje, pwm-a i uart ili nesto slicno, pretpostavljam da postoji logicno objasnjenje zasto se to desava. Takodje da li ti je mozda wdt ukljucen pa pravi probleme.

 
Odgovor na temu

grabik

Član broj: 32507
Poruke: 311
*.adsl.net.t-com.hr.



+7 Profil

icon Re: PIC16F887 problem sa funkcijama24.02.2013. u 08:18 - pre 135 meseci
Citat:
goran_68:
grabik,

Kakvu matematiku u realnom vremenu!? Kako misliš da ne izračuna dobro!? Kakve veze ima to što radi na 16F? Čovek generiše pwm signal, ispisuje nešto na displeju i ima UART. Ne treba mu ARM11 za to. Ja sam pre par dana uradio kao primer nešto vrlo vrlo slično za PIC16F1827 sa XC8. Jedino nemam UART. I radi sasvim normalno. I ne vidim zašto ne bi radilo.


Kakve veze to sto radi na 16f, pa "vako" ukljucen: pwm,uart,spi,i2c radi lcd displej nakljukan sa delay-ima kao novogodisnje drvce i puna kola matematike , stani malo :):):):)

Recimo 16f877 kosta u farnelu 5,5funti , za 5,5funti mozes da biras kod 16 bitnih piconja ili cak 32 bitne. Drugo imas odlicne besplatne kompajlere koji nisu "potkresani" ako koristis "studentsku" verziju. Imas na tone primjera u c koje je dao proizvodjac. Imas mocan integrisani alat za iste i na kraju ne da jedu ove 16f za dorucak nego ne mogu ni po cemu ni da se porede vise.

Da ne zaboravim za iste imas u doc fajlu config_index.html u kojem odaberes samo koji hoces mc i imas sve sazvakano sto se tice konfiguracionih bitova samo copy paste sta zelis.

Eh da zaboravio sam, sa prijevodom sa engleskog su stigli samo 16f84 i 16f877 da prevedu:)

[Ovu poruku je menjao grabik dana 24.02.2013. u 09:30 GMT+1]
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: PIC16F887 problem sa funkcijama24.02.2013. u 08:42 - pre 135 meseci
grabik,

U naslovu piše da koristi PIC16F887 a on ne košta 5,5 funti. Onaj izraz koji te bunio treba da piše ovako:

case 1: max=(unsigned int)(ispuna_max*1.07177); break;

Nije uradio typecast ali to ne znači da izraz nije dobro izračunat. Kompajler se buni i izbaci warning u ovakvom slučaju ali je verovatno on to zanemario.

zivadin_despot,

Probaj ovaj hex ispod.


gorankg
Prikačeni fajlovi
 
Odgovor na temu

grabik

Član broj: 32507
Poruke: 311
*.adsl.net.t-com.hr.



+7 Profil

icon Re: PIC16F887 problem sa funkcijama24.02.2013. u 09:16 - pre 135 meseci
Moja greska, gledao sam 877 , taj 887 kosta u tqfp44 kucistu 2,55funti a za tu cifru moze da se nadje u istom kucistu i 5V 16bitni piconja , 3V-tni piconje se mogu naci u 44pinskom kucistu vec od 1,58 funti. Jedino ne znam kako proteus stoji sa ovim malim terminatorima:)


Ja ti kazem da kad sam radio sa hitec(prije 7 godina) ako nisi napisao typecast nije dobro izracunao ,to ne pricam napamet.
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: PIC16F887 problem sa funkcijama24.02.2013. u 09:28 - pre 135 meseci
Jeste bio problem oko typecast i verovatno i te verzije izbacuju upozorenje, mrzi me da sad probam ne sećam se, ali to je već greška onog ko piše softver. Microchip-ov Mplabc je isto tako radio. Sad sigurno izbacuje upozorenje proverio sam.
gorankg
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: PIC16F887 problem sa funkcijama24.02.2013. u 12:34 - pre 135 meseci
I još nešto o čemu su takođe vrlo često vođene diskusije. Šta vredi taj mali 16-bitni terminator od 1.5 funtu ukoliko ne zadovoljava potrebe njegove aplikacije? Možda mu treba EEPROM. Nijedan PIC24H, PIC24E, dsPIC33F nema EEPROM. Da li treba da dodaje još jedan IC s strane? Šta ako mu treba svih 36 i/o pinova? Prvi sledeći 16-bitni koji ima EEPROM i u 44 pinskom je pakovanju je PIC24F16KA304. Ali on ne košta 1.5 funtu! I ne nalazim ga u farnellu. OK ima ga digikey i košta oko 4USD. Nažalost nema ga ni Comet, distributer u Srbiji. Ništa zato, dobaviće ga i Comet i svi ostali ali zaboga, mora se čekati. Koliko? Pa recimo dve nedelje. Šta ako mu treba za juče! Ovaj mali buđavi 8-bitni je jeftin i kupuje se još malo pa na trafici :) Ako je za hobi i igranje cena i dobavljivost ne igra. Ali tad se već postavlja drugo pitanje: Zašto onda PIC!?
gorankg
 
Odgovor na temu

grabik

Član broj: 32507
Poruke: 311
*.adsl.net.t-com.hr.



+7 Profil

icon Re: PIC16F887 problem sa funkcijama24.02.2013. u 14:52 - pre 135 meseci
Citat:
goran_68: I još nešto o čemu su takođe vrlo često vođene diskusije. Šta vredi taj mali 16-bitni terminator od 1.5 funtu ukoliko ne zadovoljava potrebe njegove aplikacije? Možda mu treba EEPROM. Nijedan PIC24H, PIC24E, dsPIC33F nema EEPROM. Da li treba da dodaje još jedan IC s strane? Šta ako mu treba svih 36 i/o pinova? Prvi sledeći 16-bitni koji ima EEPROM i u 44 pinskom je pakovanju je PIC24F16KA304. Ali on ne košta 1.5 funtu! I ne nalazim ga u farnellu. OK ima ga digikey i košta oko 4USD. Nažalost nema ga ni Comet, distributer u Srbiji. Ništa zato, dobaviće ga i Comet i svi ostali ali zaboga, mora se čekati. Koliko? Pa recimo dve nedelje. Šta ako mu treba za juče! Ovaj mali buđavi 8-bitni je jeftin i kupuje se još malo pa na trafici :) Ako je za hobi i igranje cena i dobavljivost ne igra. Ali tad se već postavlja drugo pitanje: Zašto onda PIC!?



Sad si me dobro nasmejao, zar mislis da tehnologija ide unazad i to korisnici tek tako uzimaju zdravo za gotovo, svaki taj nesrecni 16bitni ,dspic,32bitni pic moze da upisuje u vlastiti flash , sto znaci da upisuje i brise, sto opet znaci da sam sebe moze da programira(booot sektor) , teoretski moze da upise roman dostojevskog u svoj flash;) , pa mu u stvari ni ne treba eeprom :)))

Sto se tice pinova dobar deo ima pps ,znaci sam odredjujes sta ce ti biti koji pin i gdje ce biti, ovo pojednostavljuje projektovanje PCB-a ,ne svi ali poprilican broj, takodje imaju odredjeni broj tolerantnih 5V pinova.

Ja narucujem iz farnela i ovdje su porilicno brzi zavisno kad uplatis dobijas i za 3-4 dana ako imaju na skladistu.


 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: PIC16F887 problem sa funkcijama24.02.2013. u 16:06 - pre 135 meseci
Flash self-write imaju i 8-bitni PIC. Ja sam pokušao da nađem prvi jeftiniji 16-bitni PIC koji bi zamenio u svemu ovaj njegov 887. No, da ne nastavljamo nešto što je već rađeno. Eno šeme i koda predloži mu mikrokontroler ali da ne bude za hobi i učenje varijantu.
gorankg
 
Odgovor na temu

grabik

Član broj: 32507
Poruke: 311
*.adsl.net.t-com.hr.



+7 Profil

icon Re: PIC16F887 problem sa funkcijama24.02.2013. u 17:55 - pre 135 meseci
interapt u kodu ti ne radi, pretpostavljam nesto sa uart, vrlo lose ti je sto stavljas delay u interapt, a program se zaglavi u while u funkciji temperatura. Tako kaze mplabx simulator.



Code:

#include "htc.h"
//#include "delay.h"
#include "math.h"

unsigned int i;
unsigned int k;
unsigned char temp;
//unsigned int tabela[20]={277,332,391,452,512,574,631,683,730,772,810,843,870,893,913,930,945,957,967,975};
unsigned char j,razlika,vrednost,tabela;

void Init_RS232(unsigned int baud_rate,unsigned int oscilator_MHz)
{
     unsigned int baud;
     unsigned long vrednost_reg;
     unsigned long fcy;
     //podesavanje baudrate=====================
     baud=baud_rate;
     fcy=oscilator_MHz*1000000;
     vrednost_reg=fcy/baud/64; //formula
     vrednost_reg=vrednost_reg-1; //formula
     SPBRG=vrednost_reg&0x00FF; //registri za baud
     SPBRGH=(vrednost_reg&0xFF00)>>8;
     BRG16=0; //8mo bitni baud generator
     //BRGH_bit=1; //visok baud //ovo se ne sme staviti
     //=========================================
     //podesavanje rs232modula===================
     GIE=1; //globalni interrupt
     PEIE=1; //periferijski interrupt
     SYNC=0; //asinhroni mod
     SPEN=1; //omogucuje serijski modul;
     //podesavanje transmitera==================
     //TXIE_bit=1; //omogucen interrupt za TX
     TXEN=0; //onemoguceno slanje
     //======================================
     //podesavanje prijemnika================
     RCIE=1; //omogucen RX interrupt
     CREN=1; //omogucuje recivera
     //=======================================
     RCIF=0;        //================dodato====================
     TXIE=1;        //================dodato====================
}
unsigned char RS232_Read(void)
{
     unsigned char read_buf;
     read_buf=RCREG;
     CREN=1;
     return read_buf;
}
void RS232_Write(unsigned int podatak)
{
     unsigned char prijem;
     prijem=podatak;
     TXREG=podatak;
    // DelayUs(1000);
     TXEN=1;
     //DelayUs(1000);
     TXEN=0;
     TXREG=0;
}
void PWM1_Init(unsigned int PWM_frekvencija_Hz,unsigned char Frekvencija_oscilatora_MHz){
     unsigned int fre;
     unsigned char osc;
     unsigned char perioda;
     unsigned int obrada;
     unsigned int ispuna;
     osc=Frekvencija_oscilatora_MHz;
     fre=PWM_frekvencija_Hz;
     if(fre<620) fre=620;
     if(fre>4800) fre=4800;
     T2CON=0b00011010; //pres 16, pos 4
     perioda=(osc*3906/(fre));  //perioda PWM signala
     perioda=(perioda*4)-1;
     PR2=perioda;
     TMR2=0;
     //GIE_bit=1;
     //PEIE_bit=1;
     //TMR2IE_bit=1;
     TMR2IF=0;
     CCP1CON=0x0C;   //PWM mod, ne invertovan
     ispuna=30;       //inicijalno ugasen PWM
     obrada=ispuna;       //popunjavanje registara
     ispuna=ispuna&0x03;
     ispuna=ispuna<<4;
     CCP1CON=0x0C|ispuna;
     CCPR1L=obrada>>2;
     TRISC2=0;
     RC2=0;
     TMR2ON=1;
}
void PWM1_Set_Parameters(unsigned int Frekvencija_Hz,unsigned char Procenat_ispune,unsigned char Frekvencija_oscilatora_MHz){
     unsigned int fre;
     unsigned char osc;
     unsigned int perioda;
     unsigned int rezolucija;
     unsigned char osnova;
     unsigned char dodavanje;
     unsigned int ispuna_max;
     unsigned int ispuna;
     unsigned int max;
     unsigned int obrada;
     unsigned char procenat;
     osc=Frekvencija_oscilatora_MHz;
     fre=Frekvencija_Hz;
     if(fre<620) fre=620;
     if(fre>4800) fre=4800;
     procenat=Procenat_ispune;
     perioda=(osc*3906/(fre));
     perioda=(perioda*4)-1;
     PR2=perioda;
     rezolucija=(log10(4*(perioda+1))/log10(2))*10;
     osnova=rezolucija/10;
     dodavanje=rezolucija%10;
     switch (osnova){
            case 6: ispuna_max=64; break;
            case 7: ispuna_max=128; break;
            case 8: ispuna_max=256; break;
            case 9: ispuna_max=512; break;
     }

     switch (dodavanje){
            case 1: max=ispuna_max*1.07177; break;
            case 2: max=ispuna_max*1.14869; break;
            case 3: max=ispuna_max*1.23144; break;
            case 4: max=ispuna_max*1.31951; break;
            case 5: max=ispuna_max*1.41421; break;
            case 6: max=ispuna_max*1.51571; break;
            case 7: max=ispuna_max*1.62450; break;
            case 8: max=ispuna_max*1.74110; break;
            case 9: max=ispuna_max*1.86607; break;
     }
     ispuna=procenat*max/100;
     obrada=ispuna;
     ispuna=ispuna&0x03;
     ispuna=ispuna<<4;
     CCP1CON=0x0C|ispuna;
     CCPR1L=obrada>>2;
}
void Ispis_displej(unsigned char podatak){
     unsigned char obrada,jedinica,desetica;
     obrada=podatak;
     jedinica=obrada%10;
     desetica=obrada/10;
     RD2=jedinica;
     RD3=jedinica>>1;
     RD4=jedinica>>2;
     RD5=jedinica>>3;
     RD1=1;
     //DelayUs(1000);
     RD1=0;
     RD2=desetica;
     RD3=desetica>>1;
     RD4=desetica>>2;
     RD5=desetica>>3;
     RD0=1;
     //DelayUs(1000);
     RD0=0;
}
void Slanje(void)
{
     TXEN=1;
}
static void interrupt
zile(void)
{
    if(TXIF)
     {
        // DelayUs(255);
         RS232_Write(5|0x30);
         //DelayUs(255);
     }
}
//dodato===================================
char temperatura(int temp)
{
 i=0;
 while(temp>=tabela) i++;
 razlika=tabela;
 i--;
 razlika=razlika-tabela;
 razlika=razlika/5;
 j=0;
 while(temp>=(tabela+razlika*j)) j++;
 j--;
 vrednost=5+i*5+j;
 if(temp>tabela) vrednost=0;
 if(temp<tabela) vrednost=0;
 return vrednost;
}
//=========================================
void main(){
    OPTION_REG=0;
    INTCON=0;
    ANSEL=0;
    ANSELH=0;
    TRISA=0;
    TRISB=0;
    PORTA=0;
    PORTB=0;
    Init_RS232(9600,10);
    PWM1_Init(2000,10);
    PWM1_Set_Parameters(2000,10,10);
    Ispis_displej(0);
    i=0;
    //DelayUs(255);
    while(1){
        //DelayUs(255);
        PORTB=~PORTB;
        i++;
        temp=temperatura(760);
        if(i==4000){
            Slanje();
            i=0;
            k++;
            Ispis_displej(temp);
        }
    }

}


Ovo ti je setovanje za 16f887

Code:


16F887 Support Information
#pragma config Usage
#pragma config <setting>=<named value>
For example:
// Data Code Protection bit: Data memory code protection is disabled
// Brown Out Reset Selection bits: BOR disabled
// Internal External Switchover bit: Internal/External Switchover mode is disabled
// In-Circuit Debugger Mode bit: In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins
// Oscillator Selection bits: INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
// Fail-Safe Clock Monitor Enabled bit: Fail-Safe Clock Monitor is disabled
// RE3/MCLR pin function select bit: RE3/MCLR pin function is digital input, MCLR internally tied to VDD
// Watchdog Timer Enable bit: WDT disabled and can be enabled by SWDTEN bit of the WDTCON register
// Code Protection bit: Program memory code protection is disabled
// Low Voltage Programming Enable bit: RB3 pin has digital I/O, HV on MCLR must be used for programming
// Power-up Timer Enable bit: PWRT disabled
#pragma config CPD = OFF, BOREN = OFF, IESO = OFF, DEBUG = OFF, FOSC = INTRC_NOCLKOUT, FCMEN = OFF, MCLRE = OFF, WDTE = OFF, CP = OFF, LVP = OFF, PWRTE = OFF
#pragma config <setting>=<literal constant>
For example:
// Data Code Protection bit: Data memory code protection is disabled
// Brown Out Reset Selection bits: BOR disabled
// Internal External Switchover bit: Internal/External Switchover mode is disabled
// In-Circuit Debugger Mode bit: In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins
// Oscillator Selection bits: INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
// Fail-Safe Clock Monitor Enabled bit: Fail-Safe Clock Monitor is disabled
// RE3/MCLR pin function select bit: RE3/MCLR pin function is digital input, MCLR internally tied to VDD
// Watchdog Timer Enable bit: WDT disabled and can be enabled by SWDTEN bit of the WDTCON register
// Code Protection bit: Program memory code protection is disabled
// Low Voltage Programming Enable bit: RB3 pin has digital I/O, HV on MCLR must be used for programming
// Power-up Timer Enable bit: PWRT disabled
#pragma config CPD = 0x1, BOREN = 0x0, IESO = 0x0, DEBUG = 0x1, FOSC = 0x4, FCMEN = 0x0, MCLRE = 0x0, WDTE = 0x0, CP = 0x1, LVP = 0x0, PWRTE = 0x1
#pragma config <register>=<literal constant>
For example:
// Data Code Protection bit: Data memory code protection is disabled
// Brown Out Reset Selection bits: BOR disabled
// Internal External Switchover bit: Internal/External Switchover mode is disabled
// In-Circuit Debugger Mode bit: In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins
// Oscillator Selection bits: INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
// Fail-Safe Clock Monitor Enabled bit: Fail-Safe Clock Monitor is disabled
// RE3/MCLR pin function select bit: RE3/MCLR pin function is digital input, MCLR internally tied to VDD
// Watchdog Timer Enable bit: WDT disabled and can be enabled by SWDTEN bit of the WDTCON register
// Code Protection bit: Program memory code protection is disabled
// Low Voltage Programming Enable bit: RB3 pin has digital I/O, HV on MCLR must be used for programming
// Power-up Timer Enable bit: PWRT disabled
#pragma config CONFIG1 = 0xE0D4

For example:
// IDLOC @ 0x2000
#pragma config IDLOC0 = 0x3FFF
#pragma config Settings
Register: CONFIG1 @ 0x2007
CPD =    Data Code Protection bit
OFF    Data memory code protection is disabled
ON    Data memory code protection is enabled
BOREN =    Brown Out Reset Selection bits
OFF    BOR disabled
ON    BOR enabled
NSLEEP    BOR enabled during operation and disabled in Sleep
SBODEN    BOR controlled by SBOREN bit of the PCON register
IESO =    Internal External Switchover bit
OFF    Internal/External Switchover mode is disabled
ON    Internal/External Switchover mode is enabled
DEBUG =    In-Circuit Debugger Mode bit
OFF    In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins
ON    In_Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger
FOSC =    Oscillator Selection bits
INTRC_NOCLKOUT    INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
XT    XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
LP    LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
INTRC_CLKOUT    INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
EXTRC_CLKOUT    RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN
EXTRC_NOCLKOUT    RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN
EC    EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN
HS    HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
FCMEN =    Fail-Safe Clock Monitor Enabled bit
OFF    Fail-Safe Clock Monitor is disabled
ON    Fail-Safe Clock Monitor is enabled
MCLRE =    RE3/MCLR pin function select bit
OFF    RE3/MCLR pin function is digital input, MCLR internally tied to VDD
ON    RE3/MCLR pin function is MCLR
WDTE =    Watchdog Timer Enable bit
OFF    WDT disabled and can be enabled by SWDTEN bit of the WDTCON register
ON    WDT enabled
CP =    Code Protection bit
OFF    Program memory code protection is disabled
ON    Program memory code protection is enabled
LVP =    Low Voltage Programming Enable bit
OFF    RB3 pin has digital I/O, HV on MCLR must be used for programming
ON    RB3/PGM pin has PGM function, low voltage programming enabled
PWRTE =    Power-up Timer Enable bit
OFF    PWRT disabled
ON    PWRT enabled
Register: CONFIG2 @ 0x2008
BOR4V =    Brown-out Reset Selection bit
BOR40V    Brown-out Reset set to 4.0V
BOR21V    Brown-out Reset set to 2.1V
WRT =    Flash Program Memory Self Write Enable bits
HALF    0000h to 0FFFh write protected, 1000h to 1FFFh may be modified by EECON control
OFF    Write protection off
1FOURTH    0000h to 07FFh write protected, 0800h to 1FFFh may be modified by EECON control
256    0000h to 00FFh write protected, 0100h to 1FFFh may be modified by EECON control
Register: IDLOC0 @ 0x2000
Register: IDLOC1 @ 0x2001
Register: IDLOC2 @ 0x2002
Register: IDLOC3 @ 0x2003

 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: PIC16F887 problem sa funkcijama

Strane: 1 2 3

[ Pregleda: 6638 | Odgovora: 40 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.