Например TDA7294

Форум РадиоКот :: Просмотр темы - 595 + уно на выходе вместо нулей единицы
Форум РадиоКот
https://radiokot.ru/forum/

595 + уно на выходе вместо нулей единицы
https://radiokot.ru/forum/viewtopic.php?f=57&t=194811
Страница 1 из 1

Автор:  Di123 [ Пн сен 09, 2024 08:26:23 ]
Заголовок сообщения:  595 + уно на выходе вместо нулей единицы

загружаю код где все пины у 595 должны быть в 0
но на деле они все в 1
сначала думал анализатор тупит но нет вольтметр показывает что на выходах напруга питания

Спойлер
Код:
#include "flprogUtilites.h"
#include <SPI.h>
byte _74HC5951OB1 = 0;
byte _74HC5951TB = 0;
bool _74HC5951NS = 0;
void setup()
{
    SPI.begin();
    pinMode(9, OUTPUT);
}
void loop()
{
    //Плата:1
    _74HC5951NS = 0;
    bitWrite(_74HC5951TB, 0, 0);
    bitWrite(_74HC5951TB, 1, 0);
    bitWrite(_74HC5951TB, 2, 0);
    bitWrite(_74HC5951TB, 3, 0);
    bitWrite(_74HC5951TB, 4, 0);
    bitWrite(_74HC5951TB, 5, 0);
    bitWrite(_74HC5951TB, 6, 0);
    bitWrite(_74HC5951TB, 7, 0);
    if(! (_74HC5951TB == _74HC5951OB1))
    {
        _74HC5951OB1 = _74HC5951TB;
        _74HC5951NS = 1;
    }
    if (_74HC5951NS)
    {
        digitalWrite(9, 0);
        SPI.transfer(_74HC5951OB1);
        digitalWrite(9, 1);
    }
}


но стоит подать 1 на один из пинов как всё на выходе 595 начинает соответствовать действительности

Спойлер
Код:
#include "flprogUtilites.h"
#include <SPI.h>
byte _74HC5951OB1 = 0;
byte _74HC5951TB = 0;
bool _74HC5951NS = 0;
void setup()
{
    SPI.begin();
    pinMode(9, OUTPUT);
}
void loop()
{
    //Плата:1
    _74HC5951NS = 0;
    bitWrite(_74HC5951TB, 0, 1);
    bitWrite(_74HC5951TB, 1, 0);
    bitWrite(_74HC5951TB, 2, 0);
    bitWrite(_74HC5951TB, 3, 0);
    bitWrite(_74HC5951TB, 4, 0);
    bitWrite(_74HC5951TB, 5, 0);
    bitWrite(_74HC5951TB, 6, 0);
    bitWrite(_74HC5951TB, 7, 0);
    if(! (_74HC5951TB == _74HC5951OB1))
    {
        _74HC5951OB1 = _74HC5951TB;
        _74HC5951NS = 1;
    }
    if (_74HC5951NS)
    {
        digitalWrite(9, 0);
        SPI.transfer(_74HC5951OB1);
        digitalWrite(9, 1);
    }
}


а как получить одни нули на выходе ?

Автор:  OKF [ Пн сен 09, 2024 10:34:02 ]
Заголовок сообщения:  Re: 595 + уно на выходе вместо нулей единицы

Нарисовать схему. Оформить текст - пробелы, пустые строки. Сделать смысловыми имена переменных, удалить неиспользуемые include.
Как бы, всё это мелочи, но из мелочей всё складывается.

Автор:  Di123 [ Пн сен 09, 2024 11:00:17 ]
Заголовок сообщения:  Re: 595 + уно на выходе вместо нулей единицы

я не понимаю как пишится код
это программа сгенерировала мне

Изображение

Автор:  OKF [ Пн сен 09, 2024 11:35:45 ]
Заголовок сообщения:  Re: 595 + уно на выходе вместо нулей единицы

Примерно так.
Спойлер
Код:
#include <SPI.h>


const byte ST_SP = 9;                   //pin

byte hc_old = -1;
byte hc_data;


void setup() {
    SPI.begin();
    digitalWrite(ST_SP, HIGH);
    pinMode(ST_SP, OUTPUT);
}


void loop() {
    //Плата:1
    // bitWrite(hc_data, 0, 0);
    // bitWrite(hc_data, 1, 0);
    // bitWrite(hc_data, 2, 0);
    // bitWrite(hc_data, 3, 0);
    // bitWrite(hc_data, 4, 0);
    // bitWrite(hc_data, 5, 0);
    // bitWrite(hc_data, 6, 0);
    // bitWrite(hc_data, 7, 0);
    hc_data = 0;
    if (hc_data != hc_old) {
        hc_old = hc_data;
        digitalWrite(ST_SP, LOW);
        SPI.transfer(hc_data);
        delay(1);                       //test
        digitalWrite(ST_SP, HIGH);
    }
}

У вас запись в 595 происходит при изменении данных для записи, а т.к. они изначально в нуле, то и запись не происходит. Единицы на выходах - это произвольное состояние после подачи питания. Задействуйте вход сброса и будут нули при включении.

Автор:  Di123 [ Пн сен 09, 2024 13:19:11 ]
Заголовок сообщения:  Re: 595 + уно на выходе вместо нулей единицы

да ваш код отрабатывает как надо и убедился что спаино и исправность деталей в норме
но я привязан к флпрогу

попробовал напаять резистор с MR на плюс и прижать к минусу во время загрузки мк то да на выходе нули

ещё подумал и поставил инверсный ртриг на один вход 595 теперь после загрузки 595 сбрасывает единицы автоматом

Автор:  OKF [ Пн сен 09, 2024 14:43:00 ]
Заголовок сообщения:  Re: 595 + уно на выходе вместо нулей единицы

Дело хозяйское. Но в Ардуино среде это делается примерно так:
Спойлер
Код:
#include <SPI.h>


const byte ST_SP = 9;                   //pin

byte hc_old;
byte hc_data;


void setup() {
    SPI.begin();
    pinMode(ST_SP, OUTPUT);
    hcWrite(0);
}


void loop() {
    //Плата:1
    hc_data = 0;
    if (hc_data != hc_old) {
        hc_old = hc_data;
        hcWrite(hc_data);
    }
}


void hcWrite(byte data) {
    digitalWrite(ST_SP, LOW);
    SPI.transfer(data);
    digitalWrite(ST_SP, HIGH);
}

Без использования /MR.
Либо подключайте RC цепочку на /MR для сброса. Обязано работать.

Автор:  Demiurg [ Ср сен 11, 2024 10:36:29 ]
Заголовок сообщения:  Re: 595 + уно на выходе вместо нулей единицы

У этих сдвиговых регистров есть вход разрешения выходов. В блоке инициализации вывести на регистры начальные значения и только после этого разрешить выходы. Я в своих проектах так делал. Чтобы при включении питания гарантировано не было не нужных выбросов. Так как на регистрах могут висеть разные устройства и начальные уровни могут быть разные.

Автор:  Viper_Snake [ Ср сен 18, 2024 21:38:39 ]
Заголовок сообщения:  Re: 595 + уно на выходе вместо нулей единицы

Вырвиглазно конечно FL код пишет... Задача какая у этой железки? Обязательно ли библиотеку юзать, может программный SPI организовать проще?

Автор:  Demiurg [ Вс дек 08, 2024 12:43:38 ]
Заголовок сообщения:  Re: 595 + уно на выходе вместо нулей единицы

Зашунтировать входы резисторами в соответствии с даташитом. Дело в том что, при включении питания выходы МК в состоянии Z. Попросту говоря, входы сдвигового регистра висят в воздухе. И на выходах регистров могут быть нежелательные уровни на данный момент. Какие то входы проще намертво подключить к плюсу или минусу питания. В соответствии с даташитом.
Я делаю так. У регистра есть вход разрешения выходов (см. выше, зашунтировать резистором), . И в программе сначала инициализация всего и вся. Пихаем нужные данные в регистр. И только после этого я разрешаю выходы регистра.
Я пока занят. Позже, если не забуду, выложу схему. И пример работы с регистром.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/