Tải bản đầy đủ (.pdf) (64 trang)

Xây dựng hệ thống cân điện tử

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.99 MB, 64 trang )

PHỤ LỤC
CHƯƠNG I: TỔNG QUAN VỀ HỆ THỐNG CÂN ĐIỆN TỬ .................................
1.1:Hệ thống cân sử dụng loadcell và ứng dụng .............................................................................
1.2:Sơ lược các phương pháp và cảm biến được dùng trong việc đo khối lượng ............
1.2.1 Nguyên lý đo khối lượng .....................................................................................................
1.2.2 Các phương pháp đo khối lượng ........................................................................................
CHƯƠNG II: GIỚI THIỆU CÁC THIẾT BỊ PHẦN CỨNG .....................................
2.1 Raspberry Pi 3 .......................................................................................................................................
2.1.1 Cấu tạo ...............................................................................................................................................
2.1.2 Các kết nối với Raspberry Pi

.................................................................................................

2.1.3 Những thiết bị đi kèm cần thiết ..............................................................................................
2.1.4 Các hệ điều hành dành cho RASPBERRY PI .................................................................
2.1.5 Các bước cài đặt cơ bản cho RASPBERRY PI
2.1.6 Cài đặt ban đầu cho Raspberry Pi

...............................................................

.......................................................................................

2.1.7 Lập trình GPIO

............................................................................................................................

2.1.8 Lập trình I2C

.............................................................................................................................

2.2. Cảm Biến Loadcell 20kg ........................................................................................................


2.3. Mạch chuyển đổi ADC 24 bit loadcell Hx711 ................................................................
2.4. Màn hình cảm ứng LCD 5” HDMI Cảm ứng điện trở ...................................................
CHƯƠNG III: THIẾT KẾ CÂN ĐIỆN TỬ ......................................................................
3.1. Thiết kế phần cứng ................................................................................................................
3.1.1. tính chọn linh kiện ......................................................................................................................
3.1.2. xây dựng sơ đồ hệ thống cân điện tử .................................................................................
3.2. Chương trình cân điện tử .....................................................................................................
3.2.1. Giới thiệu phần mềm Python .................................................................................................
3.2.2. Chương trình điều khiển

..........................................................................................................

1


MỞ ĐẦU
Cân trọng lượng là một nhu cầu cần thiết và không thể thiếu trong đời sống xã hội,
từ người nông dân làm ra hạt thóc cho đến các khu chế xuất, các nhà máy xi măng
sản xuất ra hàng trăm tấn sản phẩm trong một ngày. Xuất phát từ nhu cầu thực tế và
ứng dụng công nghệ vi điều khiển các nhà khoa học đã nghiên cứu ra các loại cân
điện tử hiển thị số có thể cân được trọng lượng từ mg cho đến hàng trăm tấn mà các
loại cân cơ bình thường không thể thực hiện được. Trên thực tế các nhà máy sản xuất
muốn biết khối lượng hàng hóa, sản phẩm hay nguyên vật liệu, và cả cho những lĩnh
vực khác như bến cảng, trạm cân xe phát hiện quá tải của cảnh sát giao thông… đều
được sử dụng cân điện tử.
Trong thời đại ngày nay các hệ thống điều khiển tự động ngày càng có vai trò quan
trọng trong việc phát triển, sự tiến bộ của khoa học công nghệ và văn minh hiện đại.
Xuất phát từ thực tế đó nhóm em đã được phân công thực hiện đề tài: Xây dựng hệ
thống cân điện tử. Đây là một loại đề tài khá mới mẻ đối với chúng em nhưng nhờ
sự giúp đỡ tận tình của thầy giáo TS. Đặng Thái Sơn đã giúp chúng em hoàn thành đồ

án đúng với thời gian quy định.
Vinh, ngày 10 tháng 06 năm 2018
Em xin chân thành cảm ơn!

2


CHƯƠNG I: TỔNG QUAN VỀ HỆ THỐNG CÂN ĐIỆN TỬ

1.1.

Hệ thống cân sử dụng loadcell và ứng dụng

Sơ đồ khối của một hệ thống cân điện tử dùng loadcell như sau:

Hình 1.1 Sơ đồ khối của một hệ thống cân điện tử dùng loadcell
Tùy theo yêu cầu và mục đích ứng dụng. Khối xử lý được dùng là vi xử lý hay máy
tính … Nếu bộ xử lý sử dụng vi xử lý thì có thể có thêm khối truyền dữ liệu về máy
tính, có thể có khối in ấn tùy vào mục đích sử dụng.
Dưới tác dụng của khối lượng đặt bên trên, loadcell sẽ biến đổi thành tín hiệu điện
ở ngõ ra. Tín hiệu điện được đưa vào bộ chuyển đổi A/D để chuyển thành tín hiệu số
và được đưa về bộ xử lý để xử lý theo chương trình có sẵn và hiện thị lên màn hình.
Bộ xử lý cần thiết phải có thêm bộ nhớ để lưu trữ số liệu, ví dụ trong việc chỉnh 0 và
trừ bì của cân …
Do tính linh hoạt của bộ xử lý, tùy theo mục đích cụ thể mà chương trình viết cho
bộ xử lý khác nhau. Do đó, hệ thống cân điện tử có thể ứng dụng trong nhiều lĩnh vực
có liên quan đến việc đo khối lượng, cụ thể như sau:
- Trong hệ thống bán hàng, việc tính tiền có thể được tự động hoàn toàn. Hàng ở
đây là những loại có thể cân được, có thể là rau quả, thủy sản … Người sử
dụng nhập vào bàn phím giá cả của một đơn vị cân và giá cả này có thể hiện thị

3


ra màn hình hoặc Led 7 đoạn. Khi người dùng nhấn nút tính tiền trên bàn phím
bộ xử lý sẽ nhân giá trị cân được với giá của một đơn vị cân này và hiển thị ra
giá cả đã được tính toán cho số hàng ấy. Sau khi để giá này hiển thị một
khoảng thời gian vừa đủ cho người dùng đọc nó, hệ thống cân có thể sẽ hiển
thị lại giá trị cân được. Giá tiền này có thể được lưu lại và nếu được nối đến
máy tính của quầy thu tiền, khách hàng có thể nhận được bảng báo cáo bao
gồm trọng lượng cân được, giá cả của một đơn vị cân và tổng số tiền phải trả
cho số hàng đó …
-

Cân điện tử cũng là một trong những biện pháp để phát hiện ra sản phẩm trong
hệ thống đếm tự động. Khi phát hiện có khối lượng quy định thì mới đếm.
Điều này sẽ tránh được việc đếm sai nếu cùng một lúc có hai sản phẩm hoặc
vật thể khác không phải là sản phẩm che cảm biến quang.

- Một ứng dụng khác của hệ thống cân điện tử có thể kể ra là dùng trong bưu
điện. Sau khi cân kiện hàng và xác định nơi cần gửi. Ngõ ra của hệ thống cân
này thường được nối đến hệ thống in bưu phí lên nhãn dán vào kiện hàng gửi
đi.
- Ngoài ra ứng dụng phổ biến của cân điện tử đã được sử dụng nhiều trong các
nhà máy ở nước ta là ứng dụng trong việc đóng gói sản phẩm. Người dùng có
thể nhập vào khối lượng cho một gói hàng nào đó.Khi đạt đến giá trị quy định
này, ngõ ra của bộ vi xử lý có thể được dùng để điều khiển việc rót hàng hay
dây chuyền để đóng gói sản phẩm.
Điều quan trọng trong các ứng dụng này là chương trình điều khiển viết cho bộ
xử lý và cách giao tiếp với các thiết bị bên ngoài. Phần này thì khác nhau đối với
các ứng dụng cụ thể khác nhau.

1.2.

Sơ lược các phương pháp và cảm biến được dùng trong việc đo khối lượng

1.2.1 Nguyên lý đo khối lượng
Trong vật lý cơ học, mỗi quan hệ giữa lực và khối lượng được xác định bằng
định luật II Newton, mà theo đó lực tác dụng vào vật thể có khối lượng m sẽ bằng
tích số khối lượng và gia tốc của nó, tức là:
F  m.a

Trong đó :
4

1.1


- F: Lực tác dụng N 
- m: Khối lượng của vật Kg 
- a: Gia tốc của vật m / s 2 
Trọng lực là một trường hợp của công thức này. Dưới tác dụng của sức hút trái đất,
vật có khối lượng sẽ chịu tác dụng của trọng lực P  m.g với g là gia tốc trọng trường
là một số cố định ở từng khu vực. Các phương pháp đo khối lượng là dựa vào quan
hệ này.
Công thức 1.1 không có nghĩa là không có lực trên vật thể nếu không có gia tốc
mà nó chỉ có nghĩa là không có lực cân bằng thực. Hai lực cân bằng và đối nhau tác
động lên một vật thể sẽ cân bằng, không tạo nên gia tốc.
1.2.2 Các phương pháp đo khối lượng
a. Cảm biến điện trở lực căng
Sức căng  được xác định bằng sự thay đổi chiều dài L của thanh đàn hồi L so
với một đơn vị chiều dài:



L
L

Do tác dụng của lực vào thanh L , làm xuất hiện sức căng, tương ứng cũng làm
thay đổi giá trị điện trở điện của thanh. Cảm biến sức căng hoạt động dựa trên nguyên
tắc này, cho phép biến đổi giá trị  nhỏ thành sự thay đổi tương ứng giá trị điện trở
điện của thanh.
Có hai loại cảm biến sức căng:
- Loại gắn trực tiếp trên cần đàn hồi của bộ đo lực, ở vị trí cần đo sức căng. Khi
lực tác động làm căng hoặc cong cần đàn hồi, cũng trực tiếp làm cong cảm
biến.
- Loại gián tiếp được liên kết cơ học với yếu tố đàn hồi, thường sử dụng để đo
những độ lệch tổng cộng của yếu tố đàn hồi.
Cảm biến sức căng cho phép sử dụng để đo lực tác động do trọng lượng của vật
trong các bài toán cân.
5


b. Cảm biến áp điện
Cảm biến áp điện hoạt động dựa trên nguyên lý của hiệu ứng áp điện. Phần tử cơ
bản của một cảm biến áp điện có cấu tạo tương tự một tụ điện được chế tạo bằng cách
phủ hai bản cực lên hai mặt đối diện của một phiến vật liệu áp điện mỏng.
Vật liệu áp điện thường dùng là thạch anh vì nó có tính ổn định và độ cứng cao.
Tuy nhiên hiện nay vật liệu gốm do có ưu điểm độ bền và độ nhạy cao, điện dung
lớn, ít chịu ảnh hưởng của điện trường ký sinh, dễ sản xuất và giá thành chế tạo thấp
cũng được sử dụng đáng kể.

Hình 1.2 Các biến dạng cơ bản của bản áp điện.

Trong đó:
a. Theo chiều dọc
b. Theo chiều ngang
c. Cắt theo bề dày
d. Cắt theo bề mặt

6


Dưới tác dụng của lực cơ học, tấm áp điện bị biến dạng, làm xuất hiện trên hai bản
cực các điện tích trái dấu. Hiệu điện thế xuất hiện giữa hai bản cực tỷ lệ với lực tác
dụng.
Trong nhiều trường hợp các bản áp điện được ghép thành bộ theo cách ghép nối
tiếp hoặc song song .

Hình 1.3 Cách ghép các phần tử áp điện.
Trong đó:
a. Hai phần tử song song
b. Hai phần tử nối tiếp
c. Nhiều phần tử song song

7


CHƯƠNG II: GIỚI THIỆU CÁC THIẾT BỊ PHẦN CỨNG

2.1 Raspberry Pi 3
2.1.1 Cấu tạo
a. Cấu hình phiên bản Raspberry Pi B+













CPU: Lõi tứ ARM Cortex A7, tốc độ 900MHz
GPU: Broadcom VideoCore IV – 250MHz
Bộ nhớ RAM: 1GB, tuy nhiên bị chia sẻ 250MHz cho GPU
Cổng USB: 4
Video output: HDMI, composite video thông qua jack 3,5 mm
Audio outputs: Analog qua jack 3,5 mm; kỹ thuật số thông qua cổng HDM
Bộ nhớ trong: thẻ nhớ microSD
Kết nối mạng: Ethernet 10/100Mbps
Nguồn điện: 5 V qua MicroUSB hoặc GPIO
Kích thước: 85.60mm × 56.5mm
Trọng lượng: 45g

Hình 2.1 Cấu trúc phần cứng Raspberry Pi 3
8


Hình 2.2 Sơ đồ chân kết nối Raspberry Pi 3
b. Ưu điểm













Thiết kế nhỏ gọn.
Chức năng như một máy tính có các kết nối HDMI, Video.
Có thêm các GPIO đầy đủ như một vi điều khiển thông thường để người phát
triển có thể sử dụng như:
GPIO : các chân Input , Output bình thường.
Module I2C, SPI, UART, PWM.
Nguồn đầu ra với hiệu điện thế thông dụng: 5V và 3.3V
Cộng đồng người sử dụng trên toàn thế giới.
Chạy hệ điều hành dựa trên nhân linux.
Hệ điều hành được phân phối miễn phí.
Tính di động cao
Giá thành rẻ.

c. Ứng dụng








Đầu coi phim HD giống như Android Box, hỗ trợ KODI đầy đủ.
Máy chơi game cầm tay, console, game thùng. Chơi như máy điện tử băng
ngày xưa, giả lập được nhiều hệ máy.
Cắm máy tải Torrent 24/24.
Dùng làm VPN cá nhân.
Biến ổ cứng bình thường thành ổ cứng mạng (NAS).
Làm camera an ninh, quan sát từ xa.
9








Hiển thị thời tiết, hiển thị thông tin mạng nội bộ...
Máy nghe nhạc, máy đọc sách.
Làm thành một cái máy Terminal di động có màn hình, bàn phím, pin dự
phòng để sử dụng mọi lúc mọi nơi, dò pass Wi-Fi...
Làm thiết bị điều khiển Smart Home, điều khiển mọi thiết bị điện tử trong nhà.
Điều khiển robot, máy in không dây từ xa, Airplay...

2.1.2 Các kết nối với Raspberry Pi

Hình 2.3 GPIO Raspberry Pi 3
Các cổng kết nối trên raspberry pi










Ethernet: Cổng mạng Ethernet 10/100M
Video: HDMI hỗ trợ phiên bản 1.3/1.4 và Composite RCA (PAL and NTSC)
Audio: Cổng ra 3.5 và HDMI
USB: 4 cổng USB 2.0
GPIO: 40 chân
Camera: Connector 15-pin MIPI Camera Serial Interface (CSI-2)
Display: Connector Display Serial Interface (DSI)
Memory Card Slot: MicroSD



10


2.1. 3 Những thiết bị đi kèm cần thiết.

Hình 2. 4 Các phụ kiện của Raspberry Pi 3






Bộ nguồn 5V , 2A.
Chuột đầu cắm USB.
Bàn phím đầu cắm USB.
Dây HDMI và một màn hình.

2.1.4 Các hệ điều hành dành cho RASPBERRY PI
 Raspbian: OS chính thức, giao diện giống như Windows/Mac/Linux.
 OSMC: tích hợp KODI, dùng làm máy xem phim, nghe nhạc.
 RetroPie: dùng làm máy chơi game, hỗ trợ nhiều hệ máy khác nhau.
 Ngoài ra còn có Ubuntu, Windows 10 IoT, RiscOS...
2.1.5 Các bước cài đặt cơ bản cho RASPBERRY PI




Bước 1: Tải bản hệ điều hành muốn dùng cho Pi
Bước 2: Dùng phần mềm SDFormatter V1.4 dùng để format thẻ nhớ
Bước 3: Cài đặt phần mềm Win32 Disk Imager, chọn thư mục chứa hệ điều
hành

11


Sau đó bạn nhấn nút “write” để copy hệ điều hành vào thẻ nhớ

Sau khi hoàn thành bạn cắm thẻ nhớ vào bo mạch Raspberry Pi
2.1.6 Cài đặt ban đầu cho Raspberry Pi
Tên người dùng mặc định là: pi
Pass: raspberry



Khởi động lần đầu tiên của Raspberry Pi :

Gõ lệnh “$sudo raspi-config” để ra màn hình cấu hình như ở dưới đây

12


Hình 2.5 Cài đặt cấu hình Raspberry pi 3
Chú thích các lựa chọn trong hình trên:








Expand Filesystem– Cấu hình (giá trị mặc định là 3GB) để có thể sử dụng hết
kích thước của thẻ nhớ.
Change User Password - Thay đổi Password người dùng. Với mặc định là
pass: raspberry và user là: pi
Enable Boot to Desktop/Scratch– Cho phép hay không khi khởi động vào
màn hình Desktop. Hoặc bạn cũng có thể gõ lệnh “statx” để vào desktop.
Internationalisation Options– Phần cài đặt này bạn có thẻ điều chỉnh
timezone, kiểu keybroad, ngôn ngữ.
Enable Camera– Nếu bạn có camera bạn có thể vào đây để cài đặt, không bạn
có thể bỏ qua..
Add to Rastrack– nếu bạn muốn thêm tài liệu đến Rastrack.
Overclock– cài đặt overclock.





Advanced Options– cài đặt nâng cao như SSH, hostname, Serial , …

Chọn “Finish” và sau đó hệ thống sẽ tự động khởi động lại

13


2.1.7 Lập trình GPIO
a. Các bước lập trình GPIO
1. Tải và cài đặt thư viện bcm2835


Bước 1: Vào thư mục Desktop:



cd /home/pi/Desktop/



Bước 2: Tạo một thư mục Programming:



mkdir Programming




Bước 3: Vào thư mục Programming:

cd Programming


Bước 4: download thư viện “bcm2835-1.37”

wget />

Bước 5: giải nén file “bcm2835-1.37.tar.gz”

tar –zxvf bcm2835-1.37.tar.gz


Bước 6: vào thư mục vừa giải nén xong “bcm2835-1.37”

cd bcm2835-1.37


Bước 7: Chạy configure:

sudo ./configure


Bước 8: chạy makefile cho thư viện:

make



Bước 9: Cài đặt makefile vừa tạo ra:

14


sudo make install
2. Lập trình output ra LED cơ bản.
Phần này hướng dẫn cách lập trình GPIO để điều khiển nhấp nháy đèn Led.


Bước 1: Thoát khỏi thư mục “bcm2835-1.39” và tao một thư mục “blink”:

cd
mkdir blink


..

Bước 2: Vào thư mục blink vừa được tạo và tạo một chương trình có tên
là “$blink.c”:

cd
sudo nano blink.c

/blink

Chương trình blink.c
#include <bcm2835.h>
#define PIN RPI_V2_GPIO_P1_11

int main(int argc, char **argv)
if(!bcm2835_init())
return 1;
bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);
while
{
bcm2835_gpio_write(PIN, HIGH);
bcm2835_delay(500);
bcm2835_gpio_write(PIN, LOW);
bcm2835_delay(500);
}
bcm2835_close();
return
}

15




Bước 3: biên dịch chương trình “c” sẽ tạo ra file “blink”

gcc –o blink blink.c -l bcm2835


Bước 4: Chạy file vừa được biên dịch xong :

sudo ./blink
3. Lập trình Input chân GPIO




Các bước thực hiện tạo file.c cũng như quy trình biên dịch giống như trong
phần 2 lập trình Output ra LED(nháy LED).
Bước 1: Tạo một thư mục có tên là input

mkdir input


Bước 2: Vào thư mục input và tạo một chương trình có tên là “input.c”

cd
sudo nano input.c

/input

Chương trình input.c
#include<bcm2835.h>
#include <stdio.h>
#define PIN RPI_GPIO_P1_15
Int main(int argc,char _**argv)
{
if(!bcm2835_init())
return 1;
bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_INPT);
bcm2835_gpio_set_pud(PIN, BCM2835_GPIO_PUD_UP);
while
{
uint8_t
printf("read from pin 15: %d\n", value);


value=bcm2835_gpio_lev(PIN);

16


delay(500);
}bcm2835_close();
return 0;}
Bước 3: biên dịch chương trình “blink.c” sẽ tạo ra file “blink”



gcc –o input input.c -l bcm2835
Bước 4: Chạy file vừa được biên dịch xong :



sudo ./input
}
2.1.8 Lập trình I2C
a. Giới thiệu về I2C
Đầu năm 1980 Phillips đã phát triển một chuẩn giao tiếp nối tiếp 2 dây được gọi là
I2C. I2C là tên viết tắt của cụm từ Inter-Intergrated Circuit. Đây là đường Bus giao
tiếp giữa các IC với nhau. I2C mặc dù được phát triển bới Philips, nhưng nó đã được
rất nhiều nhà sản xuất IC trên thế giới sử dụng. I2C trở thành một chuẩn công nghiệp
cho các giao tiếp điều khiển.
I2C có thể hoạt động ở nhiều chế độ khác nhau :
-


Một chủ một tớ (one master - one slave)

-

Một chủ nhiều tớ (one master - multi slave)

-

Nhiều chủ nhiều tớ (Multi master - Multi slave)

Các thiết bị được phân biệt với nhau bằng 7 bit địa chỉ, cũng tức là có tối đa 128 thiết
bị slave được kết nối.

17


Hình 2.8 Sơ đồ vị trí chân I2C trên GPIO của Raspberry Pi
b. Cài đặt sử dụng I2C
Gõ lệnh trên terminal:
sudo nano /etc/modprobe.d/raspi-blacklist.conf
Comment lại dòng “blacklist i2c-bcm2708” trong file raspi-blacklist.conf bằng việc
đánh dấu # ở đầu dòng. Thì dòng đó sẽ như sau:
blacklist i2c-bcm2708


Sau khi thực hiện xong nhấn Ctrl + X để lưu và thực hiện reboot lại hệ thống.

sudo reboot



Sau khi reboot xong bạn vào terminal và chạy lệnh ở dưới để kích hoạt chân
I2C hoạt động.

sudo modprobe i2c-dev


Sau đó bạn list các cổng I2C có trên thư mục /dev/ của bạn:

ls /dev/i2c*

18




Tiếp theo thực hiện việc chmod cho các người dùng khác nhau có thể truy
nhập.

sudo chmod o+rw /dev/i2c*


Cuối cùng bạn vào /etc/modules để thêm dòng “i2c-dev” vào cuối file và bạn
đã có thể sử dụng i2c để phát triển.

sudo nano /etc/modules
Và bạn thêm:
i2c-dev


Quá trình cài đặt sử dụng I2C đã hoàn tất bây giờ ta thực hiện việc lập trình.


c. Lập trình
#include <bcm2835.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#define MODE_READ 0
#define MODE_WRITE 1
#define MAX_LEN 32
char wbuf[MAX_LEN];
typedef enum
19


{
NO_ACTION,
I2C_BEGIN,
I2C_END
}i2c_init;
uint8_t init=NO_ACTION;
uint16_t clk_div=BCM2835_I2C_CLOCK_DIVIDER_148;
uint8_t slave_address=0x00;
uint32_t len=0;
uint8_t mode=MODE_READ;

int comparse(int argc,char**argv)
{
int argnum,i,xmitnum;
if (argc<2){fprintf(stderr,"Insufficient command line arguments\n");

return EXIT_FAILURE;
}
argnum=1;
while (argnum{
switch (argv[argnum][1])
{
case'i':
switch (argv[argnum][2])
{
case 'b': init = I2C_BEGIN; break;

20


case 'e': init = I2C_END; break;
default:
fprintf(stderr, "%c is not a valid init option\n", argv[argnum][2]);
return EXIT_FAILURE;
}
break;
case 'd':
switch (argv[argnum][2]) {
case 'r': mode = MODE_READ; break;
case 'w': mode = MODE_WRITE; break;
default:
fprintf(stderr, "%c is not a valid init option\n", argv[argnum][2]);
return EXIT_FAILURE;
}
break;

case 'c':
clk_div = atoi(argv[argnum]+2);
break;
case
slave_address = atoi(argv[argnum]+2);

's':

break;
default:
fprintf(stderr, "%c is not a valid option\n", argv[argnum][1]);
21


return EXIT_FAILURE;
}
argnum++;
if (argnum == argc && init != NO_ACTION)
return EXIT_SUCCESS;

if (strspn(argv[argnum], "0123456789") != strlen(argv[argnum])) {
fprintf(stderr, "Invalid number of bytes specified\n");
return EXIT_FAILURE;
}
len = atoi(argv[argnum]);
if (len > MAX_LEN) {
fprintf(stderr, "Invalid number of bytes specified\n");
return EXIT_FAILURE;
}
argnum++;

xmitnum = argc - argnum;
memset(wbuf, 0, sizeof(wbuf));
for (i = 0; i < xmitnum; i++) {
if (strspn(argv[argnum + i], "0123456789abcdefABCDEFxX") != strlen(argv[argnu
m + i]))
22


{
fprintf(stderr, "Invalid data: ");
fprintf(stderr, "%d \n", xmitnum);
return EXIT_FAILURE;
}
wbuf[i] = (char)strtoul(argv[argnum + i], NULL, 0);
}
return;
}
int showusage(int errcode) {
printf("i2c \n");
printf("Usage: \n");
printf("i2c [options] len [rcv/xmit bytes]\n");
printf("\n");
printf(" Invoking i2c results in an I2C transfer of a specified\n");
printf(" number of bytes. Additionally, it can be used to set the appropriate\n");
printf(" GPIO pins to their respective I2C configurations or return them\n");
printf(" to GPIO input configuration. Options include the I2C clock frequency,\n");
printf(" initialization option (i2c_begin and i2c_end). i2c must be invoked\n");
printf(" with root privileges.\n");
23



printf("\n");
printf(" The following are the options, which must be a single letter\n");
printf(" preceded by a '-' and followed by another character.\n");
printf(" -dx where x is 'w' for write and 'r' is for read.\n");
printf(" -ix where x is the I2C init option, b[egin] or e[nd]\n");
printf(" The begin option must be executed before any transfer can happen.\n");
printf(" It may be included with a transfer.\n");
printf(" The end option will return the I2C pins to GPIO inputs.\n");
printf(" It may be included with a transfer.\n");
printf(" -cx where x is the clock divider from 250MHz. Allowed values\n");
printf(" are 150 through 2500.\n");
printf(" Corresponding frequencies are specified in bcm2835.h.\n");
printf("\n");
printf(" len: The number of bytes to be transmitted or received.\n");
printf(" The maximum number of bytes allowed is %d\n", MAX_LEN);
printf("\n");
printf("\n");
printf("\n");
return errcode;

24


}
char buf[MAX_LEN];
int i;
uint8_t data;
int main(int argc, char **argv) {
printf("Running ... \n");

// parse the command line
if (comparse(argc, argv) == EXIT_FAILURE) return showusage (EXIT_FAILURE)
;
if (!bcm2835_init()) return 1;

if (init == I2C_BEGIN) bcm2835_i2c_begin();
if (len == 0) {
if (init == I2C_END) bcm2835_i2c_end();
printf("... done!\n");
return EXIT_SUCCESS;
}
bcm2835_i2c_setSlaveAddress(slave_address);
bcm2835_i2c_setClockDivider(clk_div);
fprintf(stderr, "Clock divider set to: %d\n", clk_div);
25


×