Bascom

Zapisywanie do szeregowej pamięci Eprom typu 24LCXX (około 2zł) jest bardzo proste, pod warunkiem, że zobaczymy jak się to robi. Niektóra literatura wprowadza nas w błąd. Tak jest z cyklem artykułów w Edw. Dopiero oparcie się na Bascom Basic pozwoliło na bezbłędne zapisywanie.


'PamiecSzeregowa.bas

'Program pokazuje, jak zapisać zawartość cyfrową zmiennej do pamięci szeregowej 24LC16B.

'Praca z interfejsem I2C.

'Zapis do pamięci szeregowej 24LC16B.

'Bascom Basic 1.11.7.4, str. 243.

'Edw 7/2000, str. 25 (niestety z błędami!).

'Ep 8/06, str. 114.

'Patrz schemat PamiecSzeregowa.png.

'Procesor Atmega8.

'Pamięć procesora zajęta w 12%.

'Opracował Henryk Wydmuch.

'Zastosujemy oscylator RC wewnętrzny 8MHz, Fusebit ustawiony na 0100.

 

 $regfile = "m8def.dat"                                     'Dyrektyway dla kompilatora.

 $crystal = 8000000                                         'Zastosujemy generator wewnętrzny 8MHz.

Config Lcd = 16 * 2                                         'Konfigurujemy Lcd.

Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portb.1 , Rs = Portb.2

                                       'LCD dłączony do Port 2, 3, 4, 6, 1, 0.

 Config Sda = Portc.5                                       'Konfiguracja Portu do transmisji z interfejsem I2C.

 Config Scl = Portc.4                                       'Konfiguracja Portu do transmisji z interfejsem I2C.

                                                            'Uwaga! W innych procesorach mogą to być inne porty.

 Config Pinb.4 = Input                                      'Przycisk zapisu.

 Config Pinb.5 = Input                                      'Przycisk odczytu.

 Set Portb.4                                                '

 Set Portb.5                                                '

 

 Dim Zmienna As Long                                        'Zmienna w której będzie wartość do zapisu w pamięci.

 Const Adres_write = 174                                    'Adres do zapisu w pamięci szeregowej.

 Const Adres_read = 175                                     'Adres do odczytu z pamięci szeregowej.

 

 Cls                                                        'czyść Lcd.

 

Do                                                          'Pętla.

'Zapis bajtów.

  If Pinb.4 = 0 Then                                        'Jeśli naciśniemy przycisk P4...

  Zmienna = 99                                              'A w Zmiennej będzie 99...

  I2cstart                                                  'Start zapisu.

  I2cwbyte Adres_write                                      'Wyślij pod adres Adres_write.

  I2cwbyte 1                                                'Zapisz pod numerem 1 (może być inny).

  I2cwbyte Zmienna                                          'Wyślij zawartość Zmienna.

  I2cstop                                                   'Zatrzymaj zapis.

 Home                                                       'Zapisywanie w Lcd w jednym miejscu.

  Lcd "Zap " ; Zmienna;                                     'Pokaż co zapisałeś.

  Wait 1                                                    'Poczekaj 1 sek.

  Zmienna = 0                                               'Zeruj zmienną.

  End If                                                    'Koniec warunku przycisku.

 

'Odczyt bajtów.

   If Pinb.5 = 0 Then                                       'Jeśli naciśnięto P5...

   I2cstart                                                 'Start transmisji.

   I2cwbyte Adres_write                                     'Sprawdź pod jakim adresem zapisano.

   I2cwbyte 1                                               'Pod jakim numerem.

   I2cstart                                                 'Start odczytu.

   I2cwbyte Adres_read                                      'Wpisz adres odczytu.

   I2crbyte Zmienna , Nack                                  'Odczytaj zapis. Nack=koniec dalszego odzczytu.

   I2cstop                                                  'Zatrzymaj transmisję.

  Locate 2 , 1                                              'Druga lionia Lcd, pirwsza komórka.

  Lcd "Odcz " ; Zmienna;                                    'Pokaż odczyt.

 

End If                                                      'Koniec warunku przycisku.

Loop                                                        'Powtarzaj pętlę.

  End                                                       'Koniec tej pętli.