Thông báo

Collapse
No announcement yet.

Lập trình C# ứng dụng cho việc truyền dữ liệu từ AVR > PC?

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

  • Lập trình C# ứng dụng cho việc truyền dữ liệu từ AVR > PC?

    Chào các anh,em là mem mới,hiện tại em có 1 đề tài nho nhỏ,mong được sự tư vấn của anh chị.Đề tài của em là viết một soft bằng C# với chức năng là : dữ liệu thu thập đc từ mạch AVR ( chẳng hạn một bộ thu tín hiệu GPS) sẽ đc truyền lên PC với giao diện kết nối là cổng COM.Ở đây em muốn hỏi cho rõ trước khi bắt tay vào học C# (em chưa từng học cái này ạ,mới chỉ biết lập trình C thôi):
    1,C# có điểm gì khác so với C trong đề tài này?
    2,Các hàm khả dĩ có thể sử dụng trong C# khi bắt tay vào viết soft?
    3,Dùng chương trình dịch nào để viêt C# là hay nhất ạ?
    Em hỏi trước mấy câu hỏi vậy đã,có gì em sẽ hỏi thêm,cám ơn các anh chị trước ạ
    Missed the boat...caught the Titanic,don't worry,dudes.

  • #2
    - Để viết C# bạn dùng bộ Visual Studio 2005 trở lên là hợp lý. Tôi dùng 2008 và 2010 thấy cũng không khác gì nhiều so với bản 2005 vì vậy tôi nghĩ bạn dùng bản 2008 là hợp lý nhất với dotnet 3.5 rất tốt.
    - C# là lập trình hướng đối tượng. Nếu bạn đã biết đến C rồi thì việc tiếp cận C# rất nhanh.
    - C# có nền tảng cơ bản là: Ngôn ngữ C + Ngôn ngữ thân thiện con người ( Visual).
    - C# dễ dùng và hỗ trợ gợi nhớ các lệnh cũng như biến...
    Nhiều lắm, chưa nói hết được. Túm lại bạn muốn làm việc với C# hãy down những sample trên mạng hoặc vào trang Codeproject.com nơi có nhiều ví dụ. Sau đó làm việc với phần SerialPort để giao tiếp cổng COM. Giao tiếp cổng com bạn cũng dùng sự kiện giống như ngắt của vi điều khiển mà nhận dữ liệu.
    Bạn cần làm vài ví dụ cơ bản với C# đã rồi hãy làm đến cổng COM.
    Nếu có thời gian tôi sẽ hướng dẫn sau.
    n
    ĐT: 0986 492 489

    Tham khảo:

    Comment


    • #3
      Nguyên văn bởi luugu Xem bài viết
      Chào các anh,em là mem mới,hiện tại em có 1 đề tài nho nhỏ,mong được sự tư vấn của anh chị.Đề tài của em là viết một soft bằng C# với chức năng là : dữ liệu thu thập đc từ mạch AVR ( chẳng hạn một bộ thu tín hiệu GPS) sẽ đc truyền lên PC với giao diện kết nối là cổng COM.Ở đây em muốn hỏi cho rõ trước khi bắt tay vào học C# (em chưa từng học cái này ạ,mới chỉ biết lập trình C thôi):
      1,C# có điểm gì khác so với C trong đề tài này?
      2,Các hàm khả dĩ có thể sử dụng trong C# khi bắt tay vào viết soft?
      3,Dùng chương trình dịch nào để viêt C# là hay nhất ạ?
      Em hỏi trước mấy câu hỏi vậy đã,có gì em sẽ hỏi thêm,cám ơn các anh chị trước ạ
      [ 1] C# là ngôn ngữ hỗ trợ viết các ứng dụng hướng đối tượng mạnh mẽ , còn C chủ yếu viết ứng dụng theo kiểu cấu trúc. C# được phát triển bởi Microsost, hiện tại nó xếp thứ 6-7 trong số các ngôn ngữ được sử dụng nhiều nhất, và ở VN thì dân CNTT cũng dùng khá nhiều. Nếu bạn chọn C# trong để lập trình thì tài liệu rất phong phú.

      [2] Có khá nhiều Tutorial viết bằng C#. Chặng hạn GPS bạn có thể xem bài ở đây:
      HTML Code:
      http://www.codeproject.com/KB/mobile/WritingGPSApplications1.aspx
      Bạn có thể tìm nhiều bài viết khác trên: http://www.codeproject.com hoặc www.codeplex.com (Các ứng dụng mở viết trên .NET của MS)

      [3] Về trình dịch thì bộ Visual Studio Professional của MS là hay nhất, bạn có thể dụng bản Visual Studio Express (Bản này Free nhưnng hạn chế tính năng) hoặc dùng SharpDevelop (Free và chỉ có 4MB)

      Comment


      • #4
        Cám ơn 2 anh rất nhiều,em đang gặp khó khăn trong việc định chân cho các devices,không hiểu sao lại gặp trường hợp 2 chân cần nối của COM và AVR đều là output,không có cổng COM ( máy lap) nên phải chạy mô phỏng bằng proteus.Có anh nào đã từng làm thì share cho em cái mạch với ạ,em cảm ơn trước.
        Missed the boat...caught the Titanic,don't worry,dudes.

        Comment


        • #5
          Mình không hiểu ý của bạn. Nếu bạn muốn nối UART của AVR với COM của máy tính thì bạn phải có mạch chuyển đổi dùng con MAX232. nối theo datasheet của MAX232 là được.
          Chúc bạn làm tốt
          Press "Thank - Button"

          Comment


          • #6
            Tôi cũng gặp vấn đề rất amatur là không truyền được dữ liệu với AVR16 bằng Max232.
            Dùng CodeVision tự sinh code:

            Chọn chip 1Mhz, Bound rate 4800.

            Send ký tự A-> Bật tắt các chân ở PORTB thôi.

            Code như sau:
            /************************************************** ***
            This program was produced by the
            CodeWizardAVR V1.24.6 Professional
            Automatic Program Generator
            © Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.
            http://www.hpinfotech.com
            e-mail:office@hpinfotech.com

            Project :
            Version :
            Date : 3/12/2010
            Author : F4CG
            Company : F4CG
            Comments:


            Chip type : ATmega16
            Program type : Application
            Clock frequency : 1.000000 MHz
            Memory model : Small
            External SRAM size : 0
            Data Stack size : 256
            ************************************************** ***/

            #include <mega16.h>

            int M1Status=0;
            int M2Status=0;
            int M3Status=0;
            // External Interrupt 0 service routine
            interrupt [EXT_INT0] void ext_int0_isr(void)
            {
            // Place your code here
            if(!PORTA.0)
            {
            PORTA.0=1;
            PORTB.0=0;
            PORTB.1=1;
            M1Status=-1;
            }
            else
            {
            PORTA=0x00;
            PORTB=0x00;
            }
            }

            // External Interrupt 1 service routine
            interrupt [EXT_INT1] void ext_int1_isr(void)
            {
            // Place your code here

            }

            #define RXB8 1
            #define TXB8 0
            #define UPE 2
            #define OVR 3
            #define FE 4
            #define UDRE 5
            #define RXC 7

            #define FRAMING_ERROR (1<<FE)
            #define PARITY_ERROR (1<<UPE)
            #define DATA_OVERRUN (1<<OVR)
            #define DATA_REGISTER_EMPTY (1<<UDRE)
            #define RX_COMPLETE (1<<RXC)

            // USART Receiver interrupt service routine
            char iData=0;

            interrupt [USART_RXC] void usart_rx_isr(void)
            {
            char status,data;
            status=UCSRA;
            data=UDR;
            iData=UDR;
            }


            // 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 A initialization
            // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
            // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
            PORTA=0x00;
            DDRA=0xFF;

            // Port B initialization
            // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
            // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
            PORTB=0x00;
            DDRB=0xFF;

            // Port C 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
            PORTC=0xFF;
            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
            // Mode: Normal top=FFh
            // OC0 output: Disconnected
            TCCR0=0x00;
            TCNT0=0x00;
            OCR0=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: Falling Edge
            // INT1: On
            // INT1 Mode: Falling Edge
            // INT2: Off
            GICR|=0xC0;
            MCUCR=0x0A;
            MCUCSR=0x00;
            GIFR=0xC0;

            // Timer(s)/Counter(s) Interrupt(s) initialization
            TIMSK=0x00;

            // USART initialization
            // Communication Parameters: 8 Data, 1 Stop, No Parity
            // USART Receiver: On
            // USART Transmitter: On
            // USART Mode: Asynchronous
            // USART Baud rate: 4800
            UCSRA=0x00;
            UCSRB=0xD8;
            UCSRC=0x86;
            UBRRH=0x00;
            UBRRL=0x0C;

            // Analog Comparator initialization
            // Analog Comparator: Off
            // Analog Comparator Input Capture by Timer/Counter 1: Off
            ACSR=0x80;
            SFIOR=0x00;

            PORTD.2=1;
            PORTD.3=1;
            // Global enable interrupts
            #asm("sei")

            while (1)
            {

            if(iData)
            {

            switch(iData)
            {
            case 'A':
            {
            M1Status=1;
            PORTB.0=0;
            PORTB.1=1;
            break;
            }
            case 'B':
            {
            M1Status=-1;
            PORTB.0=1;
            PORTB.1=0;
            break;
            }
            default:
            if(PORTB.7)
            PORTB.7=0;
            else
            PORTB.7=1;
            break;
            }

            iData=0;
            }
            // Place your code here


            };
            }

            Mạch mắc cực kỳ đơn giản theo các sơ đồ trên mạng.

            Test truyền ký tự trực tiếp qua chân 2<-> 3 thì đúng.
            Nếu lấy tín hiệu qua Max232 thì phải bỏ dây GND nối pin5 thì mới truyền đuọc.
            Đo đồng hồ thì V giữa chân 3-5 là -5.6V (Âm nhé) chân 3 mang thế ÂM
            Cắm vào Mega16 thì chả thấy gì hết.
            Bác nào đã làm vấn đề này xin chỉ giáo cho em.
            Kính tạ.

            Comment


            • #7
              Nguyên văn bởi luugu Xem bài viết
              Chào các anh,em là mem mới,hiện tại em có 1 đề tài nho nhỏ,mong được sự tư vấn của anh chị.Đề tài của em là viết một soft bằng C# với chức năng là : dữ liệu thu thập đc từ mạch AVR ( chẳng hạn một bộ thu tín hiệu GPS) sẽ đc truyền lên PC với giao diện kết nối là cổng COM.Ở đây em muốn hỏi cho rõ trước khi bắt tay vào học C# (em chưa từng học cái này ạ,mới chỉ biết lập trình C thôi):
              1,C# có điểm gì khác so với C trong đề tài này?
              2,Các hàm khả dĩ có thể sử dụng trong C# khi bắt tay vào viết soft?
              3,Dùng chương trình dịch nào để viêt C# là hay nhất ạ?
              Em hỏi trước mấy câu hỏi vậy đã,có gì em sẽ hỏi thêm,cám ơn các anh chị trước ạ
              biết C thì học C# học nhanh thôi, làm qua COM mất 30' là xong, tớ cũng đang định làm cái này. nếu nối được AVR với PC thì coi như xong.

              Comment


              • #8
                Lọ mọ mãi cuối cùng cũng thấy có tín hiệu đến AVR, tuy nhiên phải bấm qua Terminal mấy lần thì bên AVR mới thấy có tín hiệu sử lý, hay là do dây cắm trên board test nên lỏng lẻo? Bị nhiễu?.

                Em thấy trên mạng có 2 loại sơ đồ mác cho con MAX232. 1 loại là mắc với tụ 10u 1 loại là mắc với tụ 1u,
                Xin các cao thủ giúp đỡ.

                Comment


                • #9
                  Bận mấy ngày,hôm qua mình đã lắp mạch rồi,dùng con AT8 và MAX232,làm 1 mạch nguồn 12V,nhưng chưa test thử vì còn thiếu mạch nạp cho AVR,đã có 1 soft nhỏ viết bằng Visual để send dữ liệu bất kỳ từ AVR-> COM,sẽ cập nhật thêm thông tin và có nghi vấn gì sẽ hỏi tiếp,cảm ơn tất cả mọi người.
                  Missed the boat...caught the Titanic,don't worry,dudes.

                  Comment

                  Về tác giả

                  Collapse

                  luugu Tìm hiểu thêm về luugu

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

                  Collapse

                  Đang tải...
                  X