Пятница, 19.04.2024, 15:57
Микроконтроллерная техника AVR
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Микроконтроллеры » Вопросы по МК » Кто работал с дисплеями от нокии 3310,1110? (ВСЕХ С НОВЫМ ГДОМ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
Кто работал с дисплеями от нокии 3310,1110?
rrjcnzДата: Понедельник, 02.01.2012, 15:43 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 19
Репутация: 0
Статус: Offline
Здравствуйте. Хочется сделать что-то на подобии бортового компьютера (определение и вывод напряжения, температуры и оборотов). Такую штуку виртуальную на LSD 4X20 символов собрать удалось, но дисплей этот очень большой. Хотелось бы вывести всё это на дисплей из нокии. в нете нашёл одну програмку под CodeVisionAVR и удалось её переделать под вольтметр, но сама программа работает, но когда подключаешь термодатчик то она еле думает, хоть и тактируется на 8MGz. кто работал с такими дисплеями подкиньте рабочую програмку.

Сообщение отредактировал rrjcnz - Вторник, 03.01.2012, 16:20
 
HiSERДата: Понедельник, 02.01.2012, 16:02 | Сообщение # 2
Продвинутый автор!
Группа: Проверенные
Сообщений: 254
Репутация: 11
Статус: Offline
NOKIA LCD 3310 - driver PCD8544
Идем сюда http://alldatasheet.com/, скачиваем даташит.
Далее пишешь библиотеку.


Сообщение отредактировал HiSER - Понедельник, 02.01.2012, 16:05
 
rrjcnzДата: Вторник, 03.01.2012, 16:52 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 19
Репутация: 0
Статус: 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
Репутация: 11
Статус: Offline
ds18b20_temperature() делает задержку более 500ms
 
rrjcnzДата: Среда, 04.01.2012, 23:05 | Сообщение # 5
Рядовой
Группа: Пользователи
Сообщений: 19
Репутация: 0
Статус: 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
Репутация: 11
Статус: Offline
перепиши библиотеку ds18b20.
протеус пишет что эмуляция идет не в реальном времени из-за большой загрузки ЦПУ, т.е. эмуляции идет медленней чем должна идти. в реальном железе будет работать быстрее.
 
rrjcnzДата: Четверг, 05.01.2012, 13:13 | Сообщение # 7
Рядовой
Группа: Пользователи
Сообщений: 19
Репутация: 0
Статус: Offline
спасибо. вроде получилось. буду собирать в железе
 
Форум » Микроконтроллеры » Вопросы по МК » Кто работал с дисплеями от нокии 3310,1110? (ВСЕХ С НОВЫМ ГДОМ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
  • Страница 1 из 1
  • 1
Поиск:

Хостинг от uCoz