19 Ekim 2019, 19:31:52

Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H


PIC18F45K22 LCD HATASI

Başlatan PICaso, 04 Ekim 2019, 19: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(&FilFil.fsize) != FR_OK))  goto endSD// Jump to the end of the file 
      
      
f_write(&Filt19, &bw); // Write data to the file 
           
     
endSDf_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

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, 11: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, 13: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

11 Ekim 2019, 14:39:08 #9 Son düzenlenme: 11 Ekim 2019, 14:43:58 serkan
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, 14: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, 14: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.