Ustawianie bitów: SPIEN, FSTRT w ATMELach AT90S8515

  Poniższy sposób opracowałem zgodnie ze wskazówkami zawartymi 

         na SDTV BulletinBoard: 8515 -> 8515A

Wstęp

Default configuration when Atmel circuits leave factory is:
SPIEN = Acivated
FSTRT = NOT Activated
When ordering with "A":
SPIEN = Acivated
FSTRT = Activated

A więc normalny układ AT90S8515 będzie się programował bez problemu bo SPIEN = Acivated, ale nic się nie "uruchomi" ponieważ bit FSTRT odpowiedzialny za krótki start jest nie aktywny.

Aby zaprogramować  dwa  bity: SPIEN, FSTRT w ATMELach AT90S8515 bez literki "A" zbudowałem taki oto prosty aparacik: 

 Widok z góry  Widok od spodu

Widok z góry

Widok od spodu

   

Jak widać jest to tylko "prototyp" wykonany tylko tak aby działał. Gdybym go budował od nowa, to wyglądałby zupełnie inaczej :-)

Należy go wykonać zgodnie ze schematem zamieszczonym w dokumentacji tego procesora str.70.

Plik z dokumentacją  możesz pobrać bezpośrednio z mojej strony lub ze strony www.atmel.com .

Układ trzeba tak zbudować aby na piny: PD1, PD2, PD3, PD4, PD5, PD6, PB7-0, XTAL1 można podawać sygnały "0" lub "1". Druga ważna sprawa to to żeby napięcia były dokładnie w zakresach, bo inaczej można spalić układ scalony - ja je wyprowadziłem z komputera. 

Dodatkowo w powyższym układzie każdy pin/wejście jest podłączony przez LEDa i opornik 471ohm do masy. 

Pozwala to kontrolować co aktualnie jest podawane na wejścia układu.

Jak programujemy ?
1. Początkowa konfiguracja. 
 

Zanim włączymy układ (podamy odpowiednie napięcia) proponuję ustawić początkową konfigurację

- na pin ( PD2 ) OE ustawiamy "1", bo inaczej można uszkodzić porty PB7-0 ,

- pin ( PD1 ) RDY/BSY zostawiamy "w spokoju" - ja go podłączyłem przez LEDa i opornik 471ohm do masy,

- na pin [nr. 19] XTAL1 dajemy "0" - w czasie programowania będziemy tu podawać impuls "1",

- na pin (PD3) WR dajemy "1" - w czasie programowania będziemy tu podawać impuls "0" 

  ( w zasadzie użyjemy go tylko raz podczas naszej "zabawy" ).

2. Włączamy układ  
 

- na początek podajemy +5V (pin [nr. 40] VCC, masa pin [nr. 20] GND).

- na pin (PD4) BS i pin [nr. 9] RESET ustawiamy "0"

- następnie na RESET dajemy napięcie z zakresu od +11.5 do +12.5 V.

    W tej chwili układ jest ustawiony w tryb programowania.  

    (opis powyższych czynności -> dokumentacja str. 71 dół )

3. Podanie komendy 0100 0000 (Write Fuse Bits).
 

[Uwaga !!!  Pin OE = "1" - tak zostawiamy do końca programowania]

- na pin (PD5) XA0 = "0",  na pin (PD6) XA1 = "1" - uaktywniliśmy wprowadzanie komend,

- na pin (PD4) BS = "0"

- na piny PB0-7 dajemy odpowiednio:

  • PB0 = "0"
  • PB1 = "0"
  • PB2 = "0"
  • PB3 = "0"
  • PB4 = "0"
  • PB5 = "0"
  • PB6 = "1"
  • PB7 = "0"

- na pin [nr. 19] XTAL1 podajemy impuls "1" - w tej chwili wydaliśmy układowi powyższą komendę.

4. Wprowadzenie danych. (Load Data Low Byte)
 

- na pin (PD5) XA0 = "1",  na pin (PD6) XA1 = "0"- uaktywniliśmy wprowadzanie danych,

- na pin (PD4) BS = "0"

Bitem n = "0" programujemy a bitem n = "1" kasujemy Fuse bit.

Bit 5 = SPIEN Fuse bit.

Bit 0 = FSTRT Fuse bit.

Bit 7-6,4-1 = "1".

- czyli na odpowiednie piny PB0-7 dajemy odpowiednio:

  • PB0 = "0"
  • PB1 = "1"
  • PB2 = "1"
  • PB3 = "1"
  • PB4 = "1"
  • PB5 = "0"
  • PB6 = "1"
  • PB7 = "1"

- na pin [nr. 19] XTAL1 podajemy impuls "1" - w tej chwili wprowadziliśmy układowi powyższe dane.

5. Kończymy programowanie.
 

- na pin (PD3) WR podajemy impuls "0" .

( więcej szczegółów dokumentacja str. 74 dół i str. 72, na str. 73 jest umieszczony przebieg sygnałów na wejściach  - z niego wszystko lepiej widać)

 

        I to już koniec .... u mnie ten sposób zadziałał, jednak nie biorę odpowiedzialności za ewentualne uszkodzenie Atmel-a. Powyższa metoda ustawiania tych dwóch bitów nie jest może najszybsza i przyjemna ale dla jednego układu chyba nie opłaca się budować specjalnych programatorów jak np. ze strony: http://come.to/piccards 

        Patrząc na schematu programatora Fusów z powyższej strony okazuje się, że jest to to samo co ja zrobiłem powyżej tylko że ja wszystkie sygnały podaje ręcznie a tam jest to sterowane za pomocą programu / komputera.

        Dodatkowo na tym moim "pseudo" równoległym programatorze można wykonać dużo więcej czynności:  np.: programowanie Lock Bits, odczyt stanu Fuse i Lock Bits itp. (więcej szczegółów w dokumentacji)

Wróć do poprzedniej strony

 wersja. 1.1