Thông báo

Collapse
No announcement yet.

a USART trong AVR

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #16
    à, cảm ơn bạn nhiều lắm, mình làm dc rồi.

    Comment


    • #17
      Nguyên văn bởi Le Thi Bich Xem bài viết
      chắ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
      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ện

      Comment


      • #18
        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


        • #19
          Nguyên văn bởi hoangsonk49 Xem bài viết
          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ện
          đâu có anh, nó chỉ gán giá trị bằng 0 khi tràn bộ nhớ ở một địa chỉ đó thôi chứ
          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 đấy
          Last 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


          • #20
            ......................................Ah ừ, mình nhầm chưa ghi với chưa mất điện

            Comment


            • #21
              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 đọ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
              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


              • #22
                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


                • #23
                  Nguyên văn bởi Le Thi Bich Xem bài viết
                  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"
                  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
                  Em dùng I2C đi em ơi, I2C tương rất thuận tiện để giao tiếp nhiều CHIP
                  *** Thành viên không biết gì về điện ***

                  Comment


                  • #24
                    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


                    • #25
                      Ặc, xin lỗi các bác, em nhầm :P Tại cái màn hình nó bé , từ sáng tới giờ toàn nhìn nhầm T0 thành INT0, thảo nào, ngớ ngẩn quá T_T!

                      Comment


                      • #26
                        ố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ả

                        Comment


                        • #27
                          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ả
                          ơ hơ hơ!.......
                          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


                          • #28
                            Nguyên văn bởi AVR_VN Xem bài viết
                            Em dùng I2C đi em ơi, I2C tương rất thuận tiện để giao tiếp nhiều CHIP
                            ối !.....
                            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 anh
                            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


                            • #29
                              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


                              • #30
                                Nguyên văn bởi AVR_VN Xem bài viết
                                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 ...
                                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ì
                                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

                                Về tác giả

                                Collapse

                                Le Thi Bich Tìm hiểu thêm về Le Thi Bich

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X