16 сообщений в этой теме

55nlo    0

Написать программу Асм атмега 1284.

Фрагмент: после команды считать рабочий регистр (в котором может появиться число от 1 до 50) каждому числу  соответствует 4 значения  (это таблица) их нужно загрузить в четыре рабочих регистра для дальнейшей обработки)

 Где лучше хранить таблицу?

Пример: считали 48  числа 5; 8; 21; 25

                Считали 31 числа 4;  9; 11; 35

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
ARV    212

Таблицу лучше хранить в памяти программ. Хотя для упомянутого микроконтроллера, да еще и "на асме" таблицу и в ОЗУ хранить можно. Просторно же...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
55nlo    0

В ОЗУ?? И после каждого включения программировать?

Грешно издеваться над больным человеком! 

(Кавказкая пленница)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Храните в памяти программ. Чтобы загрузить таблицу в ОЗУ, ее надо будет прочитать откуда-то, опять же из памяти программ.

Тем паче, если требуется один раз (только при включении), то решается как "два пальца об асфальт"...

Вам кусок кода нужен или вся программа?

Изменено пользователем Геннадий

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
солар    116

Хранить, конечно же, во флеш. Вытягивать LPM. Обращайтесь, напишу.

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
55nlo    0
В 16.05.2017 в 15:01, солар сказал:

Хранить, конечно же, во флеш. Вытягивать LPM. Обращайтесь, напишу.

Думаю, нужно написать пять программ.

1) Приём  сигналов с геркона  по сложному алгоритму. Эта прога должна активироваться при появлении перепада на герконе. 

 После приёма этого сигнала в Регистре ввода появляются значения от 1-50

 2)  - Прога это значение (дергает затвор полевика) выдаёт на виброзвонок 

Вибро звонки есть двух типов мотор и эл. Магнит.  Я полагаю применить эл. Магнит, т.е. выдавать меандр на затвор.

Потом запускается 3-я прога,  

за ней 4-я и  5-я   (они аналогичные) в них и нужны табличные соответствия.

Первое время 2-я прога выдает данные с результатов 3-й проги,  после 20 приемов сигнала Регистра ввода, данные с результатов 4 - й выводятся  на виброзвонок (посредством 2-й проги) после 50 приемов сигнала результаты выводятся с 5-й проги. и в SLEEP.

Пробуждение либо от геркона, либо кнопки тогда повтор последней выдачи сигналов.

Получается три таблицы  (к 3;4 и 5 проги) ко всем нужно будет обращаться, поочерёдно при выполнении.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mcuprog    2

Берите большой лист бумаги и рисуйте блок-схему алгоритма.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
солар    116
20 часов назад, 55nlo сказал:

Приём  сигналов с геркона  по сложному алгоритму.

Геркон дает либо 0, либо 1. Сложного здесь ничего нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
55nlo    0
1 час назад, солар сказал:

Геркон дает либо 0, либо 1. Сложного здесь ничего нет.

Да , Вы описали  простой алгоритм!   А сложный к примеру: азбука морзе.

У меня другой ранее  задавался вопрос:

Есть рабочий регистр  ввода Rввода в нём появляется некое число (1-40)

Есть ещё четыре рабочих регистра R1;R2;R3;R4

Объяснить и написать программу (фрагмент),  которая вносила в четыре регистра значения (от 1 до 63) на каждое значение R ввода своё табличное значение.

Условный пример:

Rвв = 1, тогда   R1=18;  R2=6;  R3=47;  R4=60

Rвв = 2, тогда   R1=11;  R2=61;  R3=4;  R4=50

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Rвв = 40, тогда   R1=33;  R2=26;  R3=7;  R4=6

Указать стоимость.

13 часа назад, mcuprog сказал:

Берите большой лист бумаги и рисуйте блок-схему алгоритма.

Пожалуйста нарисуйте блок-схему алгоритма:

Объяснить и написать программу (фрагмент),  которая вносила в четыре регистра значения (от 1 до 63) на каждое значение R ввода своё табличное значение.

Условный пример:

Rвв = 1, тогда   R1=18;  R2=6;  R3=47;  R4=60

Rвв = 2, тогда   R1=11;  R2=61;  R3=4;  R4=50

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Rвв = 40, тогда   R1=33;  R2=26;  R3=7;  R4=6

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mcuprog    2
9 часов назад, 55nlo сказал:

Пожалуйста нарисуйте блок-схему алгоритма:

Объяснить и написать программу (фрагмент),  которая вносила в четыре регистра значения (от 1 до 63) на каждое значение R ввода своё табличное значение.

Условный пример:

Rвв = 1, тогда   R1=18;  R2=6;  R3=47;  R4=60

Rвв = 2, тогда   R1=11;  R2=61;  R3=4;  R4=50

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Rвв = 40, тогда   R1=33;  R2=26;  R3=7;  R4=6

Пожалуйста. Именно этот фрагмент изображается в виде мааленького прямоугольничка с надписью:

вход: Rвв

выход: R1,R2,R3,R4

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
солар    116

Ответил в личку.

17 часов назад, 55nlo сказал:

А сложный к примеру: азбука морзе.

ИК светодиод тоже имеет два состояния - излучает/не излучает. Ничего сложного. Посылка для того же телека, например, смесь 0 и 1. Ничего сверхестественного.

И приемник ИК излучения имеет на выходе либо 0, либо 1. Расшифровать посылку от пульта управления - тоже ничего сверхестественного.

Изменено пользователем солар

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
55nlo    0
24 минуты назад, солар сказал:

Ответил в личку.

ИК светодиод тоже имеет два состояния - излучает/не излучает. Ничего сложного. Посылка для того же телека, например, смесь 0 и 1. Ничего сверхестественного.

И приемник ИК излучения имеет на выходе либо 0, либо 1. Расшифровать посылку от пульта управления - тоже ничего сверхестественного.

Действительно всё наглядно и просто! Но азбуку морзе не воспринимает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
солар    116

Азбуку Морзе воспринимает программа, написанная для приёма азбуки Морзе, а не программа, которая

В 16.05.2017 в 12:58, 55nlo сказал:

после команды считать рабочий регистр (в котором может появиться число от 1 до 50) каждому числу  соответствует 4 значения  (это таблица) их нужно загрузить в четыре рабочих регистра для дальнейшей обработки)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
55nlo    0

Кто прошивал Atmega 1284 выводы внутрисхемного программирования ?Какие (проверенные) с 1-6?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
солар    116
8 часов назад, 55nlo сказал:

проверенные

Проверенные описаны в даташите. РВ5 - MOSI, РВ6 - MISO, РВ7 - SCK. Само собой /RESET и питание.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
55nlo    0
В 20.05.2017 в 06:43, солар сказал:

Проверенные описаны в даташите. РВ5 - MOSI, РВ6 - MISO, РВ7 - SCK. Само собой /RESET и питание.

Отлично! Готовлю Т. З. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: SDD39
      Изучая пару месяцев язык программирования Си  , решил попробовать написать данную программу для закрепления и углубления знаний.
      В чём её суть.  Ну к примеру нам надо спаять мост Винна. Для него , как известно нужны пары деталей конденсаторов и резисторов с желательно близкими значениями. Особенно трудно обычно подобрать конденсаторы но не в этом сейчас суть.  Так вот , пускай у нас есть несколько десятков  конденсаторов  и мы можем соединив параллельно по два конденсатора получить нужный номинал . Но при этом имеется вероятность , что подобрав пары  должным образом , мы можем получить весьма низкое отклонение  подобранных  пар , соединённых последовательно или параллельно.  Так вот , если к примеру у нас имеется 31 промеренный конденсатор (что я сделал и занеёс в таблицу для МБМ конденсаторов 0.1 мкФ , чтобы иметь практические данные это не так уж долго и вполне осуществимо на практике)  , то количество только возможных не повторяющихся  комбинаций будет составлять (31*31 - 31)/2= 465 . Просчитать  такое  количество  в ручную , отсеить невозможные комбинации где один и тот же конденсатор присутствует более одного раза , да ещё выбрать наилучший вариант задача компьютера , а не человека.   И он справляется с ней  за секунду.
      По скольку в программировании я не очень силён то какой то графической оболочки у меня нет (я вообще пока не знаю как это делается). Так же не придумал способа ввода данных в программу. Наверно надо будет попробовать как то делать это из текстового файла. Результаты программа уже выводит на экран и создаёт текстовый файл Rezalts.txt с результатами вычислений. Хотелось бы что бы опытные программисты взглянули на мой труд и указали на недочеты , ошибки и возможные решения в лучшем направлении. В общем буду благодарен за незлобные указания моих ошибок . Прилагаю исходник на Си и сопутствующие файлы данных и результатов в архиве . А так же скриншот результатов вывода на экран.
       
       
       
       
         
       
       
       
       
        
       

      Rezalts.rar
    • Автор: ximik_se
      Всем привет.

      Решил сделать небольшую домашнюю метеостанцию.

      Есть приемник с экраном, куда выводится инфа (построено на ATMEGA 328P) и есть передатчик, который посылает инфу по возудху (построено на ATtiny85).

      В передатчике использую обычные DHT22. В принципе качество чуть ниже среднего. Но главный недостаток - порой сбоит, присылая данные в 2 раза больше предидущих, потом опять приходит в себя. и так повторяется постоянно.

      При этом время между измерениями не меньше 20 сек.

      В общем заказал я себе с Китаюшки более точные датчики - 

      CJMCU-1080 HDC1080
      Вещица прекрасная, но общается по I2C.

      А библиотеку рабочую под нее я смог найти только одну "ClosedCube_HDC1080.h" и никаких модификаций под ATtiny я найти не смог.

      Для ее работы соответственно нужен Wire.h

      В общем решил я его поковырять самостоятельно, хоть и не прогер. Забрался во внутренности ClosedCube_HDC1080.cpp и везде заменил Wire на TinyWireM (некий аналог Wire для ATtiny).

      И у меня даже получилось считывать валжность, но вот вместо температуры приходит гадость. Ибо при компиляции Arduino IDE ругалась на строку (я ее ниже в коде закомментировал)
      uint8_t buf[4]; for (int i = 1; i < (seconds*66); i++) { TinyWireM.beginTransmission(_address); TinyWireM.write(0x00); TinyWireM.endTransmission(); delay(20); TinyWireM.requestFrom(_address, (uint8_t)4); // TinyWireM.readBytes(buf, (size_t)4); } Ошибку пишет следующую:

      \ClosedCube_HDC1080.cpp: In member function 'void ClosedCube_HDC1080::heatUp(uint8_t)':

      \ClosedCube_HDC1080.cpp:81:13: error: 'class USI_TWI' has no member named 'readBytes'

      TinyWireM.readBytes(buf, (size_t)4);
      Может есть ребята более понимающие в коде и сумеющие победить эту проблему, чтобы и температуру этот датчик смог передавать через ATtiny85.

      Вот полный текст файла ClosedCube_HDC1080.cpp (уже замененный ну и строчка закоментирована):
      #include <TinyWireM.h> #include "ClosedCube_HDC1080.h" ClosedCube_HDC1080::ClosedCube_HDC1080() { } void ClosedCube_HDC1080::begin(uint8_t address) { _address = address; TinyWireM.begin(); // Heater off, 14 bit Temperature and Humidity Measurement Resolution TinyWireM.beginTransmission(_address); TinyWireM.write(CONFIGURATION); TinyWireM.write(0x0); TinyWireM.write(0x0); TinyWireM.endTransmission(); } HDC1080_Registers ClosedCube_HDC1080::readRegister() { HDC1080_Registers reg; reg.rawData = (readData(CONFIGURATION) >> 8); return reg; } void ClosedCube_HDC1080::writeRegister(HDC1080_Registers reg) { TinyWireM.beginTransmission(_address); TinyWireM.write(CONFIGURATION); TinyWireM.write(reg.rawData); TinyWireM.write(0x00); TinyWireM.endTransmission(); delay(10); } void ClosedCube_HDC1080::heatUp(uint8_t seconds) { HDC1080_Registers reg = readRegister(); reg.Heater = 1; reg.ModeOfAcquisition = 1; writeRegister(reg); uint8_t buf[4]; for (int i = 1; i < (seconds*66); i++) { TinyWireM.beginTransmission(_address); TinyWireM.write(0x00); TinyWireM.endTransmission(); delay(20); TinyWireM.requestFrom(_address, (uint8_t)4); // TinyWireM.readBytes(buf, (size_t)4); } reg.Heater = 0; reg.ModeOfAcquisition = 0; writeRegister(reg); } float ClosedCube_HDC1080::readT() { return readTemperature(); } float ClosedCube_HDC1080::readTemperature() { uint16_t rawT = readData(TEMPERATURE); return (rawT / pow(2, 16)) * 165 - 40; } float ClosedCube_HDC1080::readH() { return readHumidity(); } float ClosedCube_HDC1080::readHumidity() { uint16_t rawH = readData(HUMIDITY); return (rawH / pow(2, 16)) * 100; } uint16_t ClosedCube_HDC1080::readManufacturerId() { return readData(MANUFACTURER_ID); } uint16_t ClosedCube_HDC1080::readDeviceId() { return readData(DEVICE_ID); } uint16_t ClosedCube_HDC1080::readData(uint8_t pointer) { TinyWireM.beginTransmission(_address); TinyWireM.write(pointer); TinyWireM.endTransmission(); delay(9); TinyWireM.requestFrom(_address, (uint8_t)2); byte msb = TinyWireM.read(); byte lsb = TinyWireM.read(); return msb << 8 | lsb; }  
    • Автор: VisualNT
      Доброго времени суток!
      Может кто-нибудь объяснить, в чём смысл и преимущества использования специализированных программаторов для STM32 типа ST-Link и клонов, работающих по интерфейсам SWD/JTAG, если записать флеш можно прямо по UART/ISP или быстрее по USB (при его наличии)?
      Я так понимаю, что программаторы, кроме записи в память, ещё умеют выполнять отладку - и это их единственное отличие.
      А если отладка не нужна? Вернее, часто ли она используется при написании каких-нибудь маленьких прикладных программ типа реле времени? Я собираюсь развести свою печатную плату для STM32F107, а потом хочется поэкспериментировать с STM32F407ZGT - в них в обоих есть USB интерфейс, они оба есть в списке поддерживаемых USB DFU (согласно AN 3156). Но на форуме я прочитал, что пока все сидят на дискавери, в основном из-за того, что в ней есть встроенный программатор ST-LINK прямо на плате, но почему его наличие так важно и не заменяется возможностью программирования по UART/ISP или по USB? Есть ли какое-либо отличие кроме возможности отладки? Может быть, как и в случае со фьюзами у AVR, у STM32 есть какие-то функции/настройки, которые можно использовать/изменять только программатором ST-LINK?
      И да, разве скорость программирования по USB будет существенно ниже, чем по тому же JTAG или SWD?
      Заранее спасибо за ответы! Заранее предупрежу, чот с микроконтроллерами я раньше работал, но вот от ST что-то более-менее делал только на STM32F030...
    • Автор: Batai
      Здравствуйте, весь день голову ломаю...Нужно подружить PIC16F72 с Flash-памятью AT45DB161D.  В порядке эксперимента для начала хочу прочитать регистр статуса и идентификатор памяти, но она ничего совсем не отвечает .  вот код:
      ;========== Настройка МК ============================================== SetMCU CALL Pause1s CLRF STATUS CLRF PORTA CLRF PORTB CLRF PORTC BSF STATUS, RP0 ;Банк 1 MOVLW b'00000000' ;Значение для направления PORTA MOVWF TRISA ;Настройка PORTA MOVLW b'00000000' ;Значение для направления PORTB MOVWF TRISB ;Настройка PORTB MOVLW b'00010000' ;Значение для направления PORTC MOVWF TRISC ;Настройка PORTC ;========== Инициализация SPI =========================================== BCF STATUS, RP0 ;Банк 0 CLRF SSPSTAT MOVLW b'00100000' ;Значение для настройки SPI MOVWF SSPCON ;Настройка SPI BSF PORTC, 6 ;Установка CS0 ;========== Чтение идентификатора AT45DB161D BCF PORTC, 6 ;Опускаем CS MOVLW 0x9F ;Опкод для чтения идентификатора CALL SPI_Trans ;Обмен SPI MOVLW 0x00 ;Ждем ответ CALL SPI_Trans MOVF SPI_RX,0 ;Принятый байт в аккумулятор MOVWF PORTB ;Вывод значения BSF PORTC, 6 ;Завершение передачи stop GOTO stop ;Бесконечный цикл ;========== Передача по SPI ====================================================================================================== SPI_Trans MOVWF SSPBUF ;Передача байта CALL Pause1ms ;Ожидание завершения передачи MOVF SSPBUF, 0 ;Копирование принятого байта MOVWF SPI_RX RETURN В протеусе с SPI_Debugger-ом все работает, если подставить на место ответа какое-нибудь значение, оно выводится в портБ. Но в железе с подключенной памятью ничего не происходит. Выводы памяти RESET, WP соединены с питанием. Питание 3,3В. Помогите, пожалуйста)
    • Автор: Дуч
      Здравствуйте.
      Есть два программатора Pickit3. Один из них китайский клон, другой оригинал от Microchip.
      Китаец стирает калибровочную константу Pic12f629, а оригинал прошивает и проблем нет. Подскажите причину стирания константы?
  • Сообщения

    • Старые 6п3с с фигурным баллоном , осталось : Лампы №1 и №2 по 500р. Лампы № 3, 17, 19  по 800р. ................................................................... Добавлю  , лампы 6ф3п IV-1964г. 8 шт. из ЗИПа  по 120р.  
    • С наводками я разобрался. Но звук двухтактного двигателя все равно возникает,  если работает вся лампа предусилителя. До какого то момента звук прибавляется нормально,  гитара  играет  , если вращать дальше начинается  тарахтение, звук практически пропадает и надо обратно крутить регулятор. Если крутить дальше частота тарахтения чуть  возрастает. Даже если предусилитель на минимуме,   при вращении основного регулятора  громкости начинает тарахтеть. Если работает один триод такого нет при любой громкости. Играя на гитаре заметил, что низкие вообще не регулируются, средние слабо на частоте примерно 700-1000, высокие и брайт хорошо работают. Проверил еще раз по схеме ошибок вроде нет. Конденсаторы пересчитывать ?
    • От любой экономки 15-20 Ватт... - подойдётт"в лоб" и не надо ничего ремонтировать...  В крайнем случае  - в кругляше - балласте от экономки поменять конденсатор между нитями накала. На ... побольше ёмкости. 
    • ...от сука не пошла/о, пульсирует все, трансформатор выходной жужит  как старая шарманка завывая и похрюкивая пулсьсируя, ну очень ему не нравится что то. Выходные лампы бегают до 10-12мА мотая стрелку миллиамперметров, так же ФИ стрелки дёргаются в такт. ООС убрал, был перекос что одна выходная 20-25мА мотала стрелку, вторая пару мА было всего  и так же на ФИ с одним анодом чуть ли не мертвый был. При отключении  ООС как бы почти одинаково работатют плечи ФИ и выходных, но  дёрнается все жуть с частотой раза 2 в секунду стрелки пляшут.  Может ошибочно запаялся где, завра уже буду искать ошибки. НО правильно ли я припаял выходник? На А1 и А2 подал аноды ламп выходных, на В+ подал питание, эти контакты закорочены между собой на трансе. Оут-  припаял на массу. Пока Оут+ висит в воздухе, ООС убрал с нее. ОутГ не подключал и не знаю что это. А1-А2 = 233 Ом, между А1 (А2) и В+ половина,  т.е 116 и 117 Ом. Оут+ и Оут-  0.5 Ом. А между ОутГ и каждой Оут+ и Оут- по 0.6 Ом. Динамик не подключал.  Общее потребление канала пулсьсирует так же,  почти от 0 до 25мА приблизительно.     
    • не получается подправить код ( найти эти инклуды   #include <mega8.h>
      #include <delay.h>
               #include <>
      unsigned char blink = 0; void main(void)
      {
      PORTB=0x02;
      DDRB=0x01;
      while (1)
      if (PINB.1==1)
      { blink=1; }
      if (PINB.3==1)
      { blink=0; }
      if (blink) {PORTB.0=1;  }
      else { PORTB.0=0;  }
      }      
    • Вот расшифровка. Защита не включена.