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

Jak wyprowadzić 8 bitów szeregowo na jednym wyjściu ATmega8?

esiu888 26 Mar 2006 23:37 1443 12
REKLAMA
  • #1 2461411
    esiu888
    Poziom 11  
    Posty: 5
    czy jest możliwość wyprowadzenia 8 bitów z atmega8 szeregowo na jednym wyjsciu?
  • REKLAMA
  • #2 2461540
    Hornet60
    Poziom 18  
    Posty: 332
    Pomógł: 13
    Ocena: 15
    Nie wiem jak w avr-ach, ja dla 89c51 pisałem tak (bascom):

    dim dana as byte
    Dim n As Byte
    Dim n2 As Byte

    For n = 0 To 7
    n2 = 7 - n
    P1.0 = Dana.n2
    Next n
  • REKLAMA
  • #3 2461779
    Nawigator
    Poziom 33  
    Posty: 1923
    Pomógł: 167
    Ocena: 160
    Jest taka możliwość, a nawet kilka.
    N.
  • REKLAMA
  • #4 2462768
    jacobsek
    Poziom 22  
    Posty: 419
    Pomógł: 61
    Ocena: 24
    Użyj najlepiej instrukcji shiftout .
    Przeznaczenie:

    Wsuwa ciąg bitów do zmiennej.

    Składnia:

    SHIFTIN pin_danych , pin_zegarowy , zmienna , opcje [, il_bitów , opóźnienie ]

    gdzie:

    pin_danych nazwa końcówki portu będącą linią wejściową strumienia bitów,
    pin_zegarowy nazwa końcówki portu będąca linią zegarową,
    zmienna zmienna do której wsuwane będą bity,
    opcje opcje,
    il_bitów ilość wsuwanych bitów,
    opóźnienie opóźnienie w mikrosekundach między kolejnymi bitami.
    Więcej informacji w helpie.
    (jeśli w grę wchodzi bascom)

    Dodano po 1 [minuty]:

    Sory to właściwa instrukcja, tamta przyjmuje dane

    SHIFTOUT pin_danych , pin_zegarowy , zmienna , opcje [, il_bitów , opóźnienie ]

    gdzie:

    pin_danych nazwa końcówki portu będącą linią wyjściową strumienia bitów,
    pin_zegarowy nazwa końcówki portu będąca linią zegarową,
    zmienna zmienna z której wysuwane będą bity,
    opcje opcje,
    il_bitów ilość wysuwanych bitów,
    opóźnienie opóźnienie w mikrosekundach między kolejnymi bitami.
  • #5 2462778
    Andy74
    Poziom 25  
    Posty: 525
    Pomógł: 103
    Ocena: 24
    W Bascom AVR można skorzystać z gotowego polecenia SHIFTOUT => patrz plik pomocy.
    A na przyszłość jeśli pytasz, to podaj chociaż w czym programujesz jeśli nie chcesz dostawać odpowiedzi jak powyżej. Jakie pytanie - taka odpowiedź :wink:

    edit: jacobsek - ubiegłeś mnie o sekundy...:D
  • #6 2462821
    jacobsek
    Poziom 22  
    Posty: 419
    Pomógł: 61
    Ocena: 24
    :-)
  • #7 2464916
    esiu888
    Poziom 11  
    Posty: 5
    a jakby to wyglądało w C(AVR studio lub winAVR)? moja wina mało precyzyjne pytanie:|
  • #8 2468404
    ZbeeGin
    Poziom 39  
    Posty: 4324
    Pomógł: 602
    Ocena: 455
    :!: Kolego jacobsek, jak już cytujesz to rób to poprawnie i podaj tego źródło. :evil: Przypominam, że na 1 stronie jest Mój copyright.
  • REKLAMA
  • #9 2471347
    esiu888
    Poziom 11  
    Posty: 5
    Znalazłem wyjście TXD które wysyła szeregowo dane. Tylko niewiem jak je zaprogramować(C) zeby wysyłał 8 bitów.
  • #10 2473685
    mzielin
    Poziom 22  
    Posty: 483
    Pomógł: 31
    Ocena: 16
    esi888 - Musisz teraz dokładniej określić w jakim formacie chcesz wysłać te 8 bitów na wyjście. Jaka polaryzacja, impulsy ujemne, czy dodatnie szpilki... USART dokłada zawsze bit startu "0", może to go dyskwalifikować. Lub podaj do jakiego urządzenia te 8 bitów trafia, wtedy możemy się domyśleć, jak Ci pomóc.
  • #11 2474223
    esiu888
    Poziom 11  
    Posty: 5
    uP ma wsylac te 8 bitow do sterownika 12 serwomechanizmow. Wysterowanie jednego serwa przebiega za pomoca 4 bajtow czyli musze podac mu w ciagu 4x8bitow po koleji.
  • #12 2474655
    mzielin
    Poziom 22  
    Posty: 483
    Pomógł: 31
    Ocena: 16
    Teraz wiem jeszcze mniej niż myślałem, że wiem ... bez specyfikacji nic nie mogę Ci pomóc.
  • #13 2482488
    esiu888
    Poziom 11  
    Posty: 5
    wszystko jeszcze raz przejrzałem i problem się sprowadza do komunikacji dwóch mikrokontrolerów. Dane mają być wysyłane szeregowo z atmega8 a w sterowniku odbierane tez przez atmega8, może to rozjaśni sprawę:) ten drugi już jest zaprogramowany i w nim nic nie bede zmieniał.Poprostu żeby ten pierwszy działał jako "nadajnik".

Podsumowanie tematu

✨ Dyskusja dotyczy możliwości wyprowadzenia 8 bitów szeregowo na jednym wyjściu mikrokontrolera ATmega8. Potwierdzono, że jest to możliwe, a jednym z rozwiązań jest wykorzystanie instrukcji SHIFTOUT w Bascom AVR, która pozwala wysuwać bity ze zmiennej na wyjście szeregowe wraz z sygnałem zegarowym. W przypadku programowania w C (AVR Studio lub WinAVR) autor poszukuje odpowiedniego sposobu implementacji. Wspomniano także o wykorzystaniu wyjścia TXD (USART) do transmisji 8-bitowych danych, jednak z uwagi na dodawanie bitu startu przez USART, konieczne jest doprecyzowanie formatu sygnału i wymagań odbiornika. Autor planuje przesyłać dane do sterownika 12 serwomechanizmów, gdzie sterowanie jednego serwa wymaga 4 bajtów, czyli łącznie 32 bity przesyłane kolejno. Ostatecznie problem sprowadza się do komunikacji szeregowej między dwoma mikrokontrolerami ATmega8, gdzie pierwszy ma działać jako nadajnik, a drugi jako odbiornik, już zaprogramowany. Brakuje jednak szczegółowej specyfikacji protokołu komunikacji, co utrudnia udzielenie precyzyjnej pomocy.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA