Thông báo

Collapse
No announcement yet.

Xin chỉ chỗ sai trong chương trình test giao tiếp máy tính qua r485

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

  • Xin chỉ chỗ sai trong chương trình test giao tiếp máy tính qua r485

    Mình chỉ làm test đơn giản như sau :
    - Phần cứng : máy tính <--> max232 <--> 75176 <----> 75176 <---> atmega8.Trên chương trình VB sẽ gửi kí tự xuống và atmega8 sẽ nhận và gửi trở lại VB. Nhưng sửa rồi kiểm tra phần cứng mà không được, không thấy có kí tự gửi về Text box của VB. Bạn nào làm chạy rồi chỉ mình biết có thể sai do đâu :

    - code vb đoạn gửi dữ liệu ra bus rs485 :
    Code:
    Private Sub cmdSend_Click()
         MSComm1.RTSEnable = False ' Pin7_DB9 = 0 ( pin2+3_ic75176 = 1 ==> truyền data)
         MSComm1.Output = Text2.Text ' đưa dữ liệu xuống bộ đệm phát
         MSComm1.RTSEnable = True ' Disable pin7_DB9 = 1 (pin2+3_ic75176 = 0 ==> nhận data)
    End Sub
    - code vb của cả chương trình :
    Code:
    Private Sub cmdClear_Click()
        Text1.Text = ""
        
    End Sub
    
    Private Sub cmdExit_Click()
    Unload Me
    End Sub
    
    Private Sub cmdSend_Click()
    MSComm1.RTSEnable = False ' Pin7_232 = 0
        MSComm1.Output = Text2.Text
       MSComm1.RTSEnable = True ' Disable pin7_rs232 = 1
    End Sub
    
    
    Private Sub D_RTS_Click()
    
    
    MSComm1.RTSEnable = True ' Disable pin7_rs232 = 1
    
    
    
    End Sub
    
    Private Sub Form_Load()
        cmdSend.Caption = "&Send"
        Text1.Text = ""
        Text2.Text = ""
        Text1.Enabled = False
        cmdExit.Caption = "&Exit"
        With MSComm1
            .Settings = "9600,N,8,1"
            .CommPort = 1
            .RThreshold = 1
            .SThreshold = 0
            .InputMode = comInputModeText
            .InputLen = 0
            .Handshaking = comNone
            .InBufferSize = 1024
            .OutBufferSize = 1024
            If .PortOpen = False Then
              .PortOpen = True
            End If
             
        End With
    End Sub
    
    Private Sub MSComm1_OnComm()
        Dim Buffer As Variant
        If MSComm1.CommEvent = comEvReceive Then
            Text1.Text = Text1.Text + MSComm1.Input
        End If
    End Sub
    
    Private Sub RTS_ENABLE_Click()
    MSComm1.RTSEnable = False ' Pin7_232 = 0
    End Sub
    - Phần chương trình cho atmega8 mình test với 1 con nên chỉ nhận data từ máy tính rồi gửi lại thôi . Bình thường vdk đưa pin_23_75176 (low để nhận dữ liệu), khi cần truyền dữ liệu về máy tính thì lại đưa chân này lên mức cao.
    Code:
    /*****************************************************
    This program was produced by the
    CodeWizardAVR V1.24.8d Professional
    Automatic Program Generator
    © Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com
    
    Project : 
    Version : 
    Date    : 11/14/2009
    Author  : F4CG                            
    Company : F4CG                            
    Comments: 
    
    
    Chip type           : ATmega8
    Program type        : Application
    Clock frequency     : 16.000000 MHz
    Memory model        : Small
    External SRAM size  : 0
    Data Stack size     : 256
    *****************************************************/
    
    #include <mega8.h>
    #include <delay.h>
    #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 buffer
    #define RX_BUFFER_SIZE 8
    char rx_buffer[RX_BUFFER_SIZE];          
    
    
    #if RX_BUFFER_SIZE<256
    unsigned char rx_wr_index,rx_rd_index,rx_counter;
    #else
    unsigned int rx_wr_index,rx_rd_index,rx_counter;
    #endif
    
    // This flag is set on USART Receiver buffer overflow
    bit rx_buffer_overflow;
    
    // USART Receiver interrupt service routine
    interrupt [USART_RXC] void usart_rx_isr(void)
    {
    char status,data;
    status=UCSRA;
    data=UDR;
    if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
       {
       rx_buffer[rx_wr_index]=data;
       if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
       if (++rx_counter == RX_BUFFER_SIZE)
          {
          rx_counter=0;
          rx_buffer_overflow=1;
          };
       };
    }
    
    #ifndef _DEBUG_TERMINAL_IO_
    // Get a character from the USART Receiver buffer
    #define _ALTERNATE_GETCHAR_
    #pragma used+
    char getchar(void)
    {
    char data;
    while (rx_counter==0);
    data=rx_buffer[rx_rd_index];
    if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
    #asm("cli")
    --rx_counter;
    #asm("sei")
    return data;
    }
    #pragma used-
    #endif
    
    // USART Transmitter buffer
    #define TX_BUFFER_SIZE 8
    char tx_buffer[TX_BUFFER_SIZE];
    
    #if TX_BUFFER_SIZE<256
    unsigned char tx_wr_index,tx_rd_index,tx_counter;
    #else
    unsigned int tx_wr_index,tx_rd_index,tx_counter;
    #endif
    
    // USART Transmitter interrupt service routine
    interrupt [USART_TXC] void usart_tx_isr(void)
    {
    if (tx_counter)
       {
       --tx_counter;
       UDR=tx_buffer[tx_rd_index];  
       PORTB.0 = 1;         // ------------------> pin 2+3_ic75176 de truyen du lieu ve lai may tinh
     
       if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
       };
    }
    
    #ifndef _DEBUG_TERMINAL_IO_
    // Write a character to the USART Transmitter buffer
    #define _ALTERNATE_PUTCHAR_
    #pragma used+
    void putchar(char c)
    {
    while (tx_counter == TX_BUFFER_SIZE);
    #asm("cli")
    if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
       {
       tx_buffer[tx_wr_index]=c;
       if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
       ++tx_counter;
       }
    else  
    {
       UDR=c;  
       PORTB.0 = 1;    // ------------------> pin 2+3_ic75176 de truyen du lieu ve lai may tinh
       
       }
    #asm("sei")
    }
    #pragma used-
    #endif
    
    // Standard Input/Output functions
    #include <stdio.h>
    
    // Declare your global variables here
    
    void main(void)
    {
    
    PORTB=0x00;
    DDRB=0x03;
    
    // 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: 9600
    UCSRA=0x00;
    UCSRB=0xD8;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x67;
    
    // Global enable interrupts
    #asm("sei")
    
    while (1)
          {
          // Place your code here
         
        PORTB.0 = 0;     //  chan pin2+3 _ic75176 = 0 (low) de cho nhan du lieu
        if(rx_counter > 0) 
        {  
           putchar(getchar()); // gui ve lai may tinh
           
          }
          }
    }
    .

    Mình dùng thạch anh 16Mhz , phần cứng có lẽ tạm nhưng phần mềm không biết sai chỗ nào nên không có dữ liệu gửi về . nhờ các bạn chỉ cho mình chỗ sai để khắc phục.

  • #2
    oạch.Mega8 mà chơi tới tận 16MHZ cơ à?Con này mình nghĩ nó chạy ở 12Mhz là đã overlock rồi đấy.Bạn thử coi lại phần chuyển đổi rs232-rs485 coi có vấn đề gì ko nhé!


    Add: 97 Quán Nam - Lê Chân - Hải Phòng.
    Tel: 031 518648 Phone: 0904 283 505

    Comment


    • #3
      không 20Mhz mới overlock mình sai atmega8 -16 mà. chỉ có điều theo data sheet thì với baud là 9600 sẽ có sai số 0.2 %. mạch mình làm test nên hàn chung trên một board khoảng cách không đáng kể

      Comment


      • #4
        Bạn xem lại Datasheet con Mega8 nhé, vì theo mình nhớ Mega8 chỉ có max là 12Mhz thôi, mỗi con Mega48 mới lên tới được 20Mhz. Bạn chạy thạch anh lớn thế kia mình sợ là VĐK chạy ko đúng là đúng rồi.

        Comment


        • #5
          Nguyên văn bởi newbie_avr Xem bài viết
          Mình chỉ làm test đơn giản như sau :
          - Phần cứng : máy tính <--> max232 <--> 75176 <----> 75176 <---> atmega8.Trên chương trình VB sẽ gửi kí tự xuống và atmega8 sẽ nhận và gửi trở lại VB. Nhưng sửa rồi kiểm tra phần cứng mà không được, không thấy có kí tự gửi về Text box của VB. Bạn nào làm chạy rồi chỉ mình biết có thể sai do đâu :

          - code vb đoạn gửi dữ liệu ra bus rs485 :
          Code:
          Private Sub cmdSend_Click()
               MSComm1.RTSEnable = False ' Pin7_DB9 = 0 ( pin2+3_ic75176 = 1 ==> truyền data)
               MSComm1.Output = Text2.Text ' đưa dữ liệu xuống bộ đệm phát
               MSComm1.RTSEnable = True ' Disable pin7_DB9 = 1 (pin2+3_ic75176 = 0 ==> nhận data)
          End Sub
          - code vb của cả chương trình :
          Code:
          Private Sub cmdClear_Click()
              Text1.Text = ""
              
          End Sub
          
          Private Sub cmdExit_Click()
          Unload Me
          End Sub
          
          Private Sub cmdSend_Click()
          MSComm1.RTSEnable = False ' Pin7_232 = 0
              MSComm1.Output = Text2.Text
             MSComm1.RTSEnable = True ' Disable pin7_rs232 = 1
          End Sub
          
          
          Private Sub D_RTS_Click()
          
          
          MSComm1.RTSEnable = True ' Disable pin7_rs232 = 1
          
          
          
          End Sub
          
          Private Sub Form_Load()
              cmdSend.Caption = "&Send"
              Text1.Text = ""
              Text2.Text = ""
              Text1.Enabled = False
              cmdExit.Caption = "&Exit"
              With MSComm1
                  .Settings = "9600,N,8,1"
                  .CommPort = 1
                  .RThreshold = 1
                  .SThreshold = 0
                  .InputMode = comInputModeText
                  .InputLen = 0
                  .Handshaking = comNone
                  .InBufferSize = 1024
                  .OutBufferSize = 1024
                  If .PortOpen = False Then
                    .PortOpen = True
                  End If
                   
              End With
          End Sub
          
          Private Sub MSComm1_OnComm()
              Dim Buffer As Variant
              If MSComm1.CommEvent = comEvReceive Then
                  Text1.Text = Text1.Text + MSComm1.Input
              End If
          End Sub
          
          Private Sub RTS_ENABLE_Click()
          MSComm1.RTSEnable = False ' Pin7_232 = 0
          End Sub
          - Phần chương trình cho atmega8 mình test với 1 con nên chỉ nhận data từ máy tính rồi gửi lại thôi . Bình thường vdk đưa pin_23_75176 (low để nhận dữ liệu), khi cần truyền dữ liệu về máy tính thì lại đưa chân này lên mức cao.
          Code:
          /*****************************************************
          This program was produced by the
          CodeWizardAVR V1.24.8d Professional
          Automatic Program Generator
          © Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
          http://www.hpinfotech.com
          
          Project : 
          Version : 
          Date    : 11/14/2009
          Author  : F4CG                            
          Company : F4CG                            
          Comments: 
          
          
          Chip type           : ATmega8
          Program type        : Application
          Clock frequency     : 16.000000 MHz
          Memory model        : Small
          External SRAM size  : 0
          Data Stack size     : 256
          *****************************************************/
          
          #include <mega8.h>
          #include <delay.h>
          #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 buffer
          #define RX_BUFFER_SIZE 8
          char rx_buffer[RX_BUFFER_SIZE];          
          
          
          #if RX_BUFFER_SIZE<256
          unsigned char rx_wr_index,rx_rd_index,rx_counter;
          #else
          unsigned int rx_wr_index,rx_rd_index,rx_counter;
          #endif
          
          // This flag is set on USART Receiver buffer overflow
          bit rx_buffer_overflow;
          
          // USART Receiver interrupt service routine
          interrupt [USART_RXC] void usart_rx_isr(void)
          {
          char status,data;
          status=UCSRA;
          data=UDR;
          if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
             {
             rx_buffer[rx_wr_index]=data;
             if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
             if (++rx_counter == RX_BUFFER_SIZE)
                {
                rx_counter=0;
                rx_buffer_overflow=1;
                };
             };
          }
          
          #ifndef _DEBUG_TERMINAL_IO_
          // Get a character from the USART Receiver buffer
          #define _ALTERNATE_GETCHAR_
          #pragma used+
          char getchar(void)
          {
          char data;
          while (rx_counter==0);
          data=rx_buffer[rx_rd_index];
          if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
          #asm("cli")
          --rx_counter;
          #asm("sei")
          return data;
          }
          #pragma used-
          #endif
          
          // USART Transmitter buffer
          #define TX_BUFFER_SIZE 8
          char tx_buffer[TX_BUFFER_SIZE];
          
          #if TX_BUFFER_SIZE<256
          unsigned char tx_wr_index,tx_rd_index,tx_counter;
          #else
          unsigned int tx_wr_index,tx_rd_index,tx_counter;
          #endif
          
          // USART Transmitter interrupt service routine
          interrupt [USART_TXC] void usart_tx_isr(void)
          {
          if (tx_counter)
             {
             --tx_counter;
             UDR=tx_buffer[tx_rd_index];  
             PORTB.0 = 1;         // ------------------> pin 2+3_ic75176 de truyen du lieu ve lai may tinh
           
             if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
             };
          }
          
          #ifndef _DEBUG_TERMINAL_IO_
          // Write a character to the USART Transmitter buffer
          #define _ALTERNATE_PUTCHAR_
          #pragma used+
          void putchar(char c)
          {
          while (tx_counter == TX_BUFFER_SIZE);
          #asm("cli")
          if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
             {
             tx_buffer[tx_wr_index]=c;
             if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
             ++tx_counter;
             }
          else  
          {
             UDR=c;  
             PORTB.0 = 1;    // ------------------> pin 2+3_ic75176 de truyen du lieu ve lai may tinh
             
             }
          #asm("sei")
          }
          #pragma used-
          #endif
          
          // Standard Input/Output functions
          #include <stdio.h>
          
          // Declare your global variables here
          
          void main(void)
          {
          
          PORTB=0x00;
          DDRB=0x03;
          
          // 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: 9600
          UCSRA=0x00;
          UCSRB=0xD8;
          UCSRC=0x86;
          UBRRH=0x00;
          UBRRL=0x67;
          
          // Global enable interrupts
          #asm("sei")
          
          while (1)
                {
                // Place your code here
               
              PORTB.0 = 0;     //  chan pin2+3 _ic75176 = 0 (low) de cho nhan du lieu
              if(rx_counter > 0) 
              {  
                 putchar(getchar()); // gui ve lai may tinh
                 
                }
                }
          }
          .

          Mình dùng thạch anh 16Mhz , phần cứng có lẽ tạm nhưng phần mềm không biết sai chỗ nào nên không có dữ liệu gửi về . nhờ các bạn chỉ cho mình chỗ sai để khắc phục.
          hic, mấy bác ơi.. con này chơi tới 20Mhz mà mấy bác cứ la ơi ới vậy.. làm bạn ý lo rùi. cả M8 lẫn M8L đều chạy dc ở 16Mhz, với dk là nguồn cấp phải đủ 5V và ổn định tí, thông tin chính xác thì cứ coi trong datasheet, mấy trang gần cuối, coi cái giản đồ tần số theo điện áp ấy.

          bạn cứ để vậy mà debug thì.. khó lắm.. vì nguyên nhân ở quá nhiều chỗ, ko bit nguyên nhân ở chỗ nào, giờ thì bạn nên tách từng phần ra, debug để chắc chắn là từng phần đó chạy được đã..
          bạn nên dùng các phần mềm terminal của win để test trước, hoặc có thể dùng trực tiếp thằng terminal của CodeVision cũng dc. nếu vậy mà nó cũng ko thấy chạy thì bạn gỡ 2 con 176 ra.. rồi debug từ từ.. chứ để một cục vậy thì.. hic khó ăn lém.

          Comment


          • #6
            phần cứng thì mình nghĩ mạch đơn giản không có gì đáng nói có điều về chương trình nếu bạn nào làm rồi thì mình nghĩ sai đâu đó.

            - mình không mắc 232 <->485 theo kiểu tự động (chân pin2+3_ic75176 được điều khiển trong chương trình).

            Code:
            Private Sub cmdSend_Click()
                 MSComm1.RTSEnable = False ' Pin7_DB9 = 0 ( pin2+3_ic75176 = 1 ==> truyền data)
                 MSComm1.Output = Text2.Text ' đưa dữ liệu xuống bộ đệm phát
                 MSComm1.RTSEnable = True ' Disable pin7_DB9 = 1 (pin2+3_ic75176 = 0 ==> nhận data)
            End Sub
            code viết để truyền thử một kí tự kiểu này có ổn không, có nghĩa là sau khi mình đưa dữ liệu ra bộ đệm để gửi xuống vdk (chưa truyền )
            Code:
            MSComm1.Output = Text2.Text ' đưa dữ liệu xuống bộ đệm phát
            mà mình đưa chân ic rs485 (75176) xuống mức thấp liền thì nó không cho phép gửi
            Code:
             MSComm1.RTSEnable = True ' Disable pin7_DB9 = 1 (pin2+3_ic75176 = 0 ==> nhận data)
            mặc dù mục đích là để máy tính của mình trở về trạng thái chờ nhận data trả về từ atmega8. có lẽ nào đoạn code này sai ở ngay chỗ đó và atmega8 sẽ không nhận được dữ liệu hoặc có nhận sẽ nhận không đủ gây luôn sai.

            Comment


            • #7
              Nguyên văn bởi newbie_avr Xem bài viết
              phần cứng thì mình nghĩ mạch đơn giản không có gì đáng nói có điều về chương trình nếu bạn nào làm rồi thì mình nghĩ sai đâu đó.

              - mình không mắc 232 <->485 theo kiểu tự động (chân pin2+3_ic75176 được điều khiển trong chương trình).

              Code:
              Private Sub cmdSend_Click()
                   MSComm1.RTSEnable = False ' Pin7_DB9 = 0 ( pin2+3_ic75176 = 1 ==> truyền data)
                   MSComm1.Output = Text2.Text ' đưa dữ liệu xuống bộ đệm phát
                   MSComm1.RTSEnable = True ' Disable pin7_DB9 = 1 (pin2+3_ic75176 = 0 ==> nhận data)
              End Sub
              code viết để truyền thử một kí tự kiểu này có ổn không, có nghĩa là sau khi mình đưa dữ liệu ra bộ đệm để gửi xuống vdk (chưa truyền )
              Code:
              MSComm1.Output = Text2.Text ' đưa dữ liệu xuống bộ đệm phát
              mà mình đưa chân ic rs485 (75176) xuống mức thấp liền thì nó không cho phép gửi
              Code:
               MSComm1.RTSEnable = True ' Disable pin7_DB9 = 1 (pin2+3_ic75176 = 0 ==> nhận data)
              mặc dù mục đích là để máy tính của mình trở về trạng thái chờ nhận data trả về từ atmega8. có lẽ nào đoạn code này sai ở ngay chỗ đó và atmega8 sẽ không nhận được dữ liệu hoặc có nhận sẽ nhận không đủ gây luôn sai.
              vậy bạn test thử chỗ đó. có k quả j báo cho bà con bit với hen..

              Comment


              • #8
                Nối trực tiếp xem nó có chạy không đã, sau đó mới cho tầng 485 vào mà chạy.

                Comment


                • #9
                  mình vừa test thử tầng 232 (không nối với 485 cũng như atmega8)

                  mình nối 2 chân phía TLL của 232 là chân 11 và 12 với nhau ( <=> test nối chân 2 và 3 của cổng com DB9). kết quả là truyền nhận tốt ==> mạch từ pc --> 232 đã tạm ổn nhưng với điều kiện là không được đưa tín hiệu RTS lên mức cao ( lưu ý là lúc này mình chỉ test nối đơn thuần là pc <-> 232).
                  code chạy : (có giá trị trả về test box nhân)
                  Code:
                  MSComm1.Output = Text2.Text
                  code không chạy ( không có giá trị trả về test box nhân hoặc trả về tùm lum)
                  Code:
                  MSComm1.RTSEnable = True
                      MSComm1.Output = Text2.Text
                  = > ?? tại sao vậy nhỉ
                  Last edited by newbie_avr; 15-11-2009, 11:46.

                  Comment


                  • #10
                    Bắt tay hay sao mà dùng cái RST làm gì???Mình chỉ cần RXT và TXD thôi là đc mà.Mình dùng RS485 cho cặp 8051 thấy ngon mà.Theo ý kiến riêng của mình thì bạn dùng thạch anh 8Mhz là quá đủ rồi.16Mhz khiếp quá


                    Add: 97 Quán Nam - Lê Chân - Hải Phòng.
                    Tel: 031 518648 Phone: 0904 283 505

                    Comment


                    • #11
                      mục đích của tín hiệu RTC ( điều khiển từ giao diện vb) là để máy tính có thể sau khi gủi data sẽ trở về trạng thái nhận dữ liệu tức con 485 nối với max 232 rồi nối với máy tính phải được tích cực mức thấp . Mức thấp này mình dùng chân số 7 (RTS của cổng com để điều khiển).

                      Mscomm.Enable = True ==> ~ (10v) tại pin 7 qua 232 thành ~(0 v) == >(nếu kết hợp với 485 thêm thì sẽ có nghĩa là đưa máy tính về trạng thái nhận dữ liệu - 485 mỗi thời điểm chỉ có thể truyền hoặc nhận)

                      Nhưng vấn đề bạn đã thấy là trong chương trình khi mình chỉ test pc <->232 thôi mà có lệnh Mscomm.Enable = True đã thấy xuất hiện vấn đề rồi mà không hiểu tại sao
                      Code:
                      code không chạy ( không có giá trị trả về test box nhân hoặc trả về tùm lum)
                      
                      Code:
                      MSComm1.RTSEnable = True
                          MSComm1.Output = Text2.Text

                      Comment


                      • #12
                        Nguyên văn bởi natra2k2 Xem bài viết
                        Nối trực tiếp xem nó có chạy không đã, sau đó mới cho tầng 485 vào mà chạy.
                        Bùn wa em vừa thử kiểu pc <->232 test mới đầu sơ ý nối hai chân 11 và 12 của 232 để gửi nhận nghĩ là phần này tốt rồi .giờ test lại không nối vào hai chân này vẫn gửi nhận vậy là 100% pc <->232 nối có vấn đề .vì đã mình lấy con này test trên cái mạch 232 trên bo quang báo 89 của mình thì chạy tốt nên con 232 này khẳng định là ko chết.

                        = mình đo các chân thì vẫn đấu đúng. chỉ còn vấn đề còn lại là mấy cái tụ trên con 232 nè có thể bị dò hoặc hư (mình dùng đồng hồ điện tử nên cái nè hàn vào rồi ko đo được tụ) mà mình toàn sài tụ 10uF. Theo các bạn thì có ổn không ? theo data sheet thì có loại dùng tụ 1uF có loại 4.7uF còn cái mạch quang báo mình đấu tụ 10uF vẫn chạy . nhưng cái này nếu để truyền tín hiệu có độ ổn định với tốc độ cao chắc kô ổn nhỉ vì quá độ của tụ 10uF với tụ 1uF sẽ khác .

                        - mình vừa học con atmega8 vừa học vb nên đành mò mẫm mong các bạn giúp nhiệt tình nhé.
                        bạn nào biết có luồng nào (tutorial, hay code ví dụ..) về lưu và truy xuất data trong access dùng vb 6.0 thì share cho mình biết với nhé !

                        Comment


                        • #13
                          phía mạch AVR bạn đưa thẳng chân của VDK để điều khiển hướng truyền nhận cho 75176 mình nghĩ là không dc.vă lại liệu dữ liệu của bạn từ AVR đã truyền hết lên pc khi bạn cho phép 75176 nhận dữ liệu khôg.
                          cái này mình làm rùi,nhưng mình khôg dùng chân vdk để dk hướng truyền nhận cho 75176,mà dùng ngay chân dữ liệu DI dể dk.
                          vả lại bạn nên dùng bộ cách ly giữa pc và đường truyền.
                          hãy quý những j hiện tại mình đang có

                          Comment


                          • #14
                            Bạn có thể nói rõ là tại sao phía AVR mình không dùng trực tiếp chân của atmega để điều khiển hướng cho con 75176 đc ?. và nếu dúng chính bản thân tín hiệu Di (tín hiệu out_ nối với Tx của atmega) đề điều khển thì mình làm sao vậy bạn. gửi 2 phương án này thì cái nào ổn hơn mình dùng bản thân slave atmega8 để dk hướng thì không tốn thêm phần cứng cho mạch ! còn về phần cách li dùng opto cũng đc nhưng mình làm test nên cũng tiện sài lun con 232.

                            Comment


                            • #15
                              lý do chân AVR không thể dk dc như vậy thì mình cũng ko rõ lám, chắc là do nguồn không ổn định,nhiễu.mình nói như vậy vì mình đã từng làm như vậy nhưng không được.
                              còn dùng chính tính hiệu DI điểu dk thì mình dùng một toán tử NOT,hoặc bạn có dùng bóng dt cũng được.
                              như này nha: khi tín hiẹu bạn xuát ra trên txd là 0 thì qua NOT là 1 ->75176 cho phép truyền dữ liệu,khi tín hiệu là 1->qua NOT là 0->75176 cho phép nhận,bt trên đương truyền 485 luôn là 1.nhw vậy 75176 của bạn luôn thay đổi chế độ làm việc truyền và nhận khi chuỗi bit bạn truyền thay đổi. do vậy bên nhận se nhận được dúng các bít bạn truyền.
                              hãy quý những j hiện tại mình đang có

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              • mèomướp
                                Trả lời cho Sửa bộ nguồn DC 60V 45A
                                bởi mèomướp
                                Dạ hông dám làm thì chắc chắn sẽ mãi ko thể làm được đâu ạ. Nguồn xung dân dụng vài kw giờ rất nhìu ạ, sạc ô tô điện, máy hàn, lò vi sóng, âm ly... tùy chất lượng mà độ phức tạp sẽ khác nhau ạ. Và cái giá phải trả về kinh tế...
                                Hôm qua, 13:11
                              • tuyennhan
                                Trả lời cho Sửa bộ nguồn DC 60V 45A
                                bởi tuyennhan
                                Sửa dạng này thì chuyên còn không dám chắc khộng cháy nổ với linh kiện bán ngoài chợ nói gì khộng chuyên .
                                Hôm qua, 09:25
                              • tuyennhan
                                Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                bởi tuyennhan
                                Đúng rồi chọn mua theo tai . ca thì phải toàn dải nhạc thì chỉ cao và thấp thé nên loa ca thì nghe nhạc không hay và ngược lại .
                                Muốn ca và nhạc đều hay thì phải dúng 2 giàn , còn nếu chỉ có 1 thì phải chỉnh sửa lại sao cho ca và nhạc đều được không quá dở ....
                                Hôm qua, 09:10
                              • Ng.Phuong.5
                                Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                                bởi Ng.Phuong.5
                                Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                                Mấy con...
                                09-01-2025, 19:44
                              • viettinh
                                Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                bởi viettinh
                                Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
                                Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
                                09-01-2025, 18:12
                              • nguyendinhvan
                                Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                bởi nguyendinhvan
                                Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
                                Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
                                Cách đơn giản...
                                09-01-2025, 00:04
                              • mèomướp
                                Trả lời cho Sửa bộ nguồn DC 60V 45A
                                bởi mèomướp
                                Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
                                08-01-2025, 19:02
                              • tuyennhan
                                Trả lời cho Sửa bộ nguồn DC 60V 45A
                                bởi tuyennhan
                                Chủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
                                08-01-2025, 15:43
                              • tuyennhan
                                Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                bởi tuyennhan
                                Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
                                08-01-2025, 15:28
                              • mèomướp
                                Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                bởi mèomướp
                                Dạ loa tép bé xíu như ngón chân cái thôi ạ. Thiếu gì chỗ để đâu. Quan trọng là gắn thêm nó loa nghe ok hay ko thôi ạ...
                                08-01-2025, 11:44
                              Đang tải...
                              X