اطلاعیه

Collapse
No announcement yet.

ارتباط آردینو با atmega

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ارتباط آردینو با atmega

    سلام دوستان من میخوام از طریق rx و tx یک سری اطلاعات (فقط حرف مثلا "a,b,c" یا "1234" از آردینو بفرستم به atmega8 و برعکس هرچی گشتم چیزی دستگیرم نشد کسی از دوستان هست بتونه کمکم کنه یا کدی چیزی بزاره ممنون

    #2
    پاسخ : ارتباط آردینو با atmega

    نوشته اصلی توسط relax021 نمایش پست ها
    سلام دوستان من میخوام از طریق rx و tx یک سری اطلاعات (فقط حرف مثلا "a,b,c" یا "1234" از آردینو بفرستم به atmega8 و برعکس هرچی گشتم چیزی دستگیرم نشد کسی از دوستان هست بتونه کمکم کنه یا کدی چیزی بزاره ممنون
    سلام
    اگر بلد باشید با رابط سریال آردوینو و میکروکنترلر های AVR کار کنیدهمه چیز حله.
    حال مشکل شما دقیقا با کدوم طرف قضیه هستش؟

    دیدگاه


      #3
      پاسخ : ارتباط آردینو با atmega

      سلام
      این کد را نگاه کنید، HT9032 را توسط RX و TX به آردویینو متصل کرده یک کالر آیدی برای بلاک کردن تماس ساخته و نتایج را روی LCD نمایش می ده.
      شما هم می تونید مشابه همین عمل کنید.
      امیدوارم کمکتون کنه
      کد:
      #define Serial_Debug false 
      
      #include <Wire.h>  
      #include <LiquidCrystal_I2C.h>
      #include <LAudio.h>
      #define HOOK 2 
      
      LiquidCrystal_I2C lcd(0x20, 20, 4); 
       
      static int state=0;
      static int o=0;
      static int i=0;
      static char nam[128];
      static char num[25];
      static char dat[25];
      static int plen=0;
      static int nlen=0;
      static int dlen=0;
      static int mlen=0;
      static int len=0;
      int SER = 0;
      String str = "";
      
      
      void BlockCallers() {
                     if (str == "106"){
                        lcd.setCursor(0,0);
                        lcd.print("Last Call BLOCKED  :");
                        Play_MP3();
                      }
      }
      
      void setup()
      {
      
        if(Serial_Debug){
           Serial.begin(115200);  
           while(!Serial){
               delay(100);
           }
        }
        
        pinMode(HOOK, OUTPUT);
        digitalWrite(HOOK, LOW); 
      
        LAudio.begin();
        LAudio.setVolume(6);
        
        lcd.init();    
        lcd.noBacklight();
        delay(400);
        lcd.clear();
        lcd.backlight();
        lcd.setCursor(0,1);
        lcd.print("   Caller ID V1.6 ");
        lcd.setCursor(0,2);
        lcd.print(" Waiting for Caller");
        Serial.println("Waiting for next Caller");
        delay(3500);
       
        Serial1.begin(1200);
      }
       
      void loop()
      {
        Ht9032_get();
        
                if( state == 10 ) 
                {      
                  o=0;     
                  Serial.println("State: 10 ");
                  Serial.print("DATE: ");
                  Serial.print(char(dat[0]));
                  Serial.print(char(dat[1]));
                  Serial.print('/');
                  Serial.print(char(dat[2]));
                  Serial.println(char(dat[3]));
                  Serial.print("TIME: ");
                  Serial.print(char(dat[4]));
                  Serial.print(char(dat[5]));
                  Serial.print(':');
                  Serial.print(char(dat[6]));
                  Serial.println(char(dat[7]));
                  Serial.print("NAME: ");
                  for(int i=0;i<nlen;i++)
                   {
                     Serial.print(char(nam[i]));
                   }
                  Serial.println("");
                  Serial.print("NUMBER: ");
                  for(int i=0;i<mlen;i++)
                   {
                     Serial.print(char(num[i]));
                   }
                   Serial.println("");
      
                  state=0;
                  
                  lcd.clear();
                  lcd.setCursor(0,0);
                  lcd.print("Last Call Received :");
                  lcd.setCursor(0,1);
                  lcd.print("Date:");
                  lcd.print(char(dat[0]));
                  lcd.print(char(dat[1]));
                  lcd.print('/');
                  lcd.print(char(dat[2]));
                  lcd.print(char(dat[3]));
                  lcd.print(" ");
                  lcd.print(char(dat[4]));
                  lcd.print(char(dat[5]));
                  lcd.print(':');
                  lcd.print(char(dat[6]));
                  lcd.print(char(dat[7]));
       
                  lcd.setCursor(0,2);
                  lcd.print("Name: ");
       
                  for(int i=0;i<nlen;i++)
                   {
                     lcd.print(char(nam[i]));
                   }
       
                  lcd.setCursor(0,3);
                  lcd.print("Num :");
      
                  str = "";
       
                  for(int i=0;i<mlen;i++)
                   {
                     lcd.print(char(num[i]));
                     str += char(num[i]);
                   }    
      
                    BlockCallers();
             }
      }
      
      void Play_MP3()
      {
            Serial.println("Blocked Caller Detected");
            digitalWrite(HOOK, HIGH); 
            Serial.println("Off Hook");
            delay(1500);  
            Serial.println("Playing message to caller");
            LAudio.playFile( storageFlash,(char*)"Klaxon.mp3");
            delay(7500);
            digitalWrite(HOOK, LOW); 
            Serial.println("On Hook");
            delay(5000);
      } 
      
      
       
      void Ht9032_get()
      {
        if (Serial1.available() > 0)  
        {
      
        SER = Serial1.read(); 
          
         /*
          * states
          * 0 - waiting for U's
          * 1 - waiting for 25 U's and then an 0x80
          * 2 - waiting for packet len
          * 3 - waiting for message id
          * 4 - get name len
          * 5 - receiving name
          * 6 - get number len
          * 7 - receiving number
          * 8 - get date len
          * 9 - receiving date
          * 10 - packet complete
          * 
          * message ids
          * 1 - date
          * 2 - number
          * 4 - number not found reason
          * 7 - name
          * 8 - name not found reason
          * 
          * reasons
          * O - Out of area (no caller ID available)
          * P - Private party (Blocked)
          * 
          */
        switch(state)
        {
          case 0:if (SER==0x55)  
                     {
                       state=1;
                       i=1;
       Serial.println("State: 0 ");
                     }break;
       
          case 1:if (SER==0x55) 
                     {
                       i++;
                     }                        
                        
                     if(SER==0x80)
                     {
                       if(i > 25)
                         {
                            state=2;
                         }
                     }
                     Serial.println("State: 1 ");             
                     break;
                     
          case 2:plen = SER; 
                     i=0;
                     state=3;                                        
                     Serial.println("State: 2 ");
                     Serial.print("Packet Length: ");
                     Serial.println(plen);
                     break;
       
          case 3: o++;
                    Serial.println("State: 3 ");
                    Serial.print("MID: ");
                    Serial.println(SER);
                    if(SER==1) 
                    {
                      state=8;
                    }
                    else if(SER==2)
                    {
                      state=6;
                    }
                    else if(SER==4)
                    {
                      state=6;
                    }
                    else if(SER==7)
                    {
                      state=4;
                    }
                    else if(SER==8)
                    {
                      state=4;
                    }
                    break;
       
          case 4:len = SER;
                     nlen = len ; 
                     o++;
                     i=0;
                     state=5;                                        
                     Serial.println("State: 4 ");
                     Serial.print("Data Length: ");
                     Serial.println(nlen);
                     break;
       
          case 6:len = SER; 
                     mlen = len ; 
                     o++;
                     i=0;
                     state=7;                                        
                     Serial.println("State: 6 ");
                     Serial.print("Data Length: ");
                     Serial.println(mlen);
                     break;
       
          case 8:len = SER; 
                     dlen = len ; 
                     o++;
                     i=0;
                     state=9;                                        
                     Serial.println("State: 8 ");
                     Serial.print("Data Length: ");
                     Serial.println(dlen);
                     break;
       
        
          case 5:nam[i]=SER;  
                  i++;
                  o++;
                    if( i > nlen - 1 ) 
                {  
                  state=3;
                  i=0;                              
                }
      
                if( o > plen - 1 ) 
                {  
                  state=10;
                }
                Serial.println("State: 5 ");
                break;
                
          case 7:num[i]=SER;  
                  i++;
                  o++;
                    if( i > mlen - 1 ) 
                {  
                  state=3;
                  i=0;                              
                }
      
                if( o > plen - 1 ) 
                {  
                  state=10;
                }
                Serial.println("State: 7 ");
                break;
                
          case 9:dat[i]=SER;  
                  i++;
                  o++;
                    if( i > dlen - 1 ) 
                {  
                  state=3;
                  i=0;                              
                }
      
                if( o > plen - 1 ) 
                {  
                  state=10;
                }
                Serial.println("State: 9 ");
                break;
                
           default:break;
         }
        }
      }

      دیدگاه


        #4
        پاسخ : ارتباط آردینو با atmega

        نوشته اصلی توسط hossein.m98 نمایش پست ها
        سلام
        اگر بلد باشید با رابط سریال آردوینو و میکروکنترلر های AVR کار کنیدهمه چیز حله.
        حال مشکل شما دقیقا با کدوم طرف قضیه هستش؟
        ممنون بابت توجه شما مشکل من دقیقا avr چیزی دزیافت نمیکنه

        دلیل: ادغام دو پست برای جلوگیری از اسپم

        بیتشر مشکل من سمت avr هست

        دلیل: ادغام دو پست برای جلوگیری از اسپم

        نوشته اصلی توسط Quantum. نمایش پست ها
        سلام
        این کد را نگاه کنید، HT9032 را توسط RX و TX به آردویینو متصل کرده یک کالر آیدی برای بلاک کردن تماس ساخته و نتایج را روی LCD نمایش می ده.
        شما هم می تونید مشابه همین عمل کنید.
        امیدوارم کمکتون کنه
        کد:
        #define Serial_Debug false 
        
        #include <Wire.h>  
        #include <LiquidCrystal_I2C.h>
        #include <LAudio.h>
        #define HOOK 2 
        
        LiquidCrystal_I2C lcd(0x20, 20, 4); 
         
        static int state=0;
        static int o=0;
        static int i=0;
        static char nam[128];
        static char num[25];
        static char dat[25];
        static int plen=0;
        static int nlen=0;
        static int dlen=0;
        static int mlen=0;
        static int len=0;
        int SER = 0;
        String str = "";
        
        
        void BlockCallers() {
                       if (str == "106"){
                          lcd.setCursor(0,0);
                          lcd.print("Last Call BLOCKED  :");
                          Play_MP3();
                        }
        }
        
        void setup()
        {
        
          if(Serial_Debug){
             Serial.begin(115200);  
             while(!Serial){
                 delay(100);
             }
          }
          
          pinMode(HOOK, OUTPUT);
          digitalWrite(HOOK, LOW); 
        
          LAudio.begin();
          LAudio.setVolume(6);
          
          lcd.init();    
          lcd.noBacklight();
          delay(400);
          lcd.clear();
          lcd.backlight();
          lcd.setCursor(0,1);
          lcd.print("   Caller ID V1.6 ");
          lcd.setCursor(0,2);
          lcd.print(" Waiting for Caller");
          Serial.println("Waiting for next Caller");
          delay(3500);
         
          Serial1.begin(1200);
        }
         
        void loop()
        {
          Ht9032_get();
          
                  if( state == 10 ) 
                  {      
                    o=0;     
                    Serial.println("State: 10 ");
                    Serial.print("DATE: ");
                    Serial.print(char(dat[0]));
                    Serial.print(char(dat[1]));
                    Serial.print('/');
                    Serial.print(char(dat[2]));
                    Serial.println(char(dat[3]));
                    Serial.print("TIME: ");
                    Serial.print(char(dat[4]));
                    Serial.print(char(dat[5]));
                    Serial.print(':');
                    Serial.print(char(dat[6]));
                    Serial.println(char(dat[7]));
                    Serial.print("NAME: ");
                    for(int i=0;i<nlen;i++)
                     {
                       Serial.print(char(nam[i]));
                     }
                    Serial.println("");
                    Serial.print("NUMBER: ");
                    for(int i=0;i<mlen;i++)
                     {
                       Serial.print(char(num[i]));
                     }
                     Serial.println("");
        
                    state=0;
                    
                    lcd.clear();
                    lcd.setCursor(0,0);
                    lcd.print("Last Call Received :");
                    lcd.setCursor(0,1);
                    lcd.print("Date:");
                    lcd.print(char(dat[0]));
                    lcd.print(char(dat[1]));
                    lcd.print('/');
                    lcd.print(char(dat[2]));
                    lcd.print(char(dat[3]));
                    lcd.print(" ");
                    lcd.print(char(dat[4]));
                    lcd.print(char(dat[5]));
                    lcd.print(':');
                    lcd.print(char(dat[6]));
                    lcd.print(char(dat[7]));
         
                    lcd.setCursor(0,2);
                    lcd.print("Name: ");
         
                    for(int i=0;i<nlen;i++)
                     {
                       lcd.print(char(nam[i]));
                     }
         
                    lcd.setCursor(0,3);
                    lcd.print("Num :");
        
                    str = "";
         
                    for(int i=0;i<mlen;i++)
                     {
                       lcd.print(char(num[i]));
                       str += char(num[i]);
                     }    
        
                      BlockCallers();
               }
        }
        
        void Play_MP3()
        {
              Serial.println("Blocked Caller Detected");
              digitalWrite(HOOK, HIGH); 
              Serial.println("Off Hook");
              delay(1500);  
              Serial.println("Playing message to caller");
              LAudio.playFile( storageFlash,(char*)"Klaxon.mp3");
              delay(7500);
              digitalWrite(HOOK, LOW); 
              Serial.println("On Hook");
              delay(5000);
        } 
        
        
         
        void Ht9032_get()
        {
          if (Serial1.available() > 0)  
          {
        
          SER = Serial1.read(); 
            
           /*
            * states
            * 0 - waiting for U's
            * 1 - waiting for 25 U's and then an 0x80
            * 2 - waiting for packet len
            * 3 - waiting for message id
            * 4 - get name len
            * 5 - receiving name
            * 6 - get number len
            * 7 - receiving number
            * 8 - get date len
            * 9 - receiving date
            * 10 - packet complete
            * 
            * message ids
            * 1 - date
            * 2 - number
            * 4 - number not found reason
            * 7 - name
            * 8 - name not found reason
            * 
            * reasons
            * O - Out of area (no caller ID available)
            * P - Private party (Blocked)
            * 
            */
          switch(state)
          {
            case 0:if (SER==0x55)  
                       {
                         state=1;
                         i=1;
         Serial.println("State: 0 ");
                       }break;
         
            case 1:if (SER==0x55) 
                       {
                         i++;
                       }                        
                          
                       if(SER==0x80)
                       {
                         if(i > 25)
                           {
                              state=2;
                           }
                       }
                       Serial.println("State: 1 ");             
                       break;
                       
            case 2:plen = SER; 
                       i=0;
                       state=3;                                        
                       Serial.println("State: 2 ");
                       Serial.print("Packet Length: ");
                       Serial.println(plen);
                       break;
         
            case 3: o++;
                      Serial.println("State: 3 ");
                      Serial.print("MID: ");
                      Serial.println(SER);
                      if(SER==1) 
                      {
                        state=8;
                      }
                      else if(SER==2)
                      {
                        state=6;
                      }
                      else if(SER==4)
                      {
                        state=6;
                      }
                      else if(SER==7)
                      {
                        state=4;
                      }
                      else if(SER==8)
                      {
                        state=4;
                      }
                      break;
         
            case 4:len = SER;
                       nlen = len ; 
                       o++;
                       i=0;
                       state=5;                                        
                       Serial.println("State: 4 ");
                       Serial.print("Data Length: ");
                       Serial.println(nlen);
                       break;
         
            case 6:len = SER; 
                       mlen = len ; 
                       o++;
                       i=0;
                       state=7;                                        
                       Serial.println("State: 6 ");
                       Serial.print("Data Length: ");
                       Serial.println(mlen);
                       break;
         
            case 8:len = SER; 
                       dlen = len ; 
                       o++;
                       i=0;
                       state=9;                                        
                       Serial.println("State: 8 ");
                       Serial.print("Data Length: ");
                       Serial.println(dlen);
                       break;
         
          
            case 5:nam[i]=SER;  
                    i++;
                    o++;
                      if( i > nlen - 1 ) 
                  {  
                    state=3;
                    i=0;                              
                  }
        
                  if( o > plen - 1 ) 
                  {  
                    state=10;
                  }
                  Serial.println("State: 5 ");
                  break;
                  
            case 7:num[i]=SER;  
                    i++;
                    o++;
                      if( i > mlen - 1 ) 
                  {  
                    state=3;
                    i=0;                              
                  }
        
                  if( o > plen - 1 ) 
                  {  
                    state=10;
                  }
                  Serial.println("State: 7 ");
                  break;
                  
            case 9:dat[i]=SER;  
                    i++;
                    o++;
                      if( i > dlen - 1 ) 
                  {  
                    state=3;
                    i=0;                              
                  }
        
                  if( o > plen - 1 ) 
                  {  
                    state=10;
                  }
                  Serial.println("State: 9 ");
                  break;
                  
             default:break;
           }
          }
        }
        بیتشر مشکل من سمت avr هست

        دلیل: ادغام دو پست برای جلوگیری از اسپم

        نوشته اصلی توسط Quantum. نمایش پست ها
        سلام
        این کد را نگاه کنید، HT9032 را توسط RX و TX به آردویینو متصل کرده یک کالر آیدی برای بلاک کردن تماس ساخته و نتایج را روی LCD نمایش می ده.
        شما هم می تونید مشابه همین عمل کنید.
        امیدوارم کمکتون کنه
        کد:
        #define Serial_Debug false 
        
        #include <Wire.h>  
        #include <LiquidCrystal_I2C.h>
        #include <LAudio.h>
        #define HOOK 2 
        
        LiquidCrystal_I2C lcd(0x20, 20, 4); 
         
        static int state=0;
        static int o=0;
        static int i=0;
        static char nam[128];
        static char num[25];
        static char dat[25];
        static int plen=0;
        static int nlen=0;
        static int dlen=0;
        static int mlen=0;
        static int len=0;
        int SER = 0;
        String str = "";
        
        
        void BlockCallers() {
                       if (str == "106"){
                          lcd.setCursor(0,0);
                          lcd.print("Last Call BLOCKED  :");
                          Play_MP3();
                        }
        }
        
        void setup()
        {
        
          if(Serial_Debug){
             Serial.begin(115200);  
             while(!Serial){
                 delay(100);
             }
          }
          
          pinMode(HOOK, OUTPUT);
          digitalWrite(HOOK, LOW); 
        
          LAudio.begin();
          LAudio.setVolume(6);
          
          lcd.init();    
          lcd.noBacklight();
          delay(400);
          lcd.clear();
          lcd.backlight();
          lcd.setCursor(0,1);
          lcd.print("   Caller ID V1.6 ");
          lcd.setCursor(0,2);
          lcd.print(" Waiting for Caller");
          Serial.println("Waiting for next Caller");
          delay(3500);
         
          Serial1.begin(1200);
        }
         
        void loop()
        {
          Ht9032_get();
          
                  if( state == 10 ) 
                  {      
                    o=0;     
                    Serial.println("State: 10 ");
                    Serial.print("DATE: ");
                    Serial.print(char(dat[0]));
                    Serial.print(char(dat[1]));
                    Serial.print('/');
                    Serial.print(char(dat[2]));
                    Serial.println(char(dat[3]));
                    Serial.print("TIME: ");
                    Serial.print(char(dat[4]));
                    Serial.print(char(dat[5]));
                    Serial.print(':');
                    Serial.print(char(dat[6]));
                    Serial.println(char(dat[7]));
                    Serial.print("NAME: ");
                    for(int i=0;i<nlen;i++)
                     {
                       Serial.print(char(nam[i]));
                     }
                    Serial.println("");
                    Serial.print("NUMBER: ");
                    for(int i=0;i<mlen;i++)
                     {
                       Serial.print(char(num[i]));
                     }
                     Serial.println("");
        
                    state=0;
                    
                    lcd.clear();
                    lcd.setCursor(0,0);
                    lcd.print("Last Call Received :");
                    lcd.setCursor(0,1);
                    lcd.print("Date:");
                    lcd.print(char(dat[0]));
                    lcd.print(char(dat[1]));
                    lcd.print('/');
                    lcd.print(char(dat[2]));
                    lcd.print(char(dat[3]));
                    lcd.print(" ");
                    lcd.print(char(dat[4]));
                    lcd.print(char(dat[5]));
                    lcd.print(':');
                    lcd.print(char(dat[6]));
                    lcd.print(char(dat[7]));
         
                    lcd.setCursor(0,2);
                    lcd.print("Name: ");
         
                    for(int i=0;i<nlen;i++)
                     {
                       lcd.print(char(nam[i]));
                     }
         
                    lcd.setCursor(0,3);
                    lcd.print("Num :");
        
                    str = "";
         
                    for(int i=0;i<mlen;i++)
                     {
                       lcd.print(char(num[i]));
                       str += char(num[i]);
                     }    
        
                      BlockCallers();
               }
        }
        
        void Play_MP3()
        {
              Serial.println("Blocked Caller Detected");
              digitalWrite(HOOK, HIGH); 
              Serial.println("Off Hook");
              delay(1500);  
              Serial.println("Playing message to caller");
              LAudio.playFile( storageFlash,(char*)"Klaxon.mp3");
              delay(7500);
              digitalWrite(HOOK, LOW); 
              Serial.println("On Hook");
              delay(5000);
        } 
        
        
         
        void Ht9032_get()
        {
          if (Serial1.available() > 0)  
          {
        
          SER = Serial1.read(); 
            
           /*
            * states
            * 0 - waiting for U's
            * 1 - waiting for 25 U's and then an 0x80
            * 2 - waiting for packet len
            * 3 - waiting for message id
            * 4 - get name len
            * 5 - receiving name
            * 6 - get number len
            * 7 - receiving number
            * 8 - get date len
            * 9 - receiving date
            * 10 - packet complete
            * 
            * message ids
            * 1 - date
            * 2 - number
            * 4 - number not found reason
            * 7 - name
            * 8 - name not found reason
            * 
            * reasons
            * O - Out of area (no caller ID available)
            * P - Private party (Blocked)
            * 
            */
          switch(state)
          {
            case 0:if (SER==0x55)  
                       {
                         state=1;
                         i=1;
         Serial.println("State: 0 ");
                       }break;
         
            case 1:if (SER==0x55) 
                       {
                         i++;
                       }                        
                          
                       if(SER==0x80)
                       {
                         if(i > 25)
                           {
                              state=2;
                           }
                       }
                       Serial.println("State: 1 ");             
                       break;
                       
            case 2:plen = SER; 
                       i=0;
                       state=3;                                        
                       Serial.println("State: 2 ");
                       Serial.print("Packet Length: ");
                       Serial.println(plen);
                       break;
         
            case 3: o++;
                      Serial.println("State: 3 ");
                      Serial.print("MID: ");
                      Serial.println(SER);
                      if(SER==1) 
                      {
                        state=8;
                      }
                      else if(SER==2)
                      {
                        state=6;
                      }
                      else if(SER==4)
                      {
                        state=6;
                      }
                      else if(SER==7)
                      {
                        state=4;
                      }
                      else if(SER==8)
                      {
                        state=4;
                      }
                      break;
         
            case 4:len = SER;
                       nlen = len ; 
                       o++;
                       i=0;
                       state=5;                                        
                       Serial.println("State: 4 ");
                       Serial.print("Data Length: ");
                       Serial.println(nlen);
                       break;
         
            case 6:len = SER; 
                       mlen = len ; 
                       o++;
                       i=0;
                       state=7;                                        
                       Serial.println("State: 6 ");
                       Serial.print("Data Length: ");
                       Serial.println(mlen);
                       break;
         
            case 8:len = SER; 
                       dlen = len ; 
                       o++;
                       i=0;
                       state=9;                                        
                       Serial.println("State: 8 ");
                       Serial.print("Data Length: ");
                       Serial.println(dlen);
                       break;
         
          
            case 5:nam[i]=SER;  
                    i++;
                    o++;
                      if( i > nlen - 1 ) 
                  {  
                    state=3;
                    i=0;                              
                  }
        
                  if( o > plen - 1 ) 
                  {  
                    state=10;
                  }
                  Serial.println("State: 5 ");
                  break;
                  
            case 7:num[i]=SER;  
                    i++;
                    o++;
                      if( i > mlen - 1 ) 
                  {  
                    state=3;
                    i=0;                              
                  }
        
                  if( o > plen - 1 ) 
                  {  
                    state=10;
                  }
                  Serial.println("State: 7 ");
                  break;
                  
            case 9:dat[i]=SER;  
                    i++;
                    o++;
                      if( i > dlen - 1 ) 
                  {  
                    state=3;
                    i=0;                              
                  }
        
                  if( o > plen - 1 ) 
                  {  
                    state=10;
                  }
                  Serial.println("State: 9 ");
                  break;
                  
             default:break;
           }
          }
        }
        بیتشر مشکل من سمت avr هست

        دیدگاه


          #5
          پاسخ : ارتباط آردینو با atmega

          اول از همه از اتصالات مطمئن بشید. فراموش نکنید که زمین ها باید بهم متصل باشن . TX آردوینو به RX میکروکنترلر و RX آردوینو هم باید به TX میکروکنترلر متصل بشه. کد سمت AVR رو بفرستیدتا اونم بررسی کنیم.

          دیدگاه


            #6
            پاسخ : ارتباط آردینو با atmega

            نوشته اصلی توسط hossein.m98 نمایش پست ها
            اول از همه از اتصالات مطمئن بشید. فراموش نکنید که زمین ها باید بهم متصل باشن . TX آردوینو به RX میکروکنترلر و RX آردوینو هم باید به TX میکروکنترلر متصل بشه. کد سمت AVR رو بفرستیدتا اونم بررسی کنیم.
            ممنون از اتصالات مطمعا هستم اما تو برنامه نویسی avr خیلی ضعیف هستم
            کد:
            [URL="https://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=include"]#include[/URL] <mega8.h>
            [URL="https://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=include"]#include[/URL] <delay.h>
            
            
            
            
            
            
            [URL="https://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=include"]#include[/URL] <stdio.h>
            
            
            void main(void)
            {
            char test;
            DDRC.5=1;
            
            
            TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);
            TCNT0=0x00;
            OCR0=0x00;
            
            
            TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
            TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
            TCNT1H=0x00;
            TCNT1L=0x00;
            ICR1H=0x00;
            ICR1L=0x00;
            OCR1AH=0x00;
            OCR1AL=0x00;
            OCR1BH=0x00;
            OCR1BL=0x00;
            
            
            ASSR=0<<AS2;
            TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
            TCNT2=0x00;
            OCR2=0x00;
            
            
            TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);
            
            
            MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
            MCUCSR=(0<<ISC2);
            
            
            // USART initialization
            // Communication Parameters: 8 Data, 1 Stop, No Parity
            // USART Receiver: On
            // USART Transmitter: On
            // USART Mode: Asynchronous
            // USART Baud Rate: 9600
            UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
            UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
            UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
            UBRRH=0x00;
            UBRRL=0x33;
            
            
            ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
            SFIOR=(0<<ACME);
            
            
            ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);
            
            
            SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);
            
            
            
            
            TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);
            
            
            while (1)
            { 
            
            
            
            if((UCSRA & (1<<RXC)))
            {
            test=getchar(); 
            if (test=='a'){
            PORTC.5=1;
            }
            if (test=='b'){
            PORTC.5==0; 
            
            }
            
            } 
            
            }
            }
            خیلی ممنون میشم اگر بتونید کمکم کنید
            جدیدترین ویرایش توسط relax021; ۲۲:۰۸ ۱۳۹۸/۰۳/۱۹.

            دیدگاه


              #7
              پاسخ : ارتباط آردینو با atmega

              من با تابع getchar تا حالا کار نکردم. خطی که تابع getchar داره رو با خط زیر تعویض کنید و نتیجه رو گزارش کنید:
              test=UDR; 

              دیدگاه


                #8
                پاسخ : ارتباط آردینو با atmega

                نوشته اصلی توسط hossein.m98 نمایش پست ها
                من با تابع getchar تا حالا کار نکردم. خطی که تابع getchar داره رو با خط زیر تعویض کنید و نتیجه رو گزارش کنید:
                test=UDR; 
                تعویض کردم مشکلی پیش نیومد ولی
                این دوتا خط اجرا نمیشن
                کد:
                [COLOR=#28282B][FONT=monospace]if (test=='a'){[/FONT][/COLOR]PORTC.5=1;
                }
                if (test=='b'){
                PORTC.5==0; 
                 [COLOR=#28282B][FONT=monospace]}[/FONT][/COLOR]

                دیدگاه


                  #9
                  پاسخ : ارتباط آردینو با atmega

                  نوشته اصلی توسط relax021 نمایش پست ها
                  تعویض کردم مشکلی پیش نیومد ولی
                  این دوتا خط اجرا نمیشن
                  کد:
                  [COLOR=#28282B][FONT=monospace]if (test=='a'){[/FONT][/COLOR]PORTC.5=1;
                  }
                  if (test=='b'){
                  PORTC.5==0; 
                   [COLOR=#28282B][FONT=monospace]}[/FONT][/COLOR]
                  با این حساب یا داده ای دریافت نمیشه یا چیز دیگه ای دریافت میشه. بهتره یه حالت دیگه هم در نظر بگیرید که اگر داده دریافت شده چیز دیگه ای بود کار دیگه ای بکنه.
                  اگر این حالت سوم اجرا شد میفهمیم داده دریافتی نادرسته. اگر اجرا نشد میفهمیم کلا چیزی دریافت نمیشه.

                  دیدگاه


                    #10
                    پاسخ : ارتباط آردینو با atmega

                    نوشته اصلی توسط relax021 نمایش پست ها
                    ممنون از اتصالات مطمعا هستم اما تو برنامه نویسی avr خیلی ضعیف هستم
                    کد:
                    [URL="https://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=include"]#include[/URL] <mega8.h>
                    [URL="https://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=include"]#include[/URL] <delay.h>
                    
                    
                    
                    
                    
                    
                    [URL="https://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=include"]#include[/URL] <stdio.h>
                    
                    
                    void main(void)
                    {
                    char test;
                    DDRC.5=1;
                    
                    
                    TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);
                    TCNT0=0x00;
                    OCR0=0x00;
                    
                    
                    TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
                    TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
                    TCNT1H=0x00;
                    TCNT1L=0x00;
                    ICR1H=0x00;
                    ICR1L=0x00;
                    OCR1AH=0x00;
                    OCR1AL=0x00;
                    OCR1BH=0x00;
                    OCR1BL=0x00;
                    
                    
                    ASSR=0<<AS2;
                    TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
                    TCNT2=0x00;
                    OCR2=0x00;
                    
                    
                    TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);
                    
                    
                    MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
                    MCUCSR=(0<<ISC2);
                    
                    
                    // USART initialization
                    // Communication Parameters: 8 Data, 1 Stop, No Parity
                    // USART Receiver: On
                    // USART Transmitter: On
                    // USART Mode: Asynchronous
                    // USART Baud Rate: 9600
                    UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
                    UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
                    UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
                    UBRRH=0x00;
                    UBRRL=0x33;
                    
                    
                    ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
                    SFIOR=(0<<ACME);
                    
                    
                    ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);
                    
                    
                    SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);
                    
                    
                    
                    
                    TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);
                    
                    
                    while (1)
                    { 
                    
                    
                    
                    if((UCSRA & (1<<RXC)))
                    {
                    test=getchar(); 
                    if (test=='a'){
                    PORTC.5=1;
                    }
                    if (test=='b'){
                    PORTC.5==0; 
                    
                    }
                    
                    } 
                    
                    }
                    }
                    خیلی ممنون میشم اگر بتونید کمکم کنید
                    از نظر شما این کد دیگه مشکلی نداره
                    و من فقط باید از داخل آردوینو یک داده بفرستم به tx ???

                    دیدگاه


                      #11
                      پاسخ : ارتباط آردینو با atmega

                      نوشته اصلی توسط relax021 نمایش پست ها
                      از نظر شما این کد دیگه مشکلی نداره
                      و من فقط باید از داخل آردوینو یک داده بفرستم به tx ???
                      نمیدونم سمت آردوینو بیت پایان چقدره ولی برای آخرین تلاش بیت USBS از رجیستر UCSRC رو هم فعال کنید تا تعداد بیت پایان به 2 بیت افزایش پیدا کنه. خط
                      UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);

                      رو با این خط جایگزین کنید:
                      UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (1<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);

                      دیدگاه


                        #12
                        پاسخ : ارتباط آردینو با atmega

                        نوشته اصلی توسط hossein.m98 نمایش پست ها
                        نمیدونم سمت آردوینو بیت پایان چقدره ولی برای آخرین تلاش بیت USBS از رجیستر UCSRC رو هم فعال کنید تا تعداد بیت پایان به 2 بیت افزایش پیدا کنه. خط
                        UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);

                        رو با این خط جایگزین کنید:
                        UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (1<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
                        میخواهید کد آردینو هم بفرستم شتید مشکل اونجا باشه البته اگر زحمتتون نیست
                        جدیدترین ویرایش توسط relax021; ۲۲:۵۹ ۱۳۹۸/۰۳/۱۹.

                        دیدگاه


                          #13
                          پاسخ : ارتباط آردینو با atmega

                          نوشته اصلی توسط relax021 نمایش پست ها
                          میخواهید کد آردینو هم بفرستم شتید مشکل اونجا باشه البته اگر زحمتتون نیست
                          والا آردوینو تا حالا کار نکردم ولی کدش رو قرار بدید اگر خودم هم بلد نباشم دوستان هستن که کمک کنن

                          Sent from my LG-H870S using Tapatalk

                          دیدگاه


                            #14
                            پاسخ : ارتباط آردینو با atmega

                            نوشته اصلی توسط hossein.m98 نمایش پست ها
                            والا آردوینو تا حالا کار نکردم ولی کدش رو قرار بدید اگر خودم هم بلد نباشم دوستان هستن که کمک کنن

                            Sent from my LG-H870S using Tapatalk
                            ممنون این تست کردم جواب نداد ارور داد
                            کد:
                            char str[4];
                            
                            
                            void setup() {
                              Serial.begin(9600);
                            }
                            
                            
                            void loop() {
                              int value=1234; //this would be much more exciting if it was a sensor value
                              
                              itoa(value, str, 10); //Turn value into a character array
                              Serial.write(str, 4);
                            [FONT=Yekan]}
                            [/FONT]
                            اینم امتحان کردم جواب نداد
                            کد:
                            [FONT=Yekan]SoftwareSerial mySerial(10, 11);[/FONT]void setup()
                            {
                             mySerial.begin(9600);
                            }
                            void loop()
                            {
                             mySerial.write(45); 
                            [FONT=Yekan] int bytesSent = mySerial.write(“hello”); 
                            [/FONT]

                            دیدگاه


                              #15
                              پاسخ : ارتباط آردینو با atmega

                              نوشته اصلی توسط relax021 نمایش پست ها
                              ممنون این تست کردم جواب نداد ارور داد
                              کد:
                              char str[4];
                              
                              
                              void setup() {
                                Serial.begin(9600);
                              }
                              
                              
                              void loop() {
                                int value=1234; //this would be much more exciting if it was a sensor value
                                
                                itoa(value, str, 10); //Turn value into a character array
                                Serial.write(str, 4);
                              [FONT=Yekan]}
                              [/FONT]
                              اینم امتحان کردم جواب نداد
                              کد:
                              [FONT=Yekan]SoftwareSerial mySerial(10, 11);[/FONT]void setup()
                              {
                               mySerial.begin(9600);
                              }
                              void loop()
                              {
                               mySerial.write(45); 
                              [FONT=Yekan] int bytesSent = mySerial.write(“hello”); 
                              [/FONT]
                              به جای عبارت از Serial.begin(9600); از این عبارت استفاده کنید:
                              Serial.begin(9600 , SERIAL_8N1);

                              یکبار هم این رو امتحان کنید شاید فرجی شد:
                              Serial.begin(9600 , SERIAL_8N2);

                              دیدگاه

                              لطفا صبر کنید...
                              X