Şimdi Ara

C++ SD card'daki veri

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
4
Cevap
0
Favori
1.110
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhabalar, HenningKarlsen'in UTFT kütüphanesi'ni kullanarak ekrana bitmap çizdirmeye çalışıyoruz. bitmapdatatype'ın ne olduğunu bulamasam da aşağı yukarı tahmin ediliyor koddan;

    col=pgm_read_word(&data[(ty*sx)+tx]);

    Sıkıntı şurada başlıyor, bitmap'i tutabilecek bir hafızamız yok şuanda. Yapabileceğimiz 2 şey var sanırım;
    1. Hafızayı büyütmek
    2. SD karta kaydedilen resmi çizdirmek
    2.'yi biraz araştırdım, araştırırken hard disk'deki birşeyin adresiyle ilgili konularla karşılaştım. Genel olarak şöyle birşey söyleniyordu : "mapleme" ama bu mapleme örneklerinin hepsi (benim gördüklerim) bir işletim sistemine bağlı ve hard disk üzerinden çalışıyordu. Benim istediğim, veya merak ettiğim şu;
    SD kart'ta sakladığım bir veriyi dinamik bir hafızaya almadan (en azından tamamını) ekranıma gönderebilir miyim? Şu tarz bir çözüm geliyor aklıma, drawBitmap fonksiyonunu bu haliyle veya üzerinde oynanmış haliyle bitmapi parça parça çizdirebilirim. Ama bu da sanıyorum epey bi yavaşlık oluşturur FPS bakımından. Aşağıya yalnızca bitmap çizdirme kısmıyla ilgili gerekli fonksiyonları yazdım. Mümkün müdür aklımdaki şey?

    drawBitmap;

    void UTFT::drawBitmap(int x, int y, int sx, int sy, bitmapdatatype data, int scale) 
    {
    unsigned int col;
    int tx, ty, tc, tsx, tsy;

    cbi(P_CS, B_CS);
    for (ty=0; ty<sy; ty++)
    {
    setXY(x, y+ty, x+sx-1, y+ty);
    for (tx=sx-1; tx>=0; tx--)
    {
    col=pgm_read_word(&data[(ty*sx)+tx]);
    LCD_Write_DATA(col>>8,col & 0xff);
    }
    }
    sbi(P_CS, B_CS);

    clrXY();
    }


    clrXY;

    void UTFT::clrXY() 
    {
    setXY(0,0,disp_y_size,disp_x_size);
    }


    sbi, cbi;

    #define cbi(reg, bitmask) *reg &= ~bitmask 
    #define sbi(reg, bitmask) *reg |= bitmask


    setXY;

    void UTFT::setXY(word x1, word y1, word x2, word y2) 
    {
    swap(word, x1, y1);
    swap(word, x2, y2)
    y1=disp_y_size-y1;
    y2=disp_y_size-y2;
    swap(word, y1, y2)

    LCD_Write_COM_DATA(0x46,(x2 << 8) | x1);
    LCD_Write_COM_DATA(0x47,y2);
    LCD_Write_COM_DATA(0x48,y1);
    LCD_Write_COM_DATA(0x20,x1);
    LCD_Write_COM_DATA(0x21,y1);
    LCD_Write_COM(0x22);
    }


    writecomdata;

    void UTFT::LCD_Write_COM_DATA(char com1,int dat1) 
    {
    LCD_Write_COM(com1);
    LCD_Write_DATA(dat1>>8,dat1);
    }


    writedata;

    void UTFT::LCD_Write_DATA(char VH,char VL) 
    {
    sbi(P_RS, B_RS);
    LCD_Writ_Bus(VH,VL,display_transfer_mode);
    }


    writedata;

    void UTFT::LCD_Write_DATA(char VL) 
    {
    sbi(P_RS, B_RS);
    LCD_Writ_Bus(0x00,VL,display_transfer_mode);
    }


    writecommand;

    void UTFT::LCD_Write_COM(char VL)   
    {
    cbi(P_RS, B_RS);
    LCD_Writ_Bus(0x00,VL,display_transfer_mode);
    }


    includes;
    #include "UTFT.h" 
    #include <pins_arduino.h>

    #include "hardware/avr/HW_ATmega1280.h"

    #include "memorysaver.h"







  • Yine mi arduino? Ben o işlemciyi kılcal damarlarına kadar kurcaladım. Böyle şeylere hiç uygun değil emin ol. Ne yapacaksınız bilmiyorum ama arduino zorunlu değilse alın aşağıdaki ikisinden birini, üzerine linux kurun. Alette her türlü I/O var. Arduino 8-bit 16 mips, bu alet 32-bit 3800 mips.

    http://www.aliexpress.com/item/Orange-pi-mini/32256568226.html
    http://www.aliexpress.com/item/Newest-Micro-M150-Banana-Pi-same-as-Raspberry-pi-USB-WIFI-Adapter-for-Banana-Pi-use/2020976445.html

    Ha soruna yanıt istiyorsan söyleyeyim. Atmega serisinde en fazla 8k ram var. Buna bitmap resim sığmayacağına göre parça parça göndermek zorunda kalacaksın. Onun yerine dışardan gönderilen resim bilgisini (sd karttan vs.) direkt lcd koordinatına yaz. Böyle ram boş kalacak. Lcd de image buffer varsa önce onu doldurup resmi birden yansıtabilirsin. Fakat hiçbir koşulda video gibi akıcılık bekleme.




  • Aman dikkat et ağzında diş kalmaz sonra. Benim neyi kasdettiğimi arkadaş anlar, sen anlamasan da olur.
  • Öncelikle cevaplar için teşekkür ederim, arduino zorunluluğu yok (zorunluluk diyebileceğimiz herhangi birşey yok, kişisel proje), bütçe ve öğrenme aşamasından ötürü arduino kullanıyorduk. Ancak şuanda böyle hazır bir kart değil de, ya microcontroller ya da direk işlemci alarak kendi board'umuzu yapmaya karar verdik, en temel sebep bu kartların boyutları ve o boyutlarda bize sunduğu şeylerin azlığı. Ama sıkıntı şu ki, ne Karaköy'de ve Direnç.net'de Atmel veya MicroChip'in SMD olmayan iyi düzeyde microcontroller'ı yok (veya belki de microcontroller'ın en iyi sunabildiği şey o'dur ? ), en hızlıları 20 mhz ile çalışıyor içlerinde maks 128 kbyte falan ram oluyor, program memoryleri desen iğrenç ötesi. Bir de programlayıcı sıkıntısı var tabi Türkiye'de bulmak zor sanırım biraz o aletleri. Texas Instruments'ın işlemcileri var iyatları fena değil, ama programlayıcısı 350 $ falan. Bu yüzden arduino tercih ediyorduk şimdiye kadar, tak programla, işini belki yapar belki yarım yapar belki yavaş yapar ama sonuçta çok çok beginner olduğumuz için, öğrenme sürecinde bizi idare ettiğini düşünüyorum. Microcontroller programlarken, pinlerle iş yapmak şimdiye kadar çok kolaydı, zaten hem atmel'in hem de microchip'in hazır library'leri var bu konuda. Ama işlemci alanında o işler nasıl yürüyor hiç bir fikrim yok.




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.