Пт авг 24, 2012 18:11:19
#include "mega8515.h"
#asm
.equ __lcd_port=0x18
#endasm
#include "lcd.h"
#include "delay.h"
typedef unsigned char byte;
typedef unsigned long ulong;
flash byte txt[]="freq:";
byte ovf; //Счетчик переполнений таймера
byte i;
byte buff[17]; //Буфер LCD
ulong freq;
interrupt [TIM1_OVF] void tmr1_ovf() {
ovf++; //Считаем сколько было переполнений
}
void main(){
TCCR1A=0;
TCCR1B=0;
TIMSK=4;
ACSR=0x08;
lcd_init(16);
#asm("sei")
buff[16]=0;
while (1) {
ovf=0; //Обнуляем
TCNT1=0;
TCCR1B=7; //Включаем счетчик с внешним генератором, пин T1
//Сдесь надо выдержать секунду
//Для примера просто воспользовался delay_xx
//На самом деле для этого лучше использовать второй счетчик
delay_ms(999);
delay_us(239);
TCCR1B=0; //Выключаем счетчик
freq=(ulong)ovf*65536+TCNT1; //Подсчитываем сколько насчитали
i=16;
do { //Переводим бинарное число в десятичное
i--;
buff[i]=freq%10+0x30;
freq/=10;
} while(freq!=0);
do { //Заполняем дальше буфер
i--;
if (i<((sizeof txt)-1)) {
buff[i]=txt[i];
}else{
buff[i]=' ';
}
} while(i!=0);
lcd_clear();
lcd_puts(buff);
}
}
Пт авг 24, 2012 19:11:27
Пт авг 24, 2012 19:19:27
kras писал(а):Подправил циферки: 8 на 8515.
Пт авг 24, 2012 21:14:54
Пт авг 24, 2012 23:29:00
kras писал(а): Я все подключил, вроде, как (проект-оригинал: http://my-avr.at.ua/publ/prostoj_primer_chastotometra/1-1-0-59", в протеусе запускал с мк8515 и переделанной прошивкой, все норм, а как спаял, дисплей не выдает признаков жизни. Я протестировал, напряжения есть на RS и RW, а в чем проблема? Как протестировать, работает ли дисплей вообще? Насчет подключения дисплея: там 16 ножек, я сравнил пару даташитов других LCD, везде одна распиновка. По аналогии сделал и для своего LCD. К LCD всего подключил 4(data)+3(управление)+2(питание)выводов, может нужно еще что задействовать?
Пт авг 24, 2012 23:40:25
А как так? Если КЗ с питанием сделать, чем это будет отличаться от крайнего положения реостата? Ну понятно, что ток другой, можно подробнее? JM161B-RN, Datasheet уже нашел, но непонятно.подстроечный резистор на контрастность
Сб авг 25, 2012 12:38:40
Сб авг 25, 2012 21:21:11
kras писал(а):А как так? Если КЗ с питанием сделать, чем это будет отличаться от крайнего положения реостата? Ну понятно, что ток другой, можно подробнее? JM161B-RN, Datasheet уже нашел, но непонятно.подстроечный резистор на контрастность
Вс авг 26, 2012 15:23:32
Если соединить с питанием + или - , то либо ничего не покажет, либо черные квадраты.
Вс авг 26, 2012 17:50:10
Пн авг 27, 2012 14:03:17
kras писал(а):Нет, не помогает, долго шаманил над схемой. Сначала после беспомощности резистора понял, что питание не на ту ножку мк подается (а программатор типо шил!), исправил, и не помогло. Потом снова подключил недавно убранное внешнее питание 5В. Потом понял, что прошиваю фьюзы, забыл их снять. Поставил новый мк, не помогло. Может не настроил тактовый генератор? А у резистора переменного 10кОм сопротивление по-равному поделено.
Почему-то еще проблема: даже когда ставлю новый непрошитый мк (у меня их много:D), на PORTC есть единицы все-равно. Как-будто они подаются с дисплея. Короче, пока ничего так и не понял, вообще не получается хоть как-то дать жизнь to LCD.
И еще так и не понял насчет PROM - туда надо что-нибудь заливать? Или программа хранится во FLASH?
Чт авг 30, 2012 08:53:23
Чт авг 30, 2012 20:06:03
kras писал(а):Сделал программку, выдающую "Hello, World", не заработала. В Proteuse все работает, хотя делал уже по старой памяти, то есть косяки могут быть с одной стороны в железе. Но может я забываю что-то подключить, что в Proteuse игнорируется? Например, подсветку я совсем не включаю.
... А ведь подсветка тоже какие-то косяки выдает. То мне кажется, что что-то меняется, когда я вставляю батарейку, но это так слабо заметно. Сопротивление - 68Ом. На Adjusment подается около 3 В, если не больше, но не выводится и все!
Чт авг 30, 2012 21:32:40
Пт авг 31, 2012 02:12:52
Сб сен 01, 2012 09:57:17
ОО, а у меня вообще ноль ответа от LCD на подкрутку резистора! Ну буду пробовать, просто еще резистор с тонкой настройкойнормальный контраст
А я может напутал? В даташите видел, что 7В предельное напряжение питания. Да, у меня по 1.5В батарейка, но как-то в уроках говорили, что это норм.как нож в спину
Сб сен 01, 2012 14:44:53
kras писал(а):ОО, а у меня вообще ноль ответа от LCD на подкрутку резистора! Ну буду пробовать, просто еще резистор с тонкой настройкойнормальный контрастА я может напутал? В даташите видел, что 7В предельное напряжение питания. Да, у меня по 1.5В батарейка, но как-то в уроках говорили, что это норм.как нож в спину
Пт сен 07, 2012 03:58:32
#include <mega8515.h>
// Alphanumeric LCD functions
#include <alcd.h>
// Declare your global variables here
void main(void)
{
char *_str="Hell!"; //Создаем выводимую строку
// Declare your local variables here
// Input/Output Ports initialization
// Port A 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
PORTA=0x00;
DDRA=0x00;
// 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
// 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
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;
// Port E initialization
// Func2=In Func1=In Func0=In
// State2=T State1=T State0=T
PORTE=0x00;
DDRE=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=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;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
EMCUCR=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;
// SPI initialization
// SPI disabled
SPCR=0x00;
// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 4
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 16
lcd_init(16);
//#asm
// .equ __lcd_port=0x15 ;PORTC
//#endasm // Инициализируем PORTC как порт ЖКИ
lcd_gotoxy(0, 0); // Переводим курсор на первый символ первой строки
lcd_puts(_str); // Выводим строку _str на дисплей
while (1){ // безконечный цикл
};
}
Пт сен 07, 2012 09:59:15
Пт сен 07, 2012 11:48:34