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

Zamiana atmega48 na atmega8

SylwekK 21 Lip 2011 11:54 1143 8
REKLAMA
  • #1 9741686
    SylwekK
    Poziom 32  
    Robię programik w BASCOM na Atmega48 i zabrakło mi ciut pamięci na testowe opcje, których później już nie będę potrzebował. Pomyślałem, że wstawię atmega8L (mam takich kilka, a nie mam żadnego 88), bo żadnych bezpośrednich odwołań do rejestrów nie ma w programie. W zasadzie to podstawowe funkcje tylko wykorzystuje wspólne dla obu uC... i pojawił się problem. Zaznaczam, że na atmega48 wszystko działa jak należy, a na mega8 ciągle mam zera na portach odczytu przycisków (porty B.0, B.7, D.5, D4)

    Fragment kodu konfigurującego porty:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Czyżby mi coś umknęło?
    Z fusów w mega8 przestawiłem tylko zegar na 8Mhz. Informację o stanie portów wyświetliłem sobie na LCD bo obsługa wyświetlacza działa, a program skacze w jedno z miejsc, w które powinien skoczyć po wciśnięciu przycisku (z portu B) i tam właśnie wstawiłem malutki fragment programu, który wyświetla mi stany przycisków i niektórych zmiennych (dla pewności).
    Program zachowuje się jakby wszystkie przyciski były wciśnięte (tak też zresztą pokazuje mi wyświetlacz). Kiedy powróciłem do mega48 wszystko było ok...
    Dodam, że pierwszy raz(!) bawię się atmega8 mimo, że większość od niej zaczynała i być może czegoś o niej nie wiem chociaż przewertowałem już trochę dokumentacji na jej temat.
    Aha, kiedy wziąłem drugą atmegę8 efekt był identyczny.
  • REKLAMA
  • #2 9742312
    manekinen
    Poziom 29  
    Mnie się nie podoba ten fragment:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Ten kod niekoniecznie włączy pullupy.
    Spróbuj tak:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Bo innych powodów do nie działania nie widzę, chyba że gdzieś dalej w kodzie jest coś pomieszane?
  • REKLAMA
  • Pomocny post
    #3 9742435
    xury
    Specjalista automatyka domowa
    Dokładnie tak jak kolega mankinen napisał. To jest jedna z pułapek przy stosowaniu aliasów.
    Zazwyczaj z tego powodu nie stosuję aliasów, a jak już to zawsze daję aliasy podwójnie np.
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Pierwszy kiedy mam coś odczytać z pinu, a drugi gdy zapisuję jego stan.
  • REKLAMA
  • #4 9742918
    SylwekK
    Poziom 32  
    Kurcze ciepło, ciepło... teraz już program sam nie skacze do dalszej części, a odpowiadał za to ten fragment:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    teraz faktycznie jest tam jedynka w spoczynku ale też nie reaguje na przycisk (?)
    Spróbowałem tak:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    ...i bez efektu - brak reakcji na przycisk...

    normalnie jestem w szoku bo to wszystko na amtega48 działa.
    Dalsza część kodu raczej nie istotna bo on już w tym miejscu nie pracuje jak powinien i dalej po prostu nie idzie...
  • REKLAMA
  • Pomocny post
    #5 9742957
    manekinen
    Poziom 29  
    Reakcja na przycisk na pewno jest. Wstaw sobie tam jakiegoś wait'a i mignij diodką. Może po prostu program wykonuje się kilka lub kilkaset razy po naciśnięciu przycisku i nie zauważasz działania. Najlepiej załącz całość, inaczej nic nie wywróżymy. No i schemat.

    Dziwne jest to że poprzedni kod działał na Atmega48. Jaką masz wersję bascoma? Może czas zaktualizować? Może w pliku dat jest jakiś błąd.
  • #6 9743130
    SylwekK
    Poziom 32  
    Wydzielę całkowicie ten fragment i porobię trochę testów, bo jest to co najmniej zdumiewające. Wymieniałem już dużo bardziej skomplikowany kod między różnymi prockami i NIGDY nie miałem takiego czegoś.
    Też podejrzewam, że to coś z plikiem m8def.dat może być nie tak, a bascoma mam 2.0.4.0 full wersję prosto od MSC. Myślę zastosować jakąś bibliotekę ze starszej wersji i sprawdzić co się będzie działo (w końcu atmega8 do najnowszych nie należy). Schematu też nie mam bo wszystko na płycie łączone (prototyp tworzę). Wszystkie napięcia i masy oczywiście dołączone nic nie pomijałem. Poza tym w układzie parę diodek LED, mostek z silnikiem krokowym (które o dziwo działają!) i te nieszczęsne przyciski podłączone do masy. Czyżby współdzielenie portów coś mieszało normalnie dziwne i tyle...
  • #7 9743304
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #8 9743409
    danthe
    Poziom 30  
    Witam!

    Ja zwykle robię od razu tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    W ten sposób łączę konfig i ustawienie pullup .
    W języku BASIC nie zaleca się oddzielania instrukcji dwukropkiem, zamiast:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Lepiej zapisać tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Zauważyłem że BASCOM miewa różne kaprysy, więc staram się nie kombinować za bardzo.
  • #9 9743766
    SylwekK
    Poziom 32  
    Poszło wreszcie! Po podmianie m8def.dat z wersji demo 1.11.9.8 i zadziałało ale nie obeszło się bez zmian. Otóż należało uwzględnić przede wszystkim to o czym wspomniał na początku kol. manekinen czyli błąd w ustawianiu bitu przez pinx.y . Same aliasy nie miały większego znaczenia w dalszej części programu. Program się skompilował i działa tak jak na atmeg48 (cały czas się dziwię, że tam wszystko działało po staremu...).

    Oczywiście nie był bym sobą gdybym nie brnął dalej w temat i...
    kolejna zmiana czyli przeniesienie instrukcji set po dwukropku do następnej linii (porada kol. danthe) już zaowocowała tym, że program się skompilował i felerny fragment zadziałał na pierwotnej wersji m8def.dat (czyli tej z 2.0.4.0). Nie sprawdzałem wszystkich fragmentów bo za dużo tego jest ale wydaje się, że sprawa dwukropka jest wybiórcza, bo przed wejściem do badania klawiszy było jeszcze kilka innych instrukcji dzielonych dwukropkiem i z tymi problemu nie było. Nie używam go często ale czasem rozjaśnia mi to kod przy analizie - będę musiał z tym uważać na przyszłość :)

    Aha i jeszcze małe info. Po przeniesieniu wspomnianej definicji .dat z wersji demo do wersji pełnej program normalnie się kompiluje mimo przekroczenia 4kb. Wydaje się to oczywiste ale w praktyce producenci w swoich programach każdy moduł potrafią indywidualnie zabezpieczyć...

    Dzięki wszystkim za zainteresowanie :)
REKLAMA