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

Jak odpalić zegarek PCF8583 na Atmedze16 w asemblerze?

Kamiljo21 05 Maj 2020 19:15 783 10
  • #1 18671412
    Kamiljo21
    Poziom 10  
    Witam,
    potrzebuję odpalić zegarek PCF8583 na Atmedze16, niestety tylko w grę wchodzi asembler. Może ma ktoś procedury napisane w asemblerze któe działają?
  • #2 18671457
    excray
    Poziom 41  
    Procedury do czego?
  • #3 18671463
    Kamiljo21
    Poziom 10  
    Program napisany w asemblerze dla Atmegi16/32, ktory po I2C obsluguje PCFA. Odczytuje czas, zapisuje czas.
  • #4 18671956
    JarekC
    Poziom 32  
    Twoja prośba jest trochę zbyt lakoniczna.
    Potrzeba trochę więcej informacji np.
    -czy korzystasz z Atmel AVR Assebler2 czy gcc-assembler
    - jak mają być przekazywane parametry do funkcji
    czy będziesz np podawał adres zmiennych zawierających czas, czy raczej parametry będą w rejestrach
    - czy masz już gotową obsługę I2C
    - ...

    I przy okazji może byś wyjaśnił skąd wymaganie assemblera bo trochę to pachnie zadaniem domowym.
  • #5 18673756
    Kamiljo21
    Poziom 10  
    Korzystam z gcc asembler.
    Parametry do funkcji obojetnie jak. Poprostu przez rejester. To juz sobie dopasuje do projektu.
    Czas może byc w rejestrach ja juz sobie obrobie.
    Nie nie mam obslugi I2C.
    Mam z kolegą taki mały projekt - intelignetny sterownik. I po latach potrzebujemy dorzucic zegarek, dlatego sie zglosilem.
    Poprostu mam nadzieje ze ktos ma obsluge zrobiona i sie podzieli, Zadna praca domowa, prywatny hobbistyczny projekt, tyle ze napisany wiele lat temu i teraz pojawila sie potrzeba zeby cos do niego dorzucic.
  • #6 18674134
    bart-projects
    Poziom 29  
    Może to się Tobie do czegoś przyda.
    Piszesz program w jakimś jezyku wyższego poziomu typu C (bez optymalizacji) lub Bascom. Najlepiej jakieś małe porcje kodu. Kompilujesz i szukasz w wygenerowanych plikach takiego z końcówką *.obj
    Otwierasz Atmel Studio i ->File->Open->Open Object File For Debugging
    Oczywiście znajdujesz plik OBJ, jakoś tam nazywasz projekt, wskazujesz na jaki to procesor i otwiera się okno projektu.
    U góry obok nazwy wybranego procesora może pisać "None" -> klikasz w to i z rozwijanej listy wybierasz "Simulator"
    Szukasz przycisku "Start debugging and brake".
    Naciskasz ALT+8 i to włącza okno Dissasembly. To skrót. Da się też wolniej myszką ->Debug->Windows->Dissasembly
    Kiedy już widzisz okno Dissasembly jesteś w domu. Po prostu widzisz jak to kompilator obsługuje, które rejestry i jakimi instrukcjami....Każda instrukcja języka wyższego poziomu jest tłumaczona na ASM a tak naprawdę to jest opisem poprzedzajacym to co na podstawie tej instrukcji wygenerował kompilator.
  • #7 18674247
    tmf
    VIP Zasłużony dla elektroda
    bart-projects napisał:
    Kiedy już widzisz okno Dissasembly jesteś w domu. Po prostu widzisz jak to kompilator obsługuje, które rejestry i jakimi instrukcjami....Każda instrukcja języka wyższego poziomu jest tłumaczona na ASM a tak naprawdę to jest opisem poprzedzajacym to co na podstawie tej instrukcji wygenerował kompilator.

    Przedstawiłeś drogę maksymalnie na około. Po prostu wystarczy zaznaczyć opcję, aby gcc zostawiało plik asemblera, który jest generowany podczas kompilacji, lub zaglądnąć do pliku z rozszerzeniem lss w którym jest kod c i wygenerowane instrukcje asemblera.
    Kamiljo21 napisał:
    Korzystam z gcc asembler.

    Skoro tak, to dlaczego obsługa musi być w asmeblerze? Przecież skoro masz to w gcc, to można miksować asembler z c. Czyli bierzesz funkcje w c, dodajesz do projektu i tyle - po prostu wwołujesz je z asemblera, zgodnie z opisem ABI avr-gcc.
  • #8 18674498
    bart-projects
    Poziom 29  
    Szanowny użytkowniku forum Elektrody @tmf przedstawiłem drogę którą znam, sprawdziłem krok po kroku, jeszcze raz, pisząc odpowiedź.
    Dlatego chciałbym się odnieść do Pana wypowiedzi.

    <ciach>

    Wracając do plików stymulujących Atmelowski symulator.. no jest w końcu w którejś z Pana książek...a tego chyba też brakowało.

    To the point ->
    W okresie pandemii Helion miał/nie wiem czy nie ma nadal obniżkę i przeczytałem wszystkie Pana książki.

    O plikach stymulujących przeczytałem, ale o tym jak można podpatrzeć pracę kompilatora i jak kompilator jest sprytniejszy od tych "dojrzewających" asemblerowczów to nie widziałem. Proszę mnie poprawić linkiem do strony w książce to doczytam ;)

    Moja wypowiedź, z mojego poprzedniego posta, ma mieć wydźwięk taki, że można podejrzeć co kompilator generuje w ASM pisząc w języku wyższego poziomu, a to nie zawsze jest AVR GCC. Podpowiedź była uniwersalna i chyba nie była wcześniej opisana w Pana publikacjach co?

    Moderowany przez Marek_Skalski:

    Usunąłem zbędne komentarze pod adresem jednego z moderatorów. Proszę tego więcej nie robić. Jeżeli coś trzeba omówić, to proszę skorzystać z tego tematu: https://www.elektroda.pl/rtvforum/topic1545455.html

    3.1.5-3.1.7 Nie wysyłaj treści, które powodują celowo konflikty na forum i naruszają dobre obyczaje. Nie wyzywaj drugiej strony dyskusji, nawet jak posiadasz odmienne zdanie.

  • Pomocny post
    #9 18677932
    Tytus Kosiarski
    Poziom 16  
    Witam,

    @Kamiljo21 W załączeniu. Jest to cały program działającego do tej pory zegarka, który pisałem kilkanaście lat temu w Atmel Studio 4 (też jest plik *.APS, który wystarczy otworzyć w AS4), co prawda na Attiny25, ale port na Atmega16 nie powinien zająć dużo czasu (może nawet obejdzie się, nie mam czasu sprawdzać pinoutu). Interesujące dla Ciebie będą procedury: ODCZYTUJ_RTC, USTAW_ROK, USTAW_CZAS_DATE.

    Pozdrawiam, KT
  • #10 18692263
    Kamiljo21
    Poziom 10  
    Attiny25 posiada sprzetowy I2C? Czy programowales sam interfejs? Dzieki za kod, jak tylko bede mial chwile zobacze co tam jest. Pytam bo Atmega16 ma sprzetowy I2C.
  • #11 18692590
    Tytus Kosiarski
    Poziom 16  
    I2C robiłem na piechotę, nawet nie wykorzystałem USI. Widać to w procedurze ADRESOWANIE_SLAVE. ATtiny25 nie ma sprzętowego I2C.

    Pozdrawiam, KT
REKLAMA