background image

22

ELEKTRONIKA PRAKTYCZNA 12/2014

PROJEKTY

Data Logger jest uniwersalnym 

bankiem danych zasilanym 

z  baterii.  Pozwala 

na  zapisywanie  na  karcie 

SD  informacji  z  czujnika 

temperatury  oraz  z  dwóch 

napięciowych  wejść  analogowych. 

Ma  wbudowany  układ  ładowania 

baterii  za  pomocą  USB. 

Dodatkowo,  wyposażono  go 

w  zegar  czasu  rzeczywistego. 

Pełna  konfiguracja  urządzenia 

odbywa  się  za  pomocą  zmian 

w  pliku  konfiguracyjnym 

zapisanym  na  karcie  SD.

Rekomendacje:  urządzenie 

przyda  się  do  monitorowania 

temperatury  lub  innych 

parametrów  środowiskowych 

zamienionych  na  napięcie  (albo 

samego  napięcia  w  zakresie 

0…15  V  lub  0…40  V).

Data Logger – rejestrator 

temperatury lub napięcia

peratury  pełni  DS18B20  firmy  Maxim-Dallas 
dołączany  do  mikrokontrolera  poprzez  inter-
fejs 1-Wire.

Algorytm  działania  programu  pokazano 

na 

rysunku 2.

Do wejścia przetwornika A/C doprowadzo-

no napięcie zasilające. Gdy jego wartość osiąg-
nie  wartość  3,1  V,  rejestrator  wyłącza  się  (mi-
krokontroler  jest  wprowadzany  w  tryb  Power 
Down

).  Ten  mechanizm  ma  na  celu  ochronę 

akumulatora  zasilającego  przed  zbyt  głębokim 
rozładowaniem.  Jeśli  dojdzie  do  wyłączenia 
zasilania, to należy po prostu naładować aku-
mulator  oraz  wyłączyć  i  włączyć  zasilanie  za 
pomocą wyłącznika, co spowoduje restart mi-
krokontrolera.

Na pinie zasilającym część analogową mi-

krokontrolera (AVCC) zastosowano filtr LC. Dla 
poprawienia dokładności pomiarów zastosowa-
no zewnętrze źródło napięcia odniesienia – jego 
rolę  pełni  układ  U5.  Jego  napięcie  wyjściowe 
wynosi 2,5 V z dokładnością 1%. Pomiar napię-
cia baterii zasilającej odbywa się poprzez dziel-
nik  napięcia  z  dwóch  rezystorów  10  kV/1%, 
dzięki czemu w skrajnym wypadku (4,2 V) na-
pięcie na wejściu przetwornika nie przekracza 
2,5 V, tj. napięcia maksymalnego. Pozostałe dwa 
kanały,  do  których  można  dołączyć  napięcia 

Schemat ideowy rejestratora pokazano na 

ry-

sunku 1. Urządzenie jest zasilane za pomocą 
baterii litowo-jonowej o pojemności 1800 mAh 
z  telefonu  komórkowego.  Napięcie  zasila-
nia  płytki  rejestratora  mieści  się  w  zakresie 
3,1…4,2 V. Dla uproszczenia budowy rejestra-
tora i ze względu na charakter zasilania dostar-
czanego  przez  akumulator,  nie  zastosowano 
stabilizatora  scalonego.  Po  dołączeniu  baterii 
na  stałe  jest  zasilany  tylko  układ  zegara  RTC 
–  U6  (PCF8583T),  dzięki  czemu  nie  trzeba 
po  każdym  włączeniu  urządzenia  ustawiać 
daty  i  godziny.  Pobór  prądu  przez  ten  układ 
jest  znikomy  i  wynosi  jedynie  50  mA.  Reszta 
urządzenia jest zasilana za pośrednictwem wy-
łącznika.

Sercem  rejestratora  jest  mikrokontroler 

ATmega32A taktowany za pomocą wewnętrz-
nego  oscylatora  RC  o  częstotliwości  1  MHz. 
Do  sygnalizowania  jego  statusu  służą  dwie 
diody  LED  przyłączone  do  mikrokontrolera. 
Trzecią  diodę  dołączono  do  wyjścia  PROG 
układu  scalonej  ładowarki  akumulatorów  Li-
Ion – MCP73831. Służy ona do sygnalizowania 
stanu ładowania baterii (dioda świeci się pod-
czas  ładowania  baterii,  a  po  jej  naładowaniu 
gaśnie).  Ładowarka  jest  zasilana  za  pośredni-
ctwem gniazda mini USB. Rolę czujnika tem-

AVT

5479

W ofercie AVT*

AVT-5479 A 

AVT-5479 B

AVT-5479 UK

Podstawowe informacje:

•Rejestrowanie temperatury, napięcia zasilają-

cego i  dwóch napięć wejściowych w  pliku

CSV na  karcie SD.

•Napięcie wejściowe z  zakresu 0…15 V lub

0…40 V.

•Napięcie zasilające 3,1…4,2 V (akumulator

Li-Ion), maksymalny pobór prądu ok.

20  mA.

•Nieprzerwana praca przez ok. 3 doby

przy zasilaniu z  akumulatora o  pojemności

1200  mAh.

•Mikrokontroler ATmega32, oprogramowanie

w  języku C.

Dodatkowe materiały na  FTP:

ftp://ep.com.pl

, user: 

63172

, pass: 

428ofq53

•wzory płytek PCB

Projekty pokrewne na  FTP:

(wymienione artykuły są  w  całości dostępne na  FTP)

AVT-5458 Wielokanałowy woltomierz-

-rejestrator (EP 9/2014)

AVT-5420 Wielopunktowy termometr

z  rejestracją (EP 10/2013)

AVT-5373 Tlogger –  rejestrator temperatury

(EP 12/2012)

* Uwaga:

Zestawy AVT mogą występować w  następujących wersjach:

AVT xxxx UK to  zaprogramowany układ. Tylko i  wyłącznie. Bez elementów

dodatkowych.

AVT xxxx A

płytka drukowana PCB (lub płytki drukowane, jeśli w  opisie

wyraźnie zaznaczono), bez elementów dodatkowych.

AVT xxxx A+ płytka drukowana i  zaprogramowany układ (czyli połączenie

wersji A  i  wersji UK) bez elementów dodatkowych.

AVT xxxx B

płytka drukowana (lub płytki) oraz komplet elementów wymienio-

ny w  załączniku pdf

AVT xxxx C

to  nic innego jak zmontowany zestaw B, czyli elementy wluto-

wane w  PCB. Należy mieć na  uwadze, że  o  ile nie zaznaczono

wyraźnie w  opisie, zestaw ten nie ma obudowy ani elementów

dodatkowych, które nie zostały wymienione w  załączniku pdf

AVT xxxx CD oprogramowanie (nieczęsto spotykana wersja, lecz jeśli występuje,

to  niezbędne oprogramowanie można ściągnąć, klikając w  link

umieszczony w  opisie kitu)

Nie każdy zestaw AVT występuje we wszystkich wersjach! Każda wersja ma

załączony ten sam plik pdf! Podczas składania zamówienia upewnij się, którą

wersję zamawiasz! (UK, A, A+, B lub C).

http://sklep.avt.pl

background image

23

ELEKTRONIKA PRAKTYCZNA 12/2014

DataLogger– rejestratortemperaturylubnapięcia

IC1

4

7

8

29 27 28

17 5 38

18 6 39

30 31 32 33 34 35 36 37

3 2 1 44 43 42 41 40

26 25 24 23 22 21 20 19

16 15 14 13 12 11 10 9

AT

mega32

RESE

T

XT

AL2

XT

AL1

AREF AV

CC

AGND

VCC

GND

(ADC7)P

A7

(ADC6)P

A6

(ADC5)P

A5

(ADC4)P

A4

(ADC3)P

A3

(ADC2)P

A2

(ADC1)P

A1

(ADC0)P

A0

(SCK

)PB7

(MISO

)PB6

(MOSI)PB5

(SS)PB4

(AIN1/OC0)PB3 (AIN0/INT2)PB2

(T1)PB1

(T0/X

CK

)PB0

(T

OSC2)PC7

(T

OSC1)PC6 (

TDI)PC5

(TDO

)PC4

(TMS)PC3 (T

CK

)PC2

PC1(SD

A

)

PC0(SCL)

(OC2)PD7 (ICP)PD6

(OC1A

)PD5

(OC1B)PD4 (INT1)PD3 (INT0)PD2 (

TXD

)PD1

(R

XD

)PD0

SD_ON

R16 100

R9 10k

+3V3

T1 BSS84

C4 100n

10

11

4

3

6

7 8 9 1 2

5

12 13 14 15

D

AT

0

D

AT

1

D

AT

2

CD/D

AT3

CMD/DI

CLK/SCLK

GND1 GND2 GND3 GND4

WP

CDI#

VDD

VSS1

VSS2

+3V3

1W U

CC

CH2 CH1

+3V3

R1 100k

RST

L1 10uH

AREF

C3

100n

C7

100n

C1 100n

C2 100n

SDA SCL

R11 820

R4 130

D2

D3

INT SD_ON

1

2

8

U4

4

PCF8583T

C10 22p

Y1

32,768kH

z

+

C9 10u

C8 22p

6

5

7

3

VDD

OSCI

OSC

O

VSS

SCL

SDA

INT

A0

VCC

+3V3

R14 100k

R15 100k

SCL

SDA

INT

+3V3

+

AREF

C11 10u

MCP1525

U3

1

3

2

IN

GND

OUT

+3V3

VCC

ON/OFF

3

2

1

VCC

VCC

GND

GND

Zasilanie

èrÛd≥o napiÍcia odniesienia

+3V3

1W

1W

2

3

1

GND

VDD

R10 100k

IC

U5A DS18B20

Czujnik t

emper

atur

y

+3V3

CH1

CH2

UCC

J2-1

J2-2

J2-3

R12 10k

R8 10k

R6 150k

R5 10k

R7 2k

R13 10k

Pomiar

y analogo

w

e

M

ik

rokon

tr

oler i k

ar

ta SD

1 2 3 4 5

+

+

D1

R2 820

1

4

J1

C5 4u7

MINI USB

MCP73831

U2

VCC

3 5 2

C6 4u7

R3 2k

VBA

T

PR

OG VSS

VIN

ST

AT

Łado

w

anie ba

ter

ii

Rysunek 1. Schemat ideowy Data Loggera

z zakresu 0…40 V i 0…15 V również dołączone 
są przez dzielniki, ale o innym stopniu podzia-
łu (150 kV/10 kV oraz 10 kV/2 kV). Dla kanału 
pierwszego współczynnik podziału wynosi 15, 
natomiast dla drugiego 5. Są to liczby całkowite, 
dzięki czemu łatwo je zaimplementować przy 

przeliczaniu wartości z przetwornika na rzeczy-
wiste napięcie (

listing 1).

W  pętli  głównej  mikrokontroler  odczytuje 

reprezentację  napięcia  z  przetwornika,  nato-
miast jej zamiana na napięcie odbywa się przed 
zapisem na karcie SD.

Do rejestrowania danych zastosowano kartę 

SD. Do obsługi programowej wykorzystano bi-
bliotekę FATFs dostępną na stronie internetowej 

http://elm-chan.org/

. Wszystkie informacje są za-

pisywane w pliku DATA.CSV. Dzięki zachowa-
niu formatu CSV plik można otworzyć np. za 

background image

Listing 1. Konwersja wartości 

odczytanej z przetwornika 

na napięcie

while(1)

{

        .

        .

        .

    //pomiar napięcia CH1

    u1_adc = pomiar(2);

    //pomiar napięcia CH2

    u2_adc = pomiar(3);

        .

        .

        .

}

//obliczenie napięcia zasilania

u = u_adc * 244 * 2;

cz_d_u = u / 100000;

cz_u_u = (u/1000) % 100;

//obliczenie napięcia CH1

u1 = u1_adc * 244 * 15;

cz_d_u1 = u1 / 100000;

cz_u_u1 = (u1/1000) % 100;

//obliczenie napięcia CH2

u2 = u2_adc * 244 * 6;

cz_d_u2 = u2 / 100000;

cz_u_u2 = (u2/1000) % 100;

Listing 2. Procedura odczytu pliku konfiguracyjnego

if (CD_ON)  // sprawdzenie czy włożono kartę

{

    disk_initialize(0);

    _delay_ms(10);

    f_mount(0, &FATFS_Obj);

//inicjalizacja karty oraz otwarcie pliku w katalogu głównym

//o nazwie config.txt

    f_err_code = f_open(&fil_obj, „config.txt”, FA_READ);

    _delay_ms(10);

//sprawdzanie czy plik istnieje

    if(f_err_code == FR_OK)

    {

//ustawienie kursora na początku pliku

        f_lseek(&fil_obj, 0);

//odczyt do zmiennej znakowej całej lini pilku (aż do znaku CR LF)

        f_gets(rok, sizeof rok, &fil_obj);

//przesunięcie kursora o dwa bajty

        f_lseek(&fil_obj, f_tell(&fil_obj) + 2);

        f_gets(miesiac, sizeof miesiac, &fil_obj);

        f_lseek(&fil_obj, f_tell(&fil_obj) + 2);

        f_gets(dzien, sizeof dzien, &fil_obj);

        f_lseek(&fil_obj, f_tell(&fil_obj) + 2);

        f_gets(godzina, sizeof godzina, &fil_obj);

        f_lseek(&fil_obj, f_tell(&fil_obj) + 2);

        f_gets(minuta, sizeof minuta, &fil_obj);

        f_lseek(&fil_obj, f_tell(&fil_obj) + 2);

        f_gets(s1, sizeof s1, &fil_obj);

        f_lseek(&fil_obj, f_tell(&fil_obj) + 2);

        f_gets(s2, sizeof s2, &fil_obj);

        _delay_ms(10);

        f_close(&fil_obj);  //zamknięcie pliku

        set_godziny = atoi(godzina);  //konwersja zmiennych z string na int

        set_minuty = atoi(minuta);

        ram_dane.set_rok = atoi(rok);

        set_miesiac = atoi(miesiac);

        set_dzien = atoi(dzien);

        ram_dane.s1_d = atoi(s1);

        ram_dane.s2_d = atoi(s2);

//warunki zabezpieczające przed sczytaniem błędnych

//danych wprowadzonych przez użytkownika

        if(ram_dane.s1_d >= 10) ram_dane.s1_d = 9;

        if(ram_dane.s2_d >= 7) ram_dane.s2_d = 6;

        if (set_godziny >= 24) set_godziny = 0;

        if (set_minuty >= 60) set_minuty = 0;

        if (ram_dane.set_rok >=100) ram_dane.set_rok = 0;

        if (set_miesiac >= 13) set_miesiac = 1;

        if (set_dzien >=32) set_dzien = 1;

//po ustawieniu danych skopiowanie ich do eepromu

        copy_ram_to_eem();

//ustawienie czasu

        set_time(set_godziny, set_minuty, 0);

//ustawienie daty (rok liczony przez program a nie przez pcf8583)

        set_date(set_dzien, set_miesiac);

    }

//jeśli wykryto brak pliku, program sczytuje dane z eeprom

//(rok, częstotliwość zapisu, typ danych do zapisu)

    else copy_eem_to_ram();

        flaga_start = 1;

    }

//jeśli wykryto brak karty SD, program sczytuje dane z eeprom

//(rok, częstotliwość zapisu, typ danych do zapisu)

    else

    {

        copy_eem_to_ram();

        flaga_start = 1;

    }
//instrukcja ustawia wartość częstotliwości zapisu danych na SD

//w zależności od wprowadzonej liczby

    switch(ram_dane.s1_d)

    {

        case 0:

        {

            f_zapisu = 1;  //dla 0 zapis co 1 sekundę

            break;

        }

    .

    .

    .

         case 9:

         {

             f_zapisu = 7200;  //dla 9 zapis co 2 godziny

             break;

         }

    }

Listing 3. Struktura zmiennej z konfiguracją

typedef struct {  //deklaracja struktury zapisywanej w eepromie oraz w pamieci 

ram

    uint8_t set_rok;

    uint8_t s1_d;

    uint8_t s2_d;

} LDATA;

LDATA ram_dane;

LDATA eem_dane __attribute__((section(„.eeprom”)));  // dane w pamięci EEPROM

PROJEKTY

Rysunek 2. Nagłówki dodawane w pliku 
CSV

pomocą arkusza kalkulacyjnego i w prosty spo-
sób dokonać ich interpretacji.

W związku z tym, że w urządzeniu nie zo-

stały  zastosowane  żadne  elementy  interfejsu 
użytkownika umożliwiające jego skonfigurowa-
nie, odbywa się ono za pomocą pliku zapisywa-
nego na karcie SD. W ten sposób można usta-
wić: datę, godzinę, częstotliwość wykonywania 
pomiarów, wykorzystywane kanały pomiarowe. 
Aby dokonać konfiguracji, należy na karcie SD 
utworzyć  plik  config.txt.  Jego  odczyt  jest  wy-
konywany  tylko  raz,  przy  włączeniu  urządze-
nia.  Na 

listingu  2  przedstawiono  procedurę 

odczytu  pliku  konfiguracyjnego.  Rozpoczyna 
się  ona  od  sprawdzenia,  czy  włożono  kartę 
SD do gniazda. Jeśli tak (warunek CD_ON jest 
spełniony), to rozpoczyna się inicjalizacja karty. 
Następnie polecenie f_open otwiera plik config.
txt

,  jeśli  ten  istnieje.  Gdy  wszystkie  warunki 

zostaną spełnione, parametr f_err_code zwraca 
wartość FR_OK. Jeżeli ten warunek nie zostanie 
spełniony, czyli użytkownik nie wgra pliku kon-
figuracyjnego na kartę, program pobierze dane 
konfiguracyjne z pamięci EEPROM. Jeśli jednak 
taki  plik  istnieje,  zaczyna  się  odczyt  danych. 
Polecenie f_lseek ustawia kursor odczytu na sa-
mym początku pliku. Polecenie f_gets do zmien-
nej znakowej rok odczytuje całą linię, aż do zna-
ków  CR+LF,  czyli  dwa  bajty  danych  (np:  14 
oznaczający  rok  2014)  oraz  bajt  końca  linii. 
Następnie  polecenie  f_lseek  przesuwa  kursor 
o dwa bajty, na kolejną linię, w której podano 
miesiąc. W ten sam sposób odczytywane są pa-
rametry: dzień, godzina, minuta, częstotliwość 
zapisu (s1) oraz wybrane kanały (s2). Następnie 
plik jest zamykany.

W związku z faktem, że wykorzystane dane 

mają być m.in. przesłane do układu RTC, mu-
szą zostać przekonwertowane na liczbę. Do tego 
celu wykorzystano funkcję atoi() zawartą w bi-
bliotece  stdlib.h.  Wszystkie  dane  są  konwerto-

background image

25

ELEKTRONIKA PRAKTYCZNA 12/2014

wane na typ uint8_t. Informacje, takie jak: rok, 
częstotliwość zapisu, wybrane kanały są zapisy-
wane w pamięci EEPROM. Aby łatwo zapamię-
tać te dane w pamięci EEPROM, zdefiniowano 
strukturę pokazaną na 

listingu 3. Ta sama struk-

tura służy do utworzenia zmiennej w pamięci 
RAM,  dzięki  czemu  można  po  prostu  skopio-
wać konfigurację z EEPROM do RAM.

Po konwersji zmiennych odbywa się spraw-

dzenie, czy użytkownik wprowadził poprawne 
dane. Jeśli nie, program samodzielnie ustawia 
wartości domyślne. Kolejnym krokiem jest za-
pisanie danych w pamięci EEPROM oraz prze-
słanie nastaw do zegara RTC. Następnie w in-
strukcji switch odbywa się ustawienie częstotli-

Listing 4. Procedura wprowadzania mikrokontrolera w stan głębokiego uśpienia 

Power Down

void uspienie_low_bat(void)

{

    sd_pwr(0);  //wyłączenie zasilania karty SD

//wprowadź mikrokontroler w tryb Power Down

    flaga = 1;

    set_sleep_mode(SLEEP_MODE_PWR_DOWN);  //tryb Power Down Mode

    sleep_enable();

    sleep_cpu();

}
void sd_pwr( uint8_t OnOff ) {  //wyłączenie karty SD

    if(OnOff) {

        SPCR |= (1<<SPE);

        SD_ON;

        _delay_ms(50);

    } else {

        SPCR &= ~ (1<<SPE);

        DDRB &= ~ (1<<PB4);

        DDRB |= (1<<PB5);

        DDRB |= (1<<PB7);

        PORTB &= ~ (1<<PB4);

        PORTB &= ~ (1<<PB5);

        PORTB &= ~ (1<<PB7);

        SD_OFF;

        _delay_ms(50);

    }

}

Wykaz elementów

Rezystory: (SMD 0805)
R1: 10 kV
R2: 820 V
R3: 2 kV
R7: 2 kV/1%
R4: 470 V
R6: 150 kV/1%
R5, R8, R12, R13: 10 kV/1%
R11: 820 V
R10, R14, R15: 100 kV

Kondensatory:
C1, C2: 33 mF/16 V (SMD)
C3…C5: 100 nF (SMD 0805)
C6: 10 mF/16 V
C7, C9: 22 pF (SMD 0805)
C8: 10 m/16V (SMD)

Półprzewodniki:
U1: ATmega32A (SMD)
U2: MCP73831
U4: DS18B20
U5: MCP1525
U6: PCF8583T
LED1: dioda LED SMD, czerwona
LED2: dioda LED SMD, zielona
LED3: dioda LED SMD, niebieska
Inne:
L1: dławik 10 mH
Y1: kwarc 32,768 kHz
X1: gniazdo MINI-USB, SMD
X2: złącze ARK3
U3: złącze karty SD

Przełącznik HSS1260R

DataLogger– rejestratortemperaturylubnapięcia

wości zapisu danych na kartę SD. W zależności 
od  wprowadzonej  wartości  zmiennej  ram_
dane.s1_d

  jest  ustawiana  wartość  zmiennej  f_

zapisu

, która to jest porównywana ze zmienną 

flaga_licznik

. Ta zmienna jest zwiększana co 1 

sekundę  przez  procedurę  obsługi  przerwania 
zewnętrznego  INT1.  Źródłem  przerwania  jest 
wyjście INT układu zegara RTC.

Jak wspomniano, na początku pętli głów-

nej programu jest mierzone napięcie zasilania 
i jest podejmowana decyzja o wyłączeniu urzą-
dzenia  lub  dalszej  pracy.  Na 

listingu poka-

zano  procedurę  wprowadzania  mikrokontro-
lera w stan głębokiego uśpienia Power Down
Funkcja  sd_pwr()  wyłącza  zasilanie  karty  SD. 
Najpierw  linie  SPI  są  ustawiane,  a  następnie 
jest wyłączane zasilanie poprzez wyzerowanie 
pinu PD2 sterującego tranzystorem T1 pełnią-
cego  rolę  włącznika  zasilania  karty  (zależnie 
od  argumentu  funkcji  można  kartę  włączyć 
–  argument  1,  lub  wyłączyć  –  argument  0). 
Następnie  funkcja  uspienie_low_bat  wprowa-
dza procesor w stan uśpienia.

Kolejnym krokiem w pętli głównej jest po-

równywanie wartości zmiennych flaga_licznik 
f_zapisu. Jeśli te zmienne są równe, to rozpo-
czyna  się  procedura  zapisu  danych  na  karcie 
SD. Po pierwszym uruchomieniu program two-
rzy lub otwiera plik DATA.csv, a następnie doda-
je w nim nagłówki, co pokazano na 

rysunku 2

W  kolejnych  liniach  pliku  program  zapisuje 
rekordy. To, jakie dane zostaną zapamiętane za-
leży od wybranego trybu pracy. Użytkownik ma 

SD

C

ard

C

4

R

16

C

1

T1

R

9

PC

B: 

V3

PROS

D

ata

 L

og

ge

r v

1.0

1

1

2

3

U

1

R

1

U

2

R

2

D

1

J1

R

3

VC

C

G

N

D

D

2

R

4

C

5

C

6

R

5
R

6

R

7

R

8

C

3

L1

U

5

R

10

D

3

R

11

R

12

R

13

U

3

C

11

R

14

R

15

Y1

U

4

C

8

C

9

C

10

C

2

R

ST

ON/OF F

J2

C

7

Rysunek 3. Schemat montażowy Data 
Loggera

do wyboru 7 trybów zapisu danych. Na 

listin-

gu 5 pokazano jeden z nich. Na początku wywo-
łana jest funkcja card_init(), która zapisuje aktu-
alną godzinę oraz inicjalizuję kartę. Tu również 
zostaje  włączona  na  czas  zapisu  dioda  LED2. 
Następnie, kolejną zapisywane są:

•  wartość napięcia zasilającego,
•  wartość napięcia na wejściu kanału pierw-

szego,

Konfiguracja urządzenia

Na karcieSDnależyutworzyćpliktekstowyo nazwie

config.txti wprowadzićnastępującedane:

Linie1…3zawierajądatęw kolejności:rok,miesiąc,

dzień.

Linie4…5zawierajągodzinęw kolejności:godzina,

minuty.

Linia6zawieraczęstotliwośćzapisu.

1 s

5 s

10 s

30 s

1 min

5 min

10min

30 min

1 h

2h

0

1

2

3

4

5

6

7

8

9

Np.dlaokresuzapisurównego10minut,w szóstejliniiplikuwpisujemyliczbę„6”.

Linia7zawierawybranekanałypomiarowe.

0

1

2

3

4

5

6

Wszyst-

kie dane: 

temperatura, 

napięcia 

na  CH1 

i  CH2, 

napięcie 

zasilające

Napięcia 

na  CH1 

i  CH2,  tem-

peratura

Napięcie 

na  CH1, 

temperatura

Napięcie 

na  CH2, 

temperatura

Napięcia 

na  CH1 

i  CH2

Temperatura Temperatura 

i  napięcie 

zasilające

background image

26

ELEKTRONIKA PRAKTYCZNA 12/2014

Rysunek 5. Wyprowadzenia interfejsu 
karty SD

Listing 5. Zapis danych na karcie SD w jednym z trybów pracy

LEDW_ON;  //zaświecenie zielonej diody LED

card_init();

    .

    .

f_printf(&fil_obj, „%d”, cz_d_u);

f_printf(&fil_obj, „%s”, „,”);

if (cz_u_u < 10) f_printf(&fil_obj, „%s”, „0”);

if (cz_u_u == 0) f_printf(&fil_obj, „%s”, „00”);

f_printf(&fil_obj, „%d”, cz_u_u);

f_printf(&fil_obj, „%s”, „;”);

f_printf(&fil_obj, „%d”, cz_d_u1);

f_printf(&fil_obj, „%s”, „,”);

if (cz_u_u1 < 10) f_printf(&fil_obj, „%s”, „0”);

if (cz_u_u1 == 0) f_printf(&fil_obj, „%s”, „00”);

f_printf(&fil_obj, „%d”, cz_u_u1);

f_printf(&fil_obj, „%s”, „;”);

f_printf(&fil_obj, „%d”, cz_d_u2);

f_printf(&fil_obj, „%s”, „,”);

if (cz_u_u2 < 10) f_printf(&fil_obj, „%s”, „0”);

if (cz_u_u2 == 0) f_printf(&fil_obj, „%s”, „00”);

f_printf(&fil_obj, „%d”, cz_u_u2);

f_printf(&fil_obj, „%s”, „;”);

if(subzero) f_printf(&fil_obj, „%s”, „-”);

else f_printf(&fil_obj, „%s”, „ „);

f_printf(&fil_obj, „%d”, cel);

f_printf(&fil_obj, „%s”, „,”);

if (cel_fract_bits == 0) f_printf(&fil_obj, „%s”, „0”);

f_printf(&fil_obj, „%d”, cel_fract_bits);

f_printf(&fil_obj, „%s”, „\r\n”);

    .

    .

f_close(&fil_obj);  //zamknięcie pliku

LEDW_OFF;  //zgaszenie zielonej diody LED (świeci w trakcie zapisu)

Fotografia 4. Kabel używany do programowania

waż EEPROM jest czysty. Bez tych ustawień 
układ  nie  zadziała.  Aby  dokładnie  ustawić 
czas  układu  PCF8583,  należy  po  zapisaniu 
pliku  na  karcie  włączyć  zasilanie  1  sekundę 
przed ustawioną godziną i minutą. Ta proce-
dura  jest  konsekwencją  początkowego  opóź-
nienia  przy  starcie  programu.  Dla  przykła-
du,  gdy  ustawimy  godzinę  18:34,  włączamy 
układ  o  godzinie  18:33:59.  Program  zaczyna 
pracę po ok. 4 sekundach od uruchomienia. 
Sekwencja  startowa  wygląda  następująco: 
Po przełączeniu przełącznika ON/OFF na se-
kundę zapali się dioda LED2, następnie zapa-
li się na 3 sekundy dioda LED3. Gdy zgaśnie 
układ zaczyna rejestrowanie.

Układ  w  trybie  czuwania  pobiera  prąd 

o natężeniu ok. 2,5 mA, natomiast w trakcie 
zapisu  ok.  20  mA.  Zapis  danych  na  karcie 
trwa mniej niż 100 ms. Przy pojemności aku-
mulatora  wynoszącej  1200  mAh  układ  pra-
cuje  w  sposób  ciągły  przez  ok.  3  doby.  Przy 
włączniku ustawionym w pozycji OFF układ 
pobiera  prąd  o  natężeniu  ok.  50  mA.  Wtedy 
działa tylko układ RTC PCF8583. Po wejściu 
w tryb Power Down rejestrator pobiera ok 0,7 
mA, ponieważ wszystkie rezystory podciąga-
jące są podłączone do baterii poprzez włącz-
nik.  Na 

rysunku  6  przedstawiono  wykres 

napięcia zasilania w funkcji czasu w przecią-
gu 12 godzin, przy włączonym trybie zapisu 
wszystkich danych co 1 sekundę.

Piotr Rosenbaum

piotr.rosenbaum@gmail.com

SD

SPI

Pin

1

2
3
4
5
6
7
8
9

CD/DAT3

CMD

VSS1

VDD

CLK

VSS2
DAT0

DAT1

DAT2

X

MOSI

GND

VDD
SCK

GND

MISO

X
X

9

1 2 3 4 5 6

7 8

SD

4,05

4

3,95

3,9

3,85

3,8

Vcc [V]

23:32:00 23:42:15 23:52:31 00:02:47 00:13:03 00:23:19 00:33:35 00:43:51 00:54:07 01:04:23 01:14:39 01:24:55 01:35:11 01:45:27 01:55:43 02:05:59 02:16:15 02:26:31 02:36:47 02:47:03 02:57:19 03:07:35 03:17:51 03:28:07 03:38:23 03:48:39 03:58:55 04:09:11 04:19:27 04:29:43 04:39:59 04:50:15 05:00:31 05:10:47 05:21:03 05:31:19 05:41:35 05:51:51 06:02:07 06:12:23 06:22:39 06:32:55 06:43:11 06:53:27 07:03:43 07:13:59 07:24:15 07:34:31 07:44:47 07:55:03 08:05:19 08:15:35

Rysunek 6. Wykres napięcia zasilania w funkcji czasu

RESET

 i dlatego na płytce drukowanej utwo-

rzono pole nazwie RST. Na 

rysunku 6 pokaza-

no wyprowadzenia karty SD wykorzystywane 
do programowania mikrokontrolera.

Po  zaprogramowaniu  mikrokontrolera, 

po  załączeniu  zasilania  powinna  zaświecić 
się dioda LED2. Jeśli tak się jest, to układ jest 
gotowy do pracy. Przy pierwszym uruchomie-
niu należy wgrać na SD plik config.txt, ponie-

•  wartość napięcia na wejściu kanału drugie-

go

•  temperatura otoczenia.

Na końcu jest zapisywany znak nowej linii.
Krótkie,  naprzemienne  błyskanie  diod 

LED2 i LED3 oznacza brak możliwości zapisu 
na karcie.

Montaż i uruchomienie

Schemat  montażowy  rejestratora  pokazano 
na

 rysunku 3. Jego montaż jest typowy i nie wy-

maga szczegółowego omawiania.

Po zamontowaniu wszystkich komponen-

tów należy sprawdzić czy działa układ łado-
wania. W tym celu do gniazda USB należy do-
prowadzić napięcie z interfejsu USB kompu-
tera PC lub dołączyć do niego ładowarkę te-
lefonu komórkowego. Jeśli zaświeci się dioda 
LED1, to bateria ładuje się i układ ładowania 
działa  poprawnie.  Następnym  krokiem  jest 
zaprogramowanie  mikrokontrolera.  Jeśli  nie 
dysponujemy  podstawką  do  programowania 
układów w obudowie TQFP44, należy wyko-
nać kabel do programowania. Jego przykłado-
wy wygląd pokazano na 

fotografii 4.

Karta  SD  jest  połączona  z  mikrokontro-

lerem za pomocą sprzętowego interfejsu SPI
Dzięki temu na złączu karty są wyprowadzo-
ne linie do programowania. Jedyną linią nie-
wykorzystywaną  w  interfejsie  karty  SD  jest 

PROJEKTY