Thông báo

Collapse
No announcement yet.

xin cho em hỏi cách làm giao tiếp COM cho AVR

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

  • xin cho em hỏi cách làm giao tiếp COM cho AVR

    xin cho em hỏi cách làm giao tiếp COM cho AVR với

    em đang làm tiểu luận cần tới phần này mà ko biêt phải làm thế nào, mong các bác chỉ giáo.

    nội dung là, đọc tín hiệu từ cảm biến nhiệt độ qua ADC của AVR từ đó lấy các giá trị này vào VC (ko phải dạng GUI mà chỉ sử dụng giá trị đó cho một số thuật toán thực hiện trong VC console), cảm ơn các bác nhiều
    Last edited by nghoang; 12-09-2007, 20:37.

  • #2
    ai giúp em với, em cần rất gấp cảm ơn mọi người đã quan tâm

    Comment


    • #3
      chuyen nay thi da co codevision ho tro het roi con gi. ban su dụng cac ham cua no ho tro la xong.
      sau day la mot doan code vi du ban tham khao them se thuc hien duoc thoi:
      #include <90s8515.h>
      #include <stdio.h>

      /* quartz crystal frequency [Hz] */
      #define xtal 4000000L

      /* Baud rate */
      #define baud 9600

      void main(void) {
      char k;

      /* initialize the UART's baud rate */
      UBRR=xtal/16/baud-1;

      /* initialize the UART control register
      RX & TX enabled, no interrupts, 8 data bits */
      UCR=0x18;

      while (1) {
      /* receive the character */
      k=getchar();
      /* and echo it back */
      putchar(k);
      };
      }

      If you intend to use other peripherals for Input/Output, you must modify accordingly the getchar and putchar functions like in the example below:

      #include <stdio.h>

      /* inform the compiler that an alternate version

      of the getchar function will be used */
      #define _ALTERNATE_GETCHAR_

      /* now define the new getchar function */
      char getchar(void) {
      /* write your code here */

      }

      /* inform the compiler that an alternate version
      of the putchar function will be used */
      #define _ALTERNATE_PUTCHAR_

      /* now define the new putchar function */
      void putchar(char c) {
      /* write your code here */

      }

      Comment


      • #4
        Cách làm giao tiếp COM cho AVR (Xin trợ giúp em với)

        thanks bác nhiều lắm, nhưng em ko hiểu cách để đưa nó sang Visul C bác nhỉ????

        vã lại khi chạy thì mình vừa đọc vào COM vừa chạy chương trình xử lý trong Visual C vậy cách nào để đọc tín hiệu từ COM vào Visual C vậy ạ???

        cảm tạ bác nhiều lắm

        Comment


        • #5
          doi voi cong com khi ban truyen len thi no tự động dịch vào bộ đệp nhận. ta đùng ngắt tràn của bộ đêm nhận để nhận dữ liệu từ avr gửi lên

          Comment


          • #6
            tức là trong Visul C nó cho đọc lệnh này ạ??? cảm ơn bác, nhưng chưa rõ cách làm sao nữa

            Comment


            • #7
              chào bạn
              mình cũng đã từng làm như bạn roài.
              Mình thực hiện giao tiếp giữa Atmega8 với PC okie trên ngôn ngữ C
              nếu bạn quan tâm có thể vào luồng này:
              http://dientuvietnam.net/forums/showthread.php?t=6955
              http://dientuvietnam.net/forums/showthread.php?t=6552
              Chúc bạn thành công...

              Comment


              • #8
                mình trình bày laịc cho rõ hơn cái mình đang cần, cảm ơn bạn nhiều lắm lắm lắm.


                chào các anh, em đang cần làm gấp 1 cái chương trình sử dụng VC++ để đọc tín hiệu từ COM vào, có ai biết ko chỉ em với.

                công việc là:

                Tín hiệu cần đọc từ cảm biến >> ADC > AVR>> qua MAX>> COM > Chường trình console (tức không phải là 1 GUI). vì em cần dùng giá trị này nhằm thực hiện thuật toán trong chương trình viết trong VC++ chứ ko cần làm GUI làm gì, mong các anh cứu giúp. xin đa tạ

                Comment


                • #9
                  chào bạn
                  nói chung chương trình cực dễ, ngày trước mình cũng làm quá trình điều khiển nhiệt độ y như bạn nói
                  Tín hiệu từ cảm biến (LM335) được đưa vào chân Analog của VĐK (Atmega8), sau đó dc truyền lên máy tính thông qua RS232.
                  Nói chung là tính toán thôi.
                  còn quá trình truyền nhận thông qua cổng COM không khó chút nào... dựa vào các thanh ghi của nó thôi. Bạn nên tham khảo thêm cuốn Kĩ thuật ghép nối máy tính của thày Ngô Diên Tập bên Bách khoa đó.
                  Okie

                  Comment


                  • #10
                    em ở sài gòn, căng quá bác ạ, bác giúp em với, em tính thức trắng đêm để cố làm cho xong, vì còn có 2 hôm nữa là phải nộp (em bị trể lại từ học kỳ trước)

                    đa tạ bác nhiều!!!

                    Comment


                    • #11
                      em ở sài gòn, căng quá bác ạ, bác giúp em với, em tính thức trắng đêm để cố làm cho xong, vì còn có 2 hôm nữa là phải nộp (em bị trể lại từ học kỳ trước)

                      đa tạ bác nhiều!!!
                      thấy pác căng quá mình lục lại máy tính post luôn file cho bạn tham khảo với bài điều khiển nhiệt độ của mình giao tiếp qua cổng COM dùng Atmega8 (mình dùng trình dịch Code Vision AVR).
                      code của 2 cái đây:
                      AVR:

                      Code:
                      #include <mega8.h>     
                      #include<delay.h>	   
                      #include<math.h>		
                      #include <stdio.h> 		
                      
                      
                      #define ADC_VREF_TYPE 0x00
                      -------------th? t?c d?c ADC t? kênh adc_input---------------
                      unsigned int read_adc(unsigned char adc_input)
                      {
                      ADMUX=adc_input|ADC_VREF_TYPE;
                      ADCSRA|=0x40; 		///b?t d?u bi?n d?i
                      		//// d?i cho quá trình bi?n d?i hoàn thành
                      while ((ADCSRA & 0x10)==0);
                      ADCSRA|=0x10;
                      return ADCW;	/// luu giá tr? d?c du?c vào thanh ghi d? li?u c?a ADC(ADCW)
                      }	///k?t thúc th? t?c
                      
                      ------------th? t?c truy?n m?t byte d? li?u t? vi di?u khi?n lên máy tính-------------
                      void u_t(unsigned char i)
                      {
                      	while((UCSRA & 0x20)==0); 	/// d?i cho b? d?m truy?n không có kí t? nào trong dó
                      	UDR = i;      ///B?t d?u truy?n
                      }
                      --------------th? t?c hi?n th? led 7 thanh  s? 1 --------------
                      void l2(unsigned char i)
                      {
                      i=i<<4;
                      PORTD=i;
                      PORTD.3=1;
                      }
                      ------------th? t?c hi?n th? led 7 thanh s? 2------------------
                      void l1(unsigned char i)
                      {
                      i=i<<4;
                      PORTD=i;
                      PORTD.2=1;
                      }
                              
                      -----------B?T Ð?U CHUONG TRÌNH CHÍNH---------------
                      void main(void)
                      {
                      --------khai báo các bi?n c?n thi?t---------------
                      unsigned char a,b,re,i; 
                      unsigned int adc;
                      --------kh?i t?o các d?u vào ra cho các c?ng----------
                      
                      	///C?ng B làm c?ng ra
                      PORTB=0x00;
                      DDRB=0xff;
                      
                      	///C?ng làm c?ng vào 
                      PORTC=0x00;
                      DDRC=0x00;
                      
                      	///C?ng D làm c?ng ra
                      PORTD=0x00;
                      DDRD=0xff;
                      	///không s? d?ng Timer/Counter 1
                      TCCR0=0x00;
                      TCNT0=0x00;
                      TCCR1A=0x00;
                      TCCR1B=0x00;
                      TCNT1H=0x00;
                      TCNT1L=0x00;
                      ICR1H=0x00;
                      ICR1L=0x00;
                      OCR1AH=0x00;
                      OCR1AL=0x00;
                      OCR1BH=0x00;
                      OCR1BL=0x00;
                      	///Không s? d?ng Timer/Cuonter 2
                      
                      ASSR=0x00;
                      TCCR2=0x00;
                      TCNT2=0x00;
                      OCR2=0x00;
                      
                      	/// không s? d?ng ng?t ngoài
                      // INT0: Off
                      // INT1: Off
                      MCUCR=0x00;
                      
                      TIMSK=0x00;
                      
                      ---------kh?i t?o giá tr? cho c?ng UART---------
                      // các thông s? : 8 bit d? li?u, 1 bit stop, Không ki?m tra party
                      // Cho phép b? nh?n d? li?u ho?t d?ng
                      // Cho phép b? truy?n d? li?u h?at d?ng
                      // Ch?n ch? d? ho?t d?ng: ch? d? ngu?i dùng
                      // T?c d? truy?n baud: 9600 bit/s
                      UCSRA=0x00;
                      UCSRB=0x18;
                      UCSRC=0x86;
                      UBRRH=0x00;
                      UBRRL=0x33;
                      
                      	///không s? d?ng b? so sánh analog
                      ADMUX=ADC_VREF_TYPE;
                      /////kh?i d?ng ADC s?n sàng ho?t d?ng
                      ADCSRA=0x86;
                      ACSR=0x80;
                      SFIOR=0x00;
                      
                      ---------------------------------------------------------
                      back:
                      adc=read_adc(0x00);			////d?c adc t? kênh 0 luu vào bi?n adc
                      			/// tính ra di?n áp t?i kênh s? 0 ti?p t?c vào bi?n adc
                      adc=ceil((double)(adc*(float)((float)(5000)/(float)(1023))));
                      			/// t? di?n áp tính ra nhi?t d?, luu vào bi?n adc
                      adc=ceil((float)(adc-2732)/(float)(10));
                      			///tách adc thành a và b sao cho (adc=10*a+b) dùng d? hi?n th? lên led
                      b=adc%10;
                      a=(adc-b)/10;
                      ---------d?i d? li?u du?c truy?n t? máy tính truy?n xu?ng vdk, trong quá trình d?i hi?n th? giá tr? nhi?t d? trên led 7 thanh. Khi có d? li?u g?i xu?ng, luu d? li?u d?c du?c vào bi?n re --------------
                      while((UCSRA & 0x80)==0)
                      	{
                      	l2(a);
                      	delay_ms(3);
                      	l1(b);
                      	delay_ms(3);
                      	}
                      re=UDR;
                      	------ki?m tra xem s? di?u khi?n t? máy tính g?i xu?ng là s? nào, can c? vào dó d? làm các công vi?c tuong ?ng----
                      if (re==1) {PORTB.0=1;PORTB.1=0;}		//b?t qu?t và t?t dèn
                      if (re==2) {PORTB.0=0;PORTB.1=1;}		//t?t qu?t và b?t dèn
                      if (re==3) {PORTB.0=0;PORTB.1=0;}		//t?t c? qu?t và dèn
                      
                      ---------vòng l?p hi?n th? led trong vòng 60ms-----------
                      i=10;
                      while (i>0)
                            {        
                      	l2(a);
                      	delay_ms(3);
                      	l1(b);
                      	delay_ms(3);
                      	i--;
                            };
                      -----truy?n giá tr? nhi?t d? t? vi di?u khi?n lên máy tính-----------
                      u_t (adc);
                      goto back;	// tr? l?i d? ti?p t?c di?u khi?n
                      }		//k?t thúc chuong trình
                      C:
                      Code:
                      #include "stdlib.h"
                      #include "stdio.h"
                      #include "conio.h"
                      #include "graphics.h"
                      #include "dos.h"
                      
                      #define com1 0x3f8
                      #define lcr com1+3
                      #define lsr com1+5
                      #define txdata com1
                      int temp;
                      
                      // Thiet lap thong so cho cong Com
                      void set_up(void)
                      {
                        outp(lcr,0x80);//Dat bit so 7 cua LCR len 1 de chot so chia
                        outp(com1,0x0c);// chon toc do Baud la 9600
                        outp(lcr,0x03);// chon cac thong so: khung truyen 8 bit. khong kiem tra Party
                      	       // xoa bit 7 de thiet lap bo dem truyen nhan, su dung 1 bit Stop
                      }
                      
                      void send_c(int ch)
                      {
                       char status;
                       do
                        {
                         status=inp(lsr) & 0x40;
                      	// kiem tra bit thu 6 xem qua trinh truyen da xong chua
                        } while (status!= 0x40);
                             // khi da truyen xong thi gui
                       outport(txdata,(char) ch);
                      }
                      
                      int rec_c(void)
                      {
                       char status;
                       do
                        {
                          status=inp(lsr) & 0x01; // kiem tra xem co ki tu nao o bo dem khong, neu co thi doc
                      } while (status!= 0x01);
                        return ((int)inportb(txdata));// tra ve gia tri doc duoc.
                      }
                      
                      
                      void main(void)
                      {
                       int gd,gm,x,y,i,j,X,Y,hsy=4,dec,sign,k,inc;
                       char *str1;
                       gd=DETECT;
                       initgraph(&gd,&gm,"");
                       set_up();
                       tt:
                       setbkcolor(1);
                       directvideo=0;
                       gotoxy(20,12); printf("\n        Moi ban nhap nhiet do can on dinh: ");
                       scanf("%d",&temp);
                       send_c(3);
                       cleardevice;clearviewport();
                       gotoxy(20,2); printf("DO THI QUAN SAT SU THAY DOI CUA NHIET DO.");
                       gotoxy(30,28); printf("Sinh vien: Van Hung- Duc Tho- Thanh Tuan- DKH 45");
                       gotoxy(30,29); printf("Phone: 0978.150187");
                      
                       setcolor(14);
                       line(120,100,120,400);
                       line(120,400,620,400);
                       settextjustify(1,1);
                       outtextxy(98,400,"0");
                       outtextxy(98,340,"15");
                       outtextxy(98,280,"30");
                       outtextxy(98,220,"45");
                       outtextxy(98,160,"60");
                       outtextxy(98,140,"65");
                       // thoi gian.
                       outtextxy(120,410,"0");
                       outtextxy(170,410,"10");
                       outtextxy(220,410,"20");
                       outtextxy(270,410,"30");
                       outtextxy(320,410,"40");
                       outtextxy(520,410,"80");
                       outtextxy(570,410,"90");
                       outtextxy(90,100,"Nhiet");
                       outtextxy(90,110,"do");
                       outtextxy(590,420,"Thoi gian(s)");
                      
                       setviewport(120,100,600,400,1);
                       setlinestyle(3,0,1);
                       setcolor(9);
                       for (i=20;i<=480;i+=20) // ve duong doc
                        line(i,20,i,300);
                       for (j=20;j<=280;j+=20) // ve duong ngang
                        line(0,j,480,j);
                       setcolor(14);
                       setlinestyle(0,0,3);
                       line(0,0,0,300);
                       line(0,400,600,400);
                       settextjustify(0,0);
                       str1=fcvt(temp,0,&dec,&sign);
                       outtextxy(5,300-temp*hsy,str1);
                       setlinestyle(0,0,1);
                       setcolor(4);
                       line(0,300-temp*hsy,620,300-temp*hsy);
                       X=0;
                       setlinestyle(0,0,1);
                       setcolor(14);
                       moveto(0,300-rec_c()*hsy);
                       do
                         {
                          inc=rec_c(); // inc nhiet do do dc
                          Y=inc;
                          x=X;y=-Y*hsy+300;
                          lineto(x,y);
                          X++;
                          delay(200);
                          if (inc>temp)
                            send_c(1);
                          if (inc<temp)
                            send_c(2);
                          if (inc==temp)
                            send_c(3);
                      //    if (X>480)
                         }
                       while(!kbhit());
                      
                       getch();
                       restorecrtmode();
                       clrscr();
                       textmode(80); textcolor(14); textbackground(1);
                       gotoxy(20,12); printf("Ban co muon tiep tuc qua trinh dieu chinh moi khong?");
                       gotoxy(20,13); printf("Nhan ENTER de tiep tuc, ESC de thoat: ");
                       k=getch();
                       if (k==13)
                       {
                        setgraphmode(getgraphmode()); goto tt;
                       }
                       else goto thoat;
                       thoat:
                      }
                      chúc bạn thành công
                      Attached Files

                      Comment


                      • #12
                        cảm ơn bác vô cùng, em đang test thử luôn đây ạ, đa tạ bác nhiều lắm..


                        Em đang test... đang test bài mẫu của bác....

                        Bác tốt với em quá.... huhu Em thật vui và xúc động

                        Chúc bác luôn mạnh khỏe và thành công

                        Comment


                        • #13
                          bác ơi, em thử mà ko được, hình như code C này ko tương thích với Visual C phải ko vậy???


                          Em làm như sau:

                          trên con AVR em khởi taọ Project sau đó lưư tên 3 file như bình thường rồi chọn vào: Save generate & exist

                          sau đó xóa các dòng mà codevission đã khởi tạo và copy toàn bộ cái file AVR của bác paste vào, dịch.

                          Trên Visual C em tạo cpp ở dạng empty project sau đó add sourrce file của bác (C file) vào nhưng ko được bác ạ.

                          Em làm vậy đúng ko bác????

                          Comment


                          • #14
                            À, em dùng con AVR 128 bác ạ., em đã set các thông số như #include <mega8.h> , vv mà vẫn ko được.


                            mong bác trợ giúp em với

                            Comment


                            • #15
                              chào bạn
                              bạn phải bình tĩnh.
                              cái này mình làm mất hơn 1 tháng đấy nên bạn cũng không thể Load cái là chạy ngay đâu.
                              Mình là dân điện tử mà. Phải kiên nhẫn.
                              trước hết bạn phải cho mạch đúng. chú ý: giao tiếp RS232, mạch điều khiển quạt , đèn (cái này có thể thay bằng 2 con Led đơn).
                              bạn nên tạo 1 project mới và nghiền ngẫm nhé.
                              mình chỉ giúp bạn thế nhé cho bạn có ý thức làm mà (tốt cho bạn đó)
                              thuật toán dễ mà.
                              chúc bạn thành công.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              • mèomướp
                                Trả lời cho Công thức điện tử
                                bởi mèomướp
                                Dạ thời thế giờ thay đổi theo hướng tích cực hơn rồi chú trung sĩ ạ. Kiến thức được chia sẻ ngày càng nhìu nên làm ăn gian dối ko còn dễ dàng như trước đâu ạ. Những thợ nhỏ rồi sẽ thành công nhân sản xuất đồ mới hết thay vì sửa chữa lặt vặt...
                                Hôm qua, 21:21
                              • mèomướp
                                Trả lời cho Xin hỏi về màn hình laptop
                                bởi mèomướp
                                Dạ cùng chuẩn tín hiệu thì chắc chắn là nhận ạ. Vì bản chất oled hay lcd thì đều phải có mạch chuyển đổi trên thanh gỗ rồi chuyển sang những chip xử lý hàng nghìn chân gắn trên những tab mỏng dính rồi mới ra các điểm ảnh theo hàng...
                                Hôm qua, 20:31
                              • yname11
                                Trả lời cho Xin hỏi về màn hình laptop
                                bởi yname11
                                Ok , thanks bác đã chỉ...
                                Hôm qua, 15:06
                              • nguyendinhvan
                                Công thức điện tử
                                bởi nguyendinhvan
                                Sau bao năm nghiên cứu cái dtvn. Tôi phát hiện công thức này. Các anh em xem đúng bao nhiêu phần trăm nhé !

                                Chập thì thay. Cháy thì tháo
                                Làm thì láo. Báo thì hay
                                May thì khoe. Rủi thì bỏ
                                Thành tích nhỏ. Báo thành to
                                Làm cho có. Báo chi li
                                Sai cả li. Báo
                                ...
                                Hôm qua, 00:35
                              • yname11
                                Trả lời cho Xin hỏi về màn hình laptop
                                bởi yname11
                                có chắc ko b, màn lcd phải có cao áp mới sáng, màn led thì ko có, ko có cáp chuyển đổi thì lắp thế nào đc ??...
                                25-11-2024, 22:31
                              • mèomướp
                                Trả lời cho Xin hỏi về màn hình laptop
                                bởi mèomướp
                                Dạ ý chú là màn oled ấy ạ. Cùng chuẩn lvds cùng độ phân giải thì cắm được ạ. Còn nó mà khác thì hơi khó vì oled các điểm ảnh nó tự phát sáng chứ ko dùng đèn nền như lcd. Cháu chỉ biết đến vậy thôi ạ. Chú muốn nghịch phải tự tìm hiểu kỹ trước khi mua thôi, khó mà ông thợ nào tư vấn vụ này...
                                25-11-2024, 22:14
                              • bactho
                                Trả lời cho Tự làm máy đo Cuộn cảm
                                bởi bactho
                                Hay đấy bạn ạ. Đây có thể hiểu là máy đo cuộn dây. Tiện đây xin cho hỏi bạn có hiểu rõ về máy nạp rôm pcb 45 của hãng thiên minh không giúp mình cách cài fw của nó với vì mình vừa được anh bạn cho nhưng lại không biết cài fw nên chưa dùng được. Nếu có thể thì bạn giúp mình với...
                                25-11-2024, 21:48
                              • yname11
                                Trả lời cho Xin hỏi về màn hình laptop
                                bởi yname11
                                màn của mình là LCD , giờ m muốn mua màn LED để thay thế (ko muốn dùng màn LCD nữa) , lên muốn hỏi xem có cáp chuyển đổi nào có thể cắm đc màn LED vào ko , tất nhiên phải có cùng số chân pin với màn cũ rồi . VD: màn cũ là lcd mỏng , 40 pin...
                                25-11-2024, 21:43
                              • bactho
                                Trả lời cho các bạn giúp mình về file HEX với!!!
                                bởi bactho
                                Bạn vào trang phuclanshop.com ,tìm đến góc kỹ thuật. Tác giả vương khánh hưng nói rất rõ về điều bạn tìm...
                                25-11-2024, 21:21
                              • mèomướp
                                Trả lời cho Xin hỏi về màn hình laptop
                                bởi mèomướp
                                Dạ màn hình lcd đều có thể lai cấy cho nhau được hết ạ. Các loại cáp, bo mạch chuyển đổi lvds rất nhìu, với dòng sony còn phải nhổ cả chip nhớ của main cũ đưa lên gỗ thì mới lắp sang máy khác đc, chưa kể các bệnh về màu... ngay cả...
                                25-11-2024, 20:43
                              Đang tải...
                              X