سلام من میخوام با ماژول همین سایت eca کار کنم ارتباط باهاش spi هست هرکار میکنم نمیتونم دیتارو بخونم میشه کمکم کنین ؟؟؟؟؟؟؟
اطلاعیه
Collapse
No announcement yet.
کار با ماژول max6675
Collapse
X
-
پاسخ : کار با ماژول max6675
[code=c]
#define SCK 5 //SCK (serial clock) pin number
#define CS 2 //CS (chip select) pin number
#define SO 4 //SO (serial out, also MISO) pin number
#define SCK_Port PORTB //SCK port name
#define CS_Port PORTB //CS port name
#define SO_Pin PINB //SO pin name
#define SO_Port PORTB //so pin name
#define SCK_DDR DDRB //SCK DDR name
#define CS_DDR DDRB //CS DDR name
#define SO_DDR DDRB //SO DDR name
int gettemp(void);
void init_6675(void);
//char getTC(void);
int gettemp(void){ //Temperatur holen.
char bite = 0, bitnr = 12; //Variablen
char foo1 = 0;
int so_data = 0;
CS_Port &= ~(1 << CS);
for(foo1 = 0 ; foo1 < 16 ; foo1++){
bite = 15 - foo1;
SCK_Port |= (1 << SCK);
if((bite <= 14) && (bite >= 3)){
if((SO_Pin & (1 << SO))){ //WENN SO 1 ist, dann...
bitnr--; //zنhlen wir runter...
so_data |= (1 << bitnr); // und schieben eine 1 an bit x
}else{ //WENN dem NICHT so ist, dann...
bitnr--; //zنhlen wir runter...
so_data &= ~(1 << bitnr); //und schieben eine 0 an bit x
}
}else{ //weis au nimmer, was das soll.
bitnr = 12;
}
SCK_Port &= ~(1 << SCK); //SCK LO
}
CS_Port |= (1 << CS);
return so_data*0.25; //Das ist doch mal was ;D
}
// getTC() returns 0 if Thermocouple is not connected, 255 if thermocuple is connected
// (to enable this feature T- must be connected to GND)
//char getTC(void){ //Temperatur holen. //Variablen
// char TC = 0;
// char foo1 = 0;
// CS_Port &= ~(1 << CS); //Chip select anlegen
// for(foo1 = 0 ; foo1 < 16 ; foo1++){ //16 Bits einlesen //Die Aktuelle Bitnr berechnen.
// SCK_Port |= (1 << SCK); //SCK hi
// if(foo1 == 2){ //das 3. bit ist für uns relevant.
// if((SO_Pin & (1 << SO))){ //WENN SO 1 ist, dann...
// TC = 0;
// }else{ //WENN dem NICHT so ist, dann...
// TC = 255;
// }
// }
// SCK_Port &= ~(1 << SCK); //SCK LO
// }
// CS_Port |= (1 << CS); //CS HI //Alles auf Standardkonfig.
// return TC; //Das ist doch mal was ;D
//}
//
//Initiates the MAX6675 and IO-pins
void init_6675(void){ //AVR initialisieren
SO_DDR &= ~(1 << SO);
CS_DDR |= (1 << CS);
SCK_DDR |= (1 << SCK); //IOs setzen
SO_Port |= (1<<SO); //Pullups an. (Wichtig für MAX6675, der kann nicht anders, hab ich festgestellt...
CS_Port |= (1 << CS); //CS HI //Alles auf Standardkonfig.
SCK_Port &= ~(1 << SCK); //SCK LO
}
[/code]
دیدگاه
-
پاسخ : کار با ماژول max6675
نوشته اصلی توسط S S[code=c]
#define SCK 5 //SCK (serial clock) pin number
#define CS 2 //CS (chip select) pin number
#define SO 4 //SO (serial out, also MISO) pin number
#define SCK_Port PORTB //SCK port name
#define CS_Port PORTB //CS port name
#define SO_Pin PINB //SO pin name
#define SO_Port PORTB //so pin name
#define SCK_DDR DDRB //SCK DDR name
#define CS_DDR DDRB //CS DDR name
#define SO_DDR DDRB //SO DDR name
int gettemp(void);
void init_6675(void);
//char getTC(void);
int gettemp(void){ //Temperatur holen.
char bite = 0, bitnr = 12; //Variablen
char foo1 = 0;
int so_data = 0;
CS_Port &= ~(1 << CS);
for(foo1 = 0 ; foo1 < 16 ; foo1++){
bite = 15 - foo1;
SCK_Port |= (1 << SCK);
if((bite <= 14) && (bite >= 3)){
if((SO_Pin & (1 << SO))){ //WENN SO 1 ist, dann...
bitnr--; //zنhlen wir runter...
so_data |= (1 << bitnr); // und schieben eine 1 an bit x
}else{ //WENN dem NICHT so ist, dann...
bitnr--; //zنhlen wir runter...
so_data &= ~(1 << bitnr); //und schieben eine 0 an bit x
}
}else{ //weis au nimmer, was das soll.
bitnr = 12;
}
SCK_Port &= ~(1 << SCK); //SCK LO
}
CS_Port |= (1 << CS);
return so_data*0.25; //Das ist doch mal was ;D
}
// getTC() returns 0 if Thermocouple is not connected, 255 if thermocuple is connected
// (to enable this feature T- must be connected to GND)
//char getTC(void){ //Temperatur holen. //Variablen
// char TC = 0;
// char foo1 = 0;
// CS_Port &= ~(1 << CS); //Chip select anlegen
// for(foo1 = 0 ; foo1 < 16 ; foo1++){ //16 Bits einlesen //Die Aktuelle Bitnr berechnen.
// SCK_Port |= (1 << SCK); //SCK hi
// if(foo1 == 2){ //das 3. bit ist für uns relevant.
// if((SO_Pin & (1 << SO))){ //WENN SO 1 ist, dann...
// TC = 0;
// }else{ //WENN dem NICHT so ist, dann...
// TC = 255;
// }
// }
// SCK_Port &= ~(1 << SCK); //SCK LO
// }
// CS_Port |= (1 << CS); //CS HI //Alles auf Standardkonfig.
// return TC; //Das ist doch mal was ;D
//}
//
//Initiates the MAX6675 and IO-pins
void init_6675(void){ //AVR initialisieren
SO_DDR &= ~(1 << SO);
CS_DDR |= (1 << CS);
SCK_DDR |= (1 << SCK); //IOs setzen
SO_Port |= (1<<SO); //Pullups an. (Wichtig für MAX6675, der kann nicht anders, hab ich festgestellt...
CS_Port |= (1 << CS); //CS HI //Alles auf Standardkonfig.
SCK_Port &= ~(1 << SCK); //SCK LO
}
[/code]
void main (){
char lcd_buffer[16];
DDRB=0xB4;
lcd_init (16);
lcd_clear();
while (1){
SO_DDR=spi(0);
sprintf (lcd_buffer,"data is=%u ",SO_DDR);
lcd_clear();
lcd_puts(lcd_buffer);
delay_ms(250);
}
}o_O
دیدگاه
-
پاسخ : کار با ماژول max6675
شما برای خواندن دما از دستور
gettemp
دستفاده کن مثلا
[code=c]
int temp;
temp=gettemp();
[/code]
قبل از while اصلی هم از دستور
[code=c]
init_6675();
[/code]
باید استفاده کنی
توی برنامه هم باید شماره های پایه های آی سی مشخص کنی که به کدام پین میکرو متصل شده
این کد ببین باید تغییر کنه طبق اتصال شما
[code=c]
#define SCK 5 //SCK (serial clock) pin number
#define CS 2 //CS (chip select) pin number
#define SO 4 //SO (serial out, also MISO) pin number
[/code]
دیدگاه
-
پاسخ : کار با ماژول max6675
نوشته اصلی توسط S Sشما برای خواندن دما از دستور
gettemp
دستفاده کن مثلا
[code=c]
int temp;
temp=gettemp();
[/code]
قبل از while اصلی هم از دستور
[code=c]
init_6675();
[/code]
باید استفاده کنی
توی برنامه هم باید شماره های پایه های آی سی مشخص کنی که به کدام پین میکرو متصل شده
این کد ببین باید تغییر کنه طبق اتصال شما
[code=c]
#define SCK 5 //SCK (serial clock) pin number
#define CS 2 //CS (chip select) pin number
#define SO 4 //SO (serial out, also MISO) pin number
[/code]
miso=so
sck=sck
وصل کنیم درسته ؟
تو پروتیوس هم با اسیلوسکوپ نگاه میکنم کلاک میده لحظه ی اول هم so وss یه کلاک میده که کامل نیست بعد صفر میشه
o_O
دیدگاه
-
پاسخ : کار با ماژول max6675
نوشته اصلی توسط sepehr63 نمایش پست ها[code=c]
#define SCK 5 //SCK (serial clock) pin number
#define CS 2 //CS (chip select) pin number
#define SO 4 //SO (serial out, also MISO) pin number
#define SCK_Port PORTB //SCK port name
#define CS_Port PORTB //CS port name
#define SO_Pin PINB //SO pin name
#define SO_Port PORTB //so pin name
#define SCK_DDR DDRB //SCK DDR name
#define CS_DDR DDRB //CS DDR name
#define SO_DDR DDRB //SO DDR name
int gettemp(void);
void init_6675(void);
//char getTC(void);
int gettemp(void){ //Temperatur holen.
char bite = 0, bitnr = 12; //Variablen
char foo1 = 0;
int so_data = 0;
CS_Port &= ~(1 << CS);
for(foo1 = 0 ; foo1 < 16 ; foo1++){
bite = 15 - foo1;
SCK_Port |= (1 << SCK);
if((bite <= 14) && (bite >= 3)){
if((SO_Pin & (1 << SO))){ //WENN SO 1 ist, dann...
bitnr--; //zنhlen wir runter...
so_data |= (1 << bitnr); // und schieben eine 1 an bit x
}else{ //WENN dem NICHT so ist, dann...
bitnr--; //zنhlen wir runter...
so_data &= ~(1 << bitnr); //und schieben eine 0 an bit x
}
}else{ //weis au nimmer, was das soll.
bitnr = 12;
}
SCK_Port &= ~(1 << SCK); //SCK LO
}
CS_Port |= (1 << CS);
return so_data*0.25; //Das ist doch mal was ;D
}
// getTC() returns 0 if Thermocouple is not connected, 255 if thermocuple is connected
// (to enable this feature T- must be connected to GND)
//char getTC(void){ //Temperatur holen. //Variablen
// char TC = 0;
// char foo1 = 0;
// CS_Port &= ~(1 << CS); //Chip select anlegen
// for(foo1 = 0 ; foo1 < 16 ; foo1++){ //16 Bits einlesen //Die Aktuelle Bitnr berechnen.
// SCK_Port |= (1 << SCK); //SCK hi
// if(foo1 == 2){ //das 3. bit ist f�r uns relevant.
// if((SO_Pin & (1 << SO))){ //WENN SO 1 ist, dann...
// TC = 0;
// }else{ //WENN dem NICHT so ist, dann...
// TC = 255;
// }
// }
// SCK_Port &= ~(1 << SCK); //SCK LO
// }
// CS_Port |= (1 << CS); //CS HI //Alles auf Standardkonfig.
// return TC; //Das ist doch mal was ;D
//}
//
//Initiates the MAX6675 and IO-pins
void init_6675(void){ //AVR initialisieren
SO_DDR &= ~(1 << SO);
CS_DDR |= (1 << CS);
SCK_DDR |= (1 << SCK); //IOs setzen
SO_Port |= (1<<SO); //Pullups an. (Wichtig f�r MAX6675, der kann nicht anders, hab ich festgestellt...
CS_Port |= (1 << CS); //CS HI //Alles auf Standardkonfig.
SCK_Port &= ~(1 << SCK); //SCK LO
}
[/code]
دیدگاه
-
پاسخ : کار با ماژول max6675
نوشته اصلی توسط peyman.electron نمایش پست هاداداش من با spi مستر و اسلیو انجام دادم ولی با این ماژول نمیدونم چرا دیتا اصلا نمیاد مگه spi چهارتا پایه نداره که ماهم باید پایه های ماژول رو به ترتیب ss=cs
miso=so
sck=sck
وصل کنیم درسته ؟
تو پروتیوس هم با اسیلوسکوپ نگاه میکنم کلاک میده لحظه ی اول هم so وss یه کلاک میده که کامل نیست بعد صفر میشه
اگر از پروتئوس ورژن 8 به بالا استفاده می کنید نمی تونید ازش استفاده کنیدحتی داخل پوشه پروژه PIC18 خود پروتئوس هم کار نمیکنه پروتئوستون به ورژن 7.10 تغییر بدید حتما جواب می گیرید
دیدگاه
دیدگاه