Jump to content
Alex_Chpook

Проблема с светодиодной матрицей с драйвером max7219

Recommended Posts

Всем привет. Хочу сделать светодиодную матрица с драйвером max7219 на Atmega324P. 

При попытке смоделировать в Proteus вылазят ошибки:image.thumb.png.bbc38e7de2e6a41377c9d62ba3e2ba8a.png

Собирал вроде всё правильно, текст в EEPROM загружен, но на матрицах выводится непонятно что и на всех одно и тоже. Может я что-то напутал, когда собирал((

Подскажите пожалуйста кто знает))

Проект со схемой Proteus и прошивку прикрепляю.
И просто схема: 

 

image.png

Строка c MAX7219.rar

Share this post


Link to post
Share on other sites

У тебя матрицы подключены неправильно

1 матрица нижние выводы r1-r8

2 матрица нижние выводы r9-r16

3 матрица нижние выводы r17-r24

и MAXы также.

 

Share this post


Link to post
Share on other sites
1 час назад, skripach сказал:

У тебя матрицы подключены неправильно

1 матрица нижние выводы r1-r8

2 матрица нижние выводы r9-r16

3 матрица нижние выводы r17-r24

и MAXы также.

Спасибо))

Вот  блин)) Видимо не внимательно прочитал, сейчас разберусь)) Думал все строки подключаются вместе))

Ещё такой вопрос, если я правильно понял то к МАКСам в ПИН ISET (для управления яркостью) нужно ставить резистор на 10кОм и конденсатор как на этой схеме:MAX7219_shema.jpg

И что мне ещё нужно чтобы в реальности можно было собрать подобное устройство? Т.к. я новичок и много не знаю, то могу предположить, что нужен диодный мост и стабилизатор напряжения для подключения к Атмеге. Может быть что-то ещё?

Edited by Alex_Chpook

Share this post


Link to post
Share on other sites

Взаимодействие устройств IoT от Microchip с облаком Google

Благодаря облачным технологиям появилась возможность реализовать сложные проекты на базе микроконтроллера путем перераспределения вычислительной нагрузки между микроконтроллером и облаком. Простые в использовании отладочные платы, такие как AVR- и PIC-IoT WG, позволяют выполнять ресурсоемкие вычисления, передавая их в облако.

Подробнее

48 минут назад, Alex_Chpook сказал:

нужно ставить резистор на 10кОм и конденсатор

 

48 минут назад, Alex_Chpook сказал:

стабилизатор напряжения для подключения к Атмеге

да нужно.

 

48 минут назад, Alex_Chpook сказал:

нужен диодный мост

смотря какой  будет блок питания

http://zelectro.cc/atmega_main

Edited by skripach
--

Share this post


Link to post
Share on other sites

Вебинар «Решения Analog Devices для гальванической изоляции. Обзор технологий и новинок» (27.04.2021)

Компания «Компэл» и Analog Devices приглашают всех желающих 27/04/2021 принять участие в вебинаре, посвященном решениям Analog Devices для гальванической изоляции. В программе вебинара: технологии гальванической изоляции iCoupler, цифровые изоляторы, технология isoPower, гальванически изолированные интерфейсы (RS-485, CAN, USB, I2C, LVDS) и другое. Вебинар будет интересен разработчикам промышленной автоматики и медицинской техники.

Подробнее

Вот что сейчас получилось.

Скрытый текст

image.thumb.png.a9ec69d84b5531f81ce76e4b6cfa3191.png

Вроде уже всё хорошо. Светят правда не ярко, я думал лучше будет. Может это как-то решить можно или это из-за Протеуса?
Вот только не понял почему матрицы пришлось переворачивать против часовой стрелки, вроде столбцы-строки как выходы:

Скрытый текст

image.png.aede649f504014dfd26d0a7a9dcb6629.png

Позже попробую сделать стабилизатор))
Ещё может кто подскажет, как матрицы мои можно в данном случае вместе соединить в Протеусе? Ведь мешают метки(соединения).:huh:

 

27 минут назад, skripach сказал:

 

да нужно.

 

смотря какой  будет блок питания

http://zelectro.cc/atmega_main

Спасибо за ссылку))

Edited by Alex_Chpook

Share this post


Link to post
Share on other sites

WDR-60 от Mean Well – источник питания на DIN-рейку со сверхшироким входом

Компания Mean Well расширяет семейство одно- и двухфазных источников питания со сверхшироким диапазоном входного напряжения, предназначенных для монтажа на DIN-рейку, дополнив его серией WDR-60. Широкий температурный диапазон работы позволяет применять их для питания промышленных систем управления и контроля, устройств промышленной автоматизации и всевозможных стационарных электромеханических устройств, где важны надежность и безопасность.

Подробнее

4 минуты назад, Alex_Chpook сказал:

Светят правда не ярко,

в протеусе яркость матриц не регулируеться

 

6 минут назад, Alex_Chpook сказал:

почему матрицы пришлось переворачивать против часовой стрелки

они так нарисованы

Share this post


Link to post
Share on other sites
29 минут назад, Alex_Chpook сказал:

Ведь мешают метки(соединения).:huh:

забей!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Пуйлу нужны не шахты на глубине, а понты завоевателя, которые находятся на поверхности. Его чем-то так напугали, что даже позабыл о воде для Крыма.  Может позже проясниться положение дел по этой капитуляции.  Если честно, то это все хреново. С моей точки зрения. Блин!!! Да у него абсолютно все версии кремлёвские.  Кремлёвский спикер.
    • Котёнок пишет какую-то из версий кремлёвских конспирологов никак не связанную с Украиной! Удивительно, но вы как-то связали!
    • Проверил на этом приборе - 2 микры накрылись.
    • Да ВП хоть и страшит, но он тоже не дурак! Ему лишняя шумиха и горячая точка тоже не нужна, как и регион Донбасса в целом. Шахтные проходы находятся на глубине около 1.5 км. Ресурсы залежей угля уже сильно истощены. Многие штольни затоплены водой, так как вовремя откачка воды не производилась, в связи с военным положением. Регион приходит к бедственному состоянию. C каждым днём положение ухудшается. И что только ждёт регион Донбасса в будущем?   
    • Слыш кулибин, рисуй точную схему своей установки. Никто не знает, что и куда вы там напихали .....и чего.   Есть куча способов реализации защит. Я уже задолбался ваш кросфорд решать...То не так, это не то...иначе решайте сами. Свою проблему.
    • @Alkarn Отличная книга. У меня все разновидности книг этого автора есть. Автор молодец. В хорошей и простой форме всё предоставляет. Я тоже, примерно столько же лет назад с изданиями этого автора познакомился. 
    • Бэдэшки один в один с КТ814,15.переходы ~ 650мв.емкостьпереходов мультиметром в прямом смещении ~100пф.у 817 -150пф Разломал кт815слева и кт817 справа совок.бдшки жалко ломать раритет.но может и сломаю попозже 817 кристалл явно больше
  • Similar Content

    • By Teo74
      Здравствуйте помогите пожалуйста разобраться. Скачал готовый проект в интернете для приёма и отображения данных на дисплее через ком-порт по протоколу NMEA. И вот пытаюсь просимулировать его в протеусе, но увы не получается, а точнее не принимает ком-порт скорее всего. Прилагаю проект и то что я набросал для протеуса. Спасибо!
      GPS.rar
    • By sunjob
      добрый день
      проект v-usb
      выкус из спецификации/инета/форумов:
      - реализация не полностью соответствует стандарту
      - работа на 100% не гарантируется
      - питание по USB / с компа может провалиться до 4-4.5В (а F_CPU идет в "притирочку" ...)  :))
      у всех рекомендованных схем подключения (3 шт) имеются те или иные очевидные минусы.



      как следствие стабильно может работать только при "определенных условиях"
      в планах поработать с библиотекой.
      для начало решил "набросать" альтернативный вариант. (так сказать, попытаться закрыть все возможные дыры в подключении)


       
      достаем помидоры, баркова, мысли, высказываемся (заранее благодарен)
      tag: v-usb, usb, avr, atmega328p, avr-gcc, linux/mac-osx
      NO atmega32u4, NO arduino pro micro etc...

    • By Ivarrr
      Помогите понять где ошибка... не получается реализовать попеременный опрос 2ух каналов АЦП. Данные с одного канала должны передаваться на первый индикатор как напряжение, а со второго, соответственно на второй индикатор как сила тока.
       
      #define F_CPU 8000000U
      #include <avr/io.h>
      #include <avr/interrupt.h>
      #include <stdlib.h>
      #include <util/delay.h>
      #define INDICATOR PORTD
      #define RANK PORTB
      unsigned int UR1=0, UR2=0, UR3=0, UR4=0; //переменные для деления на разряды значения напряжения
      unsigned int IR1=0, IR2=0, IR3=0, IR4=0; //переменные для деления на разряды значения силы тока
      int GainControl=1;
      int current_ch=0;
      float I, U;
      unsigned char voltage, current;
      unsigned int NUMS [10] = {0b11000000, 0b11111001, 0b10100100, 0b10110000, 0b10011001, 0b10010010, 0b10000010, 0b11111000, 0b10000000, 0b10010000}; // от 0 до 9
      int main(void)
      {
          DDRB=0xFF; PORTB=0x00; //ножки порта B для разряда
          DDRC=0x00; PORTC=0x00; //ножки порта C для АЦП
          DDRD=0xFF; PORTD=0xFF; //ножки порта D для индикаторов
          
          TCCR0 |= (1<<CS01); TCCR0 &= ~((1<<CS00) | (1<<CS02)); //настройка частоты таймера f/8
          TIMSK |= (1<<TOIE0); //разрешение прерываний по переполнению таймера
          TCNT0=0; // обнуление счетчика
          
          ADCSRA |= ((1<<ADEN) | (1<<ADSC) | (1<<ADPS2)); // запуск АЦП, запуск преобразования, предделитель 16
          ADCSRA &= ~((1<<ADFR) | (1<<ADIF) | (1<<ADPS1) | (1<<ADPS0)); // режим преобразвания прерывестый, флаг перобразования опущен, предделитель 16
          ADMUX |= ((1<<REFS0) | (1<<REFS1)); //источник опорного напряжения 2.56В
          ADMUX &= ~((1<<ADLAR) | (1<<MUX0) | (1<<MUX1) | (1<< MUX2) | (1<<MUX3)); // направление записи, измерительная ножка ADC0;
          
          sei(); // вкл прерывания
          while (1) 
          {
              if (ADCSRA & (1<<ADIF))
              {
                          U_Convert((U*5.00/1024)*100);
                          I_convert((I*5.00/1024)*100);
              }
          }
      }
      void U_Convert (unsigned int U_num)  //деление на разряды напряжения
      {
          UR1=U_num/100;
          UR2=U_num%100/10;
          UR3=U_num%10;
      }
      void I_convert (unsigned int I_num) //деление на разряды тока
      {    IR1=I_num/100;
          IR2=I_num%100/10;
          IR3=I_num%10;
      }
      ISR (TIMER0_OVF_vect)
      {        
          if (GainControl == 1) {INDICATOR = 0b11111110; RANK = NUMS[UR1];} //отображение 1ого разряда напряжения
          if (GainControl == 2) {INDICATOR = 0b11111101; RANK = NUMS[UR2];} //отображение 2ого разряда напряжения
          if (GainControl == 3) {INDICATOR = 0b11111011; RANK = NUMS[UR3];} //отображение 3ого разряда напряжения    
          if (GainControl == 4) {INDICATOR = 0b11110111; RANK = NUMS[IR1];} //отображение 1ого разряды силы тока
          if (GainControl == 5) {INDICATOR = 0b11101111; RANK = NUMS[IR2];} //отображение 2ого разряды силы тока
          if (GainControl == 6) {INDICATOR = 0b11011111; RANK = NUMS[IR3];} //отображение 3ого разряды силы тока
          GainControl++;
          if (GainControl > 6) GainControl=0; //  мониторинг переменной для управления затворами    
      }
      ISR (ADC_vect) 
      {
          if (current_ch == 0)
            {
                U = ADC;
                voltage = (U*2.56/1024)*100;
                ADMUX |= (1<<MUX0);
                current_ch = 1;
                ADCSRA |= (1<<ADSC);
            }
            else
            {
                I = ADC;
                current = (I*2.56/1024)*100;
                ADMUX &= ~(1<<MUX0);
                current_ch = 0;
                ADCSRA |= (1<<ADSC);
            }
      }
    • By Обычный Человек
      Микроконтроллер ATmega328p, внешний кварц 16МГц. Компилятор avr-gcc с оптимизацией O1

      Написал код для управление шаговым двигателем. Работает так: требуемая скорость задается переменной STP1_ReqSpeed, дальше с частотой 100Гц срабатывает таймер TIM0, который высчитывает с какой частотой надо подавать сигналы на вход шагового драйвера. TIM1 работает в режиме частотно импульсной модуляции и по прерыванию меняет значение пина на противоположное.

      Управление работает, скорость регулируется, но по какой то причине случаются пропуски шагов. Чаще всего во время ускорения. Количество пропусков от 0 до 4, обычно 2-3, длятся 32мс.

      Из кода вырезал неиспользуемое. Заменить прерывания на аппаратный ШИМ возможности нет. Как убрать эти пропуски?
      Осциллограммы:
       
       
    • By Карен Григорян
      Здравствуйте, товарищи форумчане!
      У меня вот такая проблемка: есть такая схема:

      По сути тут stm32 на который подаётся некоторое постоянное напряжение, а именно на вход PA1. МК получает его, приводит в цифровую форму (разрядность АЦП равна восьми) и выводит их при помощи восьми GPIO выводов, а именно PB0-PB7. Эти выводы соединены со схемой ЦАП, которая преобразует значение, полученное от stm32 обратно в аналоговую форму и выводит в пробнике R2(1).
      Проблема в том результат выводится не верный. Точнее говоря не всегда верный. Когда я подаю 1В, то на выходе получаю 0,99В, что верно. Но когда, например, подаю 300мВ, то получаю 1.8В, что совсем не верно. Код прошивки предельно прост:
        while (1)
        {
              HAL_ADC_Start_IT(&hadc1);
              HAL_Delay(10);
      }
      Код колбека прерывания:
      void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
      {
          if(hadc->Instance == ADC1) //check if the interrupt comes from ACD1
          {
            int adc = HAL_ADC_GetValue(&hadc1);
                  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,(adc>>0)&1);
                  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,(adc>>1)&1);
                  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,(adc>>2)&1);
                  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,(adc>>3)&1);
                  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,(adc>>4)&1);
                  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,(adc>>5)&1);
                  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,(adc>>6)&1);
                  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,(adc>>7)&1);
          }
              }
      На всякий случай вот настройка АЦП в stm32:

      Вот пример неправильного вычисления:

×
×
  • Create New...