پاسخ : twi ?!?
سلام
ممنون از لطفتون
شرمنده کردین :">
با عرض پوزش یه سوال دیگه داشتم؟!! :redface:
من یه ماژول دارم که پروتکل I2C خروجی میده!
اسم ماژول هست BH1750FVI
شاید بگم حدود 12 تا برنامه تا حالا براش نوشتم و جواب نگرفتم!دیگه اینجوری شدم @-)
میخواد آدرسش (SLAVE) براش ارسال بشه و بعدش دوتا بایت ازش خونده بشه و بعد این دوتا بایت به متغیر float تبدیل بشه که بشه محاسبات روش انجام داد و بعدم روی LCD چاپش کرد.
من در نهایت تونستم یه برنامه براش گیر بیارم که به زبان آردوینو بود.
به خیال خودم اونو به کدویژن تبدیل کردم. :rolleyes:
الان سه هفته ای هست که بهش ور میرم. :cry:
میشه یه نگاه بندازین ببینین مشکل از کجاست؟ ممنون میشم. :redface:
اینم برنامه آردوینو
لطفا اگر مسیری که میرم اشتباهه، بهم بگین و مسیر درست را هم بهم راهنمایی کنید. با سپاس فراوان @};-
سلام
ممنون از لطفتون
شرمنده کردین :">
با عرض پوزش یه سوال دیگه داشتم؟!! :redface:
من یه ماژول دارم که پروتکل I2C خروجی میده!
اسم ماژول هست BH1750FVI
شاید بگم حدود 12 تا برنامه تا حالا براش نوشتم و جواب نگرفتم!دیگه اینجوری شدم @-)
میخواد آدرسش (SLAVE) براش ارسال بشه و بعدش دوتا بایت ازش خونده بشه و بعد این دوتا بایت به متغیر float تبدیل بشه که بشه محاسبات روش انجام داد و بعدم روی LCD چاپش کرد.
من در نهایت تونستم یه برنامه براش گیر بیارم که به زبان آردوینو بود.
به خیال خودم اونو به کدویژن تبدیل کردم. :rolleyes:
الان سه هفته ای هست که بهش ور میرم. :cry:
میشه یه نگاه بندازین ببینین مشکل از کجاست؟ ممنون میشم. :redface:
کد:
//Chip type : ATmega32
//Program type : Application
//AVR Core Clock frequency: 8.000000 MHz
#include <mega32.h>
#include <i2c.h>
#include <alcd.h>
#include <delay.h>
#include <stdio.h>
#include <stdlib.h>
void BH1750_Init(int address);
int BH1750_read(int address);
int BH1750_address=0x23;
unsigned char BUFF[2], buf[16];
int DEC;
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;
ADCSRA=0x00;
SPCR=0x00;
TWCR=0x00;
// I2C Port: PORTA
// I2C SDA bit: 1
// I2C SCL bit: 0
// Bit Rate: 100 kHz
// Note: I2C settings are specified in the
// Project|Configure|C Compiler|Libraries|I2C menu.
i2c_init();
// RS - PORTD Bit 0
// RD - PORTD Bit 1
// EN - PORTD Bit 2
// D4 - PORTD Bit 3
// D5 - PORTD Bit 4
// D6 - PORTD Bit 5
// D7 - PORTD Bit 6
// Characters/line: 16
lcd_init(16);
i2c_start();
BH1750_Init(BH1750_address);
delay_ms(200);
lcd_clear();
lcd_putsf("START");
while (1)
{
float valf=0;
if(BH1750_read(BH1750_address)==2){
valf=atof(BUFF);
valf=valf/1.2;
if(valf<0){
lcd_clear();
lcd_putsf(">65535 lx");
}
else{
DEC=valf;
lcd_clear();
sprintf(buf,"%d lx",DEC);
lcd_puts(buf);
}
delay_ms(1000);
}
}
}
//*****************************************
int BH1750_read(int address){
int i=0;
i2c_start();
i2c_write(address);
i2c_start();
i2c_write(address|1);
BUFF[i]=i2c_read(1);
i++;
BUFF[i]=i2c_read(0);
i++;
i2c_stop();
return i;}
//******************************************
void BH1750_Init(int address){
i2c_start();
i2c_write(address);
i2c_write(0x10);
i2c_stop();
}
کد:
#include <Wire.h>
int BH1750_address = 0x23; // i2c Addresse
byte buff[2];
void setup(){
Wire.begin();
BH1750_Init(BH1750_address);
delay(200);
Serial.begin(9600);
Serial.println("Start");
}
void loop(){
float valf=0;
if(BH1750_Read(BH1750_address)==2){
valf=((buff[0]<<8)|buff[1])/1.2;
if(valf<0)Serial.print("> 65535");
else Serial.print((int)valf,DEC);
Serial.println(" lx");
}
delay(1000);
}
void BH1750_Init(int address){
Wire.beginTransmission(address);
Wire.write(0x10); // 1 [lux] resolution
Wire.endTransmission();
}
byte BH1750_Read(int address){
byte i=0;
Wire.beginTransmission(address);
Wire.requestFrom(address, 2);
while(Wire.available()){
buff[i] = Wire.read();
i++;
}
Wire.endTransmission();
return i;
}





دیدگاه