MyBB Pro

P30-ART


تبلیغات


ارسال موضوع ارسال پاسخ
درخواست راهنمایی برای پورت usb
مهمان گرامی، خوش آمدید!
نام کاربری
گذرواژه‌
[عضویت در انجمن]


جستجوی انجمن‌ها

(جستجوی پیشرفته)

جستجو در گوگل

Google



در اين سايت


درنا بلاگ

سرویس بلاگدهی درنا بلاگ
http://dornablog.com

تبلیغات

آمار انجمن
» اعضا: 3638
» آخرین عضو: alyssarf18
» موضوع‌های انجمن: 159
» ارسال‌های انجمن: 910

آمار کامل

ارسال: #1
۱۳۹۲/۳/۴, ۰۹:۵۷ عصر
درخواست راهنمایی برای پورت usb

با سلام
من یک کد نوشتم که خواهشمندم اساتید چک کنند و مشکلاتش رو به من بگویند!
البته تو کامپایل یه مشکل میگیره که نمیدونم چرا !
من کاری که میخواهم اینه که ولتاژ ای دی سی 0 (adc 0 ) رو میگیره و بعد میفرسته به کامپیوتر البته میخواهم قسمت ارسال اطلاعات از کامپیوتر به ای وی ار هم درست کنم که بعدا ی کد بهش اضافه کنم
حالا لطفا این کد ها رو چک کنید الان 3 روزه دارم اتمل استادیو یاد میگیرم فقط بخاطر همین کار
ممنون میشم
[LEFT]
کد:
/*
* USB.c
*
* Created: 2013/05/23 12:07:28 ب.ظ
*  Author: Mostafa Nekooei
*/

#include <avr/io.h>
#include <avr/interrupt.h> /* for sei() */
#include <avr/pgmspace.h> /* required by usbdrv.h */
#include <avr/wdt.h>
#include <avr/eeprom.h>
#include <util/delay.h> /* for _delay_ms() */


#include "usbdrv.h"
#include "oddebug.h" /* this is also an example for using debug marcros */


uchar   i=0;
float    Voltage;
uchar    InputData;

/* ------------------------------------------------------------------------- */
/* ----------------------------- USB interface ----------------------------- */
/* ------------------------------------------------------------------------- */

uchar usbFunctionSetup(uchar data[8], uchar len) {
    usbMsgPtr = InputData;
    return len;
}


uchar usbFunctionWrite(uchar data, uchar len){
    data = Voltage;
    return 1;
}

/* ------------------------------------------------------------------------- */
/* ----------------------------- ADC interface ----------------------------- */
/* ------------------------------------------------------------------------- */

void adc_init()
{
// AREF = Voltage Reference
// measure ADC0
ADMUX = (0<<REFS0)|(0<<REFS1);

// ADC Enable and prescaler of 128
// 12000000/128 = 93000
ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); //ADCSRA = 0x87
}

// read adc value
uint16_t adc_read(uint8_t ch)
{
// select the corresponding channel 0~7
// ANDing with '7' will always keep the value
// of 'ch' between 0 and 7
ch &= 0b00000111; // AND operation with 7
ADMUX = (ADMUX & 0xF8)|ch; // clears the bottom 3 bits before ORing

// start single conversion
// write '1' to ADSC
ADCSRA |= (1<<ADSC);

// wait for conversion to complete
// ADSC becomes '0' again
// till then, run loop continuously
while(ADCSRA & (1<<ADSC));

return (ADC);
}



/* ------------------------------------------------------------------------- */
/* ------------------------------- Main Code ------------------------------- */
/* ------------------------------------------------------------------------- */

int    main(void)
{
    uint16_t adc_result0;
    // initialize adc and lcd
    adc_init();
    
    DDRD = 0b00000000;
    usbInit();
    usbDeviceDisconnect();  /* enforce re-enumeration, do this while interrupts are disabled! */
        
        
        //fake USB disconnect for > 250 ms
        i = 0;
        while(--i)
        {
        wdt_reset();
        _delay_ms(1);
        }
        
    usbDeviceConnect();
    sei();
    _delay_ms(50);

        while(1)
        {
        adc_result0 = adc_read(0); // read adc value at PA0
        Voltage = adc_result0 * 5.00/1023;
        usbPoll();
        _delay_ms(50);
        }
}        

/* ------------------------------------------------------------------------- */
[/LEFT]
نقل قول این ارسال در یک پاسخ بازگشت به بالا
یافتن تمامی ارسال‌های این کاربر
تبلیغات
ارسال: #2
۱۳۹۲/۳/۵, ۱۲:۲۵ عصر
RE: درخواست راهنمایی برای پورت usb

سلام ببخشید کسی اینجا نمیتونه کمکم کنه ؟
نقل قول این ارسال در یک پاسخ بازگشت به بالا
یافتن تمامی ارسال‌های این کاربر
ارسال: #3
۱۳۹۲/۳/۵, ۰۶:۱۱ عصر
آفلاین
RE: درخواست راهنمایی برای پورت usb

این برنامه ای هست که برای خوندم دما و usb نوشته بودم... ازش استفاده کن
کد php:
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/wdt.h>
#include <avr/eeprom.h>

#include "usbdrv.h"

#include "a2d.c"
#include "spi.c"

#include "lcd4bit/lcd4bit.c"

uchar replyBuffer[8];

uchar re[8];
static 
uchar eeadd=0;
static 
uchar T;
static 
uchar temp=0;
char strTemp[5];

void GetTemp();

/********************************************************************************​*************/
uchar usbFunctionSetup(uchar data[8]) {
  
uchar len 0;
 
  if (
data[1] == 0x1a)
  {
    
T=7;
    
len=0xff;
  }
  
  if (
data[1] == 0xe0)  // read eeprom
  
{
    
T=5;
    
len=0xff;
  }     

  if (
data[1] == 0xe1)    // write eeprom
  
{
    
T=6;
    
len=0xff;
  }     
  
  if (
data[1] == 0xcc)
  {
    
LCDclr();
    
len=0;
  }
  
  if (
data[1] == 0xcf)
  {
    
LCDcursorOFF();
  }
  
  if (
data[1] == 0xce)
  {
    
LCDcursorOn();
  }
  
  if (
data[1] == 0xab)
    {
        
T=2;
        
len=0xff;
    }
  if (
data[1] == 0xac)        
    {
        
T=3;
        
len=0xff;
    }
  if (
data[1] == 0xad)
    {
        
T=4;
        
len=0xff;    
    }

  if (
data[1] == 0x25)
    {
        
        
GetTemp();
        
        
LCDclr();
        
        
//LCDGotoXY(0,0);
        
LCDstring("Temp:",5);
                
        
LCDGotoXY(7,0);
        
sprintf(strTemp,"%d",temp);
        
        
LCDprintData(strTemp,"%s");
        
        
LCDstring(" 'C",3);
        
        
replyBuffer[0] = temp;
        
len=1;
    }

  
usbMsgPtr replyBuffer;   
  return 
len;
}

/********************************************************************************​*************/
uchar usbFunctionRead(uchar *datauchar len) {
uchar i;

if (
T==2)
{
        
data[0]=len;
    for (
i=1;leni++)
    {
        
data[i]=i;
    }

}

if (
T==4)
  {
    for(
i=0i<leni++)
    {
        
data[i]=re[i];
    }
  }
  
if (
T==5)
  {
    
eeadd=0;
    for (
i=0i<leni++)
    {
        
data[i]=eeprom_read_byte(eeadd++);
    }
  }
  
  return 
len;
}

/********************************************************************************​*************/

uchar usbFunctionWrite(uchar *datauchar len) {
uchar i;
  if (
T==3)
  {
    for (
i=0i<8i++)
        
re[i]=0;
    
    
    
    for(
i=0i<leni++)
    {
        
re[i]=data[i];
        
LCDsendChar(data[i]);
        
    }
        
  }
  
  if (
T==6)        //write eeprom
  
{
    
eeadd=0;
    
    
LCDclr();
    
    
//LCDGotoXY(0,0);
    
LCDprintData("Write eeprom","%s");

    
    for (
i=0i<leni++)
    {
        
eeprom_write_byte(eeadd++,data[i]);
    }
    
    
LCDclr();
    
//LCDGotoXY(0,1);
    
LCDprintData("Write FINISH","%s");
  }
  
  if (
T==7)
  {
    
uchar k;
    
LCDclr();
    for (
i=0i<leni++)
    {
        
k=spiTransferByte(data[i]);
        
LCDsendChar(k);
    }
  }
 
  return 
0;
}
/********************************************************************************​*************/

void GetTemp()
{
        
a2dInit();
        
//get a/d for chanel 4
        
a2dSetPrescaler(ADC_PRESCALE_DIV32);
        
a2dSetReference(ADC_REFERENCE_256V);
        
a2dSetChannel(ADC_CH_ADC4);
        
temp=a2dConvert8bit(ADC_CH_ADC4);
        
a2dStartConvert();
        
        if(
a2dIsComplete())
        {
            if(
a2dCompleteFlag )
                {
                    
temp=a2dConvert8bit(ADC_CH_ADC4);
                }    
        }
        return 
0;
}

/********************************************************************************​*************/
int main(void)
{

    
/* For LM35dz *************************************************/
    
DDRC |= << DDC5;                // set port C pin 5 as output;
    
DDRC &= ~(<< DDC4);            // set port C pin 4 as input
    
DDRC |= << DDC3;                // Set port C pin 3 as output
    
    
PORTC |= << 3;                // Port C pin 3 set to '1'
    /**************************************************************/
    
    //DDRC &= ~(1 << DDC2);            // set port C pin 2 as input

//  spiInit();    

  
usbInit();
  
sei();

    
  
LCDinit();    
  
//LCDGotoXY(0,0);
  
LCDprintData("My USB Test","%s");
   
  for(;;)
  {            
    
usbPoll();
/*    
    if (PINC & (1 << PINC2))
        {
            GetTemp();

            LCDGotoXY(0,1);
            LCDprintData("Temp: ","%s");
  
            LCDGotoXY(7,1);
            sprintf(strTemp,"%d",temp);
            LCDprintData(strTemp,"%s");
            
        }
*/        
  
}
  return 
0;
}

/********************************************************************************​*************/ 
نقل قول این ارسال در یک پاسخ بازگشت به بالا
مشاهده وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر
 سپاس شده توسط SANBOR
ارسال: #4
۱۳۹۲/۳/۷, ۱۰:۳۴ صبح
RE: درخواست راهنمایی برای پورت usb

سلام
من به کمک کد شما و تغییراتی که دادم کدم به این صورت شد
کد:
/*
* USB.c
*
* Created: 2013/05/23 12:07:28 ب.ظ
*  Author: Mostafa Nekooei
*/


#include <avr/io.h>
#include <util/delay.h>            // for _delay_ms()
#include <avr/interrupt.h>        // for sei()
#include <avr/pgmspace.h>        // required by usbdrv.h
#include <avr/wdt.h>


#include "usbdrv.h"                // for using USB
#include "oddebug.h"            // for using debug marcros
#include "a2d.h"                // for ADC Converter

uchar i=0;
uchar PC[8];
uchar InputData[8];
static uchar Voltage=0;


/* ------------------------------------------------------------------------- */
/* ----------------------------- USB interface ----------------------------- */
/* ------------------------------------------------------------------------- */
uchar usbFunctionSetup(uchar data[8]) {
    uchar len = 0;
    if (data[1] == 0x25)
    {    
        GetVoltage();
    }

    usbMsgPtr = InputData;
    return len;
}

uchar usbFunctionRead(uchar *data, uchar len) {
    i=0;
    len = 0;
    if (data[1] == 0xad)
    {
        for(i=0; i<len; i++)
        {
            data[i]=PC[i];
        }
    }
    return len;
}

uchar usbFunctionWrite(uchar *Voltage, uchar len){
    i=0;
    for (i=0; i<8; i++)
    {
        PC[i]=0;
    }
      
    for(i=0; i<len; i++)
    {
        PC[i]=Voltage[i];      
    }

    return 0;
}

/* ------------------------------------------------------------------------- */
/* ----------------------------- ADC interface ----------------------------- */
/* ------------------------------------------------------------------------- */

void GetVoltage()
{
    a2dStartConvert();
    Voltage=a2dConvert8bit(ADC_CH_ADC0);

    /*if(a2dIsComplete())
    {
        if(a2dCompleteFlag)
        {
            Voltage=a2dConvert8bit(ADC_CH_ADC0);
        }
    }*/
    return 0;
}

/* ------------------------------------------------------------------------- */
/* ------------------------------- Main Code ------------------------------- */
/* ------------------------------------------------------------------------- */

int    main(void)
{
    a2dInit();
    //get A2S for chanel 0
    a2dSetPrescaler(ADC_PRESCALE_DIV64);
    a2dSetReference(ADC_REFERENCE_AREF);
    a2dSetChannel(ADC_CH_ADC0);
    
    DDRD = 0b00000000;
    usbInit();
    usbDeviceDisconnect();  // enforce re-enumeration, do this while interrupts are disabled!
    
        // fake USB disconnect for > 250 ms
        i = 0;
        while(--i)
        {
        wdt_reset();
        _delay_ms(1);
        }
        
    usbDeviceConnect();
    sei();
    _delay_ms(50);

        while(1)
        {
        usbPoll();
        _delay_ms(50);
        }
}        

/* ------------------------------------------------------------------------- */
حالا چند سوال دارم ؟
برای فرستادن اطلاعات از میکرو به کامپیوتر ( رایت ) درست عمل شده ؟ برای ستاپ و رید چطور ؟

توی قسمت کامپیوتر چگونه باید دریافت کنم میشه تو متلب از پرت دیتا را دریافت کرد یا فقط باید از ویژوال دریافت کنم ؟

متشکرم
نقل قول این ارسال در یک پاسخ بازگشت به بالا
یافتن تمامی ارسال‌های این کاربر
ارسال: #5
۱۳۹۲/۳/۷, ۰۵:۰۶ عصر (آخرین ویرایش در این ارسال: ۱۳۹۲/۳/۷ ۰۵:۰۷ عصر، توسط SANBOR.)
RE: درخواست راهنمایی برای پورت usb

سلام
ببخشید الان که داشتم نگاه میکردم دیدم کد رو اشتباه فرستادم و بعد تغییرات رو دادم و درست شده رو اینجا میزارم تا دوستان برسی کنند .
کد:
/*
* USB.c
*
* Created: 2013/05/23 12:07:28 ب.ظ
*  Author: Mostafa Nekooei
*/


#include <avr/io.h>
#include <util/delay.h>            // for _delay_ms()
#include <avr/interrupt.h>        // for sei()
#include <avr/pgmspace.h>        // required by usbdrv.h
#include <avr/wdt.h>


#include "usbdrv.h"                // for using USB
#include "oddebug.h"            // for using debug macros
#include "a2d.h"                // for ADC Converter

uchar i=0;
static uchar Voltage=0;

/* ------------------------------------------------------------------------- */
/* ----------------------------- USB interface ----------------------------- */
/* ------------------------------------------------------------------------- */

uchar usbFunctionSetup(uchar data[8]) {
    usbMsgPtr = Voltage;
    return 1;
}

/* ------------------------------------------------------------------------- */
/* ----------------------------- ADC interface ----------------------------- */
/* ------------------------------------------------------------------------- */

void GetVoltage()
{
    a2dStartConvert();
    Voltage=a2dConvert8bit(ADC_CH_ADC0);
}

/* ------------------------------------------------------------------------- */
/* ------------------------------- Main Code ------------------------------- */
/* ------------------------------------------------------------------------- */

int    main(void)
{
    a2dInit();
    //get A2S for channel 0
    a2dSetPrescaler(ADC_PRESCALE_DIV64);
    a2dSetReference(ADC_REFERENCE_AREF);
    a2dSetChannel(ADC_CH_ADC0);
    
    DDRD = 0b00000000;
    usbInit();
    usbDeviceDisconnect();  // enforce re-enumeration, do this while interrupts are disabled!
    
        // fake USB disconnect for > 250 ms
        i = 0;
        while(--i)
        {
        wdt_reset();
        _delay_ms(1);
        }
        
    usbDeviceConnect();
    sei();
    _delay_ms(50);

        while(1)
        {
        usbPoll();
        _delay_ms(50);
        }
}        

/* ------------------------------------------------------------------------- */

الان سوالام دیگه فرق میکنه Smile
1- برای فرستادن اطلاعات از میکرو به کامپیوتر ( ستاپ فانکشن ) درست عمل شده ؟
2- چگونه این ولتاژ رو تو کامپیوتر بخونم ؟

متشکرم
نقل قول این ارسال در یک پاسخ بازگشت به بالا
یافتن تمامی ارسال‌های این کاربر
تبلیغات
ارسال: #6
۱۳۹۲/۳/۹, ۰۴:۴۵ عصر
RE: درخواست راهنمایی برای پورت usb

سلام
هیچ کس غیر از اقا behnam نمیاد اینجا ؟
مگه کسی تو این سایت فعالیت نمیکنه
نقل قول این ارسال در یک پاسخ بازگشت به بالا
یافتن تمامی ارسال‌های این کاربر
ارسال: #7
۱۳۹۲/۳/۹, ۱۰:۴۵ عصر
RE: درخواست راهنمایی برای پورت usb

سلام
چون نمیتونستم پستم رو ویرایش کنم مجبور شدم پست جدید بزارم
کسی میتونه کمک کنه تا من بتونم ولتاژ رو تو کامپیوتر ببینم ؟
کد اصلاح شده
کد:
/*
* USB.c
*
* Created: 2013/05/23
* Author: Mostafa Nekooei
*/


#include <avr/io.h>
#include <util/delay.h>            // for _delay_ms()
#include <avr/interrupt.h>        // for sei()
#include <avr/pgmspace.h>        // required by usbdrv.h
#include <avr/wdt.h>


#include "usbdrv.h"                // for using USB
#include "oddebug.h"            // for using debug macros
#include "a2d.h"                // for ADC Converter

uchar i=0;
static uchar Voltage=0;

/* ------------------------------------------------------------------------- */
/* ----------------------------- USB interface ----------------------------- */
/* ------------------------------------------------------------------------- */

uchar usbFunctionSetup(uchar data[8]) {
    usbMsgPtr = Voltage;
    return 1;
}

/* ------------------------------------------------------------------------- */
/* ----------------------------- ADC interface ----------------------------- */
/* ------------------------------------------------------------------------- */

void GetVoltage()
{
    a2dStartConvert();
    Voltage=a2dConvert8bit(ADC_CH_ADC0);
}

/* ------------------------------------------------------------------------- */
/* ------------------------------- Main Code ------------------------------- */
/* ------------------------------------------------------------------------- */

int    main(void)
{
    wdt_enable(WDTO_1S);    // Even if you don't use the watchdog, turn it off here. On newer devices, the status of the watchdog (on/off, period) is PRESERVED OVER RESET!
    usbInit();    
    usbDeviceDisconnect();  // enforce re-enumeration, do this while interrupts are disabled!
    
        // fake USB disconnect for > 360 ms
        for (i=0;i < 180; i++)
        {
            wdt_reset();
            _delay_ms(2);
        }
        
    usbDeviceConnect();
    sei();
    
    a2dInit();
    // get A2S for channel 0
    a2dSetPrescaler(ADC_PRESCALE_DIV64);
    a2dSetReference(ADC_REFERENCE_AREF);
    a2dSetChannel(ADC_CH_ADC0);    

        for(;;)
        {
        wdt_reset();
        GetVoltage();
        _delay_ms(50);
        usbPoll();
        }
}        

/* ------------------------------------------------------------------------- */
نقل قول این ارسال در یک پاسخ بازگشت به بالا
یافتن تمامی ارسال‌های این کاربر
ارسال: #8
۱۳۹۲/۳/۱۰, ۰۵:۰۰ صبح
RE: درخواست راهنمایی برای پورت usb

(۱۳۹۲/۳/۹ ۰۴:۴۵ عصر)SANBOR نوشته شده توسط:  سلام
هیچ کس غیر از اقا behnam نمیاد اینجا ؟
مگه کسی تو این سایت فعالیت نمیکنه

حقیقتش من هر روز سر میزنم ولی متاسفانه با پورت USB کار نکردم.
نقل قول این ارسال در یک پاسخ بازگشت به بالا
یافتن تمامی ارسال‌های این کاربر
ارسال: #9
۱۳۹۲/۳/۱۰, ۱۰:۲۲ صبح
آفلاین
RE: درخواست راهنمایی برای پورت usb

دوستان این مقاله رو بخونید، همه چیز در مورد کار با پورت usb گفته شده براش:


.pdf  Temp_usb.pdf (اندازه: 1.75 MB / تعداد دفعات دریافت: 94)

با این مقاله خیلی راحت میتونید اطلاعات رو به میکرو یا به کامپیوتر بفرستید....

اگه با خوندن این باز هم مشکلی بود، مطرح کنید...

اکثر مشکلات شما توی به کار گیری توابع write و read هست...

فیوز بیت ها رو هم باید برای کریستال خارجی فرکانس بالا ست کنید.
نقل قول این ارسال در یک پاسخ بازگشت به بالا
مشاهده وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر
 سپاس شده توسط SANBOR
تبلیغات
ارسال: #10
۱۳۹۲/۳/۱۰, ۱۰:۳۸ صبح
RE: درخواست راهنمایی برای پورت usb

(۱۳۹۲/۳/۱۰ ۱۰:۲۲ صبح)behnam نوشته شده توسط:  دوستان این مقاله رو بخونید، همه چیز در مورد کار با پورت usb گفته شده براش:



با این مقاله خیلی راحت میتونید اطلاعات رو به میکرو یا به کامپیوتر بفرستید....

اگه با خوندن این باز هم مشکلی بود، مطرح کنید...

اکثر مشکلات شما توی به کار گیری توابع write و read هست...

فیوز بیت ها رو هم باید برای کریستال خارجی فرکانس بالا ست کنید.

سلام ممنون از پاسخت
خب من الان میکرو رو درایو میشناسه چون فیوز بیت را به صورت low = ff و hight = 8f ست کردم ولی الان فقط مشکل دریافت اطلاعات از طرف کامپیوتر رو دارم
شما برنامه ای ندارید و سورش رو در اختیار من بدید
متشکرم
نقل قول این ارسال در یک پاسخ بازگشت به بالا
یافتن تمامی ارسال‌های این کاربر
ارسال موضوع ارسال پاسخ


موضوع‌های مرتبط با این موضوع...
موضوع: نویسنده پاسخ بازدید: آخرین ارسال
  کمک فوری برای کپی و مقایسه ارایه در ایپرام و اس رم arvin2009 0 2,717 ۱۳۹۱/۱۱/۲۴ ۰۳:۱۰ صبح
آخرین ارسال: arvin2009
  کد ++c برای LM35 و LCD summer7811 1 4,222 ۱۳۹۱/۹/۵ ۰۳:۵۷ عصر
آخرین ارسال: behnam
  سنسور بیسیم برای نصب روی دکل 20KV hossein1387 0 2,694 ۱۳۹۱/۸/۹ ۰۳:۱۵ عصر
آخرین ارسال: hossein1387
  آموزش جامع اتصال avr به پورت usb در بسکام Morteza_rk 0 6,036 ۱۳۹۱/۶/۲۲ ۰۸:۴۵ عصر
آخرین ارسال: Morteza_rk

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان