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][ATmega8] Sensor PAN3101 - kłopot z komunikacją

Kamil 1 04 Lis 2008 21:06 1895 4
REKLAMA
  • #1 5702394
    Kamil 1
    Poziom 16  
    Witam

    Od kilku dni morduję się z napisaniem programu do obsługi sensora PAN3101 za pomocą atmegi. Mam dokumentację układu, niby tam są wypisane jakieś adresy itp. ale nie mogę złożyć programu. Muszę przyznać, że jeszcze nigdy nie pisałem takiego programu tylko za pomocą dokumentacji jakiegoś układu i dlatego prosiłbym o pomoc.

    Z tego co tam wyczytałem to komunikacja wygląda tak: najpierw wysyła się jeden bajt z adresem i określeniem czy ma być to zapis czy odczyt a potem drugi z danymi. Ale nie wiem jak to ma dokładnie wyglądać, jak odczytać te X i Y?

    Jeszcze raz proszę o pomoc.
  • REKLAMA
  • #2 5702845
    dawid512
    Poziom 32  
    Najpierw pokaż to co napisałeś.
  • REKLAMA
  • #3 5705124
    Kamil 1
    Poziom 16  
    No więc napisałem krótki program który ma odebrać od układu PAN3101 pewne dane. W dokumentacji pisze że pod adresem 0x00 (OPERATION_MODE1) można prowadzić zapis i odczyt. Na początek napisałem program do odczytu. Oto on:

    $regfile = "m8def.dat"
    $crystal = 4000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Pd.2 , Db5 = Pd.3 , Db6 = Pd.4 , Db7 = Pd.5 , E = Pd.1 , Rs = Pd.0
    
    Cursor Off
    Cls
    
    Lcd "PAN3101"
    Wait 2
    Cls
    
    Dim A As Byte
    A = 0
    
    Config Sda = Portb.4
    Config Scl = Portb.5
    I2cinit
    
    I2cstart
    I2creceive &B00000000 , A
    If Err = 1 Then Lcd "BLAD"
    I2cstop
    
    Lcd A
    
    Do
    Loop


    Adres 0x00 (hex) dla systemu dwójkowego wynosi 00000000 a pierwszy bit dla odczytu ma mieć wartość 0 więc adres się nie zmienia (stąd &B00000000). Przynajmniej mi się tak wydaje.

    Niestety wyświetla się napis błąd co oznacza że odczyt się nie powiódł. Ale zauważyłem że wraz z wyświetleniem tego napisu na LCD, gaśnie również dioda przy czujniku w myszce. Zmienna A wynosi 255.

    Proszę o pomoc.
  • REKLAMA
  • #4 5705326
    dawid512
    Poziom 32  
    Przyjrzyj się temu:
    I2cstart                                                 'start
       I2cwbyte Addressw                                        'adres zapisu 160
       I2cwbyte Adres                                           'adres komórki
       I2cstart                                                 'powtórz start
       I2cwbyte Addressr                                        'adres odczytu 161
       I2crbyte Value , Nack                                    'odczytane dane
       I2cstop                                                  'stop
  • #5 6865105
    wader_669
    Poziom 28  
    Dolacze sie do tematu wlasnie czytam jak sie tym ukladem pobawic.
    Troche sie pogubilem i sam nie wiem czy komunikacja z tym procesorem idzie po i2c czy uart?
    (Dla mnie wyglada na i2c)
    http://www.rn-wissen.de/index.php/Maussensor
    wyzej strona z przykladowym kodem dawid512 pomozesz (Z tego co pamietam to umiesz c)

    Takie info dla "kamil 1" chyba nie do konca przeczytales note.
    http://www.pixart.com.tw/upload/PAN3101_V10_20051121170653.pdf

    Dodano po 17 [minuty]:

    zasada jest prosta:
    1. wysylasz zawsze 2 bajty
    2. 7 bit pierwszego bajta podjasz co chcesz robic zapisywac czy odczytywac.
    w bitach 6-0 podajesz address czyli rejestr z ktorym chcesz cos zrobic
    3. jak 7 bit w pierwszym bajcie jest 1 to musisz podac w drugim bajcie jak chcesz odpowiednio zmienic rejestr, jak 7 bit to 0 to myszka ci podaje dane (w drugim bajcie oczywiscie, bo pierwszy to byl address)

    Zrozumiano?
    Zaraz napisze kod moze zadziala. Jak nie to w przyszlym tyg dopiero sie zjawie na elektrodzie

    Dodano po 1 [godziny] 57 [minuty]:

    hahaha dopiero teraz zauwazylem, ze posty sa z roku 2008
    Trudno moze autorowi tematu moje wskazowki nie pomoga, ale za to nastepni beda je mieli.

    Dodano po 1 [godziny] 46 [minuty]:

    a wiec staram sie cos naskrobac w bascomie i nie czyta dobrych wartosci przemieszczenia. Tutaj kod, ma ktos pomysl co jest zle?

    
    $regfile = "m32def.dat"
    $crystal = 8000000
    
    $swstack = 200
    $hwstack = 200
    $framesize = 200
    
    Config Lcdpin = Pin , Db4 = Porta.5 , Db5 = Porta.4 , Db6 = Porta.3 , Db7 = Porta.2 , E = Porta.6 , Rs = Porta.7
    
    Dim Flaga As Bit
       Flaga = 0
    
    Declare Sub Error
    
    Declare Sub Myszka(byval Address As Byte , Byval Zapis As Byte)
       Dim Stan As Byte
       Dim X As Byte
       Dim Y As Byte
       X = 0
       Y = 0
    
    Config Sda = Portc.1
    Config Scl = Portc.0
    
    Cursor Off
    Cls
    Locate 1 , 1
    Lcd "0"
    Do
    
       Call Myszka(&B00010000 , Stan)
    
       If Stan.7 = 1 Then
          Call Myszka(&B00010001 , X)
          Call Myszka(&B00010010 , Y)
       End If
    
    Locate 2 , 1
    Lcd "X: " : Lcd X : Lcd "Y:" : Lcd Y
    
       If Err = 1 Then Call Error
    
    Loop Until Flaga = 1
    End
    
    ' *********** myszka *********
    Sub Myszka(byval Address As Byte , Byval Zapis As Byte)
    
    I2cstart
       I2cwbyte Address                                         '0x16
       I2crbyte Zapis , Nack
    I2cstop
    
    End Sub
    
    ' ******** error *******
    Sub Error
    
       Cls
       Locate 1 , 1
       Lcd "error"
       Flaga = 1
    
    End Sub
    
REKLAMA