at89s ISP pemrograman

F

freakkaito

Guest
hey bro, i wanna untuk memprogramkan at89s melalui ISP, bukan dari komputer tetapi saya ingin menggunakan avr sebagai master:
AVR (ATmega32) <== ISP ==> AT89SMASTER ................................................. ....... BUDAK...................................................... AT89SATMEGA32
................................................. ..... AT89SMosi | <----------------------------------------> | mosi
Miso | <----------------------------------------> | Miso
CLK | <------------------------------------------> | CLKapa yang harus saya lakukan, saya sudah mengirimkan data diaktifkan tetapi saya tidak pernah mendapatkan respon.can anyone help me

 
Hai,
Anda harus meletakkan S51 dalam modus ulang.Pilih salah satu SCK jam lebih lambat dari 1 / 16 th of S51 jam.Jauhkan SCK rendah untuk atleast 64 clock cycle sebelum mengeluarkan perintah.Dan menggunakan 0 SPI modus master.Saya berpikir dengan ini, Anda harus dapat program S51.

Salam,
LaktronicsDitambahkan setelah 2 jam 33 menit:Hai,
MSB pertama juga menggunakan logika.
Salam,
Laktronics

 
oleh sugest Anda, saya telah membuat sumber ini.ATmega32 saya jam 4Mhz dan AT89s 16Mhz sehingga saya dapat menggunakan transfer 1MHz per jam (1 / 16 at89s jam).reset ditetapkan pada posisi tinggi.

# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <avr/pgmspace.h>
# include <avr/io.h>
# include <avr/interrupt.h># include "global.h"
# include "lcd.h"

# define SPI_USEINT

int targetInit (void);
targetClear void (void);
uint8_t spiTransferByte (uint8_t data);
volatile u08 spiTransferComplete;
spiInit void (void);int main (void)
(

# ifdef SPI_USEINT
SIGNAL (SIG_SPI)
(
spiTransferComplete = TRUE;
)
# endiflcd_init (LCD_DISP_ON);
spiInit ();
mulai:
if (! targetInit ())
(
lcd_gotoxy (0,1);
lcd_puts ( "Target Error");delay1s ();
goto start;
)
lain
(
lcd_clrscr ();
lcd_puts ( "target ok");
)

targetClear ();
_delay_ms (100);
spiTransferByte (0xAA); / / tulis 0xAA untuk menargetkan
)
int targetInit (void)
(
spiTransferByte (0xac); / / mengirim byte pertama
spiTransferByte (0x53); / / mengirim byte kedua
spiTransferByte (0); / / mengirimkan 3 byte
if (spiTransferByte (0) == 105) / / yang respon harus 105 desimal atau 69 hex
(
return (1);
)
lain
(
return (0);
)
)

targetClear void (void)
(
spiTransferByte (0xac); / / target instruksi yang jelas
spiTransferByte (0x80);
spiTransferByte (0);
spiTransferByte (0);
)
uint8_t spiTransferByte (uint8_t data)
(

# ifdef SPI_USEINT

spiTransferComplete = FALSE;
outb (SPDR, data); / / mengirim data

while (! spiTransferComplete);
# lain

outb (SPDR, data); / / mengirim data

while (! (inb (SPSR) & (1 <<SPIF))); / / tunggu sampai selesai
# endif

return inb (SPDR); / / mendapatkan kembali data
)spiInit void (void)
(SBI (PORTB, 7); / / set SCK hi
SBI (DDRB, 7); / / set SCK sebagai output
chi (DDRB, 6); / / set Miso sebagai masukan
SBI (DDRB, 5); / / set mosi sebagai output
SBI (DDRB, 4); / / SS harus output untuk modus Master untuk bekerja/ / Setup antarmuka SPI:

SBI (SPCR, MStr); / / master mode

chi (SPCR, SPR0); / / clock = f / 4 ------> 4 / 4 = 1MHz per
chi (SPCR, SPR1);

chi (SPCR, DORD); / / MSB pertama

SBI (SPCR, SPE); / / mengaktifkan SPI
inb (SPSR);/ / Mengaktifkan interupsi SPI

SBI (SPCR, SPIE);

)

tetapi saya tidak pernah mendapatkan respons.atau kode Programe saya salah?.i use lcd 16x2 sebagai layar dan winavr sebagai kompilator.

 
Hai,
1.Bagaimana Anda menempatkan 89S51 dalam modus Reset?
2.Bagaimana Anda menetapkan Mode0 Dalam SPI?
3.Anda telah mengatur SCK tinggi untuk memulai dengan, dalam modus nol, keadaan idle SCK harus rendah
Setelah meletakkan S51 di reset, Anda harus wailt untuk sekitar 64 CPU clock cycle sebelum memberikan perintah.Maaf, saya tidak akan dapat membantu Anda dengan pengkodean.

Salam,
Laktronics

 
oh yeah, itu kode lama.ini yang baru:

chi (PORTB, 7); / / set SCK rendah
SBI (DDRB, 7); / / set SCK sebagai output
chi (DDRB, 6); / / set Miso sebagai masukan
SBI (DDRB, 5); / / set mosi sebagai output
SBI (DDRB, 4); / / SS harus output untuk modus Master untuk bekerja/ / Setup antarmuka SPI:

SBI (SPCR, MStr); / / master mode
chi (SPCR, SPR0); / / clock = f / 4 ------> 4 / 4 = 1MHz per
chi (SPCR, SPR1);
chi (SPCR, CPHA); / / transmision mode 0
chi (SPCR, CPOL);
chi (SPCR, DORD); / / MSB pertama
SBI (SPCR, SPE); / / mengaktifkan SPI
inb (SPSR);
SBI (SPCR, SPIE); / / mengaktifkan interupsi SPI

bahwa kode init spi, menjawab pertanyaan Anda:

1.i meletakkan AT89s selalu di ulang, dari pin reset biginning terhubung dengan vcc, coz papan proyek hanya untuk programing eksternal sehingga saya rasa itu tidak menjadi masalah.

2.0 SPI mode, i mengatur CPHA dan CPOL mendaftar dengan nol.

3.yeah kode pertama saya menunjukkan bahwa saya meletakkan SCK tinggi, itu kesalahan.

by the way bahkan i sudah memperbaiki kode, saya tidak mendapatkan respon.
sugest teman saya biasa saya menggunakan I / O port yang tranfser coz logika hanya menggunakan menyaring mendaftar, dan kita membuat kode ini:

uint8_t spi_transfer (uint8_t data)
(
unsigned char Tempa, tempB, temp1, temp2, count;
unsigned char data_transmit, data_recieve, diterima;

data_transmit = 0;
data_recieve = 7; / / MSB pertama
menerima = 0;
Tempa = 0;
tempB = 0;
temp1 = 0;
temp2 = 0;

chi (DDRD, 0); / / set miso PORTD0 sebagai masukan
SBI (DDRD, 1); / / set mosi PORTD1 sebagai output
SBI (DDRD, 2); / / set PORTD2 sebagai SCK
chi (PORTD, 2); / / set SCK rendah

for (count = 8; count> 0; count -)
(
Tempa = data;
tempB = (Tempa <<data_transmit);
if ((tempB) & 0x80 == 80)
(

SBI (PORTD, 1);

)
lain
(

chi (PORTD, 1);

)

SBI (PORTD, 2); / / SCK tinggi

delay_ms (50); / / menunggu untuk beberapa waktu

chi (PORTD, 2); / / SCK rendah

temp1 = PIND; / / mendapatkan respon sedikit
temp1 = temp1 &0x01;
temp2 = (temp1 <<data_recieve);
menerima = temp2 | temp1;

data_transmit ;
data_recieved -;
)

kembali menerima;
)

dan ketika saya mengirimkan data mengaktifkan i tidak mendapatkan respon juga.apa yang harus saya lakukan?apakah ada orang yang bisa membantu saya dengan beberapa kode, coz i Stil newbie di sini ...

 
freakkaito

atmega 32 port pin memiliki pullups kuat.Saya pikir 89s dont memiliki kekuasaan untuk menariknya turun silahkan check it out

Nandhu

 
Hai,
Dalam kode Anda, Anda harus mengambil sedikit ketika jam Miso tinggi.Silakan lihat di bawah kode SPI yang disarankan.Anda harus dapat mengurus semua persyaratan pengkodean.Saya bukan kode sumber diandalkan.

uchar spi_transfer (uchar data)
(

/ / Ubah sedikit definisi berikut sesuai kebutuhan compiler anda
sbit miso = (PortD, 0);
sbit mosi = (PortD, 1);
sbit SCK = (PortD, 2);
chi (DDRD, 0); / / set miso PORTD0 sebagai masukan
SBI (DDRD, 1); / / set mosi PORTD1 sebagai output
SBI (DDRD, 2); / / set PORTD2 sebagai SCK
chi (PORTD, 2); / / set SCK rendah
unsigned char count;

for (count = 8; count> 0; count -)
(
If (data & 0x80)
Mosi = 1;
Lain
Mosi = 0;
data <<1;
SCK = 1;
delay ();
If (miso)
data = data 1;
SCK = 0;
)
mengembalikan data;
)

Salam,
Laktronics

 
freakkaito wrote:

hey bro, i wanna untuk memprogramkan at89s melalui ISP, bukan dari komputer tetapi saya ingin menggunakan avr sebagai master:AVR (ATmega32) <== ISP ==> AT89SMASTER ................................................. ....... BUDAK

...................................................... AT89S

ATMEGA32
................................................. ..... AT89SMosi | <----------------------------------------> | mosi

Miso | <----------------------------------------> | Miso

CLK | <------------------------------------------> | CLKapa yang harus saya lakukan, saya sudah mengirimkan data diaktifkan tetapi saya tidak pernah mendapatkan respon.
can anyone help me
 
terima kasih banyak guys, Anda benar-benar membantu saya kali ini.Saya akan mencoba untuk memperbaiki sumber saya dan menggunakan sumber Laktronics, saya harap itu dapat bekerja.

dan untuk ctownsend, saya sudah memiliki kode, saya tidak benar-benar hebat dengan Asembly tapi terima sangat banyak yang benar-benar proyek besar.

wish me luck ok!

 
hey guys, i did it !!!!!!i mendapatkan respon ....

Laktronics terima kasih banyak, Anda benar saya harus membaca miso pin ketika jam masih tinggi.

horeeeee

 
Hai,
Terima kasih untuk umpan balik dan congrats.Anda sekarang dapat mencoba pemrograman chip.

Salam,
Laktronics

 

Welcome to EDABoard.com

Sponsor

Back
Top