Attiny2313 и lcd (lcm1602c) экран

Тема в разделе "Микроконтроллеры AVR", создана пользователем Evgeniy2017, 29 июл 2021.

Метки:
  1. Evgeniy2017

    Evgeniy2017 Нерд

    Ув. формучане доброго времени суток. Нужны ваши предположения. Что потенциально можно сделать не так, при подключении выше упомянутого МК и дисплея. Распиновка дисплея такая
    1625839949022.png
    Схема подключения такая(только на подсветку дисплея как и на светодиод PD1 стоит резистор 220 Ом).
    Схема.jpg
    Первый МК я спалил или от прямого подключения светодиода, или от случайной пере плюсовки питания. И характерно для него было тушения светодиода в пол накала(тоесть когда светодиод должен тухнуть, он горит около полу накала, хотя программатор видел его прекрасно, прошивал и тд...). Тут во вторую попытку я спаял напрямую дисплей к МК, светодиод горел нормально на дисплее пусто(как и в первые разы, хотя в протеусе все ок). После переподачи питания еще раз, болезнь та же, светодиод в пол накала, программатор МК видит, фьюзы, флеш все ок, но светодиод не тушеться, и на дисплее пусто. Основной вопрос почему нету символов на дисплее, но скорее всего это связано с выходом из троя МК. Вот думаю, как я мог второй раз накосячить ?) Будут ли у Вас какие идеи ?) Подскажите как подобные камни держат переплюсовку, насколько жывучие)
    Навсякий случай вот протеус
    1625841291917.png

    А вот и основной код:
    Код (C++):
    #define F_CPU 8000000UL
    #include <avr/io.h>
    #include <util/delay.h>

    //-------------------------------------------------------------------
    #define e1 PORTB |= 0b00001000 //Установка пина Е в 0, и в 1
    #define e0 PORTB &= 0b11110111

    #define rs1 PORTB |= 0b00000100 //Установка пина RS в 0, и в 1
    #define rs0 PORTB &= 0b11111011
    //-------------------------------------------------------------------
    void SendHalfByte(unsigned char c){
        c<<=4;
        e1;
        _delay_us(50);
        PORTB&=0b00001111;
        PORTB |= c;
        e0;
        _delay_us(50);
    }
    void sendByte(unsigned char c, unsigned char mode){
        if (mode == 0)
        {
            rs0;
        }
        else
        {
            rs1;
        }
        unsigned char Hc = 0;
        Hc=c>>4;
        SendHalfByte(Hc);
        _delay_us(20);
        SendHalfByte(c);
        _delay_us(20);
    }
    void sendStr(const char *s){
        int i;
        for(i =0; s[i] != '\0';i++){
            sendByte(s[i],1);
        }
    }
    void port_init(void){
        DDRB = 0xFF;
        PORTB = 0x00;
    }
    void lcd_clear(void){
        sendByte(0b00000001,0);
        _delay_ms(1);
    }
    void lcd_init(void){
        _delay_ms(15);//Ждем пока дисплейный контролер очухаеться
        SendHalfByte(0b00000011);
        _delay_ms(4);
        SendHalfByte(0b00000011);
        _delay_us(100);
        SendHalfByte(0b00000011);
        _delay_ms(1);
        SendHalfByte(0b00000010);
        _delay_ms(1);
        sendByte(0b00101000,0);
        _delay_ms(1);
        sendByte(0b00001100,0);
        _delay_ms(1);
        sendByte(0b00000110,0);
        _delay_ms(1);
    }
    void setPos(unsigned char x, unsigned char y){
        unsigned char addr = 0;
        addr = (0x40*y+x)|0b10000000;
        sendByte(addr,0);
    }
    int main(void){
        port_init();
        lcd_init();
        setPos(0,0);
        sendByte('n',1);
        sendStr("Hello");
        setPos(4,1);
        sendStr("Word");

        while (1){

        }
    }
     
  2. parovoZZ

    parovoZZ Гуру

    на дисплее надо контрастность покрутить.
     
  3. parovoZZ

    parovoZZ Гуру

    там он кашу из топора варили, а здесь тушёнка из светодиода не получится?
     
    Airbus нравится это.
  4. Evgeniy2017

    Evgeniy2017 Нерд

    Крутил, неа.
    Звеняйте чуть не понял мудрости, но светодиод там только для того чтобы я понял что МК не завис и тд. Но вот символов нету, светодиод при нуле не тухнет, думаю может и дисплей не различает где у МК 0, а где 1.
     
  5. parovoZZ

    parovoZZ Гуру

    тут не то, чтобы дисплей, даже я не различаю,
    то потухнет, то погаснет)
     
    Airbus нравится это.
  6. Evgeniy2017

    Evgeniy2017 Нерд

    =) В общем светодиод не прекращает излучать свет, даже при подаче низкого логического уровня. Что ранее расценивалось мной как неисправность, но уже во второй раз... Уже некая закономерность. И вот не знаю что делать, ещё за одним идти, или этот живой ?
    А хотелось сделать приборчик для разряда аккумулятора и подсчёта ёмкости =)
    Может схема или код не годиться не знаю
     
  7. parovoZZ

    parovoZZ Гуру

    да какой подсчёт емкости? Там интегралы надо брать. Тут бы с пинами вначале разобраться.
     
  8. Evgeniy2017

    Evgeniy2017 Нерд

    Да там возможно не самый точный метод, зная сопротивление нагрузки и напряжение батареи считаем ток, потом зная сколько времени прошло с прошлого замера как-то там все считается и вуаля)
    Но, взялся вначале за дисплей, как оказалось не зря) Не поддается, пока что)
     
  9. parovoZZ

    parovoZZ Гуру

    и кстате, в дурине же нельзя занимать TX и RX. Там сериал висит и она (дурина) их не отдаёт.
     
  10. Evgeniy2017

    Evgeniy2017 Нерд

    Мг, переделаю, проверю. Но работало же, до переподачи питания. Да и до работы с дисплеем просто мигал светодиодом и всё пучком. Но в любом случае, переделаю проверю.
    UPD: Но светодиод в пол накала это же не норма правильно ? Тоесть мне надо идти новый брать ?)
     
    Последнее редактирование: 29 июл 2021
  11. SergeiL

    SergeiL Оракул Модератор

    А тут разве есть хоть слово про ардуино?
    Та, от которой питается схема, может их не отдавать, на результаты это не повлияет. ;)
     
  12. b707

    b707 Гуру

    Evgeniy2017

    если схема в первом посту соответвует реальности, то неудивительно. что она не работает.
    питание на дисплее подключено наоборот.
    В электронных схемах VCC - это "плюс", а VSS - это "минус". а у вас как нарисовано??
    А вот питание подсветки включено правильно... а так как GND у них общий - получилось КЗ.

    Вот этой переполюсовкой вы уже второй МК и сохгли... и вполне вероятно, дисплей тоже.
     
    Последнее редактирование: 29 июл 2021
    SergeiL и KindMan нравится это.
  13. b707

    b707 Гуру

    не стоит. Аккумуляторы горят красиво, с вашими способностями дом сожгете :)
     
  14. KindMan

    KindMan Гуру

    На самом деле странно, обычно пишут VSS и VDD, VCC и GND. А тут намешано, народное творчество.
     
  15. b707

    b707 Гуру

    это китайский фольклор :)
    На самом деле все равно никакой неоднозначности нет, плюс и минус очевидны (для тех кто в курсе обозначений). Кто не знает - стоило хотя бы не поленится перед подключением посмотреть в википедию.
    Но нашему ТС это не пришло в голову даже после того как он подряд сжег два контроллера ...
     
  16. SergeiL

    SergeiL Оракул Модератор

    На фотографии все нормально подписано, я не посмотрел на схему.
    Если сделано, как нарисовано, то думаю мог сгореть дисплей, а тинька - может и не сдохла.
     
  17. Airbus

    Airbus Радиохулиган Модератор

    Во время прошивки нельзя. А вообще можно.
     
  18. Evgeniy2017

    Evgeniy2017 Нерд

    Не, Вами была найдена ещё одна ошибка, дисплей подключал(ну точнее опирался на неё, понятно что пини сигнальные другие, и тд...) таким образом как было в книге по старту с ардуино, ибо дисплей из выше упомянутого набора. Ссылка на книгу (ст 116). Схема подключения реальная была такой https://community.alexgyver.ru/attachments/1627318071853-png.28362/
    Как там видно первый пин подкл к земле, просто схему рисовал вечером - внимательность наше всё
     
  19. Evgeniy2017

    Evgeniy2017 Нерд

    Это один из побочных вопросов. Что может означать ситуация когда светодиод горит в пол накала когда на пине логический ноль
     
  20. b707

    b707 Гуру

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