Кто работал с дисплеями от нокии 3310,1110?
|
|
rrjcnz | Дата: Понедельник, 02.01.2012, 15:43 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 19
Статус: Offline
| Здравствуйте. Хочется сделать что-то на подобии бортового компьютера (определение и вывод напряжения, температуры и оборотов). Такую штуку виртуальную на LSD 4X20 символов собрать удалось, но дисплей этот очень большой. Хотелось бы вывести всё это на дисплей из нокии. в нете нашёл одну програмку под CodeVisionAVR и удалось её переделать под вольтметр, но сама программа работает, но когда подключаешь термодатчик то она еле думает, хоть и тактируется на 8MGz. кто работал с такими дисплеями подкиньте рабочую програмку.
Сообщение отредактировал rrjcnz - Вторник, 03.01.2012, 16:20 |
|
| |
HiSER | Дата: Понедельник, 02.01.2012, 16:02 | Сообщение # 2 |
 Продвинутый автор!
Группа: Проверенные
Сообщений: 254
Статус: Offline
| NOKIA LCD 3310 - driver PCD8544 Идем сюда http://alldatasheet.com/, скачиваем даташит. Далее пишешь библиотеку.
Сообщение отредактировал HiSER - Понедельник, 02.01.2012, 16:05 |
|
| |
rrjcnz | Дата: Вторник, 03.01.2012, 16:52 | Сообщение # 3 |
Рядовой
Группа: Пользователи
Сообщений: 19
Статус: Offline
| Библиотеку для работы с этим дисплеем я нашёл. В той программе что я написал всё нормально работает, но когда включаешь эту строку "termometr=ds18b20_temperature(0); " то дисплей обновляется раз в 5 секунд. Почему так?
Вот сама программа Code
#include <mega8.h> #include <1wire.h> #include <delay.h> #include <ds18b20.h> #include <3310lcd.C> #include <stdio.h>
int BAT,RPM,RPM_t,T,termometr; int MENU;
eeprom unsigned char contrast;
unsigned int adc_data; #define ADC_VREF_TYPE 0x00
// ADC interrupt service routine // with auto input scanning interrupt [ADC_INT] void adc_isr(void) { // Read the AD conversion result adc_data=ADCW;
// Start the AD conversion ADCSRA|=0x40; BAT=adc_data; }
// External Interrupt 1 service routine interrupt [EXT_INT1] void ext_int1_isr(void) { // Place your code here RPM_t++; }
// Timer1 output compare A interrupt service routine interrupt [TIM1_COMPA] void timer1_compa_isr(void) { T++; if (T==1600) { RPM=RPM_t*200; RPM_t=0; T=0; };
}
// Timer2 output compare interrupt service routine interrupt [TIM2_COMP] void timer2_comp_isr(void) { }
void main(void) { // 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 1 initialization // Clock source: System Clock // Clock value: 7,813 kHz // Mode: Fast PWM top=ICR1 // OC1A output: Toggle // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: On // Compare B Match Interrupt: Off TCCR1B=0x1a; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0xbb; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00;
// Timer/Counter 2 initialization // Clock source: System Clock // Clock value: 31,250 kHz // Mode: Normal top=0xFF // OC2 output: Disconnected ASSR=0x00; TCCR2=0x06; TCNT2=0x00; OCR2=0x09;
// External Interrupt(s) initialization // INT0: Off // INT1: On // INT1 Mode: Rising Edge GICR|=0x80; MCUCR=0x0C; GIFR=0x80;
// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x90;
// Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00;
// ADC initialization // ADC Clock frequency: 62,500 kHz // ADC Voltage Reference: AREF pin ADMUX=0; ADCSRA=0xCF;
// Global enable interrupts #asm("sei") w1_init(); LcdInit(); // LCD module initialization while (1) { if(PIND.0==1&MENU==0){MENU=1; delay_ms(200);LcdClear ();} if(PIND.0==1&MENU==1){MENU=0; delay_ms(200);LcdClear ();} if (MENU==0) { //termometr=ds18b20_temperature(0); sprintf(lcd_buf,"ВОЛЬТМЕТР"); //вывод LcdString(3,1); sprintf(lcd_buf,"V=%i,%i В ",BAT/100,BAT%100); //вывод LcdString(4,2); sprintf(lcd_buf,"ТЕРМОМЕТР"); //вывод LcdString(3,3); sprintf(lcd_buf,"%i\x80C ",termometr); //вывод LcdString(5,4); sprintf(lcd_buf,"ТАХОМЕТР"); //вывод LcdString(4,5); sprintf(lcd_buf,"%i об/мин ",RPM); //вывод LcdString(2,6); LcdUpdate(); // вывод на дисплей }; if (MENU==1) { LcdContrast (contrast); if (PIND.1==1) {contrast++; delay_ms(50);}; if (PIND.2==1) {contrast--; delay_ms(50);}; sprintf(lcd_buf,"**** МЕНЮ ****"); //вывод LcdString(1,1); sprintf(lcd_buf,"КОНТРАСТНОСТЬ"); //вывод LcdString(1,3); sprintf(lcd_buf,"<< >>",); //вывод LcdString(3,4); sprintf(lcd_buf,"%i",contrast); //вывод LcdString(7,4); LcdUpdate(); // вывод на дисплей };
};
}
Весь проэкт здесь http://depositfiles.com/files/asmyrxdbw
Сообщение отредактировал rrjcnz - Вторник, 03.01.2012, 17:01 |
|
| |
HiSER | Дата: Среда, 04.01.2012, 22:44 | Сообщение # 4 |
 Продвинутый автор!
Группа: Проверенные
Сообщений: 254
Статус: Offline
| ds18b20_temperature() делает задержку более 500ms
|
|
| |
rrjcnz | Дата: Среда, 04.01.2012, 23:05 | Сообщение # 5 |
Рядовой
Группа: Пользователи
Сообщений: 19
Статус: Offline
| а можно её как-то уменьшить или сделать так что б эта задержка не влияла на остальные показания?
и ещё протеус выдаёт такое замечание "simulation is not running in real time due to excessive CPU load".
может быть такое что программа в железе будет работать так как нужно, а не так как во время симуляции?
Сообщение отредактировал rrjcnz - Среда, 04.01.2012, 23:38 |
|
| |
HiSER | Дата: Четверг, 05.01.2012, 00:39 | Сообщение # 6 |
 Продвинутый автор!
Группа: Проверенные
Сообщений: 254
Статус: Offline
| перепиши библиотеку ds18b20. протеус пишет что эмуляция идет не в реальном времени из-за большой загрузки ЦПУ, т.е. эмуляции идет медленней чем должна идти. в реальном железе будет работать быстрее.
|
|
| |
rrjcnz | Дата: Четверг, 05.01.2012, 13:13 | Сообщение # 7 |
Рядовой
Группа: Пользователи
Сообщений: 19
Статус: Offline
| спасибо. вроде получилось. буду собирать в железе
|
|
| |