Страница 1 от 2

Програмно прецакан пик процесор

Публикувано: ср май 27, 2015 7:34 am
от dalgia
Някой имали идея как може и дали може да се оправи следния проблем.Процесора е pik16f628a слеед качване на програма не се разпознава от програматора и вече не може да се записва в него. Три парчета ми заминаха.Първо помислих че е от програматора ама не е.Записва и трие и чете други процесори с други програми.Ако някой може да помогне. :?

Re: Програмно прецакан пик процесор

Публикувано: ср май 27, 2015 8:13 am
от AAsat
Така записания процесор върши ли работата за която е програмиран, въпреки че не се разпознава от програматора?
Какъв все пак е програматора? .......Записва и трие и чете други процесори с други програми....... - предполагам че става дума за други серии процесори. Това че програматорът работи коректно с едни процесори не означава автоматично че ще работи както трябва и с други.
Не знам дали е възможно програмата да задава параметри, които сменят предназначението на някой от пиновете за серийно програмиране, или конфигурацията на генератора, или пък RESET-a. При процесори на ATMEL това е възможно.
За да се уверя че процесора е изправен аз поне бих го сложил на паралелен програматор, който го поддържа.

Re: Програмно прецакан пик процесор

Публикувано: ср май 27, 2015 11:38 am
от dalgia
Със сигурностработи с този процесор и 16f648 и 12f508 и други пикове съм програмирал.След програмирането не става за нищо нито върши работата за която е програмиран.

Re: Програмно прецакан пик процесор

Публикувано: ср май 27, 2015 11:50 am
от Vectra
Не знам как е при PIC-овете. При Atmega има няколко fuse-та, които ако не се програмират коректно процесора прави тези номера. Единствения начин да се поправи е с програматор по паралелния порт. Това е искал да ти каже колегата AAsat.

Re: Програмно прецакан пик процесор

Публикувано: ср май 27, 2015 3:05 pm
от dyaneff
И аз си мисля, че си объркал конфигурационните битове.

Re: Програмно прецакан пик процесор

Публикувано: ср май 27, 2015 4:58 pm
от ig_ivanov
Погледни в конфигурационната дума на PIC-a да не би случайно да си изключил LVP (low voltage programming- програмиране с ниско напрежение). Ако ползваш обикновен програматор, който няма Vpp (на този проц се подава на А5) и PGM (В3)- няма да може го върнеш в изходно състояние. Програматор на паралелен порт също няма да ти свърши работа.

Re: Програмно прецакан пик процесор

Публикувано: ср май 27, 2015 6:32 pm
от AAsat
....Със сигурностработи с този процесор и 16f648 и 12f508 и други пикове съм програмирал.....
Щом казваш че си програмирал PIC16F628A, може да изпробаш нов процесор и да го програмираш с файл, който си ползувал за да видиш ще стане ли. Така ще си проверип програматора.
.....Програматор на паралелен порт също няма да ти свърши работа......
Не става дума за програматор на паралелен порт а за паралелен програматор ( термина може да не е точен ). Примерно ELNEC BEEPROG - не казвам че трябва да е точно този, а някакъв от този род.
А източника на файла доколко е надежден?

Re: Програмно прецакан пик процесор

Публикувано: чет май 28, 2015 2:14 am
от dalgia
Програматора е JDM.Колко е надежден източника не знам.Явно не е.Процесора не може да се програмира повече.Задавам ръчно какъв тип е ,трие го записва и при проверка на записа дава грешка.Слагам го на платката и не работи.Програмата е друга и със сигурност работеща и платката е работеща.От една такава откачих работещ ПИК програмирах го с въпросната програма и стана неразпознаваем и неработещ.

// LCD counter
//
// Compile with free Hi Tech that comes with MPLAB .
// This code is free to use, for more info http://www.moty22.co.uk

#include <htc.h>

#define RS RA0
#define EN RA1
#define _XTAL_FREQ 4000000

//prototypes
void display(char fig);
void init(void);
void main(void);
void clock(void);
void clear(void);

__CONFIG(MCLRDIS & WDTDIS & UNPROTECT & LVPDIS & INTCLK); //INTIO // & BORDIS & PWRTEN

unsigned char d1,d2,d3,d4,d5,d6,d7,period;

void init(void){

CMCON = 0b00000111; //comparator off
T1CON = 0b1110; //TMR1 prescale 1:1, osc=on
TRISB = 0b11000000; //RB 1,5,6,7 inputs
TRISA = 0b11110000;
OPTION = 0b10100000; //TMR1 pre=1:2

//LCD init
__delay_ms(100);
PORTA=0;
PORTB=2; clock(); //4 bit
PORTB=2; clock(); //function set: 4 bit
PORTB=8; clock(); //function set: 1 line=0, 2 lines=8
__delay_us(25); __delay_us(25);
PORTB=0; clock(); //display set:
PORTB=12; clock(); //display set: curzor off=12, curzor on=14, curzor on and flashing=15
__delay_us(25); __delay_us(25);
PORTB=0; clock(); PORTB=1; clock(); //display clear
__delay_ms(2);
PORTB=0; clock(); //Entry mode:
PORTB=6; clock(); //Entry mode:increment address
}

void main(void){
unsigned long total;
unsigned int freq2;
unsigned char freq1,nz;
init();
for(;;){
freq1 = 0;
freq2 = 0;
TMR1L = 0;
TMR1H = 0;
TMR1IF = 0;
nz=0;
TMR1ON = 1; // open gate
TMR0 = 0; // start count
T0IF=0;

while (!TMR1IF){ //loop for 2 second
if (T0IF){++freq2; T0IF=0;}
}

freq1=TMR0; //stop count=copy reg
TMR1ON = 0; //close gate

total=(unsigned long)freq1 + (unsigned long)freq2 * 256; //binary to decimal
d7=total/1000000+48;
d6=(total/100000) %10+48;
d5=(total/10000) %10+48;
d4=(total/1000) %10+48;
d3=(total/100) %10+48;
d2=(total/10) %10+48;
d1=total %10+48;
clear();

display(32); //blank
display(32); //blank
//remove leading zeros
if(d7 == 48){display(32); display(32);}
else{display(d7); display(44); nz=1;} //44=,
if(d6 == 48 && nz==0){display(32);}
else{display(d6); nz=1;}
if(d5 == 48 && nz==0){display(32);}
else{display(d5); nz=1;}
if(d4 == 48 && nz==0){display(32); display(32);}
else{display(d4); display(44);}

display(d3);
display(d2);
display(d1);
display(32); //blank
display(72); //H
display(122); //z

//new line
PORTB=12; clock(); PORTB=0; clock();
__delay_ms(2); //2ms

nz=0;
if(total<1000){total=1000000/total; period=117;} //us
else{total=1000000000/total; period=110;} //ns

d7=total/1000000+48;
d6=(total/100000) %10+48;
d5=(total/10000) %10+48;
d4=(total/1000) %10+48;
d3=(total/100) %10+48;
d2=(total/10) %10+48;
d1=total %10+48;

display(32); //blank
display(32); //blank
//remove leading zeros
if(d7 == 48){display(32); display(32);}
else{display(d7); display(44); nz=1;} //44=,
if(d6 == 48 && nz==0){display(32);}
else{display(d6); nz=1;}
if(d5 == 48 && nz==0){display(32);}
else{display(d5); nz=1;}
if(d4 == 48 && nz==0){display(32); display(32);}
else{display(d4); display(44);}

display(d3);
display(d2);
display(d1);
display(32); //blank
display(period); //n, u
display(115); //s

}
}

void clock(void){
EN=1;
__delay_us(25);
EN=0;
__delay_us(25);
}

void clear(void){
RS=0;
PORTB=0; clock(); PORTB=1; clock(); //clear display
PORTB=0; clock(); PORTB=2; clock(); //return home
__delay_ms(2); //2ms

}

void display(char fig){

RS=1;
PORTB=(fig >> 4); clock();
PORTB=fig & 0b00001111; clock();
RS=0;

}

Re: Програмно прецакан пик процесор

Публикувано: чет май 28, 2015 2:48 am
от dalgia
// LCD counter
//
// Compile with free Hi Tech that comes with MPLAB .
// This code is free to use, for more info http://www.moty22.co.uk

#include <htc.h>

#define RS RA0
#define EN RA1
#define _XTAL_FREQ 4000000

//prototypes
void display(char fig);
void init(void);
void main(void);
void clock(void);
void clear(void);

//__CONFIG(MCLRDIS & WDTDIS & UNPROTECT & LVPDIS & INTCLK); //INTIO // & BORDIS & PWRTEN
#pragma config LVP=OFF, WDTE=OFF, MCLRE=OFF, FOSC=INTOSCIO, CP=OFF

unsigned char d1,d2,d3,d4,d5,d6,d7,period;

void init(void){

CMCON = 0b111; //comparator off
T1CON = 0b1110; //TMR1 prescale 1:1, osc=on
TRISB = 0b11000000; //RB 1,5,6,7 inputs
TRISA = 0b11110000;
OPTION_REG = 0b10100000; //TMR1 pre=1:2

//LCD init
__delay_ms(100);
PORTA=0;
PORTB=2; clock(); //4 bit
PORTB=2; clock(); //function set: 4 bit
PORTB=8; clock(); //function set: 1 line=0, 2 lines=8
__delay_us(25); __delay_us(25);
PORTB=0; clock(); //display set:
PORTB=12; clock(); //display set: curzor off=12, curzor on=14, curzor on and flashing=15
__delay_us(25); __delay_us(25);
PORTB=0; clock(); PORTB=1; clock(); //display clear
__delay_ms(2);
PORTB=0; clock(); //Entry mode:
PORTB=6; clock(); //Entry mode:increment address
}

void main(void){
unsigned long total;
unsigned int freq2;
unsigned char freq1,nz;
init();
for(;;){
freq1 = 0;
freq2 = 0;
TMR1L = 0;
TMR1H = 0;
TMR1IF = 0;
nz=0;
TMR1ON = 1; // open gate
TMR0 = 0; // start count
T0IF=0;

while (!TMR1IF){ //loop for 2 second
if (T0IF){++freq2; T0IF=0;}
}

freq1=TMR0; //stop count=copy reg
TMR1ON = 0; //close gate

total=(unsigned long)freq1 + (unsigned long)freq2 * 256; //binary to decimal
d7=total/1000000+48;
d6=(total/100000) %10+48;
d5=(total/10000) %10+48;
d4=(total/1000) %10+48;
d3=(total/100) %10+48;
d2=(total/10) %10+48;
d1=total %10+48;
clear();

display(32); //blank
display(32); //blank
//remove leading zeros
if(d7 == 48){display(32); display(32);}
else{display(d7); display(44); nz=1;} //44=,
if(d6 == 48 && nz==0){display(32);}
else{display(d6); nz=1;}
if(d5 == 48 && nz==0){display(32);}
else{display(d5); nz=1;}
if(d4 == 48 && nz==0){display(32); display(32);}
else{display(d4); display(44);}

display(d3);
display(d2);
display(d1);
display(32); //blank
display(72); //H
display(122); //z

//new line
PORTB=12; clock(); PORTB=0; clock();
__delay_ms(2); //2ms

nz=0;
if(total<1000){total=1000000/total; period=117;} //us
else{total=1000000000/total; period=110;} //ns

d7=total/1000000+48;
d6=(total/100000) %10+48;
d5=(total/10000) %10+48;
d4=(total/1000) %10+48;
d3=(total/100) %10+48;
d2=(total/10) %10+48;
d1=total %10+48;

display(32); //blank
display(32); //blank
//remove leading zeros
if(d7 == 48){display(32); display(32);}
else{display(d7); display(44); nz=1;} //44=,
if(d6 == 48 && nz==0){display(32);}
else{display(d6); nz=1;}
if(d5 == 48 && nz==0){display(32);}
else{display(d5); nz=1;}
if(d4 == 48 && nz==0){display(32); display(32);}
else{display(d4); display(44);}

display(d3);
display(d2);
display(d1);
display(32); //blank
display(period); //n, u
display(115); //s

}
}

void clock(void){
EN=1;
__delay_us(25);
EN=0;
__delay_us(25);
}

void clear(void){
RS=0;
PORTB=0; clock(); PORTB=1; clock(); //clear display
PORTB=0; clock(); PORTB=2; clock(); //return home
__delay_ms(2); //2ms

}

void display(char fig){

RS=1;
PORTB=(fig >> 4); clock();
PORTB=fig & 0b00001111; clock();
RS=0;

}

Ето и другата версия на същата програма.

Re: Програмно прецакан пик процесор

Публикувано: чет май 28, 2015 9:14 am
от dyaneff
От къде купи процесорите.