Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Computer Controls
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega, odczyt stanów logicznych...

monterek3 29 Mar 2010 23:17 2001 14
  • #1 29 Mar 2010 23:17
    monterek3
    Poziom 15  

    Witam, proszę o jakieś wskazówki...

    Chciałbym odczytać ciąg stanów logicznych np. na PORTB.0 i wysłać je na PORTB.1 za pomocą ATMEGA16. Inaczej mówiąc chciałbym zrobić coś w rodzaju pętli, stany logiczne są przechwytywane przez Atmega i przesyłane dalej. Proszę o jakies wskazówki jak napisać kod źródłowy w Bascom'ie.

    0 14
  • Computer Controls
  • #2 29 Mar 2010 23:44
    Pittt
    Poziom 31  

    Wystarczy przyrównać. Ale w tym sposobem będziesz prawdopodobnie gubił część zmian, więc lepiej jest to zrobić w przerwaniu.

    0
  • Computer Controls
  • #3 30 Mar 2010 07:26
    94075
    Użytkownik usunął konto  
  • #4 30 Mar 2010 08:29
    Freddie Chopin
    Specjalista - Mikrokontrolery

    albertb napisał:
    Użycie Atmega16 tam, gdzie wystarczy (ba nawet lepszy będzie) kawałek drutu.

    A jakie będziesz miał próbkowanie na tym drucie i jaką ma wydajność końcówek?

    4\/3!!

    0
  • #5 30 Mar 2010 08:45
    94075
    Użytkownik usunął konto  
  • #6 30 Mar 2010 10:13
    rusala
    Poziom 22  

    i pobiera w stanie uśpienia zero prądu !! w pracy jakies nA ;]

    0
  • #7 31 Mar 2010 17:47
    monterek3
    Poziom 15  

    Hmm, nie zrozumielismy sie.... Odczyt stanow PORTB.0 , zapis lub powiedzmy odczekanie 100ms i wyslanie na PORTB.1... Jakby to byla najzwyklejsza petla to rzeczywiscie lepiej to zrobic za pomoca kawalka drutu, ale tak ma nie byc...

    Jakies sugestie?

    0
  • #8 31 Mar 2010 18:03
    Dexter77
    Poziom 28  

    Do odczytu nie uzywa sie PORTB.0 tylko PINB.0

    temp=PINB.0
    waitms 100
    PORTB.1= temp

    Wczesniej deklarujesz temp jako zmienna typu boolean

    0
  • #9 31 Mar 2010 21:08
    monterek3
    Poziom 15  

    OK, ale...

    Działa to powiedzmy bezpośrednio...
    Podaje stan niski na PINB.0 i otrzymuje go natychmiast na PORTB.1, a mi chodzi o coś takiego:
    Podaje np. 4 razy stan niski (jeden po drugim) i np. po 1 sekundzie identycznie otrzymuje na PORTB.1 to samo czyli 4 razy stan niski (jeden po drugim).

    Jakaś podpowiedź??
    Dziękuję :)

    Dodano po 1 [godziny] 32 [minuty]:

    OK, a może inaczej...

    Mamy liczbe hex:12BA która binarnie wygląda nast:1001010111010 , podajemy to na PORTB.0 i chcemy ją wysłać na PORTB.1...

    W jaki sposób zrobić to w bascomie na Atmega16??

    0
  • #10 31 Mar 2010 21:25
    comer3
    Poziom 27  

    monterek3 napisał:
    Podaje np. 4 razy stan niski (jeden po drugim) i np. po 1 sekundzie identycznie otrzymuje na PORTB.1 to samo czyli 4 razy stan niski (jeden po drugim).


    Ten stan niski podajesz w różnych odstępach czasu, czy interwały czasowe są takie same??

    monterek3 napisał:
    Mamy liczbe hex:12BA która binarnie wygląda nast:1001010111010 , podajemy to na PORTB.0 i chcemy ją wysłać na PORTB.1... W jaki sposób zrobić to w bascomie na Atmega16??


    Dokładnie tak jak pokazał to kolega Dexter77, jeśli chcesz, aby sygnał na porcie b.1 pojawiał się z sekundowym opóźnieniem użyj instrukcji wait X, gdzie X to liczba sekund..

    0
  • #11 31 Mar 2010 23:09
    Pittt
    Poziom 31  

    Użyj tablicy. Najpierw ją uzupełniaj a po czasie odczytuj do portu.
    Odpowiedni jej rozmiar, umożliwi zapis i odczyt w jednej "pętli" i w kółko.
    Np. pod wskaźnikiem "i" zapisujesz a "i-10" odczytujesz. Potem po pętli robisz pauze (opóźnienie) i zwiększasz "i". Rozmiar tabeli to rozmiar twojego buforu.

    0
  • #12 01 Kwi 2010 00:01
    rusala
    Poziom 22  

    ważne jest jeszcze czy czas odstępu ma być liczony od ostatnio otrzymanego bajtu czy od pierwszego i jak w ogóle zaznaczyć początek jeżeli od pierwszego. A może cała sekwencja ma być opóźniona niezależnie na od jej długości - czyli zawsze wartość bitu pojawi się po stałym czasie na wyjściu niezależnie co było przed nim ani po nim ? W takim wypadku minimalny rozmiar tablicy musi pozwalać na zapisanie tylu bitów ile można podać w czasie równym opóźnieniu. A w zasadzie to właśnie najlepiej będzie zrobić dokładnie tej długości tablicę i przesuwać się po niej kołowo zapisując do jednego elementu nowo odczytaną z wejścia wartość, a z poprzedniego (który będzie czasowo oddalony od kolejnego dokładnie o czas opóźnienia przy takim działaniu) wyrzucać na wyjście

    0
  • #13 01 Kwi 2010 08:37
    monterek3
    Poziom 15  

    Początek odczytu ma zaczynać się wraz z podaniem zasilania na urządzenia, czyli na urządzenie które wysyła ta liczbę ( w postaci binarnej) i Atmega. Kiedy dokładnie ma zakończyć się odczyt i rozpocząć wysyłanie na PORTB.1 jeszcze nie wiem, ale wydaje mi się że jak podłącze analizator stanów to sprawa się wyjaśni...

    Proszę o podpowiedź i wyjaśnienie działania na "tablicach"(?) bo jak narazie moja wiedza o programowaniu Atmega jest na poziomie LCD i prostych urządzeń...


    Dziękuję

    Dodano po 4 [minuty]:

    Acha... może to coś pomoże...

    Liczba do wysłania jest taka: BA12 z prędkością 9600 bautrate... wysyłana jest jednym przewodem.

    Pozdr.

    0
  • #15 04 Kwi 2010 20:33
    monterek3
    Poziom 15  

    Witam,

    Walczę już kolejny dzień....

    Nie mogę sobie z tym poradzić, a w pomocy do Bascoma o UART jest nie za wiele :/

    Może ktoś jest w stanie pomóc mi napisac kod ...


    Pozdrawiam

    0