Страница 1 из 1

Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с ним?

Добавлено: Ср май 11, 2011 00:13:10
pushkin42
Собственно, имеем.
Среду виртуализации - NI Multisim 11.1
PIC 16F84A виртуальный и 16F86xx какой-то купленый (не суть)
Стандартный дисплей из мультисима на базе 44780 (собственно, там больше ничего и нет)

Что на данный момент: много рыл по различным форумам, ища возможности реализации протокола обмена данными между LCD и МК.
Нашел много всего неинтересного и/или сделанного под Proteus (не интересует!)
Сам попытался вкурить в мануалы. И вот что получилось:

Код: Выделить всё

	LIST 		P=16F84
		#INCLUDE	<P16F84.INC>
	
	; RA1 - E
	; RA2 - RS
	; RA3 - RW

	; RB  - DATA
PORTA       EQU   0x05
PORTB		EQU	  0x06
TRISA       EQU   0x85
TRISB	    EQU   0x86
Carry       EQU   0
Zero_       EQU   2
RP0         EQU   5
RP1         EQU   6
RA0			EQU   0
RA1         EQU   1
RA2			EQU	  2
RA3			EQU   3
RB0			EQU	  0
RB1			EQU	  1
RB2			EQU   2
RB3			EQU   3
RB4			EQU   4
RB5			EQU   5
RB6			EQU   6
RB7			EQU   7



E		EQU RA1
RS 		EQU RA2
RW		EQU RA3
D0		EQU	RB0
D1		EQU	RB1
D2		EQU	RB2
D3		EQU	RB3
D4		EQU	RB4
D5		EQU	RB5
D6		EQU	RB6
D7		EQU	RB7

	BSF STATUS,RP0
	MOVLW 0x00
	MOVWF TRISA
	MOVLW 0x00
	MOVWF TRISB
	MOVLW 0x00
	MOVWF PORTA
	MOVLW 0x00
	MOVWF PORTB
	CALL Delay2s
	MOVLW 0x00 
	MOVWF PORTA
	;0b00001100
	MOVLW 0x0C
	MOVWF PORTB 
	NOP	
	MOVLW 0x0C
	MOVWF PORTB 
	CALL Delay4ms
	;RS  R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
    ;0   0   0   0   1   DL   N   F   *   *   
	;                                 *   *   0   1   1   1 0 0
	;N = 0 - 1 line, N = 1 - 2 line count;
 	;F = 0 - 5*7, F = 1 - 8*10 dots;
 	;DL = 0 - 4bit, DL = 1 - 8bit
	BCF PORTA,RS
	BCF PORTA,RS
	;0b00011100
	MOVLW 0x1C
	MOVWF PORTB
	CALL Delay4ms

	;11. RS  R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0               
    ;	 0   0   0   0   0   0   1   D   C   B   
	;BSF STATUS,RP1	
	;0b11110000
	MOVLW 0xF0
	MOVWF PORTB
	BCF PORTA,RS
	BCF PORTA,RW
	;13. RS  R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
    ;	 0   0   0   0   0   0   0   1  I/D  S  
	CALL Delay4ms





	BCF PORTA,RS
	BCF PORTA,RW
	;0b11000000
	MOVLW 0xC0
	MOVWF PORTB
	NOP
	NOP
	
	BCF PORTA,RS
	BCF PORTA,RW
	BSF PORTA,E	
	MOVLW 0x80
	MOVWF PORTB
	NOP
	NOP
	NOP
	BCF PORTA,E
	CALL Delay4ms
	BSF PORTA,RS
	BCF PORTA,RW
	BSF PORTA,E
	CALL Delay4ms
	BSF PORTA,RS
	BCF PORTA,RW
	BCF PORTA,E
	MOVLW 0xAE
	MOVWF PORTB
	CALL Delay4ms
	BSF PORTA,RS
	BCF PORTA,RW
	BCF PORTA,E
	NOP

	return



	cblock
	d1
	d2
	d3
	endc

Delay2s
			;9999995 cycles
	movlw	0x5A
	movwf	d1
	movlw	0xCD
	movwf	d2
	movlw	0x16
	movwf	d3
Delay2s_0
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	$+2
	decfsz	d3, f
	goto	Delay2s_0

			;1 cycle
	nop
	return
			;4 cycles (including call)

Delay4ms
			;20493 cycles
	movlw	0x02
	movwf	d1
	movlw	0x11
	movwf	d2


Delay4ms_0
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	Delay4ms_0

			;3 cycles
	goto	$+1
	nop

			;4 cycles (including call)
	return

	return

	END
собственно, дисплей ведет себя так:
моргает, включает подсветку, показывает курсор и ПЕРЕХОДИТ В ПОСЛЕДНЕЕ ЗНАКОМЕСТО на экране (т.е. 16,2)
Естественно, ничего не отображается.
может, где-то задержки неправильные, может и еще чего. В первый раз решил заняться самообразованием, и нате.
Пожалуйста, не тыкайте тапками - это больно. И ссылками тож не надо. Хватит с меня на сегодня ссылок. Лучше уж носом в лужу.

Всем спасибо.

Re: Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с

Добавлено: Ср май 11, 2011 00:59:46
abc
BSF STATUS,RP0
А где возврат к нулевому банку (bcf STATUS,RP0) ?

Re: Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с

Добавлено: Ср май 11, 2011 06:05:24
pushkin42
Был возврат, не помогает...

Re: Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с

Добавлено: Ср май 11, 2011 06:45:55
uldemir
pushkin42 писал(а):Был возврат, не помогает...
Ну если это не помогает, то, боюсь, Вам никто не поможет. Программирование, это не танцы с бубном, а полное понимание происходящих процессов. Курите даташиты на микроконтроллер до полного просветления. Когда поймете, что Вам сказал abc - можете задавать следующий вопрос.

Re: Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с

Добавлено: Ср май 11, 2011 06:51:13
pushkin42
Я прекрасно понял, что он мне сказал.
Банки памяти и регистров я перерыл сверху донизу и даже частично запомнил.
Меня сейчас интересует исключительно то, где здесь ошибка, почему вместо вывода символа LCD так повел себя.
И да, Вы наверное тоже когда-нибудь были начинающим. Так зачем глумиться?

Re: Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с

Добавлено: Ср май 11, 2011 07:04:02
uldemir
Да, я был начинающим, и даже - есть. Но тем не менее, разбирался с такими мелочами сам. Примите за факт, что другим это удается сделать и ищите свои ошибки - это в сто раз полезнее для Вас, чем для других. А если спросили помощь - то начинайте учитывать советы.
Изучая чужой исходник и увидев такую грубую ошибку - нет интереса смотреть дальше.

Re: Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с

Добавлено: Ср май 11, 2011 07:21:25
pushkin42
Я вернул статус на место, ничего не изменилось. "Грубые ошибки" возникать будут и будут всегда, особенно если не объяснить, ПОЧЕМУ так надо. Естественно, сидя в кресле сам читая кучу инфы я никогда не разберусь в сути вопроса. Впрочем, спасибо и на этом.

Re: Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с

Добавлено: Ср май 11, 2011 08:00:15
uldemir
pushkin42 писал(а):если не объяснить, ПОЧЕМУ так надо
Потому что к регистрам PORTA и TRISA разом обратиться нельзя. Они находятся в разных страницах памяти. И если вы включили первую страницу - все обращения пойдут к TRISA, а не PORTA. Подробнее читайте в даташите на микроконтроллер. Наезжать на компилятор, кстати, не стоит. Он компилирует, то что Вы написали.
Второе, вы очень туманно выдали мысль на тему, что купили "несутьважнокакойконтроллер", а нас пичкаете 84-м пиком. Надеюсь, вы не скармливаете код скомпилированный для 84-го контроллера другому контроллеру?

Re: Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с

Добавлено: Ср май 11, 2011 08:02:20
pushkin42
Нет, в данный момент я в мультисиме мучаю стандартный F84A, там же больше нет ничего. Деньги пока тратить на физический контроллер не буду, да и ЖКИ пока в продаже не нашел.

"Компилятором" вы предыдущего оратора называете? :)

Re: Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с

Добавлено: Ср май 11, 2011 08:07:24
uldemir
pushkin42 писал(а):"Компилятором" вы предыдущего оратора называете?
Нет, просто предвосхищаю обычную после этого обиженную реплику: "А почему компилятор не выдал предупреждения...?". Кстати, если вы делаете include, то половина последующих EQU не нужна - она уже там описана.

Re: Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с

Добавлено: Ср май 11, 2011 08:15:28
pushkin42
Про предупреждения уже прочитал, не переживайте.
Вы мне лучше скажите, действительно ли в Мультисиме эмуляция проходит так, как надо? Ибо максимум что добился на ВСЕХ схемах/прошивках из инета это либо ничего, либо курсор в (16,2) либо вывод квадратиков последовательный (если выключить Falling Edge режим)

Про EQU в курсе, просто сначала написал, потом делал поправки. Не критично ведь?

Re: Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с

Добавлено: Ср май 11, 2011 08:20:39
uldemir
Тут поищите других собеседников. у меня критерий истины - Работа в железе, а не симуляторе.

Re: Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с

Добавлено: Ср май 11, 2011 08:21:55
urry
интереса ради посмотрел инициализацию у себя, что-то очень мало похожего

Код: Выделить всё

	init_value = 0x3;
	TRISA=0;
	TRISD=0;
	LCD_RS = 0;
	LCD_EN = 0;
	LCD_RW = 0;
	
	DelayMs(15);	// wait 15mSec after power applied,
	LCD_DATA	 = init_value;
	LCD_STROBE();
	DelayMs(5);
	LCD_STROBE();
	DelayUs(200);
	LCD_STROBE();
	DelayUs(200);
	LCD_DATA = 2;	// Four bit mode
	LCD_STROBE();
	lcd_write(0x28); // Set interface length
	lcd_write(0xF); // Display On, Cursor On, Cursor Blink
	lcd_clear();	// Clear screen
	lcd_write(0x6); // Set entry Mode

Re: Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с

Добавлено: Ср май 11, 2011 08:22:31
pushkin42
Нет, ну а как вы себе представляете работу в железе без испытания? Ну прошью я его, ну не получится ничего, что дальше?
Купить-то контроллер нетрудно...

Юрий, а вы могли бы показать весь код? Может быть, все что в инете - полный бред? :tea:

Re: Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с

Добавлено: Ср май 11, 2011 08:24:36
urry
Протеус в помощь.

Re: Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с

Добавлено: Ср май 11, 2011 08:34:36
pushkin42
Блин!!! Оставил симуляцию включеной, отошел на 20 секунд воды попить - пошел вывод!!!
Почему так?

Re: Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с

Добавлено: Ср май 11, 2011 08:49:35
abc
Симулятор тормознутый ? Глючит ? Винда коряво стоит ? Драйверов каких-то не хватает ? .Net отжирает память ? Своп мал ?
Да причин тыщщи, хотите нормально работать - производите отладку в железе.

Re: Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с

Добавлено: Ср май 11, 2011 18:40:28
murzila
Рискну показаться неоригинальным, но зря Вы ожидаете, что в симуляторе все будет работать именно так, как Вы задумали. Вообще говоря, симуляторы рассчитаны отнюдь не на начинающих, а на людей, хорошо представляющих себе, что они делают и разбирающихся в тонкостях работы того или иного симулятора.

Re: Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с

Добавлено: Ср май 11, 2011 19:45:22
AndyWorld
Я соглашусь с тем, что симулятор лучше оставить на потом. Купить реальный контроллер и ЖК индикатор. Многие так и начинали. Выбираешь схему - собираешь, для меня это был градусник (дом-улица) из журнала радио, потом таймер для кухни из этого же журнала, частотомер. Вобщем на 84-м можно кучу нужных вещей сделать. Потом правишь тексты под себя. Советую обзавестись книжками.

Re: Товарищи! МОчи нет больше! PIC16F84A + LCD 16x2 - что с

Добавлено: Сб май 14, 2011 22:55:29
dosikus
По стилю писанины ярко видна школа пастера . Уважаемый, вам срочно нужно переучиваться .