Data Logger rejestrator (AVT5479)

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 4 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


Wyszukiwarka

Podobne podstrony:
Data pierwszej rejestracji
Cyfrowy system rejestracji obrazu
W 3 RCDS,RNC,SRCD ograniczenia RCDS,REJESTRACJA
CW2006EX Mill Turn data sheet web
3 Data Plotting Using Tables to Post Process Results
PAT DS 350 Graphic Modular GM Service Data
An%20Analysis%20of%20the%20Data%20Obtained%20from%20Ventilat
Homework Data Structures
cx5500 data sheet enus
data
rejestr kontroli dostaw nabialu w przedszkolu, organizacja-pracy
Druk podania o rejestrację na semestr letni 2010-2011, Nauka, budownictwo, żelbet EC przykłądy
Sztuczki w rejestrze systemu Windows
Rejestr Systemowy1, edukacja i nauka, Informatyka
wniosek o rejestracje pojazdu
Data 09 Święto Niepodległości, Scenariusze i hospitacje - praktyki
6 1 dokumentacja rejestry, BHP dokumenty, ANALIZA STANU BHP

więcej podobnych podstron