iyi geceler picproje ailesi sorunum 50.000 rakamını eeproma yazma bitane sayac yapdım 50.000cide çıkıs verecek cıkısı verıyor 50.000/500 işlemini yapıp eeproma yazamadım nerde hata yapıyorum bulamadım floor işlemini ccs derleyemedım hata verdı.
#include <12F675.h>
#fuses INTRC_IO,NOPROTECT,NOWDT,NOMCLR
#use delay(clock=4000000)
int16 ct=0 ;
int16 ft=0 ;
int8 x=0;
unsigned int8 eeprom_adres;
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_adc(adc_clock_div_32);
setup_adc_ports(AN0_analog);
set_adc_channel(0);
set_tris_a(0B00000101);
output_a(0x00);
output_high(pin_a5);
x=read_adc();
delay_us(200);
if(x>5 && x<8)
{
output_low(pin_a1);
}
else
{
output_high(pin_a1);
}
ft=read_eeprom(00);
delay_ms(20);
if(ft==100) ///////
{
output_high(pin_a1);
output_low(pin_a5);
}
while(true)
{
if(ct<50000) ///////
{
if(input(pin_a2)==1)
{
ct++;
{
eeprom_adres=floor(ct/500);
write_eeprom(eeprom_adres,ct);
delay_us(100);
}
while(input(pin_a2));
{
delay_ms(1);
}
}
if((ct)==100) ////////
{
output_high(pin_a1);
}
}
}
}
//eeprom16.c
/*ee_write16************************ee_read16*/
void ee_write16(int8 pos, int16 valor);
int16 ee_read16(int8 pos);
/* Estas funciones son little-endian */
void ee_write16(int8 pos, int16 valor) {
int8 bte;
bte = valor & 0xFF;
write_eeprom (pos, bte);
valor >>= 8;
bte = valor & 0xFF;
write_eeprom (pos+1, bte);
valor >>= 8;
}
//////////////////////////////////////////////
int16 ee_read16(int8 pos){
int8 bte;
int16 valor = 0;
bte = read_eeprom (pos+1);
valor += bte;
valor <<= 8;
bte = read_eeprom (pos);
valor += bte;
return valor;
}
//****************************************************//
#include "eeprom16.c"
ft=ee_read16(16);
ee_write16(16,ft);
ct=ee_read16(18);
ee_write16(18,ct);
//kolay gelsin
S.A.
Bende şöyle bişi yapmıştım. Bu sayede 16 f serisi pic de baya yer kazanmıştık.
//------------------EEPROM YAZMA 8 BIT------------------------------------------------
void kaydet (int adres,int deger)
{
write_eeprom(adres,deger);
}
//------------------EEPROM YAZMA 16 BIT------------------------------------------------
void kaydet_16 (int adres,int16 deger)
{
write_eeprom(adres,make8(deger,0));
write_eeprom(adres+1,make8(deger,1));
}
//---------ACILISTA ILK OKUMA ICINDE BU KODLARI KULLANDIM------------
//-----------------8BIT EEPROM OKUMA--------------------------------------------
void ilkoku (int adres ,int deger)
{
deger=read_eeprom(adres);
}
//-----------------16 BITEEPROM OKUMA-------------------------------------------
void ilkoku_16 (int adres ,int16 deger)
{
make8(deger,0)=read_eeprom(adres);
make8(deger,1)=read_eeprom(adres+1);
}
söyle bişey yazdım derlemıyor ccs denen program 10.000 değerini eeproma yazmam lazım bu değer anlık artıyor 0 baslıyor 10.000 kadar gidiyor kodda nerde yanlışlık var ?
void kayıt satırını sıldım dırek asagıdakı gıbı yazdım bundan bı sıkıntı cıkarmı
#include <12F675.h>
#fuses INTRC_IO,NOPROTECT,NOWDT,NOMCLR
#use delay(clock=4000000)
int16 ct=0 ;
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_adc(adc_clock_div_32);
setup_adc_ports(AN0_analog);
set_adc_channel(0);
set_tris_a(0B00000101);
output_a(0x00);
while(true)
{
if(ct<10000) ///////
{
if(input(pin_a2)==1)
{
ct++;
{
write_eeprom(00,make8(ct,0)) ; ///// bu şekilde ne kadar saglıklı olur
write_eeprom(00+1,make8(ct,1));
delay_us(100);
}
while(input(pin_a2));
{
delay_ms(1);
}
if((ct)==50) ////////
{
output_high(pin_a1);
}
}
}
}
}
}
adress=hangi_adress;
*((int8 *) & yazacaginveri +0) =write_eeprom(adress++);
*((int8 *) & yazacaginveri +1) =write_eeprom(adress);
okurken de
adress=hangi_adres;
*((int8 *) & ct +0) =read_eeprom(adress++);
*((int8 *) & ct +1) =read_eeprom(adress);
Alıntı yapılan: bulut_01 - 09 Ocak 2013, 21:20:21
söyle bişey yazdım derlemıyor ccs denen program 10.000 değerini eeproma yazmam lazım bu değer anlık artıyor 0 baslıyor 10.000 kadar gidiyor kodda nerde yanlışlık var ?
void kayıt satırını sıldım dırek asagıdakı gıbı yazdım bundan bı sıkıntı cıkarmı
#include <12F675.h>
#fuses INTRC_IO,NOPROTECT,NOWDT,NOMCLR
#use delay(clock=4000000)
int16 ct=0 ;
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_adc(adc_clock_div_32);
setup_adc_ports(AN0_analog);
set_adc_channel(0);
set_tris_a(0B00000101);
output_a(0x00);
while(true)
{
if(ct<10000) ///////
{
if(input(pin_a2)==1)
{
ct++;
{
write_eeprom(00,make8(ct,0)) ; ///// bu şekilde ne kadar saglıklı olur
write_eeprom(00+1,make8(ct,1));
delay_us(100);
}
while(input(pin_a2));
{
delay_ms(1);
}
if((ct)==50) ////////
{
output_high(pin_a1);
}
}
}
}
}
}
Hiç sıkıntı olmaz .
saolun arkadaslar sorunu çözdüm örnek kod.
#include <12F675.h>
#device ADC=10
#fuses INTRC_IO,NOPROTECT,NOWDT,NOMCLR
#use delay(clock=4000000)
#use fast_io(a)
int16 ct=0 ;
int16 ft=0 ;
unsigned long int oku ;
float ok;
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_adc(adc_clock_div_32);
setup_adc_ports(AN0_analog);
set_tris_a(0B00000101);
output_a(0x00);
set_adc_channel(0);
delay_us(20);
oku=read_adc();
ok=0.0048828125*oku;
if(ok<3.00 && ok>2.50)
{
output_low(pin_a1);
}
else
{
output_high(pin_a1);
}
make8(ft,0)=read_eeprom(00);
make8(ft,1)=read_eeprom(00+1);
delay_us(100);
if(ft==10) ////
{
output_high(pin_a1);
}
while(true)
{
if(ct<10) ///////
{
if(input(pin_a2)==1)
{
ct++;
{
write_eeprom(00,make8(ct,0)) ;
write_eeprom(00+1,make8(ct,1));
delay_us(10);
}
while(input(pin_a2));
{
delay_ms(1);
}
}
if((ct)==10) ////////
{
output_high(pin_a1);
}
}
}
}
Ama kodunda yanlışlıklar var lüleli parentezlerinde karışmalar olmuş
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_adc(adc_clock_div_32);
setup_adc_ports(AN0_analog);
set_adc_channel(0);
set_tris_a(0B00000101);
output_a(0x00);
while(true)
{
if(ct<10000) ///////
{
if(input(pin_a2)==1)
{
ct++;
{ ----> burda herhangi sorgu dongü vs başlangıcı yok !!!!
write_eeprom(00,make8(ct,0)) ; ///// bu şekilde ne kadar saglıklı olur
write_eeprom(00+1,make8(ct,1));
delay_us(100);
} ----> burda kapanmış !!!!
while(input(pin_a2));
{
delay_ms(1);
}
if((ct)==50) ////////
{
output_high(pin_a1);
}
}
}
}
} ---> bu fazla
}
görebildiklerim bunlar
mesaj birleştirme:: 10 Ocak 2013, 00:58:11
bulut_01 hocam
pin_a2 niz 1 oldugu sürece eeproma sürekli yazıyorsunuz.
@sadogan kardesım eyw sağolasın bi parantez orda fazladan kalmıs düzeltim :D evt eeproma yazmam gerekli sürekdi bir cihazı modifiye ettım ona uyduracam bunu bakalım.
not:katalogunda 1 mılyon kez yazma cızma ömrü varmıs microchip abimiz öyle diyor. ;)
#include <12F675.h>
#device ADC=10
#fuses INTRC_IO,NOPROTECT,NOWDT,NOMCLR
#use delay(clock=4000000)
#use fast_io(a)
int16 ct=0 ;
int16 ft=0 ;
unsigned long int oku ;
float ok;
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_adc(adc_clock_div_32);
setup_adc_ports(AN0_analog);
set_tris_a(0B00000101);
output_a(0x00);
set_adc_channel(0);
delay_us(20);
oku=read_adc();
ok=0.0048828125*oku;
if(ok<3.00 && ok>2.50)
{
output_low(pin_a1);
}
else
{
output_high(pin_a1);
}
make8(ft,0)=read_eeprom(00);
make8(ft,1)=read_eeprom(00+1);
delay_us(100);
if(ft==10) ////
{
output_high(pin_a1);
}
while(true)
{
if(ct<10) ///////
{
if(input(pin_a2)==1)
{
ct++;
write_eeprom(00,make8(ct,0)) ;
write_eeprom(00+1,make8(ct,1));
delay_us(10);
while(input(pin_a2));
{
delay_ms(1);
}
}
if((ct)==10) ////////
{
output_high(pin_a1);
}
}
}
}
#include <internal_eeprom.c>
write_int16_eeprom()
read_int16_eeprom()
S.A.
hımm evet hazırı varmış :D hiç dikkatimi çekmemişti. Görmekten görmeye fark varmış.
Benim yaptığım fonksiyon buna benziyor.