Обзор клона меги328 -LGT8F328P

Logik
Offline
Зарегистрирован: 05.08.2014

ок. завтра попробую. 

//PMX0 |= (1<<7); PMX1|= (1<<1);

Думаешь порт ремапится на другие выводы, а в аддоне прошляпили тему.. возможно. 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Logik, Там как минимум в бутлоадере настраивается PMX0=0x47, т.е. ремапится сериал и выход 1-го таймера. Но вдруг не включился. Кстати я с ошибкой эту строчку в первый раз написал, уже исправил. 

Logik
Offline
Зарегистрирован: 05.08.2014

Пробую.

 
#include <avr/io.h>
#include <util/delay.h>

void setup() 
{
cli();
PMX0 |= (1<<7); PMX0|= (1<<1);
sei();

Serial.begin(9600);
}

// the loop function runs over and over again forever
void loop() {
 Serial.println("High");
  delay(1000);                       // wait for a second
 Serial.println("Low");
  delay(1000);                       // wait for a second
}

 

sketch_jun03a:7:1: error: 'PMX0' was not declared in this scope
 
 
Не знает оно PMX0. Я кстати, тоже не знаю. Не нашел в даташите.
Работу с сириалом напрямую, не через либы, я на следующем этапе пробовать буду, если это не заработает.
 
Пиши сюда адрес этого PMX0
dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Logik, не может не знать :) Переставляй всё с ноля. Аддон какой использовал? Выбор lgtf328P в корпусе Ssop20 только у буэзаса есть https://github.com/dbuezas/lgt8fx

Logik
Offline
Зарегистрирован: 05.08.2014

Не, переставлять не буду. Проект в работе, нафиг мне эти приключения. Выбора по корпусам в моем адоне нет. Дай адрес PMX0, попробую.

ПС. Нашел в том адоне , #define PMX0 (*((volatile unsigned char *)0xEE))

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Logik, 91 страница русского даташита

Logik
Offline
Зарегистрирован: 05.08.2014

спасибо, нашел уже ;) Сча освободится  - попробую.

 

Logik
Offline
Зарегистрирован: 05.08.2014

Помогло.

Оставлю страждущим скетч.

#include <avr/io.h>
#include <util/delay.h>

#define PMX0  (*((volatile unsigned char *)0xEE))

void setup() 
{
cli();
PMX0 |= (1<<7); PMX0|= (1<<1);
sei();

Serial.begin(9600);
}

// the loop function runs over and over again forever
void loop() {
 Serial.println("High");
  delay(1000);                       // wait for a second
 Serial.println("Low");
  delay(1000);                       // wait for a second
}

Я так понимаю, исходная загадка про нерабочий пин 8 дето в той же области памяти МК лежит. Ну и пусть пока лежит.. Хотя... Для любителей по разгадывать подсказка,  все три PMX0, PMX1 и PMX2 при старте сетапа равны 0.

IgFil
Offline
Зарегистрирован: 22.05.2021

Пожалуйста если не сложно отправьте пример работы с прерыванием 3 таймера по совпадению. Без использования выводов таймера. То есть чтоб пины PCINT18 и PCINT17 могли работать отдельно.

QuickWitted
Offline
Зарегистрирован: 30.08.2020

Всем доброго времени суток.
Так получилось, что у меня начался очередной удалённый проект (в Киеве) и я бы хотел попробовать его реализовать на LGT8F328P.
Проект относительно мелкий, но я под него переразвожу платы.
В планах три дизайна плат с одинаковым пиноутом гребёнок на процессорах
1) LGT8F328P
2) AT mega 8 / AT mega 48 / AT mega 88 / AT mega 88 / AT mega 168 / AT mega 328
3) AT mega 328 PA

Заказываться буду в ближайшие пару дней, пока на Али распродажа.
Если кому интересен данный вариант дизайна, то просьба заранее сообщить… Как придёт в Киев там его соберут и можно будет отправить желающим Новой почтой…

Моя цель - поиск единомышленников, ну и получить совет - как сделать лучше.
Так как получить профит с голых плат в кол-во меньше 50шт - просто невозможно
(детали штучно и ручная сборка в разы дороже конвейера).

Вот линк на предварительный вариант дизайна.

http://www.gorinich.uz/A1/My_LGT8F328P_board.pdf

Почему я взялся за переделку?
Что мне не нравится в Arduino Nano v3 и на его клонах от WAVGAT
1) Нет возможности поставить скоростной кварц, совместимый с высокоскоростными переходниками USB-232 (скорости 115200,460800 и 921600)
Решение – отказаться от безкварцевого ноунейма (похожего CH340G) – поставив внешнюю  плату с нормальным CH340G (пиноут гребёнки от популярной платы) и PPL (ics501m)
11059200    x2    = 22118400
14745600    x2    = 29491200
18432000    x2    = 36864000
14745600    x3    = 44236800
2) Нет импульсного стабилизатора на плате. А подсветка дисплея греет линейный.
Решение – отказаться от линейного 5в стабилизатора. Заложить место под mini360 или mini560. При необходимости это даст возможность реализовать и самоподхват включения и самоотключение.
3) Мне нужен конвертер уровней на SPI до 3,3в
Решение – заложить линейный стабилизатор 3v3 и конвертер уровней 74LVC125. Вывести 5v SPI на гребенку (пиноут от micro sd card module) и 3v3 SPI на гребенку (пиноут от adxl345). Заложить коннектор 3v3 SPI на дисплей 12864B11.
4) Хотелось бы что бы плату можно было крепить на одну гребенку (а не на две). В идеале прямо на дисплей 1602. И LED платы на SPI висит – неудобно.
Решение – заложить основную гребёнку с пиноутом от дисплея 1602. Что бы управлять подсветкой заложить NPN транзистор на ШИМ. За одно и перенести на него же LED платы.
5) пункты 3 и 4 дают возможность использовать плату как I2C или RS232 драйвер дисплея.
Дисплеи на гребенке / разъемах – 1602 и 12864B11
Дисплеи которые можно подключить проводами - SSD1331, SSD1306, Nokia 5110 module и т.д.

Отличие от не оригинальной Nano v3
Нет 6ти пинового SPI – но есть SPI на гребёнке. Т.е. если очень надо, то перепрошиваться придётся проводами.
Нет ноунеймового безкварцевого USB TTL на плате (похожего CH340G). Но есть гребёнка совместимая с популярной платой CH340G. Я заливаю своим бут блоком. При необходимости можно и ардуиновский зацепить с внешним конденсатором от CH340G на резет.

 

vkbr
Offline
Зарегистрирован: 26.06.2021

Карамба! Почему-то ссылка на русскую версию даташита не работает! Если есть у кого-нибудь скачанная, поделитесь, пожалуйста, на почту vkbr_wm@mail.ru

Благодарю заранее )

AVL4ARDUINO
Offline
Зарегистрирован: 04.01.2012

Всем привет!

LGT8F328P Pro Mini SSOP20.

-Порты здесь  рассчитаны в основном на 30мА нагрузки. Но есть некоторые у которых ток по умолчанию лишь 12 мА, но через регистр HDR (high-current push-pull) можно включить буффер, и  максимальная нагрузка на них возрастает до 80мА. Но таких портов немного, (PE5) (PE4) (PD2)  (PD1) (PD6)  (PD5) 

Как включить через регистр HDR (high-current push-pull)  буффер для  максимальной нагрузки до 80мА?

Дайте, пожалуйста, линк на русский даташит. Линк с єтого топика нерабочий.

Спасибо.

Upper
Offline
Зарегистрирован: 23.06.2020

https://2150692.ru/files/lgt8f88_168_328p_rus%20.pdf

Как результат поиска "lgt8f328p datasheet на русском"

_edKotinsky
Offline
Зарегистрирован: 05.11.2021

Ссылки на даташиты, указанные в первом посте, не работают, файл не найден. Обновите пожалуйста.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

На Али появились новые вариации плат с мк  lgt8f328p:

С разъёмом USB-C

RF-Nano

И плата с 48-ногим МК и USB-C

Цены особо не привлекательны, так что просто как новость для поддержания темы :)

И ещё любопытная штука - программатор. Судя по всему это не родной программер, а просто ардуино-прошивальщик с официальной страницы https://github.com/LGTMCU/LarduinoISP

 

 

 

 

Electrobit
Offline
Зарегистрирован: 19.09.2021

dimax пишет:
Купил поизучать що це таке вот такую платку а-ля Nano от небезызвестного китайского завода WAVGAT

Доброго времени суток. Я недавно купил https://roboshop.spb.ru/arduino/wemos-xi-alpha-8f328p-u- аналогичную плату, типа  WeMos XI Alpha 8F328P-U 

Плата подключается, но почему-то в неё не грузится скетч. Пишет ошибку про какой-то avrdude.conf

Не подскажите в чём проблема?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Electrobit, надо приводить текст ошибки полностью, а так же указать используемый аддон и версию ide. Должно быть так:

 

Electrobit
Offline
Зарегистрирован: 19.09.2021

dimax пишет:

Electrobit, надо ...

Конечно, конечно. Значит программа у меня версии 1.8.13, дополнение для работы с WeMos XI Alpha 8F328P-U брал вот здесь https://github.com/LGTMCU/Larduino_HSP Установил драйвер чипа USB и дальше всё по инструкции, получилось именно так, как  и у вас показано

Программа (любая) нормально компилируется, но при попытке её записать идёт сообщение об ошибке:

avrdude: Version 6.3-20190619
 
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
 
         Copyright (c) 2007-2014 Joerg Wunsch
 
 
 
Произошла ошибка при загрузке скетча
 
System wide configuration file is "C:\Users\User\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf"
 
avrdude: can't open config file "C:\Users\User\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf": No such file or directory
 
avrdude: error reading system wide configuration file "C:\Users\User\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf"
 
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: cannot open system clipboard
 
Это какие-то глубоко системные вещи и я в них увы не разбираюсь. Если знаете, то подскажите пожалуйста, что у меня там не так.
dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Electrobit, в принципе ваша проблема не имеет никакого отношения к данной теме. У вас бардак в профиле винды. Видимо глюкануло при каком то апдейте. Кстати говорите, что ставили родной https://github.com/LGTMCU/Larduino_HSP, а картинка от аддона Давида Буэзоса https://github.com/dbuezas/lgt8fx В принципе его, конечно, и надо ставить, т.к. родной уже не совместим с последними версиями IDE. В общем надо всё поудалять из профиля C:\Users\User\AppData\Local\Arduino15\ и поставить аддон заново. А лучше совсем всё удалить , т.е. и основную папку с ардуино ide. А то кто знает, какие там ещё проблемы всплывут.

Electrobit
Offline
Зарегистрирован: 19.09.2021

dimax пишет:

В общем надо всё поудалять из профиля C:\Users\User\AppData\Local\Arduino15\ и поставить аддон заново. А лучше совсем всё удалить , т.е. и основную папку с ардуино ide. А то кто знает, какие там ещё проблемы всплывут.

Благодарю за совет, наверно так и сделаю раз делать ничего. 

 

Logik
Offline
Зарегистрирован: 05.08.2014

Запускал DES на lgt8f328p. Выполняется быстрей атмеги328 на 8% при всем аналогичном.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Electrobit пишет:

dimax пишет:

В общем надо всё поудалять из профиля C:\Users\User\AppData\Local\Arduino15\ и поставить аддон заново. А лучше совсем всё удалить , т.е. и основную папку с ардуино ide. А то кто знает, какие там ещё проблемы всплывут.

Благодарю за совет, наверно так и сделаю раз делать ничего. 

ну как нечего, поставить portable версию нужного релиза, настроить, она в этот каталог не лезет: C:\Users\User\AppData\Local\Arduino15

Electrobit
Offline
Зарегистрирован: 19.09.2021

ua6em пишет:
ну как нечего, поставить portable версию нужного релиза, настроить, она в этот каталог не лезет: C:\Users\User\AppData\Local\Arduino15

Уже переустановил все по новой. Проблема с путями ушла, теперь бьюсь о проблему с загрузкой скетча в плату. Проблема вроде как известная и уже обсуждалась на этих форумах http://arduino.ru/forum/apparatnye-voprosy/pomogite-zapustit-wemos-xi-0

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

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

Кнопка ступенчато переключает частоты от 20Гц до 20кГц по экспоненте, всего 70 градаций. Резистор подаёт референсное напряжение на ЦАП, т.к. ЦАП у мк внутри резисторный, то амплитуда без проблем регулируется от нуля и до Vcc. Но у этого ЦАП есть существенный минус -у него высокоомный выход, поэтому если нагрузка будет низкоомная, то сигнал просядет. В идеале надо вешать ОУ на выход, но это уже существенное усложнение конструкции, идеология была как раз сделать из говна и палок. Кнопка нужна с переключающимися контактами,  что б реализовать бездребезговую коммутацию с помощью программного RS Триггера. Массив dx_table содержит 70 значений для частот от 20 Гц до 20 кГц, сначала шаг по 5 герц, после 100Гц шаг по 20Гц, после 200Гц шаг по 50 Гц, и после 1кГц шаг по 500Гц. В принципе можно сделать любое кол-во градаций на любые нужные частоты. Расчёт DDS реализован полностью на аппаратном ускорителе вычислений (uDSC), который содержит этот МК, благодаря чему удалось сделать 32-битный аккумулятор фазы и высокую скорость расчёта семплов, всего за 6 тактов мк, в результате получился очень высокий семлрейт, ~2,666 MSamples/sec при 16МГц тактовой МК.. Правда, как уже написал выше, весь кайф от скорости портит высокоомный ЦАП. При нагрузке меньше пары мегаом на высоких частотах уже начинает искривляться синус. Так что данный "прибор" рассматривается исключительно как игрушка, и вариант использования ускорителя вычислений. (Кстати в инете вообще ни слуху ни духу что кто-то, кроме меня его использовал) DDS цикл в программе не имеет выхода, поэтому, что бы была возможность изменять частоту я сделал хитрость - кнопка весит на прерывании, войдя в которое подменяется адрес возврата в стеке, и вернувшись из прерывания счётчик программ уже находится на адресе вне замкнутой петли. Скетч компилился в Arduino IDE 1.8.14 если что..

/*Генерация DDS синуса через ускоритель вычислений (uDSC) (С) dimax 2021 */
const uint16_t dx_table[]={ 
194,216,237,256,274,291,306,336,363,388,411,433,475,513,548,582,613,686,751,811,
867,920,970,1017,1062,1106,1148,1188,1227,1265,1301,1337,1372,1680,1940,2169,2376,
2567,2744,2910,3068,3218,3361,3498,3630,3757,3881,4000,4116,4229,4339,4446,4550,
4653,4753,4851,4947,5041,5134,5225,5314,5402,5488,5573,5657,5740,5821,5901,5981,
6059,6136
};

const PROGMEM  __attribute__ ((aligned (0x100))) uint8_t  sinewave[]= {
  0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
  0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
  0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf5,
  0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,
  0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
  0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc,
  0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3,
  0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x98,0x95,0x92,0x8f,0x8c,0x89,0x86,0x83,
  0x80,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,
  0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,
  0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0a,
  0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,
  0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,
  0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,0x3b,0x3e,0x40,0x43,0x46,0x49,0x4c,
  0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c
};

uint16_t dx;
int main(){
static int8_t index_mass=32; // 1кГц по умолчанию
static boolean count_direct=true; //бит направления 
static uint8_t state=1;
CLKPR = 1<<PMCE;
CLKPR =  1<<0; // F_CPU 16МГц
MCUSR=1<<SWDD;// отключить шину SWD (нужно только для ssop20)
MCUSR=1<<SWDD;// отключить шину SWD (нужно только для ssop20)
PORTC|=(1<<PC0)|(1<<PC1); //PC0 (A0) вход-подтяжка
PCMSK1=(1<<PCINT8)|(1<<PCINT9); // выбор входа прерывания - PC0 (A0)
DACON= (1<<DACEN)|(1<<DAOE)|(1<<DAVS0);

while(1) {
if (  state==1  && ((PINC&3)==2)) {state=2; }
  else if (  state==2  && ((PINC&3)==1)) {
            state=1;    
            if (count_direct==true){ index_mass <70? index_mass++ : count_direct =false; }
            if (count_direct==false){ index_mass >0? index_mass-- : count_direct =true; }
          }
       dx=dx_table[index_mass];   dds();
 }//end while(1)
} //end main

static inline void dds(){ 
  asm volatile( 
"cli;"             "\n\t"
"ldi r18,0xff;"    "\n\t" // R18 = 0xFF   
"in  r18, 0x1b;"   "\n\t" //PCIFR->R18
"out 0x1b, r18;"   "\n\t" //R18->PCIFR (PCIFR=PCIFR) отчисттить флаг прерывания, если он есть
"ldi r19,0x02;"    "\n\t" // R19 <- (1<<PCIE1)
"sts 0x0068, r19;" "\n\t" // PCICR=R19 включить прерывание 
"ldi r20, 0xC0;"   "\n\t" // config byte DSUEN
"out 0x00, r20;"   "\n\t" // DCSR= 1<<DSUEN
"out 0x10, %[dx];" "\n\t" // DSDX = dx
"out 0x11, %[dx];" "\n\t" // DSDY = dx
"ldi r20, 0x46;"   "\n\t" // r20= код операции XMACUU используется в цикле
"ldi  r26, 0xA1;"  "\n\t" // r26= адрес ЦАП используется в цикле
"ldi  r27, 0x00;"  "\n\t" // r27=0 адрес ЦАП используется в цикле
"sei;"             "\n\t"
"start:"           "\n\t" //
"out 0x01, r20;"   "\n\t" //1такт Выполнить операцию DSIR (0x46) (DA = DA + DX * DY)  
"in r28,0x39;"     "\n\t" //1такт DSAH выгрузить из аккумулятора старшее слово в r29r28
"mov r30, r29;"    "\n\t" //1такт скопировать старший байт 32бит аккумулятора
"ld  r21, Z;"      "\n\t" //1такт загрузить нужный байт из массива в r24  Z= &wave[];
"st X, r21;"       "\n\t" //1такт  послать r21 по адресу ЦАПа
"rjmp start;"      "\n\t" //1такт  уход в цикл
"nop;"             "\n\t"//место возврата из прерывания (пропустить xx команд от начала)
"cli;"             "\n\t"
:
:[wave]"z"((uint16_t)sinewave|0x4000), [dx]"r"(dx)  
:"r20","r21", "r26" );
  }



ISR (PCINT1_vect,ISR_NAKED){
  asm volatile( 
  "pop  r0;"         "\n\t"  //вытащить из стека адрес возврата -2 байта 
  "pop  r0;"         "\n\t"  //в Z регистре уже лежит адрес DDS функции
  "adiw  r30, 0x1C;" "\n\t"  //сложить его со смещением в функции, что-бы
  "push  r30;"       "\n\t"  // подменить адрес возврата из прерывания
  "push  r31;"       "\n\t"  // а вернуться на команду nop функции dds,
  "clr r0;"          "\n\t" 
  "sts 0x68,r0"      "\n\t"  // (PCICR=0; сразу отключить прерывание)
  "reti"             "\n\t"   
  : : "z"(dds) :  );
}

 

Logik
Offline
Зарегистрирован: 05.08.2014

Прикольно.

А я в 328-м с ШИМ "горбатился" для вывода анадогового синуса. )))
 
Только ОУ жизненно необходим, 2МОм на выходе не вариант. Что-то типа LM7301.

И кнопка с переключением и 70 нажатий... Я бы енкодер втулил. Тоже на прерываниях.

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

))) Лютый фокус! В раздел для новичков поместить! Для выноса мозга ))))

Учитывая что DDS намного быстрей DAC, думаю можно и проще.

Раз есть излишек производительности, в развитие проекта добавить ввод с АЦП и ДПФ. Сделать анализатор АЧХ.

ПС.

Можно по четверти таблицы синус генерить.

inline signed char TabSin(unsigned char x)
{

static const byte TabSin[64]={0, 3,  6,  9, 12, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49,
                       51, 54, 57, 60, 63, 65, 68, 71, 73, 76, 78, 81, 83, 85, 88, 90,
                       92, 94, 96, 98,100,102,104,106,107,109,111,112,113,115,116,117,
                      118,120,121,122,122,123,124,125,125,126,126,126,127,127,127};

signed char r=TabSin[((x & 0x40) ? ((x & 0x3f) ? -x : 0x3f) : x) & 0x3f];
 if(x&0x80)
   return -r;
 return r;
 }

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

с 85 строки чистое хакерство )))

Logik
Offline
Зарегистрирован: 05.08.2014

ua6em пишет:

с 85 строки чистое хакерство )))

а с 87 строки грязное хакерство )))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Logik пишет:

ua6em пишет:

с 85 строки чистое хакерство )))

а с 87 строки грязное хакерство )))

да ладно, обычное дело, команды на ходу меняют, а тут только адреса...

Logik
Offline
Зарегистрирован: 05.08.2014

ну менять команды по ходу их исполнения - древняя традиция. 

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

NikShel
Offline
Зарегистрирован: 21.01.2018

123

NikShel
Offline
Зарегистрирован: 21.01.2018

123

Electrobit
Offline
Зарегистрирован: 19.09.2021

Согласен. )

Logik
Offline
Зарегистрирован: 05.08.2014

NikShel пишет:
123

Первые шаги великого программиста!

Green
Offline
Зарегистрирован: 01.10.2015

Только это в микрофон обычно говорится.

 

Logik
Offline
Зарегистрирован: 05.08.2014

новый функционал форума. Поддержка распознавания речи. Тестирует.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013
Logik,ua6em
Я эту программу ещё в 2018 написал, но с недоделками забросил. А тут вот намедни вспомнил, и довёл всё до ума. В принципе написано было из спортивного интереса -проверить две идеи -DDS на ускорителе и возврат из прерывания в произвольное место функции, откуда произошёл вызов. То что по первой идее не было примеров ещё можно понять, т.к. чип не сильно распространённый, а вот почему второе никто не делал -странно. Ну или я не нашёл.  С реализацией второго есть нюансы, что -б избежать неконтролируемого переполнения стека нельзя выпрыгивать из прерывания куда заблагорассудится, но в данной программе всё под контролем, выйти из замкнутого ассемблерного цикла в прерывание можно только в участке из 6 команд, а возврат будет точно на 7-ю. Поэтому стеку совершенно ничего не угрожает :) 
 
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

dimax пишет:

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

ничего странного, помнишь как много шума и не только наделал знаменитый вирус "Чернобыль", а ведь миллионы программистов знали, как перевести процессор на нулевой уровень, (одной командой) но не писали таких зловредов осознанно!

Logik
Offline
Зарегистрирован: 05.08.2014

dimax пишет:

 а вот почему второе никто не делал -странно. Ну или я не нашёл.

Та делают. Это называется вытесняющая многозадачность. Таймер тикнул, поток прервался, адрес сохранили и при возврате подменили на сохраненный ранее адрес другого потока. 

QuickWitted
Offline
Зарегистрирован: 30.08.2020

dimax пишет:

Я эту программу ещё в 2018 написал, но с недоделками забросил.

Ну раз делиться проектами выходного дня, то вот мой

После экспериментов с программатором из ардуинки выяснил,
что приложив ручки прошивку программатора можно
1) собрать на arduino-1.8.13
2) для кварца 18.432МГц (бут и прошивки)
3) со скоростью 115200
4) вернуть на место вырезанную индикацию
5) впихнуть в корпус к USB хабу вместе с двумя ch340g
и после этого программатор остается рабочим
(были опасения, что поломается...)

а так как для его создания использовали
одинадцатый пример из IDE = ArduinoISP.ino
то сменой адаптера и прошивки можно одним и тем же программатором
шить как atmega328 так и LGT8FX8D

Если самим лень крутить настройки IDE, собирая готовые куски кода, то могу выложить собранный вариант прошивок...

Если чуть ещё допилить то только адаптера
(по замкнутому пину - определять адаптер)
 

Ramses2
Offline
Зарегистрирован: 08.12.2020

Если в эту плату запаять ATMega328P она станет полноценной Arduino Nano R3?

b707
Offline
Зарегистрирован: 26.05.2017

Ramses2 пишет:

Если в эту плату запаять ATMega328P она станет полноценной Arduino Nano R3?

нет.

Зачем?

Ramses2
Offline
Зарегистрирован: 08.12.2020

b707 пишет:

Ramses2 пишет:

Если в эту плату запаять ATMega328P она станет полноценной Arduino Nano R3?

нет.

Зачем?

Платка покупалась для transistor tester из соседней темы. Тогда я ничего не знал о клонах WAVGAT. Скетч тестера на этой плате не запускается, помигал светодиодами  и теперь она уже 3 год лежит без толку на полке.

Покупать оригинальный Arduino Nano за 1000+ жаба душит. Вот и подумалось, что может ATMega328P на этой плате взлетит.

То что здесь CH430A вместо FTDI232 я знаю. А какие еще коренные различия?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Ramses2 пишет:

Покупать оригинальный Arduino Nano за 1000+ жаба душит. Вот и подумалось, что может ATMega328P на этой плате взлетит.

А что, 328я мега в наличии? Зачем тогда плата? Используй "голый камень"...

А если не в наличии - то "овчинка выделки не стОит".

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Ramses2, есть вариант транзистортестера для lgt, только он не arduino-friendly. https://github.com/DurandA/transistor-tester-lgt328p
Нужно ручками настроить под требуемый дисплей и WinAvr что бы скомпилить.

Green
Offline
Зарегистрирован: 01.10.2015

"Это нереально.")))
Тут такие тупые вопросы, а вот вдруг...)

b707
Offline
Зарегистрирован: 26.05.2017

Ramses2 пишет:

 какие еще коренные различия?

как минимум напряжение питания, вся разводка платы под 3.3в

tm-svc
Offline
Зарегистрирован: 27.04.2022

Господа форумчане! Я здесь недавно, поэтому прошу не закидывать тапками.

Перечитал тему несколько раз, перепробовал всё, что можно, ставил Аддон, менял, редактировал файлы,но так и не смог завести этот таймер Т3. 

Если у кого-то работает, ткните носом, пожалуйста, может что-то упустил...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

tm-svc пишет:

Господа форумчане! Я здесь недавно, поэтому прошу не закидывать тапками.

Перечитал тему несколько раз, перепробовал всё, что можно, ставил Аддон, менял, редактировал файлы,но так и не смог завести этот таймер Т3. 

Если у кого-то работает, ткните носом, пожалуйста, может что-то упустил...

 у меня работает, пример выкладывал

tm-svc
Offline
Зарегистрирован: 27.04.2022

Вроде бы завёл таймер Т3

volatile unsigned long count = 0;

void setup() {
  Serial.begin(9600);
  //--------Таймер----------
  cli();
  /* TCCR1A = 0;// установить регистры в 0
    TCCR1B = 0;
    TCCR1B = 0b00001101; // WGM1 = 4, делитель 1024
    TIMSK1 |= (1 << OCIE1A);  // включить прерывание по совпадению таймера
    OCR1A = 15000; // установка регистра совпадения */

  TCCR3A = 0;// установить регистры в 0
  TCCR3B = 0;
  TCCR3B = 0b0011101; // WGM3 = 12, делитель 1024
  TIMSK3 |= (1 << OCIE3A);  // включить прерывание по совпадению таймера
  ICR3H = 0b01111010; // установка регистра совпадения 31248 при 32МГц
  ICR3L = 0b00010000;

  sei();
}

/*ISR(TIMER1_COMPA_vect) {
  count++;
  }//*/

ISR(_VECTOR(29)) {
  TIFR3|=1<<OCF3A;
  count++;
  Serial.print("count = ");
  Serial.println(count);
}

void loop() {
}

С использованием регистра сравнения ICR3 и WGM3 = 12 работает как и другие таймеры корректно.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

я так понял строки 17 и 18 важны?