قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية motoman2010
motoman2010
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2012
الدولة: مصر
المشاركات: 117
نشاط [ motoman2010 ]
قوة السمعة:0
قديم 04-06-2015, 11:19 AM المشاركة 1   
افتراضي سؤال محيرنى عن pic16f628a + lcd Twitter FaceBook Google+



سؤال محيرنى عن pic16f628a + lcd

لدى lcd 2*16 و pic16f628
واردت عمل مشروع صغير وهو عداد زمنى لتشغيل جهاز لفتره زمنيه معينه
وهذا هو الكود
/*
LCD Data D4-D7 connected to RB4-RB7
LCD RS -> RA0
LCD E -> RA1
Relay -> RA3
*/

// LCD module connections
sbit LCD_RS at RA0_bit;
sbit LCD_EN at RA1_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_RS_Direction at TRISA0_bit;
sbit LCD_EN_Direction at TRISA1_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections

// Tact switches and Relay ports
sbit Relay at RA3_bit;
sbit SS_Select at RB0_bit; // Start Stop Timer Select
sbit Unit_Button at RB1_bit; // Set unit min
sbit Ten_Button at RB2_bit; // Set ten min


// Messages
char Message1[]="00-99 min Timer";
char Message2[]="Device ON";
char Message3[]="Device OFF";
char Message4[]="Set Time: min";
char Message5[]="Time Left: min";
unsigned short i, j, unit=0, ten=0, ON_OFF=0, index=0, clear, time;
char *digit = "00";
// 300ms Delay
void Delay_300(){
Delay_ms(300);
}

void Display_Digits(){
digit[1]=unit+48;
digit[0]=ten+48;
Lcd_Out(2,11,digit);
}

void start_timer(unsigned short MinVal){
unsigned short temp1, temp2;
Relay = 1;
ON_OFF = 1;
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,Message2);
Lcd_Out(2,1,Message5);
OPTION_REG = 0x80 ;
INTCON = 0x90;
for (i=0; i<MinVal; i++){
temp1 = (MinVal-i)%10 ;
temp2 = (MinVal-i)/10 ;
Lcd_Chr(2, 12, temp2+48);
Lcd_Chr(2, 13, temp1+48);
j=1;
do {
Delay_ms(1000);
j++;
} while(((j<=60) && (Clear ==0)));
if (Clear) {
Relay = 0;
Delay_ms(500);
Lcd_Out(1,1,Message3);
INTCON = 0x00;
goto stop;
}
}
stop:
Relay = 0;
ON_OFF = 0;
unit = 0;
ten = 0;
clear = 1;
}

void interrupt(void){
if (INTCON.INTF == 1) // Check if INTF flag is set
{
Clear = 1;
INTCON.INTF = 0; // Clear interrupt flag before exiting ISR
}
}

void main() {
CMCON |= 7; // Disable Comparators
TRISB = 0b00001111;
TRISA = 0b11110000;
Relay = 0;

Lcd_Init(); // Initialize LCD
start:
clear = 0;
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,1,Message1);
Lcd_Out(2,1,Message4);
Display_Digits() ;
do {

if(!Unit_Button){
Delay_300();
unit ++;
if(unit==10) unit=0;
Display_Digits();
} // If !Unit_Button

if(!Ten_Button){
Delay_300();
ten ++;
if(ten==10) ten=0;
Display_Digits();
} // If !Ten_Button

if(!SS_Select){
Delay_300();
time = ten*10+unit ;
if(time > 0) start_timer(time);
} // If !SS_Select

if(clear){
goto start;
}
} while(1);
}



والمحاكاه تعمل على البروتس واشتغلت تمام




ولكن عند التطبيق العملى لم تعمل لم تظهر عليها بيانات



فما الحل ؟؟؟؟؟؟

اعلانات

الصورة الرمزية motoman2010
motoman2010
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2012
الدولة: مصر
المشاركات: 117
نشاط [ motoman2010 ]
قوة السمعة:0
قديم 04-06-2015, 03:48 PM المشاركة 2   
افتراضي


المشكله كانت فى انى موصل طرف ضبط التباين فى الشاشه بالارضى مباشرة
بدون مقاومه متغيره
ولكن عند وضع المقاومه الشاشه نصفها يعمل والاخر لا يعمل



اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

ABOUYAGINE
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2012
المشاركات: 61
نشاط [ ABOUYAGINE ]
قوة السمعة:0
قديم 04-06-2015, 05:20 PM المشاركة 3   
افتراضي


السلام عليكم
أعتقد أن المقاومة المتغيرة تكون بطرف الاضاءة للشاشة جرب المقاومة 2k2؟
أخي ممكن تضع الكود المشروع من فضلك؟


الصورة الرمزية motoman2010
motoman2010
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2012
الدولة: مصر
المشاركات: 117
نشاط [ motoman2010 ]
قوة السمعة:0
قديم 11-06-2015, 05:58 PM المشاركة 4   
افتراضي


السلام عليكم
أعتقد أن المقاومة المتغيرة تكون بطرف الاضاءة للشاشة جرب المقاومة 2k2؟
أخي ممكن تضع الكود المشروع من فضلك؟
اسف على التأخير هذا ملف الميكروسى والمحاكاه على بروتس



Logic
:: عضو فضي ::
تاريخ التسجيل: Mar 2014
المشاركات: 682
نشاط [ Logic ]
قوة السمعة:79
قديم 11-06-2015, 07:12 PM المشاركة 5   
افتراضي


أخي
1- فقط للتذكير طريقة توصيل المقاومة (5 الى 10 كيلو) مع الشاشة كما يلي:

تاكد من مصدر التغذية 5 فولت هل هو جيد ويعطي التيار الكافي للدائرة وخصوصا للشاشة.
2- إعدادات مشروعك تفرض عمل البيك بمذبذب خارجي 4 ميغا
و ريست خارجي أعتقد أنك وضعت كريستالة 4 ميغا في الدائرة الحقيقية .
كذلك مدخل الريست (RA5) ضروري يوصل مع الموجب 5 فولت (بواسطة مقاومة 10 كيلو ) .
3- خيار Brown out detect ربما لا يكون هذا سبب المشكل لكن الأفضل جعله disabled.

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 07:51 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025