PIC18F45K22 LCD HATASI

Başlatan PICaso, 04 Ekim 2019, 16:55:35

PICaso

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
*/

PICaso

Sorunum hala devam etmektedir.

vedo35

Şu anda çok önemli bir konu var. Cin-şeytan dedektörü.. :D
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

dumansiz


PICaso


PICaso


dumansiz

@PICaso

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

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

PICaso

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.


dumansiz

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?

serkan

#9
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();

PICaso

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.

PICaso

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.

PICaso

Arkadaşlar problem henüz çözülebilmiş değil. Tecrübe eden varsa yardımlarını bekliyorum.
İyi çalışmalar.

dnacikaya

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.

PICaso

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.  :(