EVB Mega128 i WIRING

EVB Mega128 i WIRING
Razem głosów: 3 co stanowi: 93.33% całości.

>>> Sprzęt

Jakiś czas temu wpadła mi w ręce PCB do ATMega128 w sumie mało przemyślana , ale ciekawa:

Na pokładzie: 

Procesor:   ATmega 128  @ 16Mhz

RTC: DS1337

EXP: 2x PCF8574

EEPROM:  24C1024

Slot SD/MMC RS232 i oczywiście FT232R jest jeszcze miejsce na zewnetrzny SRAM 128K , ale w tym miejscu nie jest nam potrzebny

 

>>> MODYFIKACJE Sprzętowe i Programowe —>konieczne

 

W związku z tym iż FT232 jest podłączony w 1% używalności czyli tylko jako USB-RS232 do UART0 atmegi. Oryginalnego bootloadera WiringS lub Wirining v1.1 nie da się użyć , z tego powodu że lutowanie się do wyprowadzeń FT232R jest mało przyjemne – i niestety niema padów od nieużytych pinów wiec nici  z układu AUTORESET — a to uniemożliwia wgranie firmware. W tym Celu zostały wprowadzone  drobne modyfikacje sprzętowe i programowe.

 1. HARDWARE

W związku z brakiem autoresetu wymyśliłem, że wygodny będzie przycisk który pozwala na wejście w tryb bootloadera oraz jakaś dioda która będzie o tym informować :)

— zatem jedziemy

diodę podłączamy do PG0 atmegi128  — jest sterowana stanem WYSOKIM przycisk natomiast podłączony jest przez zewnętrzny PUL-UP 10K do pinu PE2 Aktywacja Bootloadera jest wywoływana stanem NISKIM

No dobra teraz bootloader :)

w komplecie z Wiring mamy źródła bootloadera wiec możemy zając się modyfikacjami Bootloader Wiring podobnie jak ARDUINO oparty jest o bootloader  ATMELA zgodny ze standardem transmisji STK500 — niestety nie zdał egzaminu  — nie zawsze się łączył z IDE i były błędy transmisji spowodowane kłopotliwą inicjalizacją połączenia :( w związku z czym napisałem bootloader praktycznie można powiedzieć od nowa , ale tym razem postawiłem na lepszy protokół transmisji mianowicie STK500v2. Spowodowane jest to tym ze łatwiejsza jest inicjalizacja i sam sposób przesyłania danych  dodatkowo jest szybszy od STK500:) Na wszelki wypadek zrobiłem 2 wersje bootloadera:

1. jest aktywowana resetem po czym oczekuje ok 8s na transmisje, po tym czasie przechodzi do programu.

– niestety ma to rozwiązanie swoje wady i dlatego rozwiązanie z przyciskiem jest lepsze i na nim się skupimy mamy już wykonane przeróbki sprzętowe więc to będzie idealne rozwiązanie:

działa to tak: naciskamy przycisk Bootloadera  I jednocześnie reset  zaświeca się dioda PG0 informująca  o uruchomieniu Bootloadera,  teraz możemy wgrać program ze środowiska WIRING , po czym  naciskamy reset i nasz program jest wykonywany.

Oba Bootloadery znajdą się w REPOZYTORIUM (jak je naprawimy)

Lub do pobrania z  FORUM.ATNEL.PL

>>> PRZYGOTOWANIE PROCESORA DO PRACY:

 

aby prawidłowo wszystko nam działało musimy wgrać  bootloader do procesora np przy pomocy MkAVrCalculator  i ustawić odpowiednie fusy :

 

EXTENDED: 0xFF 

HI Fuse: 0xCC 

LO Fuse: 0x3f 

 

dla masochistów :)

 

Boot Flash size 1024 words : BOOTSZ=10

Boot Reset vector enable : BOOTRST=0

CKOPT=0

BOD at 4.0V, : BODLEVEL=0

BOD enable : BODEN=0

Ext. crystal/resonator High Freq.; Start-up time 16K CLK + 64ms. : CKSEL=1111 SUT=11

Watchdog disable: WDTON=0

OCD disable: OCDEN=0

JTAG disable: JTAGEN=0

SPIEN enable: SPIEN=0

 

Po tym zabiegu potrzeba jeszcze pliki zgodności bo nasza płytka nie będzie działać w środowisku wiring

gdyż bootloader nie jest zgodny z Wiring v1.0 (protokół – STK500) oraz Wiring Mini update2

(protokół – wiring)

nasz pracuje w trybie STK500v2

 

w tym celu do naszego Wiring 1.0 do folderu hardware wgrywamy folder Sunduino wraz z wszystkimi

plikami dostosowanymi do naszej płytki.

 

——————————————————————————————————————–

Jeśli wszystko przebiegnie prawidłowo będziemy mogli wybrać naszą płytkę

i zacząć programowanie w środowisku wiring IDE – język C++ (ten sam użyty jest w Arduino)

 

Filmik przedstawiający działanie na przykładzie programiku LEDBlink

 

Dioda podłączona do Digital9 ,

Widać przejście do bootloadera – sygnalizowane zaświeceniem się zielonej diody LED na PG0

(po prawej stronie, proces ładowania firmware i uruchomienie programu po resecie

(czerwona dioda po prawej stronie)

1.  delay (1000)

2.  delay(100)

Podziel się na:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay