LinkedIn YouTube Facebook
Szukaj

Wstecz
Artykuły

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

 

Inżynier elektronik, absolwent Wydziału Elektroniki i Technik Informacyjnych Politechniki Warszawskiej. Swoje życie zawodowe i hobby związał z elektroniką i mechatroniką. Specjalizuje się w projektowaniu i utrzymywaniu systemów testowania produkcyjnego w firmie SoMLabs, jest autorem artykułów poświęconych elektronice, programowaniu i systemom wbudowanym (embedded).
Tagi: AVR, Bascom, Kamami