Zapis numeru seryjnego za pomocą KamPROG AVR – przykład w Bascomie
Program KamPROG w wersji 2.2.0.0 pozwala na automatyczne wpisywanie numeru seryjnego do programowanego układu – funkcja ta jest opcjonalna i aktywuje się ją zaznaczając pole Enable Automatic Serial Number.
Możliwe jest wpisanie adresu początkowego pamięci EEPROM, pod którym wpisany zostanie numer seryjny – pole Start adress (hex), a także podanie własnego numeru seryjnego w polu Serial number (hex). Do wyboru jest także ilość bajtów (2 lub 4), jaką zająć ma w pamięci EEPROM numer seryjny.
Numer seryjny zostaje zwiększony o 1 każdorazowo po zapisie do pamięci EEPROM. Wszystkie wartości wpisywane w pola są w postaci heksadecymalnej.
Ramkę SERIAL NUMBER w programie KamProg, pozwalającą na wprowadzenie własnego numeru seryjnego, przedstawiono na rysunku 1.
Rys. 1. Pole Serial number
Przykładowy program, pozwalający na wyświetlenie numeru seryjnego odczytanego z pamięci EEPROM napisany został w języku BASCOM-AVR. Na początku programu zdefiniowane zostały parametry pracy mikrokontrolera oraz wyświetlacza 16×2, zadeklarowane zostały także dwie zmienne – zmienna serialnum typu word oraz zmienna eserialnum typu word przechowywana w pamięci EEPROM – przy ich pomocy odczytany i wyświetlony zostanie numer seryjny.
Aby móc modyfikować numer seryjny podczas programowania mikrokontrolera musimy znać adres zmiennej w pamięci EEPROM. W naszym przypadku adres to 0, ponieważ jest to jedyna zmienna w tej pamięci, w innym przypadku wystarczy zajrzeć do pliku *.rpt generowanego przez Bascom podczas kompilacji, znajduje się tam lista wszystkich zadeklarowanych zmiennych razem z adresami.
Fragment kodu, ukazujący deklaracje, przedstawiony został na listingu 1.
Listing 1. Deklaracje
$regfile = "m8def.dat" $crystal = 8000000 '16 MHz - turn on external resonator (fuse bits) $baud = 1200 $hwstack = 64 $swstack = 64 $framesize = 64 Dim Eserialnum As Eram Word Dim Serialnum As Word Config Lcd = 16x2 Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.2 , Rs = Portb.0
W dalszej części programu uruchomiony zostaje wyświetlacz LCD – następuje inicjalizacja, czyszczenie i wyłączenie kursora.
W pierwszej linii ekranu wyświetlony zostaje przykładowy napis, zaś w drugiej – numer seryjny odczytany z pamięci EEPROM.
Próba podania zmiennej eram word jako argumentu do instrukcji „Lcd (…)” powoduje błąd kompilacji – zmienna eram word nie może być podawana jako argument tej instrukcji. Konieczne więc jest użycie nowej zmiennej pamięci SRAM i wpisanie jej wartości ze zmiennej eram word. W programie użyto przypisania:
eserialnum = serialnum
Wyświetlenie numeru seryjnego na LCD jest przedostatnią instrukcją programu; tuż po niej następuje instrukcja kończąca działanie „End”. Część kodu, wykonującą powyższe czynności, przedstawiono na listingu 2.
Listing 2. Kod programu (z wyłączeniem deklaracji)
Initlcd Cls Cursor Off Lcd " -- ZL2AVR --" Lowerline Serialnum = Eserialnum Lcd Serialnum End
Pełny kod programu:
'***************** (c) 2008 BTC Korporacja *********************************** ' http://www kamami.com 'PROJECT : CHAR LCD 'BOARD : ZL15AVR (with ATmega32 in socket U1) 'COMPILER : BASCOM AVR (v.1.11.9.1) ' '****************************************************************************** ' ' THE SOFTWARE INCLUDED IN THIS FILE IS FOR GUIDANCE ONLY. ' BTC KORPORACJA SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT ' OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING ' FROM USE OF THIS SOFTWARE. ' '****************************************************************************** ' 'DESCRIPTION : ' Using LCD character display (HD44780 compatible) in 4-bit mode. ' ' Settings and connections on ZL15AVR: ' JP4 (DISPLAY) - 2-3 (=CHAR) ' ' D4 (LCD_CHAR/con13) - PD4 (con18) ' D5 (LCD_CHAR/con13) - PD5 (con18) ' D6 (LCD_CHAR/con13) - PD6 (con18) ' D7 (LCD_CHAR/con13) - PD7 (con18) ' E (LCD_CHAR/con13) - PB2 (con16) ' RS (LCD_CHAR/con13) - PB0 (con16) ' RW (LCD_CHAR/con13) - GND (con15) ' ' '****************************************************************************** $regfile = "m8def.dat" 'm32def.dat $crystal = 8000000 '16 MHz - turn on external resonator (fuse bits) $baud = 1200 $hwstack = 64 $swstack = 64 $framesize = 64 Dim Eserialnum As Eram Word Dim Serialnum As Word Config Lcd = 16x2 Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.2 , Rs = Portb.0 Initlcd Cls Cursor Off Lcd " -- ZL2AVR --" Lowerline Serialnum = Eserialnum Lcd Serialnum End