acıklamalarınız ıcın cok teşekkür ederım. evet kusura bakmayın eksık yerler var yazdıgım maılde.
baskalarına acıklayıcı olması acısından programın tamamını ekliyorum;
#include<pic.h>
#include<delay.c>
#include<lcd.c>
#include <stdio.h>
main (void){
const float lsb=5000.0/1024.0;
float dusuk,yuksek,volt;
unsigned char goster[]=" ";
unsigned int mv;
ADCON0=0x41;
ADCON1=0x8E;
TRISB=0;
TRISA=0xF3;
lcd_init();
for(;;){
lcd_clear();
ADCON0=0x45;
while((ADCON0 & 4)!=0);
yuksek=ADRESH;
dusuk=ADRESL;
volt=256.0*yuksek+dusuk;
volt=volt*lsb;
mv=(int)volt;
sprintf(goster,"%d",mv);
lcd_puts(goster);
DelayMs(250);
}
}
iyi calısmalar
mrb(http://img151.imageshack.us/img151/9500/dilimdilim2ge7ak5.jpg) (http://imageshack.us) yazdıgım programda bende lcd de hem adc_val degerini hemde volt degerını gostermesı ıcın degsıklıkler yaptım.
gayet sorunsuz calısıyor ancak lcd de 2.satıra gecıremedım volt degerını
sizin komutlarınızı kullandım lcd_goto(S1_1) lcd_goto(S2_1) seklınde olan ama hata verdı.(undefined S1_1 seklınde)
sonra su sekılde yazdım
lcd_goto(0x80) boyle yazdıgımda 2.satıra atlamıyor
lcd_goto(ox85) yazdıgımda da ekranda hıcbırsey cıkmıyor.
aradakı rakamları(0x81,0x82,0x83 gibi) denedım yıne farketmedı
lcd olarak da
LM032L kullanıyorum
yardımcı olursanız sevınırım
iyi calısmalar
Merhaba,
0x80 yerine 0xC0 yaz, 2. satıra geçecektir.
Aslan74'ün tanımlamalarını görmedim fakat 1. satır için
S1_1=0x80 // 1. satır 1. karakter
S1_2=0x81
...
S1_16=0x8F // 1. satır 16. karakter
2. satır için
S2_1=0xC0 // 2. satır 1. karakter
S2_2=0xC1
...
S2_16=0xCF
olmalı tabii bunları #define ile tanımlayacaksın
#define S1_1 0x80 // gibi
Kolay gelsin
Alıntı yapılan: semesumrb yazdıgım programda bende lcd de hem adc_val degerini hemde volt degerını gostermesı ıcın degsıklıkler yaptım.
gayet sorunsuz calısıyor ancak lcd de 2.satıra gecıremedım volt degerını
sizin komutlarınızı kullandım lcd_goto(S1_1) lcd_goto(S2_1) seklınde olan ama hata verdı.(undefined S1_1 seklınde)
sonra su sekılde yazdım
lcd_goto(0x80) boyle yazdıgımda 2.satıra atlamıyor
lcd_goto(ox85) yazdıgımda da ekranda hıcbırsey cıkmıyor.
aradakı rakamları(0x81,0x82,0x83 gibi) denedım yıne farketmedı
lcd olarak da
LM032L kullanıyorum
yardımcı olursanız sevınırım
iyi calısmalar
Merhaba,
eemkutay bey güzel bir şekilde acıklamış. Bu bahs ettiği işlemi ben "lcd.h" dosyasında yaptığım için o hatayı almıyorum. Yani Hi-tech'in "lcd.h" ve "lcd.c" dosyalarına ben biraz ekleme yaptım. Amac okunabilirliği artırmak için, böyle yaptım. yayınladığım proje dosyasının içinde aradığınız bütün bilgiler var. Benim kullandığım "lcd.c" ve "lcd.h" dosyasını kullanırsanız o hata mesajını almassınız.
Selamlar
MERHABA DEDİKLERİNİZİ DENEDIM
LCD_GOTO(0X80) YERİNE LCD_GOTO(0XC0) YAZDIM ANCAK BİRSEY FARKETMEDI. EKRANDA SACEDE ADC_VAL DEGERİNİ GOREBILIYORUM.
YAZDIGIM PROGRAMI ASAGIYA EKLIYORUM ACABA GOZDEN KACIRDIGIM BIRSEYMI VAR?
#include<pic.h>
#include<delay.c>
#include<lcd.c>
#include <stdio.h>
main (void){
unsigned char goster []= " ";
ADCON0=0x41;
ADCON1=0x8E;
TRISB=0;
TRISA=0xF3;
lcd_init();
for(;;){
unsigned int adc_val;
unsigned int dusuk,yuksek;
float volt;
lcd_clear();
ADCON0=0x45;
while((ADCON0 & 4)!=0);
yuksek=ADRESH;
dusuk=ADRESL;
adc_val=256*yuksek+dusuk;
volt=adc_val*(5./1024);
lcd_goto(0x80);
sprintf(goster," adc_val=%d",adc_val);
lcd_puts(goster);
lcd_goto(0xC0);
sprintf(goster," volt=%1f",volt);
lcd_puts(goster);
DelayMs(500);
}
}
iyi calısmalar
Alıntı yapılan: semesuMERHABA DEDİKLERİNİZİ DENEDIM
LCD_GOTO(0X80) YERİNE LCD_GOTO(0XC0) YAZDIM ANCAK BİRSEY FARKETMEDI. EKRANDA SACEDE ADC_VAL DEGERİNİ GOREBILIYORUM.
YAZDIGIM PROGRAMI ASAGIYA EKLIYORUM ACABA GOZDEN KACIRDIGIM BIRSEYMI VAR?
#include<pic.h>
#include<delay.c>
#include<lcd.c>
#include <stdio.h>
main (void){
unsigned char goster []= " ";
ADCON0=0x41;
ADCON1=0x8E;
TRISB=0;
TRISA=0xF3;
lcd_init();
for(;;){
unsigned int adc_val;
unsigned int dusuk,yuksek;
float volt;
lcd_clear();
ADCON0=0x45;
while((ADCON0 & 4)!=0);
yuksek=ADRESH;
dusuk=ADRESL;
adc_val=256*yuksek+dusuk;
volt=adc_val*(5./1024);
lcd_goto(0x80);
sprintf(goster," adc_val=%d",adc_val);
lcd_puts(goster);
lcd_goto(0xC0);
sprintf(goster," volt=%1f",volt);
lcd_puts(goster);
DelayMs(500);
}
}
iyi calısmalar
Çalışmadığını söylüyorsunuz ama hangi "lcd.c" programını kullandığınız belirtmemişsiniz. Bu durumda bu iş SCMA (sari cizmeli mehmet ağa) yı bulmaya döner.
sonuca ulaşmak için ya benim gösterdiğim şekilde benim "lcd.c" programını kullanmalısın yada başka "lcd.c" programını kullanacaksanız o zaman bu "lcd_goto" fonksiyonun içindeki koduda yayınlamanız gerekiyor.
Ancak o zaman size cevap verilebilir. Bu durumda kimse kesin cevap veremez.
Selamlar
Merhaba,
@semesu
0x80 ile birinci satıra gidip yazıyorsa 0xC0 ile de 2. satıra gider ve yazar.
eemkutay,sizin soyledıklerınızı tekrar tekrar denedım ama olmuyor , sanırım bendeki lcd.c ve lcd.h dosyalarında eksıkler var,sebebini bende anlamadım. yardımcı oldugunuz ıcın teşekkür ederım.
arslan74, lcd.c ve lcd.h dosyalarınızın bulundugu proje klasorune ulasamadım. nerden bulabılecegımı soyleyebilirmisiniz?
arkadaslar deneme yaparken bır hatamı daha buldum. bu hatamı goremedim cunku volt ve adc_val degerlerını aynı anda goremıyordum ekranda.Lcd ye sadece adc_val yada sadece volt degerını yazdırdıgımda ozaman ikiside dogru degerleri veriyor ama
sprintf(goster," volt=%f",volt);
lcd_puts(goster);
DelayMs(500);
lcd_clear();
sprintf(goster," adc_val=%d",adc_val);
lcd_puts(goster);
DelayMs(750);
seklınde yazdıgımda once volt degerini dogru gosterıyor ancak bu degerı sılıp adc_val degerini dogru gostermıyor alakasız deger yazıyor ekranda . aynı sekılde
sprintf(goster," adc_val=%d",adc_val);
lcd_puts(goster);
DelayMs(750);
lcd_clear();
sprintf(goster," volt=%f",volt);
lcd_puts(goster);
DelayMs(500);
yaptıgımda da adc_val degerini dogru gosterıyor ancak bu sefer de volt degerı alakasız bırsey yazıyor ekranda.
hatam nerede bulamadım bırturlu
iyi calısmalar arkadaslar
Lcd.c
void
lcd_goto(unsigned char pos)
{
LCD_RS = 0;
lcd_write(0x80+pos);
}
lcd_goto(0x00);
sprintf(goster1," Adc_value= %d",adc_val);
lcd_puts(goster1);
lcd_goto(0x40);
sprintf(goster2," %1fvolt",volt);
lcd_puts(goster2);
DelayMs(200);
yazarak deneyebilirsiniz.
mrb
ahmet2004 sizin dedıklerınızı yaptım
lcd_goto(0x00);
sprintf(goster1," Adc_value= %d",adc_val);
lcd_puts(goster1);
lcd_goto(0x40);
sprintf(goster2," %1fvolt",volt);
lcd_puts(goster2);
DelayMs(200);
komutlarını yazdım ıkı degeride gorebılıyorum ekranda ancak eger adc_val degerini ilk satıra yazarsam ikinci satırda volt degeri sıfır gozukuyor lcd de,yada volt degerini ilk satıra yazarsam ikinci satırda adc_val degeri cok alakasız bır sayı yazıyor bu seferde .
ayrıca bende olan lcd.c dosyasına baktım yazdıgınız
void
lcd_goto(unsigned char pos)
{
LCD_RS = 0;
lcd_write(0x80+pos);
}
komutları aynı bendeki dosyadakıyle .
hangı hatadan dolayı lcd de iki degeride aynı anda dogru goremıyor olabılrım ??
HI-TIDE
main.c
#include <htc.h>
#include <string.h>
#include <stdio.h>
#include "delay.h"
#include "lcd.h"
main (void){
unsigned char goster1[20]= " ";
unsigned char goster2[20]= " ";
ADCON0 = 0x41;
ADCON1 = 0x8E;
TRISB = 0x00;
TRISA = 0xF3;
TRISD = 0x00;
lcd_init();
for(;;) {
unsigned int adc_val;
unsigned int dusuk,yuksek;
float volt;
ADCON0 = 0x45;
lcd_clear();
while((ADCON0 & 4) != 0);
yuksek=ADRESH;
dusuk=ADRESL;
adc_val=256*yuksek+dusuk;
volt=adc_val*(5./1024);
lcd_goto(0x00);
sprintf(goster1," Adc_value= %d",adc_val);
lcd_puts(goster1);
lcd_goto(0x40);
sprintf(goster2," %1fvolt",volt);
lcd_puts(goster2);
DelayMs(200);
}
}
void
lcd_write(unsigned char c)
{
PORTB = c >> 4;
LCD_STROBE;
PORTB = c;
LCD_STROBE;
DelayUs(40);
}
Bportuna direkt değer atılıyor.Buda tabii kontrol pinlerini etkiliyor.
O yüzden kontrol pinleri D ye alıp dene.veya başka pinlere.
Main.c
........
TRISD=0x00; //D portu çıkış yapıldı.
........
Lcd.c
........
static bit LCD_RS @ ((unsigned)&PORTD*8+6); // Register select
static bit LCD_EN @ ((unsigned)&PORTD*8+7); // Enable
.......
Görüldüğü gibi;
Lcd RS pinini PortD6
Lcd E pinini PortD7
Lcd kontrol pinlerini bu şekilde değiştir.
Float değişkenleri kullanmak içinse;
(http://img358.imageshack.us/img358/4995/printfpl1.jpg)
HI-TIDE Proje özelliklerinden Linker bölümünde bulunan
float parametresini programa bildirmen gerekiyor.
MRB
SİZİN DEDİGİNİZ SEKILDE LCD.C DOSYASINI DEGISTIRDIM ONA GORE ISISTE DEGISIKLIKLERDE YAPTIM ANCAK EKRANDA BU SEFER HIC BIRSEY CIKMIYOR.
BİRTURLU OLMADI:(
semesu:
devreyi isis'de bir çalıştıra bilir misin?
http://rapidshare.com/files/99276992/1.zip.html (http://rapidshare.com/files/99276992/1.zip.html)
MRB,
CALISTIRDIM DOGRU CALISIYOR SİZİN GONDERDİGİNİZ HEX DOSYASIYLA
ANCAK BENDEKİ HEX DOSYASIYLA YINE CALISMADI EKRANDA HIC BIRSEY GOREMIYORUM :(
LCD CONTROL PINLERİNİ SİZİN DEDİGİNZ SEKILDE DEGISTIRDIM AMA OLMADI YINEDE
mrb,
eger sakıncası yoksa yazdıgınız programı ekleyebılrımısınız?
ordan belki gorebılırım hatamı
iyi calısmalar
üst mesajda prg kodu vermştim. Program O.Extra birşey yok.
isis arızalı olabilir.
Ben HI-TIDE kullanıyorum.MPLAB kullanmadım.
Hex kodu HI-TIDE ile PIC16 ile oluşturuldu.Farklı birşey yok.
Kod bu :
#include <htc.h>
#include <string.h>
#include <stdio.h>
#include "delay.h"
#include "lcd.h"
main (void){
unsigned char goster1[20]= " ";
unsigned char goster2[20]= " ";
ADCON0 = 0x41;
ADCON1 = 0x8E;
TRISB = 0x00;
TRISA = 0xF3;
TRISD = 0x00;
lcd_init();
for(;;) {
unsigned int adc_val;
unsigned int dusuk,yuksek;
float volt;
ADCON0 = 0x45;
lcd_clear();
while((ADCON0 & 4) != 0);
yuksek=ADRESH;
dusuk=ADRESL;
adc_val=256*yuksek+dusuk;
volt=adc_val*(5./1024);
lcd_goto(0x00);
sprintf(goster1," Adc_value= %d",adc_val);
lcd_puts(goster1);
lcd_goto(0x40);
sprintf(goster2," %1fvolt",volt);
lcd_puts(goster2);
DelayMs(200);
}
}
Kullandığın programları kaldırıp yeniden kurmanı öneririm.
mrb arkadasım
dedigin seyin mumkun olabılecegını dusundum bende dogru calısmayan programı arkadasıma gonderdım ondada aynı sorun oldu.
yalnız programda bıryerı degıstırıdım sprintf içerisindeki goster1 ıle goster2 yazdıgım yerlerı degıstırdım.
ancak bu seferde adc_val 1022 olana kadar dogru volt degerlerini okuyabılıyorum ama 1022 de yanlıs deger gosterıyor.
mesela
adc_val=921 icin volt=4,49
adc_val=1022 icin volt=2.003 degerini gosterıyor.
sorun nerde bırturlu anlamadım:(
mrb ,
bendeki programın hatalı calısabılecegını dusundum ve kodları arkadasıma gonderdim ancak aynı sorun ondada oldu.
yalnız programda sprintf icersinde goster1 ıle goster2 nin yerlerini degistirdim ozaman lcd de volt degerini adc_valt degerı 1022 gosterene kadar dogru okuyabılıyorum
ancak adc_val=1022 oldgunda volt=2.003 degerini veriyor, diger adc_val degerlerinde lcd den okudugum volt degerleri dogru .
hata nerde anlamadım bırturlu:(
Kullandığın program ve versiyon nolarını yazarmısın?
Arkadaşına yazılı kodu mu gönderdin yoksa hex'imi gönderdin.
Anlamaya çalışıyorum senin içinde bulunduğun bu durumu.
Biraz daha fazla bilgi verirsen iyi olur.
MPLAB mı HI-TIDE mi kulanıyorsun.
mrb arkadasım
programda biraz daha degısıklık yaptım
sprintf icerisindeki goster1 ile goster 2 nin yerlerını degıstırdım
bu seferde
sadece adc_val=1022 oldugunda yanlıs volt degerı gosterıyor diger adc_val degerlerinde dogru volt degerlerini okuyorum.
ayrıca programı gonderdım arkadasıma aynı sorun ondada oldu maalesef.
iyi calısmalar
pardon ben msjımın gıtmedıgını dusunerek tekrar yazdım kusura bakmayın.
kullandıgım proteus 7 professional
mplab kullanıyorum: mplab IDE v7.10
derleyici olarak ise hi- tech kullanıyorum.
hem hex dosyasını hemde c kodlarını gonderdım arkadasıma.
yardımlarınız ıcın teşekkür ederım
iyi calısmalar
Alıntı yapılan: semesupardon ben msjımın gıtmedıgını dusunerek tekrar yazdım kusura bakmayın.
kullandıgım proteus 7 professional
mplab kullanıyorum: mplab IDE v7.10
derleyici olarak ise hi- tech kullanıyorum.
hem hex dosyasını hemde c kodlarını gonderdım arkadasıma.
yardımlarınız ıcın teşekkür ederım
iyi calısmalar
Hi-Tech'in hangi versiyonun kullaniyorsun?
8.05 PL2 versiyonunu kullanıyorum
mrb,
Ahmet2004 arkadasım ısıs programını sıldım tekrar yukledım ancak yıne aynı sorun devam edıyor :(
HI-TIDE v3.13
PICC 9.60 PL1 Standart
Proteus 7.2 sp2
Bendeki programlarda bu şekilde.
artık yapacak bıse yok sanırım. boardun uzerınde denemek istıyorum inş. orda aynı hatayı gormem. cunku isis bazen yanlıs sonuclar verebılıyor maalesef .
yardımlarınız ıcın cok teşekkür ederım .
Alıntı yapılan: semesuartık yapacak bıse yok sanırım. boardun uzerınde denemek istıyorum inş. orda aynı hatayı gormem. cunku isis bazen yanlıs sonuclar verebılıyor maalesef .
yardımlarınız ıcın cok teşekkür ederım .
Merhaba,
Ben PIC ile ADC okuma için eğitim yazısı yazdım. Görsel olarakta herbir adımı anlatiyorum. Sorunsuz çalışan bir kod varken, sorunlu olan ve kodunun kimin yazdığı belli olmayan ve üstelikte düzgün çalışmayan bir kod üzerinde neden ısrar ediyorsunuz? Sizin kullandığınız derleyicinin versiyonlarının aynısı kullaniyorum. Eğitimin sonundada bütün projeyi ISIS simulasyonun ile upload ettim.
Sorunsuz çalışan bir kodu kullanırsanız, vaktinizi ana koda ayrımaya verebilirsiniz. Gereksiz yere bu işler için zaman kayıb etmessiniz.
Selamlar
MRB,
ZATEN BEN SİZİN VERDİGİNİZ EGİTİMDEN YOLA CIKARAK DUZENLEDIM PROGRAMIMI ANCAK BASKASINDA DOGRU CALISAN PROGRAMIN BENDE DOGRU CALISMAMASI ,BENDEKİ PROGRAMLARIN DOGRU CALISAMAYABILECEGI DUSUNCESINI ORTAYA CIKARDI .İSRAR ETMEM BU YUZDENDİ
İYİ CALISMALAR
arslan74:
semesu'nun kendine göre düzenlediği ve üzerinde değişiklik yaptım dediği
bu yukarda benimde tekrarladığım kod sizde çalıştımı çalışmadımı?
Bunu öğrenmek istiyorum.
Alıntı yapılan: ahmet2004arslan74:
semesu'nun kendine göre düzenlediği ve üzerinde değişiklik yaptım dediği
bu yukarda benimde tekrarladığım kod sizde çalıştımı çalışmadımı?
Bunu öğrenmek istiyorum.
Merhaba,
Bunu proje olarak upload ederseniz. Derler ve neticeyi bildirim.
Selamlar