Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

uP ATmega128 - dlaczego nie "ruszył"?

kenaJ
-
-
Posty:29
Rejestracja:13 lis 2006, o 22:31
Lokalizacja:Kraków
uP ATmega128 - dlaczego nie "ruszył"?

Postautor: kenaJ » 4 lut 2007, o 22:51

Dogadałem się w końcu z możliwością zaprogramowania ATmegi128. :597:
Ale mam kolejny problem: program nie rusza. :599:
Przy symulacji w BASCOM AVR idzie prawidłowo.
Może jest zbyt mały dla pamięci 128kB? Nie wiem.

Oto listing:
-----------------------------------------------------------
$regfile = "m128def.dat"
$crystal = 8000000

Dim I As Integer
Dim A As Byte
Config Portd = Output

A = 99
Portd = A

For I = 1 To 256

Waitms 55

A = A - 1
Portd = A

Next I

End
-----------------------------------------------------------

Zmienna A = 99 jest po to, abym na porcie (diody LED) mógł zobaczyć, czy wpisuje mi się zadana wartość. Ano wpisuje się. Dla: A = A + 1 też nie szło.

Do porgramowania używam PonyProg2000, robię to przez linie PDI, PDO SCK i RESET.

Czy ktoś wie, jak to ruszyć?
Z góry dziękuje za radę. :607:

MDz
-
-
Posty:365
Rejestracja:29 mar 2003, o 13:35
Lokalizacja:Warszawa
Kontaktowanie:

Postautor: MDz » 4 lut 2007, o 23:05

Może jest zbyt mały dla pamięci 128kB?
?!
Do porgramowania używam PonyProg2000, robię to przez linie PDI, PDO SCK i RESET.
Czy PonyProg przechodzi bez protestów etap weryfikacji kodu załadowanego do Flash-a?

Jak ustawiłeś FuseBit-y?

A w szczególności, czy wyłączyłeś "ATMega103 Compatibility Mode"?

Patrz np.: http://avrside.ep.com.pl/ -> Porady
"Atmega 128 jest dostarczona z zaprogramowanym trybem kompatybilności z modelem 103, z czym wiąże się mniejszy obszar RAM oraz niedostępność rozszerzonych rejestrów. Avr-gcc samoczynnie inicjalizuje stos na końcu RAM - a więc w trybie kompatybilności poza rzeczywiście dostępnym sprzętowo obszarem. Objawia się to trudnym do zinterpretowania wywracaniem się programu przy pierwszym przerwaniu czy wywołaniu funkcji, chociaż pierwsze testy wykazały poprawność pracy układu. "

--
MDz

Awatar użytkownika
almatea
-
-
Posty:240
Rejestracja:12 gru 2003, o 17:02
Lokalizacja:Brzeszcze
Kontaktowanie:

Postautor: almatea » 4 lut 2007, o 23:12

Spróbuj po zaprogramowaniu mikrokontrolera odczytać jego Flasha i porównać z tym co masz po kompilacji. To raz.

De facto zawsze do programowania używam linii MOSI, MISO, SCK i Reset.

Dwa - ustawiłeś prawidłowo Fusebity?

Trzy - po setnym kroku A przyjmie wartość ujemną. Jak chcesz na port wyrzucić taką liczbę, bo z tego co się orientuję może ona przyjąć wartość od 0 do 255. De facto typ zmiennej który użyłeś (Byte) jest tylko i wyłącznie z tego zakresu.

Cztery - na początek zrób pętlę od 1 do 50 tak, a zamiast waitms55 wpisz Wait 1, no chyba, że Twoje oko jest tak sprawne, że zdąży zauważyć zmiany następujące po sobie co 55ms :599:


Pozdrawiam

MDz
-
-
Posty:365
Rejestracja:29 mar 2003, o 13:35
Lokalizacja:Warszawa
Kontaktowanie:

Postautor: MDz » 4 lut 2007, o 23:20

De facto zawsze do programowania używam linii MOSI, MISO, SCK i Reset.
Ale nie w ATMega128 (i bodajze 64). Ten µC programuje się z użyciem linii TxD0/RxD0 a nie SPI. Przeoczenie tego szczegółu jest chyba jednym z częściej popełnianych błędów.
Do porgramowania używam PonyProg2000, robię to przez linie PDI, PDO SCK i RESET.
I tak być powinno.
RXD0/(PDI) PE0,
TXD0/(PDO) PE1

--
MDz

Awatar użytkownika
almatea
-
-
Posty:240
Rejestracja:12 gru 2003, o 17:02
Lokalizacja:Brzeszcze
Kontaktowanie:

Postautor: almatea » 5 lut 2007, o 07:29

Tak, tak. Kolega MDz ma całkowitą rację.

Myślałem o PDI i PD0 a napisałem MISO i MOSI. Wzięło się to z tego, że pora była już troszkę późna biorąc pod uwagę wcześniejszą noc spędzoną przed TV i walce Adamka :)

Pozdrawiam

kenaJ
-
-
Posty:29
Rejestracja:13 lis 2006, o 22:31
Lokalizacja:Kraków

Postautor: kenaJ » 5 lut 2007, o 23:55

Dzięki za rady!!!

Odpowiem, co takiego robiłem:
- fusebitów nie ruszałem
- w datasched wyczytałem, że trzeba programować przez PDI, PDO; przez MISO, MOSI nie szło
- procesor programuję szeregowo z pomocą układu MM74HC244N/MC74HC244N
- PonyProg2000 weryfikuje (bardzo powoli) i daje komunikat, że jest OKI

Jeżeli mam za mały czas (55 ms) to i tak przy około 90-ciu zmianach będzie to trwało: 90 x 55 ms = 4,95 sek. To powinienem zauważyć. Pierwotnie startowałem od 0 i dodawałem 1 w pętli do 256.
Nie poszło, zacząłem więc kombinować.
Dla A = 0 wszystkie diody na porcie d świeciły (to mógł byc jakiś błąd), dla A = 255 żadna nie świeciła, stąd wziąłem inną wartość A, aby "zobaczyć ją binarnie" na porcie.
Teraz wiem, że program idzie do momentu pętli i dalej nie rusza.

Nie porównywałem jeszcze odczytu pamięci procesora z plikiem .hex skompilowanego programu. Napiszę, jak to zrobię.

Pisząc o "małym" programie miałem na myśli komunikat z BASCOMa 0 % użytej pamięci flash (w domyśle NIC). Dalej wyczytałem, że jest to 0,16 %. Po zaokrągleniu daje 0%.

Będę wdzięczny za rady i oczywiście sam też będę kombinoiwał :608: z przerwami na :598:. A wiem, że musi mi to ruszyć!!!

Pozdrawiam!!!

kenaJ
-
-
Posty:29
Rejestracja:13 lis 2006, o 22:31
Lokalizacja:Kraków

Postautor: kenaJ » 7 lut 2007, o 23:14

:597: :597: :597:

Przed chwilą ten mikroprocesor ruszył!!!

Dostałem sie do fusebitów i wyłączyłem "ATmega103 Compatibility Mode" oraz włączyłem "External Oscylator".

Było trochę kombinacji :608: , a teraz będzie zabawa z programwaniem :599: .

Wielkie dzięki za radę i pomoc!!!!!!!!!!

Pozdrawiam! :607:

Jutro trzeba to jakoś uczcić! :564:

kenaJ

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 18 gości