با سلام خدمت دوستان
همون طور که دوستان میدونن برای استفاده از ال سی دی کاراکتری توی پروژه ها چنانچه نویزی وارد مدار شود ممکن است که کاراکترهای ال سی دی رو به هم بریزه که برای جلوگیری از این امر باید پس از انتخاب فیلترینگ مناسب برای مدارباید فکری بشه برای موقعی که این حالت تو مدار پیش بیادویکی از راههایی که میشه این مشکل رو حل کرد اینه که ما بیایم دستور init lcd رو توی حلقه دایمی برنامه قرار بدیم.
حالا من توی بسکام ال سی دی رو بصورت 8بیتی راه اندازی کردم و دستور فوق رو توی حلقه do loop قرار دادم .حالا وقتی یه موتور dc رو روی خط 5 ولت تغذیه ال سی دی قطع و وصل کنیم تولید نویز روی این خط کردیم و کاراکتر های ال سی دی به هم میریزه اما به محض اینکه دوباره به دستور initlcd و بعد به دستور نمایش کاراکترها میرسه همه کاراکتر ها میشن مث اول

نکته : در هر دو برنامه از تاخیر 1 ثانیه ای استفاده میشه.
ولی وقتی همین روال برنامه رو توی atmel studio پیاده میکنم کاراکتر ها چشمک میزنند (چون دستور init lcd دایما اجرا میشه) در صورتی که در برنامه بسکام هیچگونه چشمکی کاراکتر ها نمیزدند،حتی اگه 100 میلی ثانیه تو برنامه تاخیر بزارم.به نظرتون تفاوتشون در کدوم قسمته؟
این هم از initlcd در اتمل استیو:
و این هم initlcd در سورس بسکام:
این هم کل پروژه:
همون طور که دوستان میدونن برای استفاده از ال سی دی کاراکتری توی پروژه ها چنانچه نویزی وارد مدار شود ممکن است که کاراکترهای ال سی دی رو به هم بریزه که برای جلوگیری از این امر باید پس از انتخاب فیلترینگ مناسب برای مدارباید فکری بشه برای موقعی که این حالت تو مدار پیش بیادویکی از راههایی که میشه این مشکل رو حل کرد اینه که ما بیایم دستور init lcd رو توی حلقه دایمی برنامه قرار بدیم.
حالا من توی بسکام ال سی دی رو بصورت 8بیتی راه اندازی کردم و دستور فوق رو توی حلقه do loop قرار دادم .حالا وقتی یه موتور dc رو روی خط 5 ولت تغذیه ال سی دی قطع و وصل کنیم تولید نویز روی این خط کردیم و کاراکتر های ال سی دی به هم میریزه اما به محض اینکه دوباره به دستور initlcd و بعد به دستور نمایش کاراکترها میرسه همه کاراکتر ها میشن مث اول



نکته : در هر دو برنامه از تاخیر 1 ثانیه ای استفاده میشه.
ولی وقتی همین روال برنامه رو توی atmel studio پیاده میکنم کاراکتر ها چشمک میزنند (چون دستور init lcd دایما اجرا میشه) در صورتی که در برنامه بسکام هیچگونه چشمکی کاراکتر ها نمیزدند،حتی اگه 100 میلی ثانیه تو برنامه تاخیر بزارم.به نظرتون تفاوتشون در کدوم قسمته؟
این هم از initlcd در اتمل استیو:
pinChange(RS,0);
pinChange(EN,0);
_delay_ms(20);
///////////// Reset process from datasheet /////////
Lcd8_Cmd(0x30);
_delay_ms(5);
Lcd8_Cmd(0x30);
_delay_us(100);
Lcd8_Cmd(0x30);
_delay_ms(10);
/////////////////////////////////////////////////////
Lcd8_Cmd(0x38); //function set
Lcd8_Cmd(0x0C); //display on,cursor off,blink off
Lcd8_Cmd(0x01); //clear display
Lcd8_Cmd(0x06); //entry mode, set increment
و این هم initlcd در سورس بسکام:
_Init_LCD:
clr R24 ; set all portpins low
* out _LCDport, r24
ser r24 ; set port pins to output
* out _LCDDDR, r24
Ldi R30, 28
Ldi R31, 78
Rcall _lcd_delay ; 20 ms delay at 4 MHz
ldi r24, &B00110000 ; 8-bit interface high nibble
* out _LCDport, r24
* sbi _LCDport, _LCD_E ; set pin
nop ; delay
nop
* cbi _LCDport, _LCD_E ; disable E
Ldi R30, 132
Ldi R31, 19
rcall _lcd_delay ; 5 mS delay at 4 MHz
* sbi _LCDport, _LCD_E ; nibble is already setup
nop
nop
* cbi _LCDport, _LCD_E
Ldi R30, 96 ; 100 uS delay at 4 MHz
Ldi R31, 0
rcall _lcd_delay
* sbi _LCDport, _LCD_E
nop
nop
* cbi _LCDport, _LCD_E ; clear
Ldi R30, 96 ; 100 uS delay at 4 MHz
Ldi R31, 0
rcall _lcd_delay
ldi r24, &B00100000 ; Command for 4-bit interface high nibble
* out _LCDport, r24
* sbi _LCDport, _LCD_E ; pulse
nop
nop
* cbi _LCDport, _LCD_E ; clear enable
ldi r24, &H28
rcall _Lcd_control
Ldi r24,14 ; Display on, Cursor on, Noblink
Rcall _Lcd_control
Ldi r24,6 ; Cursor moves right, text doesn't move
RJmp _Lcd_control ; return will come from _lcd_control
_lcd_delay:
Sbiw R30,1 ;2 cycles
Brne _lcd_delay ;2 cycles
Ret
[END]
این هم کل پروژه: