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

Rejestr przesuwny na ATmega - jak zaprogramować w Basic z 10 wyjściami i 1 wejściem?

fifcio13-13 09 Lis 2014 18:45 1614 6
REKLAMA
  • #1 14116228
    fifcio13-13
    Poziom 30  
    Posty: 1290
    Pomógł: 148
    Ocena: 306
    Witam,
    Chciałbym wykonać rejestr przesuwny, używając 10 wyjść oraz jednego wejścia do przesuwania bitów switchem. Proszę o podpowiedź co do komendy jakiej użyć oraz proszę o jakiś przykładowy program (kilka linijek, żeby zrozumieć zasadę tworzenia rejestru). Język do programowania Atmegi - Basic.
    Pozdrawiam
  • REKLAMA
  • #2 14122858
    bartosz.tarnowski
    Poziom 17  
    Posty: 418
    Pomógł: 26
    Ocena: 30
    Mnożenie przezd dwa przesuwa o jeden bit w lewo
    przykłądowo mając liczbę 16bitową:

    0111011100000011
    po pomnożeniu przez 2 otrzymamy
    1110111000000110
    po kolejnym pomnożeniu przez 2 otrzymamy
    1101110000001100
    Dzielenie przesuwa w drugą stronę czyli w prawo

    Mozesz użyć zmiennej 16bitowej a po przesunięciu wyłuskać interesujące 10bitow i przepisać na PORT wyjściowy
  • REKLAMA
  • #3 14125540
    fifcio13-13
    Poziom 30  
    Posty: 1290
    Pomógł: 148
    Ocena: 306
    Na pewno jest to dobry trop, jednak mi bardziej chodziło o to czy ATmega posiada gotową funkcję przypisaną jako rejestr przesuwny, ale widzę, że z tym będzie ciężko. Spróbuję metodą, którą podpowiedziałeś, choć wydaje mi się ona trochę okrężna.
  • REKLAMA
  • #4 14125676
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2206
    Ma funkcje ROL i ROR, rotujace bity przez flagę przeniesienia. Ale to będzie zawsze na około, bo mikrokontroler nie służy do takich rzeczy - do tego potrzebujesz rejestru przesuwnego, są takowe gotowe.
  • REKLAMA
  • #5 14125740
    fifcio13-13
    Poziom 30  
    Posty: 1290
    Pomógł: 148
    Ocena: 306
    Wiem, że są gotowe, ale chciałem zapytać bardziej doświadczonych, żeby wykorzystać możliwości samego procesora. Dziękuję za odpowiedzi.
  • #6 14125877
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    Możliwości procesora nie są szczególnie istotne. W każdym przyzwoitym języku programowania mamy operatory przesuwania w prawo i w lewo. Póki co operujemy w tym wątku na tak wysokim poziomie abstrakcji, że nie bardzo wiadomo, o co Autorowi chodzi. Domyślam się, że chodzi mu o mierne 4 linijki kodu w języku wysokiego poziomu, np. takie:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Ale tak na pewno, to ie wiadomo...
  • #7 14130878
    fifcio13-13
    Poziom 30  
    Posty: 1290
    Pomógł: 148
    Ocena: 306
    Dziękuję, ale jednak zdecydowałem się na rozwiązanie z dodatkowym rejestrem przesuwnym 74HC595. Pozwoli mi to zaoszczędzić ilość wyprowadzeń mikroprocesora.

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik poszukiwał sposobu na zaprogramowanie rejestru przesuwnego na mikrokontrolerze ATmega, wykorzystując 10 wyjść i 1 wejście do przesuwania bitów. Odpowiedzi sugerowały użycie operacji mnożenia i dzielenia do przesuwania bitów, a także funkcji ROL i ROR do rotacji bitów. Wskazano, że ATmega nie ma wbudowanej funkcji rejestru przesuwnego, co skłoniło użytkownika do rozważenia użycia zewnętrznego rejestru przesuwnego 74HC595, co pozwoliłoby zaoszczędzić wyprowadzenia mikrokontrolera.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA