ethernut i external memory



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl>
Subject: ethernut i external memory
Date: Thu, 14 Jul 2005 20:09:42 +0200


hej,
mam problem z inicjalizacją zewnętrznej pamięci, a własciwie urządzenia I/O
które jest podłączone do ethernuta (atmel mega128).
Ethernut ma gotowy interfejs Address/Data i dostaje A0-A15, D0-D7, /WR, /RD
i własciwie tyle mnie interesuje w chwili obecnej.
Z grubsza wygląda to jak na schemacie - link poniżej (sorry za jakość).
http://services.leon.com.pl/~marcin/enut.tif


Chce zapalać linijkę LED ale chce zeby była ona adresowana jak normalna
pamięć.
Zdaje się, że na schemacie nie popełniłem żadnego logicznego błędu - jeżeli
tak to proszę o poprawienie mnie.

procedura wysłania czegoś na adres 0xFFF8 jest u mnie taka:
.org $0
jmp RESET
.org $0046

RESET:
ldi r16,0b10000000
sts MCUCR,r16
ldi r16,0b00001100
sts XMCRA,r16
ldi r16,0b10000000
sts XMCRB,r16

ldi r27,0xff
ldi r26,0xf8
TEST:
ldi r16,0b11111111
st X,r16
; sts 0xfff8,r16
rcall TEST

niestety, efekt jest zawsze taki, żę diodki sobie pomrugują mniej lub
bardziej periodycznie. Niby można się w tym doszukać czegoś regularnego
ale nie mam najmniejszej możliwości panowania nad tym. Jedynie jeżeli SRE
jest 0 to jest ciemność. Pozatem co bym nie napisał lub napisał to efekt
jest
ten sam, chaotyczne mruganie/zatrzaskiwanie danych.

te LEDy to jest tak na początek, potem chce podpiąć LCD i może jeszcze coś,
ale chciałem móc coś wysłać na linijke, żeby sprawdzić ze to działa.
Niestety nie posiadam żadnego oscyloskopu aby móc stwierdzić co się dzieje
na poszczególnych liniach.
Chce to koniecznie móc adresować - taki kaprys ;-)

Ma ktoś jakieś wskazówki ?

Pozdrawiam,
Marcin




Poprzedni Następny
Wiadomość
Spis treści
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 20:25:03 +0200


Użytkownik "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl> napisał w wiadomości news:db69p9$old$2_at_nospam_polsl.gliwice.pl...
...
RESET:
ldi r16,0b10000000
sts MCUCR,r16
ldi r16,0b00001100
sts XMCRA,r16
ldi r16,0b10000000
sts XMCRB,r16

ldi r27,0xff
ldi r26,0xf8
TEST:
ldi r16,0b11111111
st X,r16
; sts 0xfff8,r16
rcall TEST
...

to jest caly kod czy cos wyciales ?

rcall na koncu spowoduje, ze stos sie wywali
powinno byc jmp albo na koncu procedury RET

a w ogole inicjalizujesz wskaznik stosu ?

--
Andrzej



Poprzedni Następny
Wiadomość
Spis treści
From: "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 20:31:14 +0200


> to jest caly kod czy cos wyciales ?

raczej cały, wyciełem tylko to:
.nolist
.include "m128def.inc"
.list


rcall na koncu spowoduje, ze stos sie wywali
powinno byc jmp albo na koncu procedury RET

wpisalem jmp i to samo

a w ogole inicjalizujesz wskaznik stosu ?

nie, ale zaraz po RESET: dopisałem
ldi r16,0x00
out SPH,r16
ldi r16,0x00
out SPL,r16

i nadal ten sam efekt...

Marcin



Poprzedni Następny
Wiadomość
Spis treści
From: Zbych <abuse_at_nospam_onet.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 20:40:21 +0200


Marcin Kuczera wrote:

nie, ale zaraz po RESET: dopisałem
ldi r16,0x00
^^^^^^^^^^^^^^^^^^
out SPH,r16
ldi r16,0x00
^^^^^^^^^^^^^^^^^
out SPL,r16

i nadal ten sam efekt...

Avr ma stos malejący, a nie rosnący. Obejrzyj sobie też mapę pamięci
procesora który stosujesz i zobacz co mieści się w początkowych
komórkach pamięci.
W pierwszym lepszym przykładowym programie możesz znaleźć coś takiego:

ldi r16,high(RAMEND) ;High byte only required if
out SPH,r16 ;RAM is bigger than 256 Bytes
ldi r16,low(RAMEND)
out SPL,r16

Poprzedni Następny
Wiadomość
Spis treści
From: "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 20:52:19 +0200


Avr ma stos malejący, a nie rosnący. Obejrzyj sobie też mapę pamięci
procesora który stosujesz i zobacz co mieści się w początkowych komórkach
pamięci.
W pierwszym lepszym przykładowym programie możesz znaleźć coś takiego:

ldi r16,high(RAMEND) ;High byte only required if
out SPH,r16 ;RAM is bigger than 256 Bytes
ldi r16,low(RAMEND) out SPL,r16

ok, zrobiłem.
Obecnie mój kod wygląda tak:

.nolist
.include "m128def.inc"
.list

.org $0
jmp RESET

.org $0046

RESET:

ldi r16,high(RAMEND)
out SPH,r16
ldi r16,low(RAMEND)
out SPL,r16


ldi r16,0b10000000
sts MCUCR,r16
ldi r16,0b00001100
sts XMCRA,r16
ldi r16,0b10000000
sts XMCRB,r16


ldi r27,0xff
ldi r26,0xf8

TEST:

ldi r16,0b11111111
st X,r16

; sts 0xfff8,r16

rjmp TEST

--------------------

niestety nadal sobie pomruguje...
zastanawiam się co się dzieje na magistrali adresowej/ danych kiedy
aplikacja nie odnosi się do niczego co tam jest zapięte.
W dokumentacji wyczytałem ze gdy odnosze się do rejestrów znajdujących się w
wewnętrznej pamięci, to adresy i dane są wystawiane,
ale nie działają /WR oraz /RD.

Tyle ze nawet gdy na końcu zrobie:
TEST1:
rjmp TEST1

to na magistrali danych cały czas zmieniają się dane i inne sygnały też nie
są niezmienne...
Może czegoś zapomniałem przy inicjalizacji ?

Marcin



Poprzedni Następny
Wiadomość
Spis treści
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 20:54:35 +0200


Użytkownik "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl> napisał w wiadomości news:db6c95$pfu$1_at_nospam_polsl.gliwice.pl...
TEST1:
rjmp TEST1

to na magistrali danych cały czas zmieniają się dane i inne sygnały też nie
są niezmienne...
Może czegoś zapomniałem przy inicjalizacji ?


moze masz watchdoga na stale wlaczonego ?
zobacz FUSE od watchdoga

--
Andrzej



Poprzedni Następny
Wiadomość
Spis treści
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 20:51:19 +0200


Użytkownik "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl> napisał w wiadomości news:db6b1l$p4s$1_at_nospam_polsl.gliwice.pl...

a w ogole inicjalizujesz wskaznik stosu ?

nie, ale zaraz po RESET: dopisałem
ldi r16,0x00
out SPH,r16
ldi r16,0x00
out SPL,r16


Przyczyna dziwnego zachowania sie LEDow raczej nie lezy w tym
ale stos ustawia sie na koniec RAMu
np 0x10FF koniec wewnetrznego RAM'u dla Atmega128

Przyznam, ze robilem cos bardzo podobnego i mi dzialalo bez problemu
Na pierwszy rzut oka nie widze co moze byc nie tak

Polaczenie sprawdzone ? Moze jakies wejscie ktorejs bramki wisi w powietrzu ?

Bramki i 74138 w wersji CMOS ? znaczy HC lub HCT ?

--
Andrzej



Poprzedni Następny
Wiadomość
Spis treści
From: "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 20:56:10 +0200


Przyznam, ze robilem cos bardzo podobnego i mi dzialalo bez problemu
Na pierwszy rzut oka nie widze co moze byc nie tak

Polaczenie sprawdzone ? Moze jakies wejscie ktorejs bramki wisi w
powietrzu ?

no chyba ze gdzieś się machnęłem.... szkoda że nie mam żadnego
analizatora...
najbardziej by mi odpowiadała praca z zegarem krok po kroku, ale raczej go
nie zatrzymam palcem ;-)

Bramki i 74138 w wersji CMOS ? znaczy HC lub HCT ?

wymieszane, to znaczy 74LS30, 74HC138, 74LS00, 74HCT573.. takie dostałem
ale wszystko leci z +5V, tak więc nie powinno to stanowić problemu.

Marcin



Poprzedni Następny
Wiadomość
Spis treści
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 21:00:58 +0200


Użytkownik "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl> napisał w wiadomości news:db6cgc$pgb$1_at_nospam_polsl.gliwice.pl...
...
wymieszane, to znaczy 74LS30, 74HC138, 74LS00, 74HCT573.. takie dostałem
ale wszystko leci z +5V, tak więc nie powinno to stanowić problemu.
...

sprobuj uproscic uklad, pomin dekoder adresowy
zostaw tylko zatrzask i negacje miedzy ~WR a wejsciem LE zatrzasku

w takim przypadku powinnien sie ztrzasnac stan przy zapisie dowolnej komorki RAMu
a adresie powyzej 0x10FF


--
Andrzej



Poprzedni Następny
Wiadomość
Spis treści
From: "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 21:35:21 +0200


sprobuj uproscic uklad, pomin dekoder adresowy
zostaw tylko zatrzask i negacje miedzy ~WR a wejsciem LE zatrzasku

w takim przypadku powinnien sie ztrzasnac stan przy zapisie dowolnej
komorki RAMu
a adresie powyzej 0x10FF

już się wnerwiłem i podłączyłem LE do +5V, a port A potraktowałem jako
zwykły port i wyświetlam na nim zdefiniowane oktety.
No i to działa.

Teraz chyba zaczne testować piny read, write oraz adresowe.....

Marcin



Poprzedni Następny
Wiadomość
Spis treści
From: "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 22:33:49 +0200


a z innej beczki, nie mogę np testować portu G tak jakbym był w
compatibility mode 103.
Tyle ze sam kompilator wywala mi błędy przy próbie wpisania czegoś do DDRG
!?

Jest na to jakiś myk ?

Marcin




Poprzedni Następny
Wiadomość
Spis treści
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 22:42:53 +0200


Użytkownik "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl> napisał w wiadomości news:db6i7g$rav$1_at_nospam_polsl.gliwice.pl...
a z innej beczki, nie mogę np testować portu G tak jakbym był w
compatibility mode 103.
Tyle ze sam kompilator wywala mi błędy przy próbie wpisania czegoś do DDRG
!?

Jest na to jakiś myk ?


jaki blad ?

a masz plik naglowkowy z definicjami rejestrow dla ATMEGA 128 ?
czy dla 103 ?

--
Andrzej



Poprzedni Następny
Wiadomość
Spis treści
From: "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 23:18:48 +0200


jaki blad ?

a masz plik naglowkowy z definicjami rejestrow dla ATMEGA 128 ?
czy dla 103 ?

.include "m128def.inc"

Tools\AvrAssembler\AppNotes\m128def.inc'
C:\ethernut\test_led\test_led.asm(15) : error : Illegal argument type or
count
C:\ethernut\test_led\test_led.asm(22) : error : Illegal argument type or
count

a o te 2 linijki się rozchodzi..

out DDRG,r16
out PORTG,r20

coś dziwne to wogóle mam, ustawiłem tryb zewnętrznej pamięci, i na wyjsciach
/WR oraz /RD mam cały czas stan niski.
wg dokumentacji powinien być wysoki stan na tych wyjsciach o ile nic nie
wysyłam na magistrale... niestety jest cały czas stan niski...

aplikacja robi tyle:
.nolist
.include "m128def.inc"
.list

.org $0
jmp RESET

.org $0046

RESET:

ldi r16,high(RAMEND)
out SPH,r16
ldi r16,low(RAMEND)
out SPL,r16

ldi r16,0b10000000
sts MCUCR,r16
ldi r16,0b00001100
sts XMCRA,r16
ldi r16,0b10000000
sts XMCRB,r16

ldi r27,0xff
ldi r26,0xff

TEST:
rjmp TEST


skoro nic nie wysyłam to /WR powinien milczeć jak zaklęty w stanie
wysokim..... a jest chyba w powietrzu, bo 1k rezystor do +5V zaświeca
LED'a...

Marcin



Poprzedni Następny
Wiadomość
Spis treści
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: ethernut i external memory
Date: Fri, 15 Jul 2005 00:05:00 +0200



Użytkownik "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl> napisał w wiadomości news:db6krr$s54$1_at_nospam_polsl.gliwice.pl...
jaki blad ?

a masz plik naglowkowy z definicjami rejestrow dla ATMEGA 128 ?
czy dla 103 ?

.include "m128def.inc"

Tools\AvrAssembler\AppNotes\m128def.inc'
C:\ethernut\test_led\test_led.asm(15) : error : Illegal argument type or
count
C:\ethernut\test_led\test_led.asm(22) : error : Illegal argument type or
count

a o te 2 linijki się rozchodzi..

out DDRG,r16
out PORTG,r20
...


te rejstry juz nie sa w przestrzeni IO

sprobuj tak:

ldi 16, 0xFF
sts PORTG, r16


--
Andrzej



Poprzedni Następny
Wiadomość
Spis treści
From: Zbych <abuse_at_nospam_onet.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 20:33:38 +0200


Marcin Kuczera wrote:

procedura wysłania czegoś na adres 0xFFF8 jest u mnie taka:
..org $0
jmp RESET
..org $0046

RESET:
[ciach]
TEST:
[ciach]
rcall TEST
^^^^^^^^^^^^^^^^^^^

A gdzie ustawiasz stos ? Po drugie w nieskończonej pętli odkładasz adres
powrotu na ten niezainicjalizowany stos. Zamień rcall na rjmp.

Ma ktoś jakieś wskazówki ?

Poprzedni Następny
Wiadomość
Spis treści
From: nbs <nbs_r_at_nospam_gazeta.pl>
Subject: Re: ethernut i external memory
Date: Sat, 16 Jul 2005 01:14:01 +0900


Marcin Kuczera wrote:
hej,
mam problem z inicjalizacją zewnętrznej pamięci, a własciwie urządzenia I/O
które jest podłączone do ethernuta (atmel mega128).
Ethernut ma gotowy interfejs Address/Data i dostaje A0-A15, D0-D7, /WR, /RD
i własciwie tyle mnie interesuje w chwili obecnej.
Z grubsza wygląda to jak na schemacie - link poniżej (sorry za jakość).
http://services.leon.com.pl/~marcin/enut.tif

Zbramkuj (na samym koncu) wyjscie dekodera z /WR (LE = /Y0 NOR /WR) zeby
wyciac glitche. Nie wiadomo co z niego wylazi.

\R.

Poprzedni Następny
Wiadomość
Spis treści
From: "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl>
Subject: Re: ethernut i external memory
Date: Fri, 15 Jul 2005 18:39:53 +0200


zdaje się, że rozwiązałem problem

miałem:
ldi r16,0b10000000
sts MCUCR,r16

poprawiłem na:
ldi r16,0b10000000
out MCUCR,r16

i działa...
Marcin



Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: ethernut i external memory
Date: Fri, 15 Jul 2005 21:23:02 +0200


On Fri, 15 Jul 2005 18:39:53 +0200, Marcin Kuczera wrote:
zdaje się, że rozwiązałem problem

miałem:
ldi r16,0b10000000
sts MCUCR,r16

poprawiłem na:
ldi r16,0b10000000
out MCUCR,r16

i działa...

Bo o ile pamietam to w obu instrukcjach adresy maja byc inne.

J.