at89s ISP programavimo

F

freakkaito

Guest
Hey bro, aš noriu, kad programa per ISP at89s, o ne iš kompiuterio, tačiau aš noriu naudoti AVR kaip kapitonas:
AVR (ATmega32) <IPT == ==> AT89SMASTER ................................................. ....... slave...................................................... AT89SATMEGA32
................................................. ..... AT89SMOSI | <----------------------------------------> | MOSI
Miso | <----------------------------------------> | Sojų pasta
CLK | <------------------------------------------> | CLKKą turėčiau daryti, aš nusiųsti įjungta duomenis, bet aš niekada atsakomybės.Can anyone help me

 
Labas,
Jūs turite įdėti S51 į Reset būdas.Pasirinkite SCK laikrodis lėčiau nei 1 / 16 th of S51 laikrodis.Laikyti SCK mažas atleast 64 laikrodžių ciklų prieš išduodant komandas.Ir naudojimo režimas 0 SPI kapitonas.Manau, kad su šiais, turėtumėte galėti programa S51.

Linkėjimai,
LaktronicsParašytas po 2 valandų 33 minučių:Labas,
Naudoti MSB pirma logika.
Linkėjimai,
Laktronics

 
Jūsų sugest, I've made šio šaltinio.Mano ATmega32 laikrodis 4MHz ir AT89s 16MHz, kad galėčiau naudotis 1MHz perduoti Laikrodžiai (1 / 16 at89s laikrodis).reset yra nustatytas aukštos pozicijos.

# 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

LC targetInit (void);
void targetClear (void);
uint8_t spiTransferByte (uint8_t duomenis);
lakiųjų u08 spiTransferComplete;
void spiInit (void);int main (void)
(

# ifdef SPI_USEINT
Signalas (SIG_SPI)
(
spiTransferComplete = TRUE;
)
# endiflcd_init (LCD_DISP_ON);
spiInit ();
pradžia:
if (! targetInit ())
(
lcd_gotoxy (0,1);
lcd_puts ( "Target Klaida");delay1s ();
goto pradžia;
)
kitas
(
lcd_clrscr ();
lcd_puts ( "tikslinė OK");
)

targetClear ();
_delay_ms (100);
spiTransferByte (0xAA) / / rašyti 0xAA nukreipti
)
LC targetInit (tuščia)
(
spiTransferByte (0xac) / / Siųsti pirmasis baitas
spiTransferByte (0x53); / / Siųsti antrasis baitas
spiTransferByte (0) / / Siųsti 3. baitas
if (spiTransferByte (0) == 105) / / atsa turėtų būti 105 dešimtųjų arba 69 HEX
(
return (1);
)
kitas
(
return (0);
)
)

tuščia targetClear (tuščia)
(
spiTransferByte (0xac) / / target aiškus nurodymas
spiTransferByte (0x80);
spiTransferByte (0);
spiTransferByte (0);
)
uint8_t spiTransferByte (uint8_t duomenys)
(

# ifdef SPI_USEINT

spiTransferComplete = false;
outb (SPDR duomenys) / / Siųsti duomenis

while (! spiTransferComplete);
# else

outb (SPDR duomenys) / / Siųsti duomenis

while (! (INB (SPSR) & (1 <<SPIF))) / / laukti apdaila
# endif

grįžti INB (SPDR) / / get return duomenų
)tuščia spiInit (tuščia)
(Skaičius (PORTB, 7) / / set SCK hi
Skaičius (DDRB, 7) / / set SCK kaip produkcija
CBI (DDRB, 6); / / set Miso kaip pirkimo
Skaičius (DDRB, 5) / / set MOSI kaip produkcija
Skaičius (DDRB, 4) / / SS turi būti produkcija Meistras režimu dirbti/ / Setup SPI sąsaja:

Skaičius (SPCR, MSTR) / / kapitonas būdas

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

CBI (SPCR, DORD) / / MSB pirmą

Skaičius (SPCR, SPĮ); / / Enable SPI
INB (SPSR);/ / Enable SPI pertraukti

Skaičius (SPCR, SPIE);

)

bet aš niekada gauti atsakymą.arba mano programe kodas yra neteisingas?.aš naudoju LCD 16x2 kaip ekranas ir winavr kaip kompiliatorius.

 
Labas,
1.Kaip jūs įdėti 89S51 iš naujo būdas?
2.Kaip jūs nustatymas Mode0 Be SPI?
3.Jūs nustatėte SCK aukštos pradėti su režimu nulis, neveikos būsena ir SCK turi būti mažai
Po išleidimo S51 ir iš naujo, turite wailt apie 64 CPU laikrodžio ciklai prieš suteikiant komandoms.Aš atsiprašau, aš negalės padėti Jums kodavimas.

Linkėjimai,
Laktronics

 
oh yeah, kad mano senas kodas.tai nauja:

CBI (PORTB, 7) / / set SCK žemas
Skaičius (DDRB, 7) / / set SCK kaip produkcija
CBI (DDRB, 6); / / set Miso kaip pirkimo
Skaičius (DDRB, 5) / / set MOSI kaip produkcija
Skaičius (DDRB, 4) / / SS turi būti produkcija Meistras režimu dirbti/ / Setup SPI sąsaja:

Skaičius (SPCR, MSTR) / / kapitonas būdas
CBI (SPCR, SPR0) / / clock = f / 4 ------> 4 / 4 = 1MHz
CBI (SPCR, SPR1);
CBI (SPCR, CPHA) / / perdavimui režimu 0
CBI (SPCR, CPOL);
CBI (SPCR, DORD) / / MSB pirmą
Skaičius (SPCR, SPĮ); / / Enable SPI
INB (SPSR);
Skaičius (SPCR, SPIE) / / Enable SPI pertraukti

kad SPI paleidimo kodą, atsakydamas į savo klausimą:

1.įdėti AT89s visada iš naujo, iš naujo nustatyti PIN biginning yra susijusi su Vcc, coz projektą laive tik išorės programavimas todėl manau, kad ne problema.

2.režimu 0 SPI, galiu nustatyti CPHA ir CPOL registruotis nulio.

3.yeah mano pirmoji kodas rodo, kad aš įdėti SCK didelės, tai mano klaida.

Beje, net aš jau nustatyti kodą, aš gaunu atsakymą.
mano draugas sugest man naudoti įprastą I / O port coz tranfser logika tik naudojant pabarstyti registrą, ir mes padaryti šį kodą:

uint8_t spi_transfer (uint8_t duomenys)
(
unsigned char Tempa, tempB, temp1, temp2, skaičius;
unsigned char data_transmit, data_recieve gavo;

data_transmit = 0;
data_recieve = 7; / / MSB pirmą
Received = 0;
Tempa = 0;
tempB = 0;
temp1 = 0;
temp2 = 0;

CBI (DDRD, 0) / / set PORTD0 kaip Sojų indėlis
Skaičius (DDRD, 1); / / set PORTD1 kaip mosi produkcija
Skaičius (DDRD, 2) / / set PORTD2 kaip SCK
CBI (PORTD, 2) / / set SCK žemas

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

Skaičius (PORTD, 1);

)
kitas
(

CBI (PORTD, 1);

)

Skaičius (PORTD, 2); / / SCK aukštas

delay_ms (50) / / laukti kartais

CBI (PORTD, 2); / / SCK žemas

temp1 = Pind / / gauti atsakymą bitų
temp1 = temp1 &0x01;
temp2 = (temp1 <data_recieve);
gauti = temp2 | temp1;

data_transmit ;
data_recieved -;
)

mainais;
)

ir kada galiu siųsti leido duomenų aš gaunu atsakymą per.Ką turiu daryti?Ar yra kas nors galėtų padėti man su tam tikrą kodą, coz i stil newbie here ...

 
freakkaito

ATMEGA 32 uostą kaiščių turėti stipresnį pullups.Manau, 89s dont turi galią traukti jį žemyn, please check it out

Nandhu

 
Labas,
Į kodą, turite pasiimti Miso bitų, kai laikrodis yra didelis.Žiūrėkite žemiau siūlomus SPI kodas.Jums turėtų būti suteiktos galimybės imtis visų atsargumo kodavimo reikalavimus.Aš ne patikimas šaltinis kodai.

uchar spi_transfer (uchar duomenys)
(

/ / Keisti po truputį apibrėžimai už savo kompiliatorių reikalavimai
sbit Sojų = (PortD, 0);
sbit mosi = (PortD, 1);
sbit SCK = (PortD, 2);
CBI (DDRD, 0) / / set PORTD0 kaip Sojų indėlis
Skaičius (DDRD, 1); / / set PORTD1 kaip mosi produkcija
Skaičius (DDRD, 2) / / set PORTD2 kaip SCK
CBI (PORTD, 2) / / set SCK žemas
unsigned char skaičius;

for (count = 8; count> 0; Count -)
(
If (duomenų ir 0x80)
MOSI = 1;
Kitas
MOSI = 0;
Duomenų <<1;
SCK = 1;
delsimas ();
If (Sojų pasta)
Duomenų = duomenų 1;
SCK = 0;
)
grįžti duomenis;
)

Linkėjimai,
Laktronics

 
freakkaito rašė:

Hey bro, aš noriu, kad programa per ISP at89s, o ne iš kompiuterio, tačiau aš noriu naudoti AVR kaip kapitonas:AVR (ATmega32) <IPT == ==> AT89SMASTER ................................................. ....... slave

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

ATMEGA32
................................................. ..... AT89SMOSI | <----------------------------------------> | MOSI

Miso | <----------------------------------------> | Sojų pasta

CLK | <------------------------------------------> | CLKKą turėčiau daryti, aš nusiųsti įjungta duomenis, bet aš niekada atsakomybės.
Can anyone help me
 
Thank you very much vaikinai, jums tikrai padės man šiuo metu.I'll try to fix mano šaltinis ir naudoti Laktronics šaltinis, tikiuosi, tai gali dirbti.

ir ctownsend, aš jau turiu savo kodą, ne aš tikrai puiki su asembly bet Thank's very much, kad tikrai puikus projektas.

nori man sekasi gerai!

 
Hey guys, I Did It !!!!!!Gaunu atsakymą ....

Laktronics Thank you very much, jums teisę turiu skaityti Sojų PIN kai laikrodis vis dar didelis.

horeeeee

 
Labas,
Ačiū už atsiliepimus ir Congrats.Dabar galite pabandyti programavimo mikroschema.

Linkėjimai,
Laktronics

 

Welcome to EDABoard.com

Sponsor

Back
Top