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

IIC + LCD 2*16. Czy udało się komuś to zrobić na ATmega8?

zupcia 01 Lut 2007 09:19 1659 7
REKLAMA
  • #1 3513875
    zupcia
    Poziom 11  
    Posty: 23
    Witam
    mam pytanie czy udalo sie komus zrobic cos takiego na ATmega8 ??
    jestem poczatkujacym programista i nie wiem czy da sie cos takiego zrobic ??
    prosze o jakies porady :)
    pozdro
  • REKLAMA
  • REKLAMA
  • REKLAMA
  • #4 3514153
    redart
    Poziom 23  
    Posty: 529
    Pomógł: 51
    Ocena: 30
    To "IIC" to miało być I²C? Jeśli tak to proponuję zajrzeć do helpa Bascom'a AVR, albo doprecyzować pytanie :D.
  • #5 3514505
    zupcia
    Poziom 11  
    Posty: 23
    tak chodzi mi o I2C

    dzięki arturkaszuba ale czy nie masz czegoś w BASCOMIE ??
  • #6 3519656
    redart
    Poziom 23  
    Posty: 529
    Pomógł: 51
    Ocena: 30
    Masz w bascomie na górnym pasku ikonkę z żółtym znakiem zapytania. Kliknij ją , a otworzy ci się plik pomocy - Help. Jeśli nie masz helpa po polsku to poszukaj w download na elektrodzie, tam jest. W helpie poszukaj tego co cię interesuje odnośnie I2C.
    Albo napisz o co ci dokładnie chodzi z tą magistralą. Bascom AVR umożliwia bardzo prostą komunikację po I2C. Najpierw trzeba zdefiniować do których pinów portu podłączasz SDA i SCL, a potem to tylko np:
    I2cstart
    I2cwbyte 130 ' adres układu podpiętego do magistrali
    I2cwbyte 8 'rejestr układu
    I2cwbyte 230 ' dane
    I2cstop
  • #7 3521966
    zupcia
    Poziom 11  
    Posty: 23
    zrobilem sobie taki zegarek RTC na I2C i LCD 16x2 na zestawie uruchomieniowym zl2avr jednak nie wiem jak sie zabrac za podlączenie LCD pod I2C myslalem zeby uzyc pcf8574 tylko nie wiem jak podlaczyc LCD do tego ukladu i czy nie trzema jakiejs dodatkowej biblioteki ?? co by to obslugiwala ??
    oto moj programik jaki mam do tej pory bez LCD na I2C :
    $regfile = "m8def.dat"                                      'deklaracja uklocka
    $crystal = 1000000                                          'częstotliwość klocka
    
    
             '!!!!! Konfiguracja LCD !!!!!!
    Config Lcd = 16 * 2                                         'typ wywświetlacza LCD
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    
             '!!!!! Konfiguracja I2C !!!!!!
    
    Config Sda = Portb.0                                        'przylisanie pinu Portb.0 lini SDA
    Config Scl = Portb.1                                        'przylisanie pinu Portb.1 lini SCL
    I2cinit                                                     'ustawia koncówki lini SDS i SCL w odpowiedni stan początkowy
    
    Config Pinb.3 = Input                                       'przypisanie 3-go pinu portu b jako wejscie
    
    S1 Alias Portb.3                                            'przypisanie nazwy S1 do pinu 3-go portu b
    
    Set Portb.3                                                 'uwtawienie stanu wysokiego na wejsciu
    
    
             'deklaracja procedur
    Declare Sub Zapis
    Declare Sub Odczytajdate
    Declare Sub Wysw
    
             '!!!!! Zmienne dla zegara RTC !!!!!!
    
    Dim Sekunda As Byte
    Dim Minuta As Byte
    Dim Godzina As Byte
    
    
             ' !!!!!  Pętla główna programu !!!!!!
    Do
       Debounce S1 , 0 , Zapis , Sub                            'Elimnuje drgania styków przełącznika dolączonego bezpośrednio do lini portu
       Call Odczytajdate                                        'Wywołanie proczedury odczytania godziny
       Call Wysw                                                'Wywołanie procedury wyświetlenia godziny
    Loop
    '----------------------------------------------------------------------------
    
    ' Zapis wartości początkowych do PCF8583
    
    Zapis:
    
     Godzina = 20
     Minuta = 35
     Sekunda = 0
       ' zanmienienie na postać BCD
     Sekunda = Makebcd(sekunda)                                 'zamienia format zmiennej "Sekunda" z dziesiętnego na binarny
     Minuta = Makebcd(minuta)
     Godzina = Makebcd(godzina)
    
        ' Adres zapisu to 162, a odczytu to 163 gdyż końcówka A0 jest podłączona do Vdd
     I2cstart                                                   'warunek startu
     I2cwbyte 162                                               'zaadresowanie RTC
     I2cwbyte 0                                                 'wybieram rejestr sterujący/stanu i zapisuję do niego wartość zero czyli inicjuję go
     I2cstop
     I2cstart                                                   'warunek startu
     I2cwbyte 162                                               'zaadresowanie RTC
     I2cwbyte 2                                                 'ustawienie dresu zapisu
     I2cwbyte Sekunda                                           'zapisanie zmiennej Sekunda
     I2cwbyte Minuta                                            'zapisanie zmiennej Minuta
     I2cwbyte Godzina                                           'zapisanie zmiennej Godzina
     I2cstop
     Set S1
    
    Return
    
    
    
    ' Procedura odczytująca godzinę z PCF8583
    Sub Odczytajdate
    
     I2cstart                                                   'warunek startu
     I2cwbyte 162                                               'zaadresowanie RTC
     I2cwbyte 2                                                 'wysłanie adresu komórki EEPROM
     I2cstart                                                   'powtórzenie warunku startu
     I2cwbyte 163                                               'adresujemy układ z EEPROM do odczytu
     I2crbyte Sekunda , Ack                                     'odczytanie komówrki pomięci i przypisanie jej do zmiennej "Sekunda"
     I2crbyte Minuta , Ack                                      'Ack = czytaj kolejny bajt
     I2crbyte Godzina , Nack                                    'Nack = ostatni odczytany bajt
     I2cstop                                                    'warunek stopu
     Waitms 950
    
    
    End Sub
    '-----------------
    
    ' Procedura wyświetlania godziny na LCD
    
    Sub Wysw
    
      Cls                                                       'czyszczenie wyświetlacza LCD
      Cursor Off                                                'wyłączenie kursora
      Locate 1 , 5                                              'adres zapisu na LCD
      Lcd Bcd(godzina) ; ":" ; Bcd(minuta) ; ":" ; Bcd(sekunda) 'zapis na LCD
    
    End Sub
    
    
    End


    wiec jak ktos ma jakies propozycje to jestem otwarty :)
    pozdro i dzieki
  • REKLAMA
  • #8 3526007
    zupcia
    Poziom 11  
    Posty: 23
    hej
    coś pomyślałem coś poczytałem i napisałem coś takiego :
    
    $regfile = "m8def.dat"
    $lib "Lcd_i2c.lib"
    $crystal = 1000000
    
    
    Config Scl = Portb.0
    Config Sda = Portb.1
    I2cinit
    
    Const Pcf8574_lcd = 66
    Dim _lcd_e As Byte
    _lcd_e = 128
    Waitms 200
    
    Config Lcd = 16 * 2
    
    
    Do
    
       Cls
       Locate 1 , 5
       Lcd "halo"
       Wait 2
       Lowerline
       Lcd "- \ | / _"
       Wait 5
    
    Loop
    End
    
    


    Lcd podpiołem do PCF8574 tak :

    ;P0 - D4
    ;P1 - D5
    ;P2 - D6
    ;P3 - D7
    ;P4 - RS
    ;P5 - RW (not used, set to 0 to ground for write)
    ;P6 - E2 (on 1 or 2 line display nc)
    ;P7 - E1

    tylko nie wiem co oznacza zapis P6 - E2 (on 1 or 2 line display nc) :)
    i niestety nie działa :(
    może ktoś wie dlaczego ????
    pozdro

Podsumowanie tematu

✨ Dyskusja dotyczy realizacji wyświetlacza LCD 2x16 sterowanego przez magistralę I2C (IIC) na mikrokontrolerze ATmega8. Początkowo pojawiło się nieporozumienie dotyczące nazwy "IIC", wyjaśniono, że chodzi o I2C. Użytkownik poszukiwał gotowych rozwiązań i bibliotek, zwłaszcza w środowisku Bascom AVR, które oferuje prostą obsługę I2C z możliwością definiowania pinów SDA i SCL oraz podstawowych komend komunikacyjnych. Autor eksperymentował z zegarkiem RTC na I2C i LCD 16x2 na zestawie ZL2AVR, planując użycie ekspandera portów PCF8574 do podłączenia LCD przez I2C. Przedstawił fragmenty kodu Bascom z konfiguracją LCD i I2C, jednak miał problem z prawidłowym podłączeniem LCD do PCF8574 oraz z działaniem biblioteki "Lcd_i2c.lib". Opisano przypisanie pinów PCF8574 do linii LCD (P0-P7) oraz wątpliwości dotyczące sygnału E2 (P6) dla wyświetlaczy 1- lub 2-liniowych. Wskazano na potrzebę odpowiedniej biblioteki i konfiguracji, aby poprawnie sterować LCD przez I2C na ATmega8.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA