Nguyên văn bởi hoang_3i
Xem bài viết
Thông báo
Collapse
No announcement yet.
Hỏi về giao tiếp AVR và module SIMCOM
Collapse
X
-
-
Nguyên văn bởi quangtung112 Xem bài viếtCảm ơn bác, nhưng e vẫn chưa rõ 2 biến uiAddess và ucData dùng như thế nào?
Ví dụ em có biến mật khẩu là a[]="1234", bây giờ e lưu vào rom thì sử dụng hàm EEPROM_write với uiAddess thì e chưa rõ, còn ucData chính là biến a phải không bác?
Code:a[]="1234"; ii=0; (địa chỉ bạn muốn lưu) for(i=0;i<=3;i++) { write_eeprom(ii,a[i]; ii++ }
Comment
-
Nguyên văn bởi quangtung112 Xem bài viếtcảm ơn các bác, nhưng e có thắc mắc chút là khi khởi động AVR thì sẽ load mật khẩu từ EEPROM, nhưng lần đầu tiên chưa ghi mật khẩu vào EEPROM thì bộ nhớ EEPROM rỗng, ta load nó lên thì liệu có làm thay đổi mật khẩu của ta ko?
VD: cái này em viết cho con PIC
if(read_eeprom(CONFIG)==0)
{
// nhay qua thuc hien lenh tiep theo
}
else
{
strcpy(mk_temp,"123456");
write_mat_khau();
write_eeprom(CONFIG,0);
}
Comment
-
Nguyên văn bởi quangtung112 Xem bài viếtĐể hạn chế việc ghi đọc vào Rom e thấy ngta chỉ lưu vào ROM khi bị mất điện, do đó cần có mạch phát hiện việc mất điện, các bác có sơ đồ chạy ổn định thì cho e tham khảo với?
Comment
-
Nguyên văn bởi quangtung112 Xem bài viếtĐể hạn chế việc ghi đọc vào Rom e thấy ngta chỉ lưu vào ROM khi bị mất điện, do đó cần có mạch phát hiện việc mất điện, các bác có sơ đồ chạy ổn định thì cho e tham khảo với?
Comment
-
Nguyên văn bởi hitechvn Xem bài viếtĐối với EEPROM AVR khi chưa được ghi vào lần nào thì giá trị của nó là 0xFF. bạn đọc giá trị này lúc khởi động avr biết là đã ghi mật khẩu hay chưa.
Comment
-
Chào mọi người. Mình cũng đang viết code cho con sim900. Mình dùng một hàm mới để tách chuỗi "+CMTI" ra để biết khi nào có sms thì xử lý. Viết đơn giản như sau:
#include <16f877a.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
#include <lcd_lib_4bit.c>
#include <string.h>
#define phone_number "0922609003"
char sms[70],test_cmti[5];
int i,test;
#INT_RDA
//Ngat, nhan va xu ly thong tin
void read()
{
sms[i]=getc();
i++;
if(i>69) i=0;
}
void CMTI()
{
int j;
for(j=0;j<=4;j++)
{
test_cmti[j]=sms[j+2];
}
}
int comparing_cmti()
{
CMTI();
if(test_cmti[0]=='+' && test_cmti[1]=='C' && test_cmti[2]=='M' && test_cmti[3]=='T' && test_cmti[4]=='I')
return 1;
else
return 0;
}
void delete_sms()
{
printf("AT+CMGD=1");//delete sms in local 1
putc(13);
delay_ms(1000);
}
void main()
{
delay_ms(500);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
i = 0;
test=0;
delay_ms(100);
printf(lcd_putchar,"San sang hoat dong");
delay_ms(2000);
lcd_init();
//delete_sms();
while (true)
{
CMTI();
comparing_cmti();
test=comparing_cmti();
if(test == 1)
{
printf(lcd_putchar,"New message");
}
}
}
Ngồi cả buổi tối mà ko nghĩ ra là mình sai gì. Mọi người giúp mình với, tại sao viết tập lệnh AT trước khi so sánh chuỗi tìm +CMTI thì lại ko đúng?
Comment
-
Nguyên văn bởi vandaivkn Xem bài viếtChào mọi người. Mình cũng đang viết code cho con sim900. Mình dùng một hàm mới để tách chuỗi "+CMTI" ra để biết khi nào có sms thì xử lý. Viết đơn giản như sau:
Khi có SMS về thì màn hình LCD sẽ hiện lên dòng chữ "New message". Nhưng nếu mà mình viết thêm tập lệnh AT để xóa tin nhắn đã lưu trước khi thực hiện lệnh while(true) thì khi gửi sms đến, LCD ko báo gì cả. Mình dùng hàm con void delete_sms() rồi gọi chương trình giống như code trên hay viết trực tiếp thì màn hình đều ko báo gì khi có sms mới.
Ngồi cả buổi tối mà ko nghĩ ra là mình sai gì. Mọi người giúp mình với, tại sao viết tập lệnh AT trước khi so sánh chuỗi tìm +CMTI thì lại ko đúng?
Code của bạn có vài vấn đề sau:
1. Hàm delete_sms() của bạn phải đặt sau khi đã đọc tin nhắn. Và thông thường tin nhắn mới ở vị trí nào thì delete ở vị trí đó. Hàm này của bạn chỉ xóa tin nhắn ở vị trí inbox 1
2. Bạn kiểm tra chuỗi +CMTI ở trong hàm main() thế này là chưa chuẩn. Mình ko bit trong ngắt nhận của bạn viết thế nào. Theo mình thì bạn nên kiểm tra chuỗi +CMTI trong ngắt nhận dữ liệu. Sau khi trong ngắt nhận đầy đủ chuỗi +CMTI thì cho biến test_flag=1;
3. Bạn nên reset các biến sms,test_cmti bằng 0 sau khi lcd hiển thị new message. Moi 1 hàm giao tiếp với SIM900 trc khi gưi lệnh bạn reset các biến về 0
Code mình chỉnh lại, bạn viết lại nhé
Code:while (true) { // CMTI(); // comparing_cmti(); // 2 dòng này bị thừa // test=comparing_cmti(); // đoạn này bạn nên kiểm tra trong ngắt nhận dữ liệu if(test_flag == 1) { test_flag =0; printf(lcd_putchar,"New message"); reset_sms(); // reset cac bien sms=0; reset_ctmi(); // reset cac bien test_ctmi=0; delete_sms(); // theo minh thi nen delete vi tri tin nhan reset_sms(); // reset cac bien sms=0; reset_ctmi(); // reset cac bien test_ctmi=0; } }
Sống là để chiến đấu
Comment
-
Nguyên văn bởi hitechvn Xem bài viết- Bạn kiểm tra chuỗi +CMTI ở trong hàm main() thế này là chưa chuẩn. Mình ko bit trong ngắt nhận của bạn viết thế nào. Theo mình thì bạn nên kiểm tra chuỗi +CMTI trong ngắt nhận dữ liệu. Sau khi trong ngắt nhận đầy đủ chuỗi +CMTI thì cho biến test_flag=1;
- Bạn nên reset các biến sms,test_cmti bằng 0 sau khi lcd hiển thị new message. Moi 1 hàm giao tiếp với SIM900 trc khi gưi lệnh bạn reset các biến về 0
Code:void read() { sms[i]=getc(); i++; if(i>69) i=0; if(sms[2]=='+' && sms[3]=='C' && sms[4]=='M' && sms[5]=='T' && sms[6]=='I') test_flag=1; }
Code:<CR><LF>+CMGR: "REC UNREAD","+84922609003","","12/09/18,15:40:38+28"<CR><LF>Bat1
Code sau khi em chỉnh lại:
Code:#include <16f877a.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=20000000) #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7) #include <lcd_lib_4bit.c> #include <string.h> #define phone_number "0922609003" char sms[70]; int i,test_flag; #INT_RDA //Ngat, nhan va xu ly thong tin void read() { sms[i]=getc(); i++; if(i>69) i=0; if(sms[2]=='+' && sms[3]=='C' && sms[4]=='M' && sms[5]=='T' && sms[6]=='I') test_flag=1; } void reset_sms() { for(i=0;i<70;i++) { sms[i]=0; } } void delete_sms() { printf("AT+CMGD=1");//delete sms in local 1 putc(13); delay_ms(1000); } void reset_all() { i=0; reset_sms(); test_flag =0; } void main() { delay_ms(500); enable_interrupts(INT_RDA); enable_interrupts(GLOBAL); i = 0; test_flag=0; delay_ms(100); // printf("AT");putc(13);delay_ms(1000);// Tai sao co dong nay ma LCD lai khong bao khi co SMS moi? lcd_init(); printf(lcd_putchar,"San sang"); delay_ms(2000);lcd_putcmd(0x01); while (true) { if(test_flag == 1) { reset_all();//reset cac thong so ve 0 printf(lcd_putchar,"New message");delay_ms(1000);lcd_putcmd(0x01);//in ra man hinh 1s sau do xoa man hinh delete_sms();//xoa sms vua nhan } } }
Em mới lập trình nên các anh đừng cười. Anh xem giúp em với nhé. Em cảm ơn mọi người nhiều.Last edited by vandaivkn; 23-09-2012, 20:10.
Comment
-
Các bạn cho mình hỏi đoạn này
void read()
{
sms[i]=getc();
i++;
if(i>69) i=0;
if(sms[2]=='+' && sms[3]=='C' && sms[4]=='M' && sms[5]=='T' && sms[6]=='I')
test_flag=1;
}
thế này thì i làm sao tăng được mà kiểm tra chứ?mình nghĩ phai như thế này mới đúng
void read()
{
for (i=0;i<70;i++)
{ sms[i]=getc();}
if(sms[2]=='+' && sms[3]=='C' && sms[4]=='M' && sms[5]=='T' && sms[6]=='I')
test_flag=1;
}
nhưng khi mình thử thì không nhận được kí tự mong muốn mà phải thử là
for (i=0;i<6;i++)
mới được nhỉ. Các bạn giải thích giúp mình với. ThanksPhạm Duy Quý
PN:0973291335
Dám nghĩ,dám nói,dám làm
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Mạch tự động bật nguồnbởi davidcopyChỉ cần dùng R C mắc vô phím power là ok....
-
Channel: Điện tử gia dụng
Hôm qua, 20:47 -
-
Trả lời cho Hỏi cách điều chế xungbởi davidcopydùng mach khuếch opamp...
-
Channel: Kỹ thuật điện tử tương tự
Hôm qua, 20:42 -
-
Trả lời cho Thắc mắc về hạ áp cho adapter laptopbởi davidcopy
-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 18:56 -
-
bởi bqvietĐấy gọi là cái "điểm gãy" trong đồ thị điện áp - dung lượng còn lại. Dùng điện áp hở cực để xác định sắp hết hoặc gần đầy thì vẫn tạm ổn. Dùng để đo SOC/DOD thì đừng. Ngay cả số km đã đi cũng chả xác định được...
-
Channel: Điện tử dành cho người mới bắt đầu
17-01-2025, 21:36 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80Vâng, em cũng nghĩ thế khi search được hãng ấy là SRNE, nên em test luôn những cái còn lại, và kết quả đều như nhau.
Nhận thấy kết quả khó chấp nhận, em cũng phân vân có nên mail cho họ để họ thử kiểm tra mã đó không; giữa...-
Channel: Điện tử công suất
17-01-2025, 11:33 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80Xin cảm ơn bác bqviet luônnhiệt tình cho biết nhiều thông tin quí báu, cảm ơn bạn mèomướp có ví dụ đơn giản và dễ hiểu, cảm ơn tất cả đã bớt chút thời gian quí báu vào đây đọc bài.
Cảm ơn bác nhathung1101 cho thông tin và chúc mừng bác mua được những tấm pin NLMT cực tốt theo...-
Channel: Điện tử công suất
17-01-2025, 11:22 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi mèomướpDạ chú nhat... cứ coi pin mặt trời như 1 cái ắc qui nhìu ngăn mắc nối tiếp ấy ạ. Khi 1 ngăn yếu thì cả cái ắc qui yếu luôn ạ. Nó có nhìu bộ nối tiếp mắc song song nên bị che 1 khoảng nhỏ ảnh hưởng nhìu nhưng chắc ko đến nỗi mất 50% đâu ạ...
-
Channel: Điện tử công suất
17-01-2025, 06:36 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi nhathung1101Nếu nói bị cái lá che sáng mà giảm 50% thì tôi càng không tin, bởi trên vườn tôi mặc kệ ông trời làm vệ sinh.
Tức là lá tự rụng, gió tự dọn. Ai hơi đâu mà leo lên dọn. Nếu phải như thế thì tôi dek thèm lắp làm gì.-
Channel: Điện tử công suất
16-01-2025, 21:44 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi nhathung1101Chả hiểu ý cậu nói gì. Cái diode bypass quan trọng thế ư???
Cái giàn của tôi chả thấy cái diode nào mà vẫn hoạt động hơn 3 năm rồi.
Nhưng nó không có kiểu nối dây với bấm cốt như của cậu.
Tóm lại là tiền nào của nấy, đừng hoang tưởng kỹ thuật hóa. Kẻo ô tô điện đua nhau lắp diode.-
Channel: Điện tử công suất
16-01-2025, 21:31 -
-
Trả lời cho Dùng biến áp tự ngẫu 110V có tốn điện không?bởi nhathung1101Tôi dùng 4 cái điều hòa Fujitsu hàng bãi Nhật, nên phải dùng 4 cục đổi nguồn 220 xuống 100V. Để bật quanh năm, chả thấy bằng bữa bia. Chứ tắt đi là mất mấy bữa luôn.
-
Channel: Điện tử gia dụng
16-01-2025, 21:24 -
Comment