Thảo luận Tất cả hỏi đáp newbie về AVR và liên quan - tập trung tại đây!

Lâm Diễm

Học sinh phổ thông
các bác cho em hỏi chút ah!
làm thế nào để để sử dụng ngắt ngoài của ATMEGA 32 điều khiển bằng nút bấm, khi mà ta nhấn nút bấm lần 1 chương trình dừng hoạt động và khi ta nhấn nút lần 2 chương trình hoạt động lai bình thường k ah???
Cụ thể là em có đề bài là tìm hiểu về ngắt của atmega 32. Sử dụng ngắt timer tạo xung 1 Hz(đèn LED nhấp nháy), ngắt ngoài điều khiển bằng nút bấm, bấm lần 1 đèn sáng bấm lần 2 đèn tắt! Rất mong các a/c trong diễn đàn giúp đỡ em cảm ơn ah!!!
 

mta_cdt

Super Moderator
Thành viên BQT
các bác cho em hỏi chút ah!
làm thế nào để để sử dụng ngắt ngoài của ATMEGA 32 điều khiển bằng nút bấm, khi mà ta nhấn nút bấm lần 1 chương trình dừng hoạt động và khi ta nhấn nút lần 2 chương trình hoạt động lai bình thường k ah???
Cụ thể là em có đề bài là tìm hiểu về ngắt của atmega 32. Sử dụng ngắt timer tạo xung 1 Hz(đèn LED nhấp nháy), ngắt ngoài điều khiển bằng nút bấm, bấm lần 1 đèn sáng bấm lần 2 đèn tắt! Rất mong các a/c trong diễn đàn giúp đỡ em cảm ơn ah!!!
Cái này đơn giản mà bạn, không cần thiết là phải dừng toàn bộ chương trình, chỉ cần khi nhấn nút bạn đảo bít đó là đuơc.
Vd trong trình phục vụ ngắt bạn viết là led !=led; là được. Bạn nhớ khai báo chân led là đầu ra nha.
 

Ha Hai

Học sinh phổ thông
có bác nào lưu chuỗi vào eeprom chưa , giúp em với em lưu 4 chuỗi mà nó cứ lưu hết về địa chỉ bắt đầu mà lưu ko đúng chuỗi nhờ các bác xem giùm
#include <mega8.h>
#include <alcd.h>
#include <delay.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

unsigned char *a="01634709835";
unsigned char *b="09179472770";
unsigned char *c="09741413050";
unsigned char *d="abcdefnhyk0";
unsigned char a1[12],a2[12],a3[12],a4[12];

/////////xu ly luu eeprom\\\\\\\\\\\\

unsigned char Data[12];
unsigned int uuu=0;
//////ghi vao eeprom\\\\\\\\\\
void ghi_eeprom(unsigned int Address, unsigned char Data[12])
{
unsigned int nnn=0;
nnn=Address;
while(nnn<=(Address+12))
{
/* Wait for completion of previous write */
while(EECR & (1<<EEWE))
;
/* Set up address and data registers */
EEAR = nnn;
EEDR = Data[nnn];
/* Write logical one to EEMWE */
EECR |= (1<<EEMWE);
/* Start eeprom write by setting EEWE */
EECR |= (1<<EEWE);
nnn++;
}
while(uuu<=12)
{
Data[uuu]=' ';
uuu++;
}
}
//////////doc tu eeprom\\\\\\\\\\\\\\\\

unsigned char doc_eeprom(unsigned int Address)
{
unsigned int aaa=0;
aaa=Address;
while(aaa<=(Address+12))
{
/* Wait for completion of previous write */
while(EECR & (1<<EEWE))
;
/* Set up address register */
EEAR = aaa;
/* Start eeprom read by writing EERE */
EECR |= (1<<EERE);
/* Return data from data register */
Data[aaa]=EEDR;
aaa++;
}
return aaa;
}

void main(void)
{

PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;

UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;


lcd_init(16);

#asm("sei")
ghi_eeprom(0,a);
doc_eeprom(0);
strcpy(a1,Data);
ghi_eeprom(12,b);
doc_eeprom(12);
strcpy(a2,Data);
ghi_eeprom(24,c);
doc_eeprom(24);
strcpy(a3,Data);
ghi_eeprom(36,d);
doc_eeprom(36);
strcpy(a4,Data);


while (1)
{

printf("%s",a1);
printf("\r\n");
delay_ms(1000);

printf("%s",a2);
printf("\r\n");
delay_ms(1000);

printf("%s",a3);
printf("\r\n");
delay_ms(1000);

printf("%s",a4);
printf("\r\n");
delay_ms(1000);
}
}
 

Đính kèm

Sửa lần cuối bởi điều hành viên:

mta_cdt

Super Moderator
Thành viên BQT
có bác nào lưu chuỗi vào eeprom chưa , giúp em với em lưu 4 chuỗi mà nó cứ lưu hết về địa chỉ bắt đầu mà lưu ko đúng chuỗi nhờ các bác xem giùm
Bạn viết bằng phần mềm gì vậy. Lần sau nhớ đưa code vào thẻ code cho mọi người dễ theo dõi.
 

inox_man

Học sinh phổ thông
Chào mọi người.Có thể tư vấn dùng mình, phần giao tiếp máy tính với VĐK Atmega2560, mình sử dụng chíp FT232RL, đã ổn chưa ạ.
Và nếu sử dụng nền tảng adruino, trước khi nạp code, có phải cần nạp bootloader đầu tiên ko ạ.

Cảm ơn.!
 

Đính kèm

mta_cdt

Super Moderator
Thành viên BQT
Chào mọi người.Có thể tư vấn dùng mình, phần giao tiếp máy tính với VĐK Atmega2560, mình sử dụng chíp FT232RL, đã ổn chưa ạ.
Và nếu sử dụng nền tảng adruino, trước khi nạp code, có phải cần nạp bootloader đầu tiên ko ạ.

Cảm ơn.!
Trước khi nạp code nếu chip chưa có bootloader thì phải nạp bootloader cho nó đã nhé.
 

inox_man

Học sinh phổ thông
Trước khi nạp code nếu chip chưa có bootloader thì phải nạp bootloader cho nó đã nhé.
Cảm ơn anh. Bootloader đã nạp ok.

Phần nạp code. Anh cho em hỏi, phần giao tiếp máy tính UART trong schematic, đã đúng chưa ạ. Em hiểu là khi muốn nạp code cho chíp, cần kéo chân RESET xuống 0, chân DTR trên chíp nạp sẽ làm điều này.
Thanks anh.
 

Đính kèm

mta_cdt

Super Moderator
Thành viên BQT
Cảm ơn anh. Bootloader đã nạp ok.

Phần nạp code. Anh cho em hỏi, phần giao tiếp máy tính UART trong schematic, đã đúng chưa ạ. Em hiểu là khi muốn nạp code cho chíp, cần kéo chân RESET xuống 0, chân DTR trên chíp nạp sẽ làm điều này.
Thanks anh.
DTR của ft232 nối với 1 con tụ 104 sau đó nối với reset của AVR là ok.
 

zMalGanisz

Học sinh phổ thông
Bác cho em hỏi là em code hiển thị lcd cho atmega32 mô phỏng trên proteus thì lcd hiển thị được nhưng lúc test lên board lại không được. Đường truyền ok, thạch anh ok, mình test led, button, relay thì board hoạt động bình thường. Em đang dùng con ATmega32L thạch anh 8Mhz
KIT_Atmega32.
 
Sửa lần cuối:

mta_cdt

Super Moderator
Thành viên BQT
Bác cho em hỏi là em code hiển thị lcd cho atmega32 mô phỏng trên proteus thì lcd hiển thị được nhưng lúc test lên board lại không được. Đường truyền ok, thạch anh ok, mình test led, button, relay thì board hoạt động bình thường. Em đang dùng con ATmega32L thạch anh 8Mhz
KIT_Atmega32.
Kiểm tra xem chỉnh độ tuơng phản ok chưa. Ko hiển thị đuợc thì phải có các ô đen. Nếu ok rồi nếu nối port C thì phải set lại cái bit JTAG
 

Quảng cáo Google