Witam.
Uklad ATMega128
wylaczony (nie ustawiony bit) trybu zgodnosci z ATMega103
Projekt:
Port G ustawiony jako wejscie Config Portg = &B00000000
Wlaczone podciagniecie rezystorow Portg = &B11111111
Pod pin 0, 1 i 2 Portu G podlaczone przyciski monostabilne (zwarcie do masy)
Problem:
Uklad nie widzi przycisniecia ktoregokolwiek przycisku.
W symulacji pod Bascomem:
Prawidlowo jest wyswietlany stan PORTG (czerwone diody) i wartosc rejestru PORTG (+ ewentualne testy wlacz/wylacz poszczegolnych bitow)
W przypadku stanu PINow (zielone diody) ustawienie lub wylaczenie bitu nie zmienia stanu rejestru PING
Zmienia sie za to zgodnie z bitami stan rejestru OCR3CH.
W ramach poszukiwan okazalo sie ze w przypadku kompilacji i symulacji dla ukladu 90CAN128 ($regfile=m128CAN.dat)
ktorego z innych powodow zastosowac nie moge piny Portu G dzialaja tak jak nalezy.
Analizujac (regfile) przestrzen rejestrow obydwu ukladow wsrod roznic znalazlem tez to ze w przypadku 90CAN128 rejest stanu PING lezy w przestrzeni "normalnych" rejestow a w przypadku ATMega128 w przestrzeni rejestrow rozszerzonych.
Wynika z tego ze bascom nie potrafi symulowac wpisow dotyczacych gornych rejestrow lub jest blad w dokumentacji procesora i nie moze on jednak dzialac jako normalne porty (w co uwierzyc mi jest trudno).
Czy ktos wie jak wyjasnic ten problem i jak go rozwiazac ???
Dla przykladu mozna uruchomic:
$regfile = "m128def.dat"
Config Portg = &B00000000
Portg = &B11111111
Do
Print "PORTG=" ; Portg ; "PING=" ; Ping ; " "
Loop
Zmiana w symulatorze dowolnego pinu portu G (zielone diody IG) nie zmienia wartosci rejestru PING
Pozdrawiam.
Pepe
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ęATMega128 port G - czy to blad
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Według mojej wiedzy i skromnego doświadczenia, przez port G nie "przepchniesz" całego bajta, lecz tylko 5 bitów.
Zaglądałem do 'dataszetu' i jest tam wyraźnie namalowane, że port G ma tylko 5 linii: PG0 ... PG4.
Konieczna będzie modyfikacja programu bądź przejście na inny port.
Powodzenia!
Pozdrawiam.
Zaglądałem do 'dataszetu' i jest tam wyraźnie namalowane, że port G ma tylko 5 linii: PG0 ... PG4.
Konieczna będzie modyfikacja programu bądź przejście na inny port.
Powodzenia!
Pozdrawiam.
Witam.
Nieistniejace bity sa przez Bascoma pomijane, co by gdyby probowalem tez z innymi ilosciami bitow z dopelnieniem zerami itp itd.
Wydaje mi sie ze jest to dotychczas nie poprawiony blad w Bascomie.
Biorac np Mega128CAN.def w symulatorze chodzi dobrze z tym ze w CANie rejestr przechowujacy stan PING lezy w przestrzeni nizszej IO a w "zwyklym" 128 w IOEXT.
Pomysly ???
Pozdrawiam.
Nieistniejace bity sa przez Bascoma pomijane, co by gdyby probowalem tez z innymi ilosciami bitow z dopelnieniem zerami itp itd.
Wydaje mi sie ze jest to dotychczas nie poprawiony blad w Bascomie.
Biorac np Mega128CAN.def w symulatorze chodzi dobrze z tym ze w CANie rejestr przechowujacy stan PING lezy w przestrzeni nizszej IO a w "zwyklym" 128 w IOEXT.
Pomysly ???
Pozdrawiam.
Znalazłem coś takiego w Helpie w części Mixing ASM and BASCOM :Translation :
In version 1.11.7.5 of the compiler some mnemonics are translated when there is a need for.
For example, SBIC will work only on normal PORT registers. This because the address may not be greater then 5 bits as 3 bits are used for the pin number(0-7).
SBIC worked well in the old AVR chips(AT90Sxxxx) but in the Mega128 where PORTG is on a high address, it will not work.
You always needs a normal register when you want to manipulate the bits of an external register.
For example :
LDS r23, PORTG ; get value of PORTG register
SBR r23,128 ; set bit 7
STS PORTG, R23
The mnemonics that are translated by the compiler are : IN, OUT, SBIC, SBIS, SBI and CBI.
The compiler will use register R23 for this. So make sure it is not used.
Czyli że BASCOM ma ograniczenia może odpowiednio spreparowana wstawka asemblera pomoże.
In version 1.11.7.5 of the compiler some mnemonics are translated when there is a need for.
For example, SBIC will work only on normal PORT registers. This because the address may not be greater then 5 bits as 3 bits are used for the pin number(0-7).
SBIC worked well in the old AVR chips(AT90Sxxxx) but in the Mega128 where PORTG is on a high address, it will not work.
You always needs a normal register when you want to manipulate the bits of an external register.
For example :
LDS r23, PORTG ; get value of PORTG register
SBR r23,128 ; set bit 7
STS PORTG, R23
The mnemonics that are translated by the compiler are : IN, OUT, SBIC, SBIS, SBI and CBI.
The compiler will use register R23 for this. So make sure it is not used.
Czyli że BASCOM ma ograniczenia może odpowiednio spreparowana wstawka asemblera pomoże.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 51 gości