à, cảm ơn bạn nhiều lắm, mình làm dc rồi.
Thông báo
Collapse
No announcement yet.
a USART trong AVR
Collapse
X
-
Mình thấy như vậy không dc Bích à. nếu mà sau lệnh này mà mình gán i và j cho giá trị ở địa chỉ 0x00 và0x01 thì mặc nhiên là nó sẽ bằng 0 khi chưa mất điệnNguyên văn bởi Le Thi Bich Xem bài viếtchắc kết nối trong mô phỏng có vấn đề j đó anh ạ hoặc USART có vấn đề vì làm LCD thì em test trên mạch thật chuẩn rồi mà, chỉ có cái mất điện em thay bằng xung vào chân int1 thôi, nhưng em thấy trong code của anh vẫn có khai báo lcd đấy thôi
"#asm
.equ __lcd_port=0x18 ;PORTB"
nếu không cần LCD thì không cần khai báo đến nó nữa.
chắc vụ này phải nhờ mấy anh Pro rồi
một việc nữa, nếu eeprom chưa ghi vào lần nào thì nó sẽ mặc định giá trị là 0xff vậy anh thử sửa thế này xem sao:
trước lệnh i=eeprom_doc(0x00) dòng 173 anh chèn thêm:
if (EEPROM_doc(0x00)==0xff)
{EEPROM_viet(0x00,0)};
if (EEPROM_doc(0x01)==0xff)
{EEPROM_viet(0x01,0)};
chúc anh thành công
Comment
-
Mình gửi kèm lại bài của Bích, mìn thử bằng LCD thì thấy không dc, không biết mô phỏng sai ở đâu, còn phần code của mình , mình đã sửa nhưng khi cho ra theo USART thì nếu cho thẳng lối ra bằng 1 số nào đó thì ra được nhưng thử lối ra =j thì không ra dc kết quả, chỉ có 1 bit stop đầu còn các bit khác đều bằng 0
Attached Files
Comment
-
đâu có anh, nó chỉ gán giá trị bằng 0 khi tràn bộ nhớ ở một địa chỉ đó thôi chứNguyên văn bởi hoangsonk49 Xem bài viếtMình thấy như vậy không dc Bích à. nếu mà sau lệnh này mà mình gán i và j cho giá trị ở địa chỉ 0x00 và0x01 thì mặc nhiên là nó sẽ bằng 0 khi chưa mất điện
dùng lệnh if mà anh
hihi khổ anh...
vì kết nối LCD bằng cổng B nên anh đổi lại PORTB=out đi là được đấyLast edited by Le Thi Bich; 23-10-2008, 17:00.Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.
Comment
-
em đọc và mò mãi dùng cả từ điển lẫn avtran để dịch mất một ngày mà làm cứ lỗi, xem ví dụ của anh Hiếu 5phút sau em làm được luôn"đúng là học thây không tày học bạn"Nguyên văn bởi AVR_VN Xem bài viết@: Le thi bich: Em cứ đọc đi, em lập trình dùng bằng C, nhất là dùng Codevision thì cái này dễ lắm
, cứ tự mò đi cho biết 
em gặp vấn đề nữa:
em có một con mater và 3 con slaver nhưng em chưa biêt nên chọn phương án nào để kết nối cho từng con slaver nhận dữ liệu dùng thêm chân hay phát một đoạn mã lệnh địa chỉ trước khi phát dữ liệu, chíp nhận có cần phát thông báo lại không (theo kiểu bắt tay) vì em không phải dân viễn thông nên không hiểu nguyên tắc thu phát lắm, các anh cho em lời khuyên về nguyên tắc cũng được
em cảm ơnThiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.
Comment
-
Nên dùng kiểu kết nối RS485 và sử dụng giao thức modbus để truyền dữ liệu. Đây là link để tìm hiểu về giao thức này:
http://cars9.uchicago.edu/software/e...ocol_V1_1b.pdf
http://www.modbus.org/docs/Modbus_over_serial_line_V1_02. pdf
http://www.eecs.umich.edu/~modbus/documents/PI_MBUS_300.pdf
Comment
-
Em dùng I2C đi em ơi, I2C tương rất thuận tiện để giao tiếp nhiều CHIPNguyên văn bởi Le Thi Bich Xem bài viếtem đọc và mò mãi dùng cả từ điển lẫn avtran để dịch mất một ngày mà làm cứ lỗi, xem ví dụ của anh Hiếu 5phút sau em làm được luôn"đúng là học thây không tày học bạn"
em gặp vấn đề nữa:
em có một con mater và 3 con slaver nhưng em chưa biêt nên chọn phương án nào để kết nối cho từng con slaver nhận dữ liệu dùng thêm chân hay phát một đoạn mã lệnh địa chỉ trước khi phát dữ liệu, chíp nhận có cần phát thông báo lại không (theo kiểu bắt tay) vì em không phải dân viễn thông nên không hiểu nguyên tắc thu phát lắm, các anh cho em lời khuyên về nguyên tắc cũng được
em cảm ơn
*** Thành viên không biết gì về điện ***
Comment
-
Mọi người xem hộ đoạn code này, chỉ là khi lối vào có ngắt INT0 thì cho j=10; và xuất ra USART mà sao mô phỏng nó toàn ra 0. Nếu cho j=10 vào chỗ while (1)... thì dc, nhưng để ở interupt thì không ra gì, thảo nào mấy cái mô phỏng trc toàn sai:
/************************************************** ***
This program was produced by the
CodeWizardAVR V1.25.9 Professional
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 10/23/2008
Author : gh
Company : ghjghj
Comments:
Chip type : ATmega8
Program type : Application
Clock frequency : 1.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
************************************************** ***/
#include <mega8.h>
int i,j;
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
j=10;
}
// Standard Input/Output functions
#include <stdio.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Rising Edge
// INT1: Off
GICR|=0x40;
MCUCR=0x03;
GIFR=0x40;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x06;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
UDR= j;
};
}
Comment
-
ơ hơ hơ!.......Nguyên văn bởi hoangsonk49 Xem bài viếtối, vẫn không ăn thua,
Lối ra mô phỏng vẫn chỉ có một giá trị 100101000. Không thay đổi gì cả
anh nhấn ngắt đi xem nào, nếu có ngắt thì trình ngắt mới thực hiện và lúc đó mới được j=10; còn không là nó chỉ bằng một giá trị mặc định bất kỳ nào đóThiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.
Comment
-
ối !.....Nguyên văn bởi AVR_VN Xem bài viếtEm dùng I2C đi em ơi, I2C tương rất thuận tiện để giao tiếp nhiều CHIP
em học maĩ mới biết cách dùng cái món USART các bác đã bảo em làm ngay cái món RS232, 485 hay I2C
em chỉ muốn làm một ứng dụng phát triển món usart mà.
thôi em không phân định mater hay slaver làm gì cả , cứ nối luôn 3 chân TXD và RXD của 3 chíp với nhau rồi đặt cho mỗi chíp một mã địa chỉ riêng, thi cần phát dữ liệu thì phát đoạn mã địa chỉ trước đúng của chíp nào chíp đó sẽ phát một doạn mã báo nhận lệnh và sắn sàng đợi nhận dữ liêu. chíp phát mã địa chỉ liên tục cho đến khi nào có tín hiệu báo nhận lệnh thì phát dữ liệu đi.
không biết có được không vì e thấy như thế có hạn chế là chỉ cần một chíp phát tín hiệu là cả 3 chíp phải dừng (chuyển sang trình ngắt USART). liệu có được không các anhThiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.
Comment
-
USART làm sao giao tiếp thế được, đây là một trong những tác hại của Codevision, em chưa hiểu bản chất của nó, loại giao tiếp này trong 1 khung truyền làm gì có bit địa chỉ đâu, người ta chỉ dủng để giao tiếp 2 chip với nhau, hoặc cùng lắm là giao tiếp kiểu vòng tròn ( nếu hơn 2 chíp ), nhưng đại khái là củ chuối, thế mới sinh ra các chuẩn giao tiếp khác, I2C or CAN ...*** Thành viên không biết gì về điện ***
Comment
-
vì thế em mới đặt cho nó một biến làm địa chỉ,trước khi truyển dữ liệu em truyền bién đia chỉ đi trước, tất cả cùng so sánh, thằng nào trùng với con số của minh thì phát ra một byte báo nhận, con phát đã nhận được phản hồi thì mới truyển dữ liệu và lúc đó con nhận mới lưu vào một địa chỉ nào đó, còn các con khác so sánh thấy không trùng với sô của minh(số đó do mình lập trình cho mỗi chip) thì thôi không làm gìNguyên văn bởi AVR_VN Xem bài viếtUSART làm sao giao tiếp thế được, đây là một trong những tác hại của Codevision, em chưa hiểu bản chất của nó, loại giao tiếp này trong 1 khung truyền làm gì có bit địa chỉ đâu, người ta chỉ dủng để giao tiếp 2 chip với nhau, hoặc cùng lắm là giao tiếp kiểu vòng tròn ( nếu hơn 2 chíp ), nhưng đại khái là củ chuối, thế mới sinh ra các chuẩn giao tiếp khác, I2C or CAN ...Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92GIỚI THIỆU CA KHÚC VỀ CHA MẸ:
Nặng Nghĩa Mẹ Cha
Sáng tác: Hoàng Đình Thường
Giọng hát: AI
Công cha cao tựa như Thái Sơn
Nghĩa mẹ sâu nước biếc xanh trong
Mong con khôn lớn đời hạnh phúc
Mẹ cha...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 16:22 -
-
bởi afrendlyCảm ơn bạn. Mình hỏi để thợ có thể tham khảo thôi chứ không đủ kiển thức để sửa, mà cũng không có đồ nghề, mua đồ nghề quá tiền máy. Gọi nhiều lần mà thợ hẹn mãi chưa có tới ấy bạn. Mình muốn sửa được chứ bỏ thì uống, nhưng sợ là được mỗi người thợ mà lại không sửa nổi....
-
Channel: Điện tử gia dụng
11-05-2026, 00:34 -
-
bởi mèomướpDạ nó bị tắc ẩm hoặc rò thiếu gas hoặc lốc yếu hoặc van tiết lưu có vấn đề hoặc tất cả những nguyên nhân trên ạ. Chú ko chuyên về mảng này thì bán đi, giành thời gian trồng rau sạch đem ra chợ bán lấy tiền mua tủ mới ạ. Còn...
-
Channel: Điện tử gia dụng
10-05-2026, 17:01 -
-
bởi afrendlyXin chào mọi người. Mình lại có vấn đề về đồ điện cần nhờ mọi người hỗ trợ giúp. Mình có tủ lạnh Sharp dùng cũng lâu rồi. Trước có bị kém lạnh, không đông đá thì có thợ họ mang về, sục đường ga gì đó hết 900k và đã dùng...
-
Channel: Điện tử gia dụng
10-05-2026, 16:53 -
-
bởi dinhthuong92Đấy, cái tôi thắc mắc là chỗ màu hồng ấy bạn, để áp vào cao chứ không bị sụt gần bằng áp pin thì rất cần cuộc cảm để làm điều đó. Tuy nhiên, trong công thức bác thớt dẫn không thấy mặt L, và một vài mạch MPPT tôi đã kiểm...
-
Channel: Nguồn!
09-05-2026, 10:01 -
-
bởi mèomướpDạ mạch sạc là 1 cục nguồn, nó sẽ điều chỉnh công suất đầu ra để có tổng trở bằng nội trở của pin ạ. Và cái cách nó chỉnh công suất đầu ra sẽ là dạng buck, boot. Đều cần đến cuộn cảm ạ. Tất nhiên chú thích thì có thể dùng dạng tuyến tính transistor để bù trừ nhưng mà nó đốt năng lượng vô ích ạ...
-
Channel: Nguồn!
08-05-2026, 16:26 -
-
bởi dinhthuong92Tng trở R của tải (gồm pin và mạch sạc) trong công thức đó rõ ràng khống có L xuất hiện. Nếu tính các dây dẫn thì rất nhỏ, bỏ qua. Vì nội trở pin là rất nhỏ, có thể nói luôn lớn hơn nội trở solar, nên mạch MPPT sẽ hầu như luôn tính...
-
Channel: Nguồn!
08-05-2026, 11:00 -
-
bởi dinhthuong92Chào bác. Đã là công thức phải tổng quát chứ, nó phải thể hiện cả quá trình, rối thì quá độ hay xác lập tính sau vì tùy điều kiện. Cũng như công thức tính diện tích chả hạn, phải là tích phân....
-
Channel: Nguồn!
08-05-2026, 10:49 -

Comment