logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Dlaczego w symulacji BASCOM dla ATMega88 widzę mniej rejestrów I/O?

30 Lip 2007 11:11 4418 33
REKLAMA
  • #1 4128166
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • Pomocny post
    #2 4129495
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Nie wiem co masz za Bascoma , ale w pełnej wersji v1.11.8.7 symulator pokazuje w zakładce I/O 60 rej. dla m8 i ... 78 dla m48/88/168.
    Jeśli chciałbyś poobserwować rejestr , którego nie ma w zakładce I/O, to zawsze możesz wpisać go do ... Variables.

    Piotrek
  • REKLAMA
  • Pomocny post
    #3 4129730
    ZbeeGin
    Poziom 39  
    Posty: 4311
    Pomógł: 602
    Ocena: 447
    atom1477 napisał:
    Dlaczego? Czy jednak ATMega48 jest uboszszy od ATMega88 nie tylko pod względem mniejszej pamięci?

    Pomijając już ograniczenia BASCOM-a w starszych wersjach, to sprzętowo połowa rejestrów MEGA88/48/168 znajduje się w innej przestrzeni adresowej. Dlatego dostęp do nich nie jest możliwy przez klasyczne IN / OUT.

    Również DEMO w wersji 1.11.8.7 pokazuje pełną gamę rejestrów.
  • #4 4132120
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #5 4132276
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    W AVRStudio z kolei nie są zdefiniowane niektóre nazwy symboliczne i trzeba ich adresy wpisywać, inaczej kompilator burzy się, że takowaych nie ma. Obecnie produkowane M48/88 róznia sie tylko iloscia pamięci (wg. datasheet)
  • #6 4141470
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • Pomocny post
    #7 4142260
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    Chwilunia, nie mieszaj do tego ATMegi8 Bo na pewno ona się znacznie różni.
    M48/M88 różnią się tylko wielkośćią pamięci więc jeśli używasz środowiska gdzie deklaruje sie przydzielenie poszczególnych pamięci do określonych ról to też jest to ważny parametr (gdy program jest spory, używasz tablic itp)
    Mega8 jest starsza od M48 i nie posiada niektórych rejestrów sterujących. M88 posiada np. dodatkowy zegar wewnętrzny 128kHz. Używając AVRStudio pamiętaj ze dla tego procka są schrzanione nazwy niektórych rejestrów sterujących i lepiej odwoływać się do bezpośredniego adresu niż do nazwy rejestru by uniknąć 2-dniowych poszukiwań przyczyny problemu
    Pozdrawiam
  • #8 4143099
    ZbeeGin
    Poziom 39  
    Posty: 4311
    Pomógł: 602
    Ocena: 447
    Ch.M. napisał:
    Używając AVRStudio pamiętaj ze dla tego procka są schrzanione nazwy niektórych rejestrów sterujących i lepiej odwoływać się do bezpośredniego adresu niż do nazwy rejestru by uniknąć 2-dniowych poszukiwań przyczyny problemu

    Jakiś przykład może kolega podać? Nie spotkałem się jeszcze z takim zachowaniem AVR Studio. Jeśli jednak taka sytuacja istnieje to nie jest to wina AVR Studio tylko, źle przygotowanych przez ATMELa plików include.
  • #9 4157684
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    No ja nieraz sie spotkałem przy mniej popularnych prockach z tym, ze z palca adres trzeba było wpisywać, bo nazwy po prostu nie znał albo nie reagował na nią. Ostatnio w M88 z któryms z rejetrów nastawy przerwania od INT1 (ale pewności nie mam) Dodatkowo wciaz mam problemy z nastawami rejetrów sterujących trybami pracy timerów. Albo nie rozumiem dokumentacji albo nie da sie ustawić dowolnej czestotliwosci PWM (da sie regulowac tylko preskalerem i liczba bitów 8,9,10 do których wartosc maksymalna jest zliczana) Natomiast nie moge wpisac dowolnej wartosci maksymalnej :( Moze AVR studio nie działa tak jak trzeba z winych złych bibliotek include... kto wie
    Pozdrawiam
  • #10 4189252
    ZbeeGin
    Poziom 39  
    Posty: 4311
    Pomógł: 602
    Ocena: 447
    Cytat:
    Moze AVR studio nie działa tak jak trzeba z winych złych bibliotek include... kto wie

    To nie wina złych bibliotek. Pewnych rzeczy nie da się zasymulować AVR Studio. A największa bolączką są właśnie liczniki. O ile praca jako licznik, PWM w trybie normalnym, CTC działa poprawnie; to FastPWM, tryb PWM ze skróceniem cyklu, przechwytywanie przez ACI już nie działają poprawnie. :( Być może kiedyś zostanie to wszystko poprawione.
  • #11 4189427
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    No coż dla M32 te funkcje ponoć działają w symulatorze ale chyba tylko dla niego i bardziej popularnych. Nie zawsze mam czas i ochote podłączac oscyloskop by sprawdzić kto sie myli: ja symulator czy pdf

    Nie wiem jak Wam ale mi nowa wersja AWRStudio nie za specjalnie leży, ładniej wygląda ale straciła na funkcjonalnosci. np nie jest nigdzie wyświetlana liczba cykli procesora.
  • #12 4189477
    ZbeeGin
    Poziom 39  
    Posty: 4311
    Pomógł: 602
    Ocena: 447
    Ch.M. napisał:
    Nie wiem jak Wam ale mi nowa wersja AWRStudio nie za specjalnie leży, ładniej wygląda ale straciła na funkcjonalnosci. np nie jest nigdzie wyświetlana liczba cykli procesora.


    :arrow: View -> Toolbars -> Processor, a tam Cycle counter.
  • REKLAMA
  • #13 4196126
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    Dzieks :)
  • #14 4302553
    Konto nie istnieje
    Poziom 1  
  • #15 4302681
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    U mnie też pojawia się czasami efekt "pamięci" który opisałeś powyżej. Kiedyś AVRStudio działało dużo stabilnieji i nie wywalało mi się kilka razy dziennie... chyba to wina windowsa i autoupdate, a może Jtaga... w każdym razie staraj się unikać używania symboli funkcji arytmetycznych czy logicznych. Zastąp OR wyrażeniem ORR albo _OR czy też OR_ i po sprawie, a jeszcze lepiej i przejrzystej zastąp takim czymś "UCSRA_OR"

    Jaki błąd Ci się wyświetla?
    Czemu nie zastosujesz gotowego układu USB<-->RS232 ?
  • #16 4302716
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #17 4302847
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    wywal starsza połówkę np przesuwając rejestr w lewo czterokrotnie komendą - Logical Shift Left a następnie przesuwając w prawo
    LDI działa tylko na stałych 8bitowych

    P.S. Bardziej po polskiemu to się "używa" niż "urzywa"
  • #18 4305587
    Konto nie istnieje
    Poziom 1  
  • #19 4305633
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    No wiesz w ASMie nie władujesz 16bitowej liczby do rejestru 8mio bitowego dlatego napisałem 4, a dopiero później zobaczyłem, że własnie to próbujesz zrobić... Generalnie nie używam makr z prostego względu: nie do końca jestem pewien jak je napisać (np. takie podstawiające pod nazwę symboliczną inny rejestr lub stała (na zasadzie .define .undefine tyle, że dla komendy .equ)
    Dopiero się uczę (już chyba rok) ASMu :)
    Niedługo będe musiał spróbować C, by przyśpieszyć pisanie programów, ale na razie mam awersję do wysokopoziomowego programowania :)
    Pozdrawiam i dzieki za pkt.
  • #20 4305677
    Konto nie istnieje
    Poziom 1  
  • #21 4305745
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    No dobrze, a powiedz mi, czy komendy Bascomowe to nie jest przypadkiem algorytm C? Z tego co widzę, to posiada te same nazwy komend (np. if, ifelse etc) Nie widzę innego powodu by mieszać języki jak ten, by pisać szybciej. Lubię rozgryzać powoli problem w ASM ale często brak mi na to czasu :(
  • #22 4305787
    Konto nie istnieje
    Poziom 1  
  • #23 4305895
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    Ale te same komendy masz do dyspozycji w asemblerze v.2 czy v.2.1 np.:
    #define
    #elif
    #else
    #endif
    #error
    #if
    #ifdef
    #ifndef
    #include
    #message

    .... tylko nie bardzo wiem jak z nich korzystać :/ przykłady w helpie są ubogie
  • #24 4305916
    Konto nie istnieje
    Poziom 1  
  • #25 4308768
    ZbeeGin
    Poziom 39  
    Posty: 4311
    Pomógł: 602
    Ocena: 447
    Ch.M. napisał:
    Ale te same komendy masz do dyspozycji w asemblerze v.2 czy v.2.1 np.:
    #define
    #elif
    #else
    #endif
    #error
    #if
    #ifdef
    #ifndef
    #include
    #message

    .... tylko nie bardzo wiem jak z nich korzystać :/ przykłady w helpie są ubogie

    Ubogie są, gdyż naprawdę nie trzeba tam dużo wyjaśniać. Te komendy służą do warunkowej kompilacji programu i w zasadzie pozwalają na wyłączanie lub włączanie pewnych fragmentów programu na podstawie pewnych zależności. Można wtedy stworzyć uniwersalny kod, który w zależności od procesora docelowego pewne aspekty będzie wykonywał inaczej w związku z możliwościami danego procesora.
    Odstępstwem od tego jest #error i #message które służą wyłącznie w celach informacyjnych. Pokazują tekst na konsoli i ewentualnie przerywają proces kompilacji.
  • #26 4314634
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #27 4314659
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    Producent nie gwarantuje, ze dany egzemplarz rozkręci się bez błedów do 24MHz ale gwarantuje prawidłową pracę przy 16 czy 20MHz (zależnie od położenia kwarcu wyciętego z wafla) Zupełnie jak z prockami INTELa architektury X86. Jaki egzemplarz Ci się trafi tyle z niego wyciśniesz... Prawdopodobnie weszły nowe normy w między czasie produkcji i musieli do nich zmienić datasheety
    Pozdrawiam
  • #28 4314837
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #29 4314847
    barytek
    Poziom 23  
    Posty: 787
    Pomógł: 18
    Ocena: 58
    Tylko szczerze!!! Komu chce się takie długie posty czytać???
  • #30 4314848
    Konto nie istnieje
    Poziom 1  

Podsumowanie tematu

✨ W dyskusji poruszono problem ograniczonej liczby rejestrów I/O widocznych w symulacji BASCOM dla procesora ATMega48 w porównaniu do ATMega88. Wyjaśniono, że w pełnej wersji BASCOM (np. v1.11.8.7) symulator pokazuje więcej rejestrów (około 78 dla ATMega48/88/168), a ograniczenia w starszych wersjach lub wersjach demo mogą powodować wyświetlanie mniejszej liczby rejestrów. Dodatkowo, część rejestrów ATMega88/48/168 znajduje się w innej przestrzeni adresowej, co utrudnia ich dostęp przez klasyczne instrukcje IN/OUT i może wpływać na widoczność w symulatorze. Wskazano, że ATMega48 i ATMega88 różnią się głównie wielkością pamięci, a nie zestawem rejestrów czy timerów, choć ATMega8 jest starszym modelem z innym zestawem rejestrów i funkcji. Omówiono także problemy z kompatybilnością BASCOMa i AVRStudio, w tym błędy kompilacji wynikające z konfliktów słów kluczowych i niepełnych definicji rejestrów w plikach include. Poruszono temat taktowania procesorów ATMega88, gdzie wcześniejsze datasheety wskazywały na możliwość pracy do 24MHz, jednak nowsze wersje nie potwierdzają tej wartości, a faktyczna maksymalna częstotliwość zależy od egzemplarza i napięcia zasilania. Wskazano, że BASCOM ma problemy z poprawną konfiguracją timerów w ATMega88, co wynika z różnic w rejestrach sterujących (np. TCCR0A i TCCR0B zamiast TCCR0). Dyskusja zawierała także uwagi dotyczące programowania w assemblerze i C, optymalizacji kodu oraz ograniczeń symulatorów AVR w emulacji niektórych funkcji timerów i PWM.
Wygenerowane przez model językowy.
REKLAMA