| Форум РадиоКот 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/ |
|


