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

[ATMEGA16][BASCOM] Odczyt ciągu bitów.

15 Lip 2008 17:52 2213 9
  • Poziom 12  
    Witam i proszę o pomoc..
    systuacja przedstawia się nastepująco:

    dostaję na wejściu portu Atmegi (Pind.0) paczkę bitów (dokładnie 48 bitów o czasie trwania około 417us każdy) w kolejności od MSB do LSB po wywołaniu procedury:
    Code:

    Config Pina.0 = Output                             
    Config Pina.1 = Output       

    Config Pind.0 = Input       
    Config Pina.4 = Input

    Porta.0 = 1 
    If Pina.4 = 1 Then
    Porta.1 = 1
    Waitms 100
    Porta.1 = 0
    Waitms 1
    end if

    problem polega na tym że nie wiem jak zapisać te dane, chciałbym je otrzymać binarnie na LCD lub w terminalu po Rsie.Prosze o pomoc.

    drugie problem.
    jak uskutecznić w tyum przypadku transmisję przy użyciu instrukcji shift in?
    atmega dostaje zegar i dane z zewnatrz (wlasnie te 48 bitow).

    Przeniosłem z Programowanie Ogólne - krzychoocpp
  • Poziom 39  
    apis14 napisał:
    ...problem polega na tym że nie wiem jak zapisać te dane, chciałbym je otrzymać binarnie na LCD lub w terminalu po Rsie.Prosze o pomoc.

    drugie problem.
    jak uskutecznić w tyum przypadku transmisję przy użyciu instrukcji shift in?
    atmega dostaje zegar i dane z zewnatrz (wlasnie te 48 bitow).

    Ad.1 Użyj tablicy i/lub stringa
    Ad.2 SHIFTIN pin , pclock , var , option , 48

    Piotrek

    PS
    Pamiętaj że: Bascom potrafi robić takie "cuda" , których opisu nie uświadczysz , w żadnym manualu. Poprostu , czasami trzeba ruszyć głową i poeksperymentować :D
  • Poziom 12  
    wiem. z tym ze ad2. próbowałem w ramach eksperymetu wstawic wartosc ilosc 48 i kompilator wyrzuca blad..:(
  • Poziom 39  
    apis14 napisał:
    ... próbowałem w ramach eksperymetu wstawic wartosc ilosc 48 i kompilator wyrzuca blad..:(

    I właśnie w takim momencie , należy użyć głowy :D
    Code:

    $regfile = "m32def.dat"
    $crystal = 11059200


    Clkin Alias Pind.1
    Datain Alias Pind.0




    Dim A As String * 5
    Dim Ab(6) As Byte At A Overlay
    Dim B As Byte

    Do

    'Shiftin Pin , Pclock , Var , Option [ , Bits , Delay ]
    Shiftin Datain , Clkin , A , 4 , 48

    For B = 47 To 0 Step -1
       Print Ab(1).b;
    Next
    Print
    Loop


    To działa , bo sam używam podobnego trick'u ;)
  • Poziom 12  
    proszę dodaj komentarze żebym wiedział dokładnie jak to działa, pls
    Wrzucilem do kompilatora i wysypal sie na tej linii:

    Dim Ab(6) As Byte At A Overlay "address out of bounds" [AB]

    co jest nie tak??

    jaki mam wstawić adres w miejsce A żeby dostać wiarygodny odczyt?? bądz co mam innego zrobic?
    Dim Ab(6) As Byte At A Overlay
  • Poziom 39  
    apis14 napisał:
    proszę dodaj komentarze żebym wiedział dokładnie jak to działa, pls

    A co tu jest do komentowania :?: , te kilka linii kodu :?:
    apis14 napisał:

    Wrzucilem do kompilatora i wysypal sie na tej linii:

    Dim Ab(6) As Byte At A Overlay "address out of bounds" [AB]

    co jest nie tak??

    A co konkretnie wrzuciłeś :?: To ...
    Code:
    Dim A As String * 5 
    ...również :?: Pokaż swój kod.
    apis14 napisał:

    jaki mam wstawić adres w miejsce A żeby dostać wiarygodny odczyt?? bądz co mam innego zrobic?
    Dim Ab(6) As Byte At A Overlay

    Poza zmianą $regfile , $crystal , określeniem $Baud i "podstawieniem" właściwych pinów pod Clkin,Datain - nic.
  • Poziom 12  
    nie kompiluje się ten kod. Wskazuje bład w linii
    Dim Ab(6) As Byte At A Overlay jest nieprawidłowy adres. jak wstawie zamiast zmienej "A" np adres &H60 to kompiluje tyle że na terminalu dostaje 32 jedynki i 16 zer...:(
  • Poziom 39  
    apis14 napisał:
    nie kompiluje się ten kod. Wskazuje bład w linii
    Dim Ab(6) As Byte At A Overlay jest nieprawidłowy adres.

    A którą wersją Bascoma posiadasz :?:
    apis14 napisał:

    jak wstawie zamiast zmienej "A" np adres &H60 to kompiluje tyle że na terminalu dostaje 32 jedynki i 16 zer...:(

    A czego sie spodziewałeś :?:
    Sprawdź jeszcze "option" w Shiftin , czy odczytuje dane na właściwym poziomie.
    Nadal nie widzę kodu :(
    A jak u Ciebie wygląda $Hwstack , $Swstack , $Framesize :?:

    Piotrek
  • Poziom 12  
    Miałem wersje 1.11.7.3 którą własnie zamienilem na..8.3. kompiluje.
    co znaczy "odczytuje dane na wlasciwym poziomie"?
    Code:

    $regfile = "m16def.dat"
    $crystal = 16000000
    Config Pina.0 = Output                           
    Config Pina.1 = Output                                     
    Config Pind.0 = Input                                     
    Config Pina.4 = Input       
    Porta.0 = 1

    Do
    If Pina.4 = 1 Then

    Porta.1 = 1
    Waitms 100
    Porta.1 = 0
    Waitms 10
    End if
    Loop

    podczas tej petli po ustawieniu port.1=1 i pozniejszym zatrzasnieciu stanem 0 dostaje na pind.0 bity ktore potrzebuje zapisac... dane przychodza na pind.0 a zegar jest z zewnatrz na pina.4.

    Czy ktos jest w stanie pomóc?: PROSZE....

    Proszę stosować znaczniki [code]
    [zumek]
  • Poziom 39  
    apis14 napisał:
    ...co znaczy "odczytuje dane na wlasciwym poziomie"?

    Przy jakim stanie (niski/wysoki - 0/1) na linii zegara , mikrokontroler ma odczytać bit końcówki portu.
    apis14 napisał:
    podczas tej petli po ustawieniu port.1=1 i pozniejszym zatrzasnieciu stanem 0 dostaje na pind.0 bity ktore potrzebuje zapisac... dane przychodza na pind.0 a zegar jest z zewnatrz na pina.4.

    Po jakim czasie od momentu "zatrzaśnięcia" , urządzenie zewnętrzne zaczyna wysyłać dane do mikrokontrolera :?:
    apis14 napisał:

    Czy ktos jest w stanie pomóc?: PROSZE....

    Więc pozwól sobie pomóc - podaj więcej i bardziej szczegółowych informacji.

    Piotrek