Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Mega8535 i2c + SPI - BASCOM- nie chca dzialac razem

robgold 22 May 2006 22:49 1502 3
  • #1
    robgold
    Level 15  
    Staram sie zmusci do wspopracy LCD od 3310 na SPI oraz PCF8544 (zegar RTC) na i2c do wspopracy razem z mega8535.

    Osobno wszystko smiga, razem nie chce. Jak tylko wlacze linijkie odpowiedzailna za skok do procedurki odczytu godziny z PCF'a to wyswietlacz od noki robi sie bialy i nci nie wyswietla.

    Program wyglada tak (wycialem deklaracje procedur, deklaracje zmiennych oraz tablice znakow asci na samym koncu)

    W progam sa powpisywane wstawki do obslugi zwyklego LCD (testowalem w ten sposob czy wgole dzaial komunikacja I2C, okazalo sie ze dziala i na zwyklym tekstowym LCD dostaje odczyt tego co chce. Na tym z Nokii ni cholery :(

    Czy to mozliwe zeby procedura odczytu I2C zabijala calkowcie komunikacje na magistrali SPI ?

    Bede naprawde wdziecznyz a jakiekolwiek uwagi, bo jeslis obie z tym nie poradze bede musial przejsc na LCD tekstowy :|


    ----------- PROGRAM -----------

    Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4
    'Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0
    'Config Lcd = 16 * 2
    Config Sda = Portc.1
    Config Scl = Portc.0



    'wyswietlacz Nokia 3310 aliasy podlaczen
    Dc Alias Portb.0
    Ce Alias Portb.2
    Re Alias Portb.1

    Re = 0 'Reset
    Waitus 250
    Re = 1

    Spiinit

    Initialisierung
    Lcdclear

    Do
    ##### JAK TYLKO TE LINIJKIE ZAREMUJE TO LCD na ISP ozywa
    Odczytdataiczas
    #######################
    Lcdclear
    Napis = "Test i2c " : Pisz
    'Waitms 25
    'Lcd Napis
    Godziny2 = Str(godziny)
    Godziny2 = Format(godziny2 , "00")
    Minuty2 = Str(minuty)
    Minuty2 = Format(minuty2 , "00")
    Sekundy2 = Str(sekundy)
    Sekundy2 = Format(sekundy2 , "00")
    Dzien2 = Str(dzien)
    Dzien2 = Format(dzien2 , "00")
    Miesiac2 = Str(miesiac)
    Miesiac2 = Format(miesiac2 , "00")
    Rok2 = "06"
    Napis = Godziny2 + ":" + Minuty2 + ":" + Sekundy2 + " " + Miesiac2 + "." + Rok2 : Pisz
    'Lowerline
    'Lcd Napis
    Napis = "1 " : Pisz
    Napis = "2 " : Pisz
    Napis = "3 " : Pisz
    Napis = "4 " : Pisz
    Waitms 100
    Loop

    Sub Pisz
    Dlugosc_napisu = Len(napis)
    Napis = Left(napis , 14)
    For Pw = 1 To Dlugosc_napisu
    L1 = Mid(napis , Pw , 1)
    Kodasc = Asc(l1)
    Tabelas = Kodasc - 32 ' oblicz baze
    Tabelas = Tabelas * 6 'oblicza poczatek odczytu bazy (znaki maja 6 bajtow)
    For Wys_zn = 1 To 6
    Ud = Lookup(tabelas , Asci2) 'odczytaj poszczegolne bajty znaku z tabeli
    Udata Ud ' wysli dany bajt do LCD
    Incr Tabelas 'inkrementacja zmiennej tabela start
    Next Wys_zn
    Next Pw
    'Waitms 1
    End Sub

    Sub Initialisierung
    Ukommando &H21 'Erweiterter Kommando-Mode
    Ukommando &HC8
    Ukommando &H06
    Ukommando &H13
    Ukommando &H20 'Wieder in den normalen Kommando-Mode
    Ukommando &H0C
    End Sub

    Sub Lcdclear
    Local I As Word
    Ukommando &H20 'Normaler Kommando-Mode
    Ukommando &H0C 'Normaler Bildschirm
    Ukommando &H80 'Setze RAM-Adresse auf 0
    Dc = 1 'Sicherstellen, dass man im Daten-Mode ist
    For I = 0 To 503
    Udata &H00
    Next
    Waitms 5
    End Sub

    '------------------------------------------------------------------------------
    Sub Odczytdataiczas
    I2cstart
    I2cwbyte 162
    I2cwbyte 2
    I2cstart
    I2cwbyte 163
    I2crbyte Sekundy , Ack
    I2crbyte Minuty , Ack
    I2crbyte Godziny , Ack
    I2crbyte Dzien , Ack
    I2crbyte Miesiac , Nack
    I2cstop
    Sekundy = Makedec(sekundy)
    Minuty = Makedec(minuty)
    Godziny = Makedec(godziny)
    Dzien = Makedec(dzien)
    Miesiac = Makedec(miesiac)
    End Sub
    '------------------------------------------------------------------------------
    Sub Ukommando(byval Wert As Byte)
    Dc = 0 'in den Kommando-Mode
    Spiout Wert , 1
    Dc = 1 'zurück in den Daten-Mode
    End Sub

    Sub Udata(byval Wert As Byte)
    Dc = 1 'um sicher zu gehen, dass man auch wirklich im Datenmode ist
    Ce = 0
    Spiout Wert , 1
    Ce = 1
    End Sub
    '********************** ASCII Table ********
    Tabele znakow wyciolem, bo kazdy wie jak wyglada.
  • #2
    szymtro
    Level 30  
    Na próbę przestaw odczyti2c przed wiatms 100. Jak nie pomoże to zaremuj linie makedec(...) w procedurze odczytu.
  • #3
    zumek
    Level 39  
    A może na początek , dołożyć RAM-u na stos(y) :?:

    Piotrek
  • #4
    robgold
    Level 15  
    Problem sie rozwiazal :) Okazalo sie ze noga od adresacji PCF'a byla zwarta do VCC a nie do masy i czytalem cyfry z kosmsu ktore to zapychaly wyswietlacz od Noki na amen.

    Z LCD tekstowym bylo ok bo mialem druga (niby taka sama) plytke. Jednak na tej drugiej linia A0 byla ok.