Страница 1 из 3 123 Последняя
Показано с 1 по 20 из 51

Тема: Подскажите по PIC18F452

  1. #1
    wi3ik
    Гость

    По умолчанию Подскажите по PIC18F452

    Доброго времени суток.
    Подскажите кто может.

    Я в университете проходил дисциплину, на которой ми учили ПИК18.
    Все бы хорошо, но вот чему нас там научили, так это диодами моргать.

    А я сейчас захотел разобратся побольше с ПИКОМ.

    Для начала я хочу разобратся как виводить цифры на семисегментный индикатор.
    ПОДКСАЖИТЕ

    Сидел в интернете, кучу книг просмотрел.
    Для полного проекта мне нужен код, в котором будут обрабатываться прерывания с высоким и низким приоритетами при переполнении таймеров.

    Сделал это.

    Разобрался с двоично-десятичной кодировкой.......сделал код, который выводит одну цифру на индикатор (один разряд индикатора).

    Все это я моделировал в ПРОТЕУСЕ.

    А когда подключил индикатор на четыре разряда........ВСЕ

    Как переключать разряды и вывести нужную цифру, например 1234?

    Кто может мне подробно это описать и какао-то пример скинуть.......уже два дня сижу......уперся и все тут.

    PS Только не нужно забывать что я новичок..............и до етого еще не работал с контроллерами

  2. #2
    Старый знакомый Аватар для KNLL
    Регистрация
    15.04.2008
    Адрес
    СПб
    Возраст
    55
    Сообщений
    795

    По умолчанию Re: Подскажите по PIC18F452

    Ищем в нете "динамическая индикация". разбираемся что к чему. Разряды удобно переключать счёчиком по прерыванию от таймера.

    Значения - в массив. Счётчиком перебираем индекс - считай разряд.
    Последний раз редактировалось KNLL; 30.10.2010 в 03:03.
    Николай
    ________________________________________________________________________
    Все, что один человек руками сделал - другой завсегда сломать сумеет (народная мудрость)

  3. #3
    wi3ik
    Гость

    По умолчанию Re: Подскажите по PIC18F452

    Добрый день..........Хочу подключить к pic18f452 lcd-индикатор.................подскажите как это сделать.....................на пальцах...................может какай-то даташит.......

  4. #4
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,134

    По умолчанию Re: Подскажите по PIC18F452

    Цитата Сообщение от wi3ik Посмотреть сообщение
    может какай-то даташит.......
    Наиболее полный: http://www.sparkfun.com/datasheets/LCD/HD44780.pdf

    Вот еще полезно: http://avrlab.com/node/80
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  5. #5
    wi3ik
    Гость

    По умолчанию Re: Подскажите по PIC18F452

    Для общения контролера с ЖК необходими подпрограммы............я хочу использовать wrcmd ();
    Подскажите как ее реализовать?
    Код:
    #include "p18f452.h"
    
    //...............................................................
    //void main (void);
    void wrcmd (char data);
    
    //...............................................................
    void main()
      {
       void lcd_init(void);
       
      }
    //...............................................................
    
    void lcd_init()
       {//Ініціалізація ЖК-індикатора
        PORTA = TRISA = 0;
        TRISB = 0b11111111;
        PORTB = 0xFF;
       ADCON1 = 0b00000111;
        wrcmd (0x30);
    
       }
    Последний раз редактировалось wi3ik; 02.04.2011 в 04:52.

  6. #6
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,134

    По умолчанию Re: Подскажите по PIC18F452

    Цитата Сообщение от wi3ik Посмотреть сообщение
    Для общения контролера с ЖК необходими подпрограммы
    Разумеется


    Цитата Сообщение от wi3ik Посмотреть сообщение
    я хочу использовать wrcmd ();
    Подскажите как ее реализовать?
    Лучше всего - посмотреть там, где ты увидел это название Или ты его сам придумал ?

    У меня к примеру, оно реализовано вот так:
    Код:
    void WriteWCMD(byte DAT){
    byte tmp;
           tmp = DAT & 0xF0; // use high nibble
           tmp = (tmp>>4) & 0x0F; 
           PDATA = tmp; DATA0 = (tmp & 1);
           CStrobe; // sent high nibble first
           Delay5ms();
           CLRWDT();  
           tmp = (DAT) & 0x0F; 
           PDATA = tmp; DATA0 = (tmp & 1);
           CStrobe; // send low nibble 
    }
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  7. #7
    wi3ik
    Гость

    По умолчанию Re: Подскажите по PIC18F452

    Подпрограмму wrcmd() я подсмотрел в примерах, которые есть в Протеусе............но описания ее (реализации) там я не нашел...........вот и маюсь.
    Скажите еще, обязательно ли должен работать watchdog timer? И почему у меня постоянно протеус ругается
    [PIC18] PC=0x0182. Processor has been reset by watchdog timer expiring at time 2.30400.

  8. #8
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,134

    По умолчанию Re: Подскажите по PIC18F452

    Так выключи его во фьюзах. Или поставь где надо CLRWTD();
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  9. #9
    wi3ik
    Гость

    По умолчанию Re: Подскажите по PIC18F452

    Какой режим роботы ЖК-дисплея лучше (проще) 8-ми или 4-х разрядный?

  10. #10
    Завсегдатай Аватар для Openreel
    Регистрация
    02.09.2006
    Адрес
    Санкт-Петербург
    Возраст
    49
    Сообщений
    3,136

    По умолчанию Re: Подскажите по PIC18F452

    Цитата Сообщение от wi3ik Посмотреть сообщение
    Какой режим роботы ЖК-дисплея лучше (проще)
    8-ми разрядный быстрей работает, зато больше ног контроллера тратит, из этого и исходят в 99.9% случаев.
    WBR, Michael.
    Цель расчетов - понимание, а не числа (с) Хемминг.

  11. #11
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,134

    По умолчанию Re: Подскажите по PIC18F452

    Цитата Сообщение от wi3ik Посмотреть сообщение
    Какой режим роботы ЖК-дисплея лучше (проще) 8-ми или 4-х разрядный?
    Без разницы.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  12. #12
    wi3ik
    Гость

    По умолчанию Re: Подскажите по PIC18F452

    1. При инициализации курсор стоит в крайнем левом положении.............как сделать, чтобы он был в крайнем правом?
    2. Какая разница между display data RAM (DDRAM) и character generator (CGRAM)?
    Последний раз редактировалось wi3ik; 04.04.2011 в 07:15.

  13. #13
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,134

    По умолчанию Re: Подскажите по PIC18F452

    Цитата Сообщение от wi3ik Посмотреть сообщение
    1. При инициализации курсор стоит в крайнем левом положении.............как сделать, чтобы он был в крайнем правом?
    Командой позигионирования курсора.
    Лично я курсор всегдла выключаю, в практически 100% моиз задач он не нужен.

    Цитата Сообщение от wi3ik Посмотреть сообщение
    2. Какая разница между display data RAM (DDRAM) и character generator (CGRAM)?
    В первой находятся сами отображаемые на экране символы, во второй - знакогенератор для восьми пользовательских символов.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  14. #14
    wi3ik
    Гость

    По умолчанию Re: Подскажите по PIC18F452

    Я сделал инициализацию жк по даташиту http://www.e-voron.dp.ua/files/pdf/g...01l-ygh-ct.pdf
    Теперь хочу вывести сообщение *Хелло!!!*.................Подскажите где можно прочитать об выполнении этих действий...........или вы кратко об этом напишите...
    МОЙ КОД
    Код:
    #include "p18f452.h"
    #include "delays.h"
    //...............................................................
    //...............................................................
    //void main (void);
    void lcd_init(void);
    void display_message(void);
    //...............................................................
    void main()
    
      {
       lcd_init();                //8-bit
       display_message();         //*Hello!*
    
    
      }
    //...............................................................
    void display_message()        //*Hello!*
        {
    //===========
    while(1)   //Some code
     {
    _asm    //Очищення watchdog timer
      CLRWDT
    _endasm
     }
    //===========
        }
    
    void lcd_init()               //8-bit
        {
         TRISA = 0;
         PORTA = 0;
         TRISB = 0;
         PORTB = 0;//0xFF;
       ADCON1 = 0b00000111; //Як цифрові канали вх./вих.
    Delay1KTCYx(200);           //Delay more than 40mS
    
        PORTAbits.RA0 = 0;      //RS   --> command
        PORTAbits.RA1 = 0;      //R/W --> write
       Delay1TCY();                //Delay more than 37µS (tAS)
        PORTAbits.RA2 = 1;      //E impuls On
        PORTB = 0b00111000;     //D0-D7 (8-bit & 1-line)         Function set
        PORTAbits.RA2 = 0;      //E impuls Off
       Delay1TCY();                //Delay more than 37µS (tAH)
        //RS=0;
        PORTAbits.RA1 = 1;      //R/W --> read
    Delay100TCYx(2);            //Delay more than 39uS -------------  
        PORTAbits.RA0 = 0;      //RS   --> command
        PORTAbits.RA1 = 0;      //R/W --> write
       Delay1TCY();                //Delay more than 37µS (tAS)
        PORTAbits.RA2 = 1;      //E impuls On
        PORTB = 0b00111000;     //D0-D7 (8-bit & 1-line)         Function set
        PORTAbits.RA2 = 0;      //E impuls Off
       Delay1TCY();                //Delay more than 37µS (tAH)
        //RS=0;
        PORTAbits.RA1 = 1;      //R/W --> read
    Delay100TCYx(2);            //Delay more than 37uS  -------------
        PORTAbits.RA0 = 0;      //RS   --> command
        PORTAbits.RA1 = 0;      //R/W --> write
       Delay1TCY();                //Delay more than 37µS (tAS)
        PORTAbits.RA2 = 1;      //E impuls On   
        PORTB = 0b00001110;     //D0-D7 (Set display, cursor, and blinking
                                //of cursor on/off control bit)           Display On/Off
        PORTAbits.RA2 = 0;      //E impuls Off
       Delay1TCY();                //Delay more than 37µS (tAH)
        //RS=0;
        PORTAbits.RA1 = 1;      //R/W --> read
    Delay100TCYx(1);                //Delay more than !!! 37µS -------------
        PORTAbits.RA0 = 0;      //RS   --> command
        PORTAbits.RA1 = 0;      //R/W --> write
       Delay1TCY();                //Delay more than 37µS (tAS)
        PORTAbits.RA2 = 1;      //E impuls On 
        PORTB = 0b00000001;     //D0-D7  Display clear
        PORTAbits.RA2 = 0;      //E impuls Off
       Delay1TCY();                //Delay more than 37µS (tAH)
        //RS=0;
        PORTAbits.RA1 = 1;      //R/W --> read 
    Delay1KTCYx(9);            //Delay more than 1.5mS  --------------------
        PORTAbits.RA0 = 0;      //RS   --> command
        PORTAbits.RA1 = 0;      //R/W --> write
       Delay1TCY();                //Delay more than 37µS (tAS)
        PORTAbits.RA2 = 1;      //E impuls On 
        PORTB = 0b00000100;     //D0-D7  (Переміщення курсору і символів по ЖК)
        PORTAbits.RA2 = 0;      //E impuls Off
       Delay1TCY();                //Delay more than 37µS (tAH)
        //RS=0;
        PORTAbits.RA1 = 1;      //R/W --> read 
    // Initialization Ends
        }

  15. #15
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    61
    Сообщений
    36,134

    По умолчанию Re: Подскажите по PIC18F452

    Цитата Сообщение от wi3ik Посмотреть сообщение
    Теперь хочу вывести сообщение *Хелло!!!*.................Подскажите где можно прочитать об выполнении этих действий...........или вы кратко об этом напишите...
    Дак, спочатку треба написати процедуру виводу символу, наприклад:
    Код:
    // для 4-х битнгопротокола:
    void putch (char DAT){
    byte tmp;
           CLRWDT();  
           tmp = DAT & 0xF0; // use high nibble
           tmp = (tmp>>4) & 0x0F; 
           PDATA = tmp; 
           DATA0 = (tmp & 1);
           DStrobe; // sent high nibble first
           
           tmp = (DAT) & 0x0F; 
           PDATA = tmp; DATA0 = (tmp & 1);
           
           DStrobe; // send low nibble 
    }
    Пiсля которого вже можно написати процедуру виводу стрiчки:
    Код:
    void putstr (const char const * ptr){
      char c, i=0;
      while (c = ptr[i++]) putch(c);
    }
    або використовувати стандартнi процедури printf, sprintf
    Цитата Сообщение от wi3ik Посмотреть сообщение
    void lcd_init(void);
    в мэне ця процедура зроблена так (для 4- бiтного зв*язку):

    Код:
    void lcd_init(void){ // Initialise the LCD Display.
    byte i;
                    Delay5ms();Delay5ms();Delay5ms();
                    // data length is 8 at this point
    
                    WriteWCMD(0x33);  //set data length to 8
                    WriteWCMD(0x32);  // 
                    WriteWCMD(0x28); // 4 bit, 2 lines, 5x7 dots                
                    
                    //"Mode set, display shift, inc address"
                    WriteWCMD(0x06); // 
                    
                    //"Set display ON, cursor OFF, blink OFF"
                    WriteWCMD(0x0C);   //0C-0E
                         
                    //"Reset and blank display"     
                    WriteWCMD(0x01); 
    // ---------------------------------- init UDG, if need
    #ifdef UDG
                    WriteWCMD(0x40/*+8*/); // CharGen prog  -> CG RAM
                      // prog custom digits
                    for(i=0;i<numUDG*8;i++) putch (ChG[i]);
    
                    WriteWCMD(0x80); //1st digit
    #endif
    }
    Последний раз редактировалось Alex; 04.04.2011 в 17:49.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Ну что, можете меняться обратно."(с)типа анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  16. #16
    wi3ik
    Гость

    По умолчанию Re: Подскажите по PIC18F452

    Спасибо за пример...........проблема в том, что я не очень понимаю что тут творится..........можете мне подсказать где какую-то блок-схему роботы ЖК посмотреть...........это будет намного лучше мне доходить чем уже готовый код
    Последний раз редактировалось wi3ik; 04.04.2011 в 23:44.

  17. #17
    Завсегдатай Аватар для Openreel
    Регистрация
    02.09.2006
    Адрес
    Санкт-Петербург
    Возраст
    49
    Сообщений
    3,136

    По умолчанию Re: Подскажите по PIC18F452

    Цитата Сообщение от wi3ik Посмотреть сообщение
    проблема в том, что я не очень понимаю что тут творится
    http://mirknig.com/knigi/technika/11...osto-t1-3.html
    Учебник по Си еще добавить самостоятельно.
    WBR, Michael.
    Цель расчетов - понимание, а не числа (с) Хемминг.

  18. #18
    wi3ik
    Гость

    По умолчанию Re: Подскажите по PIC18F452

    Цитата Сообщение от Openreel Посмотреть сообщение
    Учебник по Си еще добавить самостоятельно.
    У меня уже есть C++ Для чайников

  19. #19
    wi3ik
    Гость

    По умолчанию Re: Подскажите по PIC18F452

    Я вывел сообщение *Hello!*, но при этом я кажний символ вытаскивал при помощи Write Data to RAM по отдельности. А как можно целое слово вывести, не мучасть с каждой буквой?
    К примеру я ввожу:
    char data = *hello!*;
    /*-----------------------------------------------
    --------------------------------------------------
    ------------------------------------------------*/
    RS = 1;
    RW = 0;
    E = 1;
    PORTB = data; //D0-D7
    Delay100TCYx(3);
    E = 0;
    RW=1;

  20. #20
    Завсегдатай Аватар для Openreel
    Регистрация
    02.09.2006
    Адрес
    Санкт-Петербург
    Возраст
    49
    Сообщений
    3,136

    По умолчанию Re: Подскажите по PIC18F452

    Цитата Сообщение от wi3ik Посмотреть сообщение
    как можно целое слово вывести, не мучасть с каждой буквой?
    Alex выше функцию putstr для кого приводил?

    Цитата Сообщение от wi3ik Посмотреть сообщение
    К примеру я ввожу:
    char data = *hello!*;
    правильней писать
    const char *data = "hello!";

    заодно проверить, является ли data используемым ключевым словом в используемом компиляторе.
    WBR, Michael.
    Цель расчетов - понимание, а не числа (с) Хемминг.

Страница 1 из 3 123 Последняя

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •