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

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

apis14 15 Lip 2008 17:52 2450 9
  • #1 5345163
    apis14
    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:
    
    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
  • #2 5345830
    zumek
    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
  • #3 5345849
    apis14
    Poziom 12  
    wiem. z tym ze ad2. próbowałem w ramach eksperymetu wstawic wartosc ilosc 48 i kompilator wyrzuca blad..:(
  • #4 5345926
    zumek
    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
    
    $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 ;)
  • #5 5345980
    apis14
    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
  • #6 5347745
    zumek
    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 ...
    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.
  • #7 5347982
    apis14
    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...:(
  • #8 5348012
    zumek
    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
  • #9 5352215
    apis14
    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"?
    
    $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]
  • #10 5357313
    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
REKLAMA