Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip XC Serisi => Microchip XC8 => Konuyu başlatan: PICaso - 04 Ekim 2019, 16:55:35

Başlık: PIC18F45K22 LCD HATASI
Gönderen: PICaso - 04 Ekim 2019, 16:55:35
Arkadaşlar merhaba,
İşlemciden adc ile okuduğum değeri sd carda kaydedip aynı zamanda da lcd de görmek istiyorum. Yaptığım yazılım da
adc değerini lcd de görebiliyorum fakat sd carda veri kaydedilmiyor. Ben de paylaştığım kodda da göreceğiniz üzere lcd rutinlerini iptal ettim. Bu şekilde çalıştırdığım da veri sd carda kayıt edilebiliyor. Hem sd card hem de lcd kısmını çalıştırmak istiyorum. Yardımlarınızı bekliyorum.
#define RS PORTBbits.RB2
#define EN PORTBbits.RB3
#define D4 PORTBbits.RB4
#define D5 PORTBbits.RB5
#define D6 PORTBbits.RB6
#define D7 PORTBbits.RB7


#include "mcc_generated_files/mcc.h"
#include <stdio.h>
#include "ff.h"
#include <stdint.h>
#include <stdbool.h>
#include "lcd.h"

FATFS FatFs;      /* FatFs work area needed for each volume */
FIL Fil;                   /* File object needed for each open file */

void ADC_Init();
int ADC_Read(int);
#define vref 5.00
int digital; 
float voltage;
uint16_t i=0;

void ADC_Init()
{   
    TRISA = 0xFF;                /*Set as input port*/
    ANSELAbits.ANSA0 == 1;
    ADCON1 = 0x0F;                          /*Ref vtg is VDD & Configure pin as analog pin*/   
    ADCON2 = 0x92;                         /*Right Justified, 4Tad and Fosc/32. */
    ADRESH=0;                                    /*Flush ADC output Register*/
    ADRESL=0;   
   
   
}

int ADC_Read(int channel)
{
    int digital;
   
   

    /*channel 0 is selected i.e.(CHS3CHS2CHS1CHS0=0000)& ADC is disabled*/
    ADCON0 |= ((1<<ADON)|(1<<GO));/*Enable ADC and start conversion*/
   


    /*wait for End of conversion i.e. Go/done'=0 conversion completed*/
    while(ADCON0bits.GO_nDONE==1);

    digital = (ADRESH*256) | (ADRESL);   //Combine 8-bit LSB and 2-bit MSB
    return(digital);   
}


void main(void) {
                UINT bw;
   
    //char s[16];
   
    char t[20];
    TRISA = 0xff;
    TRISB = 0x00; //LCD BAGLANTILARI
 
   // Lcd_Init();

    ADC_Init();   

                // Initialize the device
                SYSTEM_Initialize();

                while (1) {
       
    digital=ADC_Read(0);

     //   voltage= digital*((float)vref/(float)1023); 

    /*
     sprintf(s, "Voltage = %f ",voltage );
    Lcd_Set_Cursor(1,1);
    Lcd_Write_String(s);
     sprintf(s, "ADC = %d " , digital );
    Lcd_Set_Cursor(2,1);
    Lcd_Write_String(s);
      __delay_ms(50);
      */
   
   
   
      i++;
 
        sprintf(t, "Measure %d :%d\r\n", i,digital);
     
         if (f_mount(&FatFs, "", 1) == FR_OK) { // Mount SD

    if (f_open(&Fil, "temp_log.txt", FA_OPEN_ALWAYS | FA_READ | FA_WRITE) == FR_OK) { // Open or create a file

    if ((Fil.fsize != 0) && (f_lseek(&Fil, Fil.fsize) != FR_OK))  goto endSD; // Jump to the end of the file
     
      f_write(&Fil, t, 19, &bw); // Write data to the file
           
     endSD: f_close(&Fil);        // Close the file
    }
    } 
 
            __delay_ms(50);
                }
}
/**
End of File
*/
Başlık: Ynt: PIC18F45K22 LCD HATASI
Gönderen: PICaso - 07 Ekim 2019, 10:35:12
Sorunum hala devam etmektedir.
Başlık: Ynt: PIC18F45K22 LCD HATASI
Gönderen: vedo35 - 07 Ekim 2019, 11:32:04
Şu anda çok önemli bir konu var. Cin-şeytan dedektörü.. :D
Başlık: Ynt: PIC18F45K22 LCD HATASI
Gönderen: dumansiz - 07 Ekim 2019, 11:57:51
SD kart PORTB de mi?
Başlık: Ynt: PIC18F45K22 LCD HATASI
Gönderen: PICaso - 07 Ekim 2019, 12:27:27
Alıntı yapılan: dumansiz - 07 Ekim 2019, 11:57:51SD kart PORTB de mi?
PORTC ye bağlı.
Başlık: Ynt: PIC18F45K22 LCD HATASI
Gönderen: PICaso - 08 Ekim 2019, 17:25:34
GÜNCEL
Başlık: Ynt: PIC18F45K22 LCD HATASI
Gönderen: dumansiz - 11 Ekim 2019, 08:27:07
@PICaso

sprintf(t, "Measure %d :%d\r\n", i,digital);

Bu komut ne işe yarıyor? Seriporttan da mı bilgi gönderiyorsun?
Başlık: Ynt: PIC18F45K22 LCD HATASI
Gönderen: PICaso - 11 Ekim 2019, 10:24:59
Alıntı yapılan: dumansiz - 11 Ekim 2019, 08:27:07@PICaso

sprintf(t, "Measure %d :%d\r\n", i,digital);

Bu komut ne işe yarıyor? Seriporttan da mı bilgi gönderiyorsun?

ADC den okuduğum değeri diziye atıp   f_write(&Fil, t, 19, &bw); bu komut ile sd carda yazdırıyorum.

Başlık: Ynt: PIC18F45K22 LCD HATASI
Gönderen: dumansiz - 11 Ekim 2019, 11:15:01
Alıntı yapılan: PICaso - 11 Ekim 2019, 10:24:59ADC den okuduğum değeri diziye atıp   f_write(&Fil, t, 19, &bw); bu komut ile sd carda yazdırıyorum.

Hmm.Tamam. String formatında yazdırmak için yani.
Peki SD karta yazma adımlarını tek tek kontrol ettiniz mi?
Örneğin:

if (f_mount(&FatFs, "", 1) == FR_OK) { // Mount SD

bu koda "else" ekleyip "sd-kart takılı değil" hatası gibi bir şey bastırsanız?

Bir de sd-karta hiç mi yazmıyor yoksa anlamsız şeyler mi yazıyor? SD kartın içini "hex" açan bir programla okudunuz mu?
Başlık: Ynt: PIC18F45K22 LCD HATASI
Gönderen: serkan - 11 Ekim 2019, 11:39:08
Lcd pinleri böyle olması lazım değilmi?
#define RS LATBbits.LATB2



Adc  den önce sistem init olması lazım görebildiğim bunlar.

SYSTEM_Initialize();

    TRISB = 0x00; //LCD BAGLANTILARI

ADC_Init();
Başlık: Ynt: PIC18F45K22 LCD HATASI
Gönderen: PICaso - 11 Ekim 2019, 14:00:14
Alıntı yapılan: dumansiz - 11 Ekim 2019, 11:15:01Hmm.Tamam. String formatında yazdırmak için yani.
Peki SD karta yazma adımlarını tek tek kontrol ettiniz mi?
Örneğin:

if (f_mount(&FatFs, "", 1) == FR_OK) { // Mount SD

bu koda "else" ekleyip "sd-kart takılı değil" hatası gibi bir şey bastırsanız?

Bir de sd-karta hiç mi yazmıyor yoksa anlamsız şeyler mi yazıyor? SD kartın içini "hex" açan bir programla okudunuz mu?
lcd rutinlerini kodda iptal edersem sd karta yazdırabiliyorum. İptal etmezsem lcd düzgün çalışıyor, sd carda dosya dahi oluşturmuyor. Benim istediğim anlık olarak adc değerini lcd de görmek aynı zamanda geri planda da sd  carda yazdırmak.
Başlık: Ynt: PIC18F45K22 LCD HATASI
Gönderen: PICaso - 11 Ekim 2019, 14:24:06
Alıntı yapılan: serkan - 11 Ekim 2019, 11:39:08Lcd pinleri böyle olması lazım değilmi?
#define RS LATBbits.LATB2



Adc  den önce sistem init olması lazım görebildiğim bunlar.

SYSTEM_Initialize();

    TRISB = 0x00; //LCD BAGLANTILARI

ADC_Init();


#define RS PORTBbits.RB2   
Bu şekilde de sorunsuz çalışıyor.

Dediğiniz değişiklikleri yaptım fakat sd card da dosya dahi oluşmuyor.
Başlık: Ynt: PIC18F45K22 LCD HATASI
Gönderen: PICaso - 25 Kasım 2019, 17:06:38
Arkadaşlar problem henüz çözülebilmiş değil. Tecrübe eden varsa yardımlarını bekliyorum.
İyi çalışmalar.
Başlık: Ynt: PIC18F45K22 LCD HATASI
Gönderen: dnacikaya - 25 Kasım 2019, 17:56:31
Uart portlu nextion bu projede sorunsuz çalışır. Nextion ekrana 9 değer gönderiyorum içinde adcde olan işlemciye hiç sorun çıkarmıyor. Tıkır tıkır çalışıyor. Nextion kullandığımdan beri lcdden uzaklaştım. 45k22 çift uart porta sahip zaten.
Başlık: Ynt: PIC18F45K22 LCD HATASI
Gönderen: PICaso - 26 Kasım 2019, 12:14:32
Alıntı yapılan: dnacikaya - 25 Kasım 2019, 17:56:31Uart portlu nextion bu projede sorunsuz çalışır. Nextion ekrana 9 değer gönderiyorum içinde adcde olan işlemciye hiç sorun çıkarmıyor. Tıkır tıkır çalışıyor. Nextion kullandığımdan beri lcdden uzaklaştım. 45k22 çift uart porta sahip zaten.
Hocam nextion ekran ile lcd ekran arasında fiyat olarak dağlar kadar fark var.  :(
Başlık: Ynt: PIC18F45K22 LCD HATASI
Gönderen: zamzam23 - 26 Kasım 2019, 13:47:09
sd card iptal iken lcd çalısıyor. lcd iptal iken sd card çalısıyor. ama birlikteyken çalışmıyor.. .

Böyle bir durumda ben olsam çözüme giden adımlarım şöyle olurdu:

1-) adc iptal et, lcd iptal et, varsa seri port iptal et. sadece sd card çalışır vaziyete getir.
2-) sd karta basit bir float değişken yazdır. a=1.234; gonder_sdcard(a);
3-) 1 ve 2 başarılı ise bir bardak çay al.
4-) aynı programda lcd'yi devreye al ve "hello brother" yazdır.
5-) yeni zelanda saldırganını an ve ona küfret.
6-) 2. adımdaki a değişkenini lcd'ye yazdır.
7-) sonuc başarılı ise bir bardak çay daha al.
8- ) adc'yi devreye alıp adc sonucunda oluşan değişkeni lcd'ye yazdır.
9-) adc sonucunda oluşan değişkeni sd karta yazdır.

* bir adımı tamamlamadan sonraki adımlara asla geçme.
* her birkaç adımda programı yedekle.