Dzwonek Automatyczny II LO Kielce

Dokumentacja techniczna

© 2015 Szymon Katra


Spis treści


Ogólne

Schemat oraz płytka drukowana układu zostały zaprojektowane w programach ExpressSCH i ExpressPCB.

Główne elementy:

Układ jest zasilany napięciem 5V poprzez gniazdo USB (linie transmisyjne D+ i D- nie są nigdzie podłączone). Cały układ pobiera maksymalnie 100 mA prądu, przy wyłączonym przekaźniku około 50 mA.

Demontaż urządzenia

  1. Odkręcić 4 wkręty trzymających oba panele ze sobą. Znajdują się one w nóżkach na tylnim panelu w rogach obudowy.
  2. Podnieść lekko przedni panel do góry, a następnie usunąć prawy panel.
  3. Odłączyć wtyczkę diody (2 pin) oraz wyświetlacza (16 pin).
  4. Odkręcić nakrętki na przyciskach na przednim panelu a następnie wypchnąć je do środka.
  5. W tej chwili przedni panel wraz ze wszystkimi peryferiami jest oddzielony od tylnego.
  6. Aby wyjąć antenę, płytkę z układem lub wyświetlacz należy odkręcić odpowiednie śruby mocujące.

Oprogramowanie (firmware)

Struktura

Kod jest podzielony na oddzielne moduły które są odpowiedzialne za poszczególne funkcje dzwonka:

Kompilacja

Wymagania:

Należy upewnić się, że wtyczka AVR plugin ma poprawnie skonfigurowane ścieżki, a następnie otworzyć workspace (z katalogu firmware) i zbudować projekt.

Fuse bity

Aktualizacja

Aktualizację oprogramowania można dokonać używając programu avrdude oraz dowolnego programatora ISP (np. USBasp) poprzez gniazdo znajdujące się na płytce w środku obudowy. W sekcji demontaż przedstawione jest w jaki sposób się do niego dostać.

Struktura pamięci EEPROM

Ogólne

Pamięć ma wielkość 1024 bajtów i jest w niej zawarta konfiguracja urządzenia. Wszystkie zmienne zajmujące więcej niż 1 bajt przechowywane są w formacie little-endian.

W opisie wykorzystane są definicje struktur w języku C oraz standardowe typy danych z nagłówka stdint.h. Jeżeli liczba jest poprzedzona przez 0x to oznacza, że jest zapisana w systemie heksadecymalnym.

Pamięć jest podzielona na następujące struktury:

Rozmieszczenie struktur w pamięci:
Adres 0x0 0x8 0x48 0x48 + n * 0x70 0x198 0x208 0x208 + n * 0x28 0x3C0 0x3E8 0x400
Struktura metadata_t settings_t profile_t (0) profile_t (n) profle_t (3) month_t (0) month_t (n) month_t (11) nieużywane - pozostawić 0xFF (0x18 bajtów)

Wpisanie nieprawidłowych wartości do jakiejkolwiek struktury może spowodować niezdefiniowane zachowanie układu dzwonka. System po otrzymaniu pliku z konfiguracją nie sprawdza jej i traktuje wszystkie dane jako poprawne.

W polach nieużywanych lub zarezerwowanych (reserved) należy pozostawić wartość 0xFF.

Lista profili:

Lista miesięcy:

Opisy struktur

metadata_t

typedef struct
{
	uint16_t checksum;
	uint8_t reserved[0x6]; // = 0xFF
} metadata_t;

settings_t

typedef struct
{
	uint8_t bellLengthForLesson;
	uint8_t bellLengthForBreak;
	uint8_t schoolYear;
	uint8_t autoTimeTransition;
	uint16_t dcf77SynchronizationTime;
	uint16_t dcf77SynchronizationMaxLength;
	uint8_t reserved[0x38]; // = 0xFF
} settings_t;

profile_t

#define PROFILE_BELLS_COUNT 40
				
typedef struct
{
	uint8_t count;
	uint16_t bells[PROFILE_BELLS_COUNT];
	uint64_t bellTypes; // bit mask, 0 - for lesson, 1 - for break
	uint8_t reserved[0x17]; // = 0xFF
} profile_t;

month_t

typedef struct
{
	uint8_t days[32];
	uint8_t reserved[0x8]; // = 0xFF
} month_t;

Przenoszenie pliku konfiguracyjnego na urządzenie

Poprzez kartę microSD

  1. Sformatuj kartę pamięci używając systemu plików FAT32 jeśli jest inny.
  2. Skopiuj plik konfiguracyjny do głównego katalogu na karcie pamięci i zmień jego nazwę i rozszerzenie na dzwonek.2lo.
  3. Włóż kartę pamięci do urządzenia i z menu głównego wybierz opcję "Zarządzaj ustawieniami" a następnie "Odczytaj z karty SD". Układ odczyta i zweryfikuje integralność danych, a następnie gdy wyświetli komunikat o pomyślnym załadowaniu konfiguracji wciśnij dowolny klawisz, aby go uruchomić ponownie.

Poprzez programator ISP

  1. Podłącz programator do komputera oraz układu za pomocą gniazda ISP znajdującego się na płytce.
  2. Za pomocą programu avrdude wgraj plik pamięci EEPROM następującym poleceniem (w miejsce programator wstaw swój model programatora, a w miejsce dane nazwę pliku z konfiguracją):
  3. avrdude -p m328p -c programator -U eeprom:w:dane:r

    np. dla programatora USBasp i pliku z danymi o nazwie dzwonek.2lo polecenie będzie wyglądało tak:

    avrdude -p m328p -c usbasp -U eeprom:w:dzwonek.2lo:r