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

[BASCOM] AT89C2051 BASCOM – wysyłanie 19-bitowych słów szeregowo, grupowanie bitów, PWM

bolek 13 Cze 2002 16:33 4651 16
REKLAMA
  • #1 19571
    bolek
    Poziom 35  
    Posty: 4099
    Pomógł: 86
    Ocena: 299
    Witam!

    Chłopaki proszę o pomoc!

    W jaki sposób wysyłać dane szeregowo za pomocą At89C2051???. Potrzebuję wysłać 19 bitów w jednym słowie i tyle samo w drugim, bity te są różnie grupowane jedna funkcją steruje 1 bit, a np. modulacją PWM sterują już 4 bity. Jaki zrobić chokus- pokus aby za pomocą tych czterech bitów przedstawić dowolne liczby ( np.: 0 to zerowe wypełnienie, 63 to 100% wypełnienie )???

    Pracuje w Bascom’ie, ale chętnie zapoznam się z wszelkimi rozwiązaniami tego problemu

    Proszę piszcie!!!

    Pozdrawiam!

    Bolek
  • REKLAMA
  • #2 31030
    iq210
    Poziom 11  
    Posty: 40
    Z tego co zrozumialem. To odpowiadam ze nie da sie wysylac jednego slowa 19 bitowego slowa. Mozna wyslac kilka slow osmiobitowych lub dzieweicio bitowych. A za pomoca 4 bitow mozesz zapisac wartosc od 0 do 15. a nie 63. Jesli chcesz to daj mi znac to ci napisze taka komunikacje w asemblerze. Wiecej szczegolow.
    Pozdrawiam.
  • REKLAMA
  • #3 34991
    gafek
    Poziom 17  
    Posty: 335
    Pomógł: 9
    Ocena: 10
    A dlaczego nie można wysłać jednego słowa 19 bitowego ?? A co stoi na przeszkodzie ?? Kolega nie napisał,że chce to wysyłać przes sprzętowy UART tylko "szeregowo" !! A to żaden problem dla w miarę sprawnego programisty.

    Pozdr.
  • #4 35014
    marc.o
    Poziom 14  
    Posty: 136
    Ocena: 1
    Czy na przeszkodzie nie stoi cenna pamiec programu (sa tam tylko 2KB)?
    Zamiast marnowac ja na robienie programowej obslugi transmisji szere-
    gowej; lepiej bedzie wykorzystac sprzetowy UART, a 19 bitow wyslac np:
    jako 3 slowa 8-bitowe - moim zdaniem to rozwiazanie jest duzo prostrze
  • #5 35025
    gafek
    Poziom 17  
    Posty: 335
    Pomógł: 9
    Ocena: 10
    mnie uczono,że 3 razy 8 jest 24 a nie 19..... :-D
    Wciąż stawiam na swoim. :-)

    pozdr.
  • REKLAMA
  • #6 35059
    marc.o
    Poziom 14  
    Posty: 136
    Ocena: 1
    Wiem, że 3x8>19 :), ale 3 to najmniejsza ilośc ośmiobitowych słów potrze-
    bnych do przesłania 19bitów. Jak ktoś kiedyś powiedział: "Nie ściągaj ar-
    maty by zabić komara", tak samo jest tutaj: po co robić od zera układ do
    transmisji szeregowej, jeżeli jeden jest już gotowy?
  • #7 35070
    gafek
    Poziom 17  
    Posty: 335
    Pomógł: 9
    Ocena: 10
    No tak,a co jeśli urządzenie do którego wyślemy dane nie będzie aż tak inteligentne i nie zakończy transmisji po odebraniu 19 bitów i potraktuje "nadmiarowe" 5 bitów jako początek następnego pakietu ??
    Jeśli urządzenie w cywilizowany sposób nie rozpoznaje początku i końca transmisji (np.leading zero itp) tak będzie !

    pozdr.
  • #8 35072
    marc.o
    Poziom 14  
    Posty: 136
    Ocena: 1
    Jeżeli to urządzenie odbiorcze jest jakieś małointeligentne, to jedynym
    wyjściem jest robienie programowej transmisji, a z tym wiąże się obsługa
    timerów, przerwań - tu dość łatwo o mopyłkę, którą bedzie trudno wykryć.
    Jestem ciekaw ile miejsca zajmnie taka programowa transmisja szerego-
    wa (pewnie coś koło 0,4KB, czyli 20% pamięci procesora).

    Jak jest możliwość, to zostaję przy użyciu sprzętowego UART'u :D
  • #9 35082
    gafek
    Poziom 17  
    Posty: 335
    Pomógł: 9
    Ocena: 10
    Jeśli mamy doczynienia z transmisją synchroniczną ( a taką zazwyczaj wykorzystują wszelkie układy scalone typu PLL,DAC itp - czyli szyna danych i szyna zegarowa,czasami jeszcze strobowania) to procedura jest bardzo prosta ,żadnych przerwań,timerów.Generujemy dowolny przebieg zegarowy i tym przebiegiem są synchronizowane wszelkiej maści urzadzenia podrzędne)

    A ogólnie fajnie się rozmawiało !!
    Pozdr.
  • #10 35084
    marc.o
    Poziom 14  
    Posty: 136
    Ocena: 1
    A jak wygenerowac przebieg zegarowy bez użycia timera w 89c2051?
  • #11 35095
    gafek
    Poziom 17  
    Posty: 335
    Pomógł: 9
    Ocena: 10
    A kto powiedział,że on musi mieć dokładnie jakieś tam parametry czasowe ??. W większości przypadków wystarcza prosta pętla czasowa - aby zachować minimalne czasy trwania impulsów.Przy takiej transmisji synchronicznej zegar może się "kołysać" .Nawet gdy wstrzymamy na chwilę transfer na złączu (np. gdy wystąpi nadrzędne przerwanie i procek coś tam ważniejszego robi ) nie gubimy danych ,urządzenie odbiorcze cierpliwie poczeka na pojawienie się kolejnego impulsu zegarowego i dokończy kompletowanie słowa.
  • #12 35165
    Marek81
    Poziom 19  
    Posty: 367
    Pomógł: 6
    Ocena: 8
    Witam.
    Podstawowa zasada przy budowie układów elektronicznych, to ninimalizowanie ilości użytych elementów. Im mniej zastosujesz części, tym urządzenie będzie bardziej niezawodne. A więc jeżeli hardware da się zastąpić software'm, to trzeba tak zrobić.
    Objętość pamięci programu w 89C2051 szybko się kurczy jeśli stosujemy języki wyższego rzędu: Kiedyś przerabiałem program do kitu AVT, napisany był w Bascomie tak że szpilki byś nie wcisnął, do pełna, a ja chciałem dodać jeszcze kilka funkcji. Przerobiłem go więc na asemblera, dodałem co chciałem i zostało mi jeszcze 30% wolnej pamięci.
    Zawsze jest sposób na brakującą pamięć programową, w ostateczności - 89C4051.
    Pozdrawiam.
  • #13 35190
    tmpat
    Poziom 15  
    Posty: 143
    Pomógł: 1
    Ocena: 3
    Zgadzam sie z MARKIEM81, przede wszystkim software dlatego tez warto nieco posiedzieć dłużej nad klawiatura niż niepotrzebnie dodawać pare scalaków. Co do wcześniejszych wypowiedzi to nie zgadzam sie co do konieczności stosowania UART'a, nie zapomnijcie że są procki które wogóle go nie maja a i tak stosuja transmisje szeregową. Wszystko da sie zrobiś programowo tylko potrwa to nieco dłużej (tworzeznie), zrobić stabilna transmisje szeregową - ASYNCHRONICZNĄ to żaden problem dla średnio zaawansowanego programisty. Nie polecałbym tego robić w BASCOM'ie, gdyz traci to sens, ten jezyk nie umozliwia programiście bezpośrednio "dłubać" we wnętrzy procka. Faktycznie zrobienie protezy ATMEL'owi umozliwiającej transmisje szeregową zajmie nie co miejsca ale raczej nie będzie to 400B, wszysto zależy od wprawy programisty, przecież większość procedur jest wykonywana wielokrotnie podczas różnych działań dlatego tez nie można w ten sposób definiować rozległości danej części programu.
    Na koniec dodam jeszcze pare słów do adeptów SZKOŁY BASCOM'a autorstwa pana RABBE, sam wywodze się z jej szeregów ale bascom to jedynie wstęp dlatego tez polecam asemblera bo tylko ten jezyk daje szanse pełnej kontroli nad programem i umozliwia w prosty sposób rozwiązywać problemy tego typu w sposób sensowny.

    POZDRAWIAM
  • #14 35209
    marc.o
    Poziom 14  
    Posty: 136
    Ocena: 1
    tmpat napisał:
    Zgadzam sie z MARKIEM81, przede wszystkim software dlatego tez warto nieco posiedzieć dłużej nad klawiatura niż niepotrzebnie dodawać pare scalaków.

    o jakich dodatkowych scalakach mowisz??
    tmpat napisał:
    Co do wcześniejszych wypowiedzi to nie zgadzam sie co do konieczności stosowania UART'a, nie zapomnijcie że są procki które wogóle go nie maja a i tak stosuja transmisje szeregową. Wszystko da sie zrobiś programowo tylko potrwa to nieco dłużej (tworzeznie), zrobić stabilna transmisje szeregową - ASYNCHRONICZNĄ to żaden problem dla średnio zaawansowanego programisty.

    to nie jest problem dla programisty, ale my tu mowimy o konkretnym
    ukladzie: at89c2051 z TYLKO!! 2KB pamieci programu, wiec po co ja
    marnowac na programowa transmisje

    pzdr. amrcin
  • REKLAMA
  • #15 35275
    iq210
    Poziom 11  
    Posty: 40
    Marc.o zgadazam sie z toba. W/g mnie wszystko mozna zrobic programowo. Ale jesli cos mozana rozwiazac sprzetowo wiec nie ma sesu pisac niepotrzebnie programu. Jesli w urzadzeniu mozna zastosowac transmisje seregowa asynchroniczna i nie wazny jest fakt czy slowo bedzie zawierac 24 czy 19 bitow wtedy mozna zastosowac UART'a. A jesli chodzi o programowa realizacje transmisji szeregowej-asunchronicznej to program mozna napisac tak zeby zajmowal mniej niz 100 bajtow... A gdy przerwanie od timera bedzie pracowalo na najwyzszym prirytecie a reszta przerwan na nizaszym to transmisja bedzie stabilna. Mysle ze to jest dobre wyzwanie. Zobaczymy kto napisze krotszy program realizujacy 19 bitowa transmisje szeregowa-asynchroniczna. Co do powyrzszego wpisu to ja rowniez owarzam ze tylko asembler daje moc panowania nad programem.
    Pozdrawiam wszystkich asemblerowcow.
  • #16 35432
    gafek
    Poziom 17  
    Posty: 335
    Pomógł: 9
    Ocena: 10
    szkoda ,ze autor wątku nie napisał czym chce sterować - to rozwiało by wszelkie wątpliwości na temat wyboru sposobu transmisji.Nie ulega wątpliwości,że większość dzisiejszych układów scalonych wymagających transmisji szeregowej stosuje transmisję synchroniczną,żeby nie wspomnieć o I2C ,DBUS itd. (no chyba,że autor myśli o jakiejś tam pastylce dallasa 1-wire)
  • #17 35643
    marc.o
    Poziom 14  
    Posty: 136
    Ocena: 1
    szkoda, ze autor watku przestal sie tym interesowac :(

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy sposobów wysyłania danych szeregowo za pomocą mikrokontrolera At89C2051, szczególnie przesyłania 19-bitowych słów. Podkreślono, że nie jest możliwe wysłanie jednego 19-bitowego słowa sprzętowym UART-em, gdyż standardowo UART operuje na 8-bitowych bajtach. Proponowano podzielenie danych na kilka 8-bitowych słów (np. 3 bajty na 19 bitów) jako prostsze rozwiązanie sprzętowe. Wskazano, że transmisję szeregową można również zrealizować programowo, jednak ze względu na ograniczoną pamięć programu (2KB w At89C2051) i złożoność obsługi przerwań i timerów, może to być trudne i zajmować znaczną część pamięci. Zwrócono uwagę na możliwość transmisji synchronicznej z generowaniem sygnału zegarowego programowo, bez użycia sprzętowego timera, co może być prostsze i bardziej niezawodne. Dyskutowano także o kompromisach między wykorzystaniem sprzętowego UART-a a programową implementacją transmisji, zwracając uwagę na ograniczenia pamięci i wymagania odbiornika danych. Wskazano, że asembler daje większą kontrolę nad programem i może pozwolić na bardziej efektywne wykorzystanie pamięci niż Bascom. Brak szczegółów dotyczących urządzenia sterowanego przez transmisję utrudnia jednoznaczny wybór metody.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA