KOMUNITAS
Home / FORUM / All / Hobby / Hobby & Community /
Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks
KASKUS
51
244
https://www.kaskus.co.id/thread/000000000000000002654259/hobby-elektronika-digital-microcontroller-amp-solder-menyolder-gabung-sini-yuks

Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks

DIGITAL ELECTRONICS HOBBY FORUM




Spoiler for apa aja sih yang dibahas?:


Spoiler for "Hobby Microcontroller Itu Mahal ? Kreativitasmu Itu yg Mahal Gan !":




UPDATE 8/JUNI/2014

DUKUN FUSEBIT AKAN MENGHIDUPKAN IC MU YANG MATI !



Selengkapnya dibahas di sini gan !!

CLINOMETER SEDERHANA MEMANFAATKAN ADC



Selengkapnya dibahas di post berikut




Spoiler for Buka Jika Mau Paket Belajar:


Proyek2 micro yg sudah jadi
Quote:



I.N.D.E.X F.O.R.U.M

Quote:




Biar ngiler, ane kasih contoh hasil karya TS...






Spoiler for Contact TS lewat dimari yahh:



.
Diubah oleh ahocool
BELAJAR ACCESS SD CARD CARA SIMPLE DENGAN ATTINY2313

==PART 2==




SPI via USI



SPI merupakan serial peripheral interface yang dapat mengkomunikasikan antara master dan slave. Kecepatan transfer data bergantung dari pembagian clock yang diberikan . Sedangkan USI adalah SPI mode simple, dimana clock diberikan manual secara software atau input dari luar. Pin SS (slave select ) juga tidak disediakan tapi bisa di akali dengan PIN & software



dari gambar diatas dapat dilihat mode 3 wire USCK, DO (MOSI) , DI (MISO)
USCK diberikan secara software (manual) dengan toogling register USICR pada USICLK dan USITC
ada 3 buah register yg perlu diperhatikan yaitu USIDR = Data register , USICR =Control register dan USISR = Status Register

Berikut script untuk inisialisasi dari USI sebagai SPI

Code:
[size="1"]//definisi port
#define SPI_DDR DDRB
#define MOSI (1<<PB6)
#define MISO (1<<PB5)
#define SCK (1<<PB7)

#define CS_DDR DDRD
#define CS (1<<PD6) // PD6 sebagai slave/chip select
#define CS_ENABLE() (PORTD &= ~CS)
#define CS_DISABLE() (PORTD |= CS)

//inisialisasi port SPI
void SPI_init() {
CS_DDR |= CS; // SD card circuit select as output
SPI_DDR |= MOSI + SCK; // MOSI and SCK as outputs
}

//Pembacaan SPI
unsigned char SPI_write(unsigned char ch) {
USIDR = ch; // data yang akan dikirim
USISR |= (1<<USIOIF); // aktifkan interrupt Overflow

do {
//Kirim USCK8 x
USICR |= (1<<USIWM0) | (1<<USICS1) | (1<<USICLK) | (1<<USITC);
_delay_us(100);
} while((USISR & (1<<USIOIF)) == 0); // selesai jika overflow
return USIDR; // baca data reply yg masuk
}
[/size]



gampang bukan ? selanjutnya kita dapat mengirim perintah ke SD card melalui port USI dan kita siap untuk membaca data dari SD CARD.

Jika bahan-bahan sudah siap dan tersusun di breadboard (jangan lupa set fusebit memakai clock 8MHZ , clk_div jangan dipake, bisa meakai xtal atau internal RC) kita akan membaca file text yang telah dicopy ke dalam SD card

Pertama kita bahas cara read (CMD 51) dari isi file SDCARD , langkahnya seperti berikut:

1. Pull CS low (select)
2. Send 0×51
3. Send 0x00000000 (Sector x 512)
4. Send 0×FF
5. Baca data yg dikirim 520 kali (sambil kirim 0xFF ke kartu)
6. Pull CD low (deselect)

kenapa 520 kali ? karena format reply per sector seperti ini :



yang garis merah diatas merupakan header awal (6 byte) yang menyatakan data ready, jadi di script nantinya kita akan mendeteksi 00 dan FE , sedangkan 2 terakhir merupakan CRC yang bisa di abaikan.

jadi kita susun script seperti berikut :

Code:


[size="1"]void SD_command(unsigned char cmd, unsigned long arg, unsigned char crc, unsigned char read) {
unsigned char i;
//berfungsi mengirim perintah ke SD card
CS_ENABLE();
SPI_write(cmd);
SPI_write(arg>>24); //geser byte
SPI_write(arg>>16);//karena format
SPI_write(arg>>8);//0x00000000
SPI_write(arg);//alias 4 bit argumen
SPI_write(crc);

for(i=0; i<read; i++) SPI_write(0xFF); //kirim & baca
CS_DISABLE();
}

char SD_init() {
char i;
//berfungsi inisialisasi SD card
CS_DISABLE();
for(i=0; i<10; i++) SPI_write(0xFF);
_delay_ms(500);
// langkah 1 0x40
SD_command(0x40, 0x00000000, 0x95, 8);
_delay_ms(500);
// langkah 2 0x41
SD_command(0x41, 0x00000000, 0xFF, 8);
_delay_ms(500);
// langkah 3 0x50
SD_command(0x50, 0x00000200, 0xFF, 8);
_delay_ms(500);

return 0;
}

void SD_begin(unsigned long sector) {
uint8_t i = 0;
//berfungsi untuk membaca data SD card
CS_ENABLE();
SPI_write(0x51); //perintah baca 0x51
//selanjutnya geser2 byte sector
SPI_write(sector>>15); // sector*512 >> 24
SPI_write(sector>>7); // sector*512 >> 16
SPI_write(sector<<1); // sector*512 >> 8
SPI_write(0); // sector*512
SPI_write(0xFF);

for(i=0; i<10 && SPI_write(0xFF) != 0x00; i++) {} // wait for 0
for(i=0; i<10 && SPI_write(0xFF) != 0xFE; i++) {} // wait for data start

// baca SD& kirim melalui serial
for(i=0; i<512; i++) USART_Tx(SPI_write(0xFF));
//2 kali checksum
SPI_write(0xFF);
SPI_write(0xFF);

CS_DISABLE();
}

[/size]



Yah..begitulah...ga terlalu susah ....hanya masalah creativitas, ntar munculnya di layar (jika dihubungkan dengan serial via putty/hyperterminal) seperti ini :



atau jika data langsung dibaca, bisa langsung membaca text. Sesuai percobaan bahwa sector paling depan tempat file disimpan adalah sector 96,

kenapa ? karena SD CARD yang aku pake jadul , memakai system FAT12




sedangkan jika memakai Format pc terbaru maka otomatis menjadi system FAT16 dan File pertama berada di sector 555. Jadi sesuaikan dengan jenis format yang dipakai



semua source code dapat didownload dimari


SELAMAT MENCOBA
Diubah oleh ahocool
×
© 2022 KASKUS, PT Darta Media Indonesia. All rights reserved
Ikuti KASKUS di