Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

ATMEGA32 i2c sprzętowe

darkoman 15 Oct 2005 22:22 1288 0
  • #1
    darkoman
    Level 11  
    Witam !

    Mam następujący problem. Projekt ( BASCOM, ATMEGA 32, 11.059 MHz, procesor VIDEO SAA5281P ) nad którym pracuję wymaga stosowania magistrali I2c. Z powodzeniem stosuję programowe rozwiązanie transmisji, ale przecież ATMEGA32 ma sprzętowe I2c(TWI). Stosując się do wskazówek w help'ie BASCOM'a wstawiłem dyrektywę kompilatora $lib "I2C_TWI.LBX", ustawiłem prędkość magistrali poleceniem CONFIG i wtedy aplikacja zaczęła działać 3 i więcej razy wolniej. Kod programu jest poniżej. Jeśli tylko wyrzucę dyrektywę $lib "I2c_Twi.lbx" wszystko wraca do normy.

    ---------------------------------------------------------------------------------
    Rem Program testowy

    $lib "I2C_TWI.LBX" ' wykorzystanie sprzętowego twi
    $regfile = "m32def.dat" ' procesor ATMEGA 32
    $baud = 9600 ' prędkość RS=9600
    $crystal = 11059200 ' CRYSTAL=11,0592 MHz

    Declare Sub Putch
    Declare Sub Init_videop
    Declare Sub Tekst_poczatkowy
    Declare Sub Cursor_goto
    Declare Sub Clear_display

    Dim Danei2c(10) As Byte
    Dim Poz_x As Byte
    Dim Poz_y As Byte
    Dim Znak As Byte

    Const Videop_addr = &H22 ' adres SAA5281
    Const Koniec_ciagu = 0

    ' ------------------------------------------------------------
    ' Konfiguracja TWI ( I2C ), umiejscowienie SDA,SCL
    ' ------------------------------------------------------------
    Config Sda = Portc.1 ' definicja SDA magistrali I2C
    Config Scl = Portc.0 ' definicja SCL magistrali I2C
    I2cinit ' inicjalizacja TWI
    Config Twi = 100000 ' ustawienie prędkości działania TWI na 100kHz

    Do
    Call Init_videop
    Call Tekst_poczatkowy
    Wait 5
    Call Clear_display
    Loop

    Rem ----------------------------------------------

    Sub Init_videop

    Danei2c(1) = &H00
    Danei2c(2) = &H12
    Danei2c(3) = &H00
    I2csend Videop_addr , Danei2c(1) , 3

    Danei2c(1) = &H05
    Danei2c(2) = &HFF
    Danei2c(3) = &HFF
    Danei2c(4) = &H02
    I2csend Videop_addr , Danei2c(1) , 4

    End Sub

    Rem ----------------------------------------------

    Sub Putch

    If Znak = &H0D Then
    Poz_x = 1
    Incr Poz_y
    Call Cursor_goto
    Goto Putch_wyjdz
    End If



    Danei2c(1) = &H0B
    Danei2c(2) = Znak
    I2csend Videop_addr , Danei2c(1) , 2

    Incr Poz_x ' kursor o jeden w prawo
    If Poz_x > 40 Then ' czy jesteśmy na końcu linii ?
    Poz_x = 1 ' tak więc ustawiamy się na początek drugiej
    Incr Poz_y
    End If
    Call Cursor_goto ' zmień pozycję kursora

    Putch_wyjdz:
    End Sub

    Rem ----------------------------------------------

    Sub Cursor_goto

    Danei2c(1) = &H09
    Danei2c(2) = Poz_y
    Danei2c(3) = Poz_x
    I2csend Videop_addr , Danei2c(1) , 3

    End Sub

    Rem ----------------------------------------------

    Sub Tekst_poczatkowy

    Poz_x = 1
    Poz_y = 10
    Call Cursor_goto
    Restore Napis_startowy
    Read Znak

    While Znak <> Koniec_ciagu
    Call Putch
    Read Znak
    Wend

    End Sub

    Rem ----------------------------------------------

    Sub Clear_display

    Danei2c(1) = &H08
    Danei2c(2) = &H08

    I2csend Videop_addr , Danei2c(1) , 2
    Waitms 25

    End Sub

    Napis_startowy:

    Data " Gen{013}{013} (c) 2005 COMPANY{013}{013} {008}System gotowy do pracy{013}{013} Nr seryjny : XXX-XXX-XXX"
    Kamery 3D Time of Flight - zastosowania w przemyśle. Darmowe szkolenie 16.12.2021r. g. 10.00 Zarejestruj się
pcbway logo