Hướng dẫn Điều khiển LCD 16x02 dùng AVR cho người mới bắt đầu

codientu98

Học sinh trung cấp
#62
mình đã sửa được rồi, tuy mô phỏng vẫn hiện -9999.00 nhưng mạch thật (cắm trên test board) đã chạy khá đúng. mình đã dùng file .hex trong file TEP của đàn anh bên mcu.bankinhkien thì phải!? kết nối như file mô phỏng đính kèm luôn và dùng thạch anh nội. sau đó thì bố trí chân linh kiện ở các port tùy thích và thach anh cũng tùy thích. (lúc đầu khi chưa dùng file .hex đó nạp vào chip thì mạch cắm trên test board cứ hiện -9999.00 quài, nhưng sau khi nap file đó thì rắc rối chỉ tới đó thôi. giờ mạch đã đúng rồi.) bạn nào mà bị giống mình thì cứ thử xem. mấy ngày qua cũng đau đầu, tìm kiếm các diễn đàn giờ mới sửa được
 

nmc12345

Học sinh trung cấp
#63
Mình cũng đang học về AVR, hiển thị LCD viết bằng AVRstudio, post lên cho bạn nào tham khảo
 

Đính kèm

MAM955

Học sinh phổ thông
#64
Anh có thể xem và sửa lỗi các bài này giúp e đc ko ạ???
1. Viết chương trình đo điện áp hiển thị trên LCD, chương trình liên quan đến ADC
2. Viết chương trình đếm số lần bấm phím hiển thị trên LCD. Sử dụng timer/counter
chương trình viết cho Atmega32
Dưới đây là 2 bài e viết, các a chị đi trc giúp e với :D
 

Đính kèm

tungcss16

Học sinh phổ thông
#65
Chào các bạn, mình áp dụng y như trên, nhưng màn không không hiển thị được gì cã. Mình tự hỏi có phải do phần mềm không, mình dung Altium 8, CodevisionAVR 3.2.
 

Dễ.thương

Học sinh phổ thông
#66
các ace cho mình hỏi , trên proteus code mình mô phỏng trên lcd 14 chân thì chạy mà mua lcd 16 chân ở minhha thì nó ko hiển thị nội dung , làm sao để khắc phục ?
 

codientu98

Học sinh trung cấp
#67
các ace cho mình hỏi , trên proteus code mình mô phỏng trên lcd 14 chân thì chạy mà mua lcd 16 chân ở minhha thì nó ko hiển thị nội dung , làm sao để khắc phục ?
bạn đã gắn biến trở(10k)? ( chân 1 nối mass, chân 3 nối Vdd, còn chân thứ 2 nối vào Vee) cho màn hình LCD chưa? nếu rồi thì thử chỉnh biến trở xem có hiển thị được cái gì hay không, nên kiểm tra lại kết nối giữa LCD và VDK lại trước, xem đã đúng chưa?
 

hoangle56

Học sinh phổ thông
#68
Chào các bạn, mình áp dụng y như trên, nhưng màn không không hiển thị được gì cã. Mình tự hỏi có phải do phần mềm không, mình dung Altium 8, CodevisionAVR 3.2.
giúp mình với,mach đo nhiệt độ của mình dùng ds18b20 và atmega8 hiển thị lcd16x2. lcd chỉ hiển thị -9999.000 mình đã, kiểm tra hết rồi, chân cẳn đều đúng như khai báo, cả ds mình cũng nhờ chỗ mình mua kiểm tra rồi vẫn còn sống. lạ 1 cái nữa là trên mô phỏng, mình mở 2 file có thể nói là nối chân như nhau, nạp cùng 1 chương trình nhưng 1 bên thì hiển thị nhiệt độ được một bên thì -9999.000. mạch mình cắm trên test board cũng -9999.000... mình hết cách rồi (đau đầu với nó lắm rồi.....@-)), cầu cứu các bạn.

mình không chèn tập tin lên được, còn đây là code
Mã:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 25-08-2015
Author  : NeVaDa
Company :
Comments:


Chip type               : ATmega8
Program type            : Application
AVR Core Clock frequency: 8.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include <mega8.h>

// 1 Wire Bus interface functions
#include <1wire.h>

// DS1820 Temperature Sensor functions
#include <ds18b20.h>
#include <delay.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#include <alcd.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here
   char LCD_Buffer[15];
   unsigned char *T=0;
   float nhiet_do;
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// USART disabled
UCSRB=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

// 1 Wire Bus initialization
// 1 Wire Data port: PORTB
// 1 Wire Data bit: 3
// Note: 1 Wire port settings must be specified in the
// Project|Configure|C Compiler|Libraries|1 Wire IDE menu.
w1_init();

// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTB Bit 0
// RD - PORTB Bit 1
// EN - PORTB Bit 2
// D4 - PORTB Bit 4
// D5 - PORTB Bit 5
// D6 - PORTC Bit 0
// D7 - PORTC Bit 1
// Characters/line: 16
lcd_init(16);

while (1)
      {
      // Place your code here
    
      nhiet_do=ds18b20_temperature(T);
      sprintf(LCD_Buffer, "temp: %f2.2",nhiet_do);
      lcd_gotoxy(0,1);
      lcd_puts(LCD_Buffer);
      delay_ms(500);
      }
}
Đang gặp lỗi tương tự như bạn mặc dù đã thêm phần ds18b20_init(T,0,0,DS18B20_12BIT_RES) rồi. Có bạn nào giúp mình được cái này không? Nhân tiện mình làm thử LM35 cũng đã khai báo ADC nhưng không biết lệnh đọc cái analog đó.
 

mta_cdt

Super Moderator
Thành viên BQT
#69
Đang gặp lỗi tương tự như bạn mặc dù đã thêm phần ds18b20_init(T,0,0,DS18B20_12BIT_RES) rồi. Có bạn nào giúp mình được cái này không? Nhân tiện mình làm thử LM35 cũng đã khai báo ADC nhưng không biết lệnh đọc cái analog đó.
Chia sẻ - dùng avr giao tiếp với nhiều ds18b20 chuẩn 1 wire | Cộng đồng cơ điện tử Việt Nam | Mechatronics
bạn tham khảo ở đây nha. Mình chạy với nhiều điểm đã ok rồi
 

hoangle56

Học sinh phổ thông
#70

Quảng cáo Google