Программирование STM8

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

Kinder_Surprise писал(а):Вот набросок. Для понимания хватит.
Какой еще набросок? Вы скрины снимали с работающего, по вашим уверениям, кода. Три дня назад появился скрин, где уже все работало, а теперь выясняется, что готов только набросок? Причем, набросок сей даже не компилируется без правки. Это не набросок, а один большой наброс. Классический наброс дерьма на вентилятор. Очевидно, для подбадривания ваших бэк-вокалистов, чтобы им оралось громче.

Итак, в целях покрыть собственное вранье с, якобы, рабочими скринами, сначала из левого рукава выскакивает оверклокинг, а из правого, чудесным образом появляется (ах, как кстати!) подходящий TCХО. Еще более суток уходит на лихорадочные попытки написать хоть что-то, хотя бы отдаленно напоминающее код, который мог дать такую картинку, как на фейко-скринах. Наконец с помпой выкатывается какой-то горбыль (где наш вопиющий ходячий цитатник Кернигана?), который даже не компилируется сходу. Что еще хуже, феко-код никак не может выдать тайминги, соответствующие фейко-скрину. При данных значениях data_TIM_ARR[] только в одном случае на выходе шим-канала будет меандр, а в остальных генерация будет просто отсутствовать. Фиг знает, какие там тараканы сношались в голове у автора, но именно так неудачно выбранные значения data_TIM_ARR[] говорят о том, что этот код даже не прогонялся на реальном железе. Вот так, скрины с "реального" железа есть, а прогона кода нет.

Ну и фигли, киндер вы наш развеселый, было заниматься такой примитивной лабудой столько времени? Кого вы хотели обмануть, если так бездарно сходу вляпались по самые помидоры ?
Реклама
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

Какой еще набросок?
написано ж - набросок для понимания, тут можно вспомнить цитату про ключи от квартиры где деньги лежат. Никто не обещал что будет легко.
И так: код выложен в 09:13:48, крик раздался в 16:10:00, итого попытка проверки кода длилась почти 7 часов, и так понимаю закончилась полным фиаско. На досуге тож сделаю попытку - о результатах доложу.
навеки ваш "цитатник Кернигана" :)
Реклама
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

oleg110592 писал(а):написано ж - набросок для понимания, тут можно вспомнить цитату про ключи от квартиры где деньги лежат.
Начались соревнования по прыжкам в стороны? Киндер показывал скрины, как он утверждал, с железного stm8s. Какой, нафиг, набросок? Че за детский лепет?
И так: код выложен в 09:13:48, крик раздался в 16:10:00, итого попытка проверки кода длилась почти 7 часов, и так понимаю закончилась полным фиаско.
Какая мощнейшая дедукция! Я ж не ем не сплю и не работаю, а только за этой веткой смотрю не мигая. Как увидел, так и написал тот некролог. Минут пятнадцать может прошло, а может и нет.
На досуге тож сделаю попытку - о результатах доложу.
Время пошло.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

Время пошло
имейте терпение - досуг у меня редко бывает, и за 15 минут не обещаю - не настолько гениален
Реклама
Эиком - электронные компоненты и радиодетали
Kinder_Surprise
Открыл глаза
Сообщения: 49
Зарегистрирован: Вс июн 07, 2015 20:45:22

Re: Программирование STM8

Сообщение Kinder_Surprise »

Истерика ардуинщика: Скетч не той системы и не заводится. Думать некогда и нечем.
Всё работает, как ни странно некоторым.
a5021
Перестаньте хамить, ума от этого у вас не прибавится.
Вложения
new_2.png
(68.81 КБ) 412 скачиваний
new_1.png
(67.76 КБ) 416 скачиваний
screen.PNG
(132.96 КБ) 420 скачиваний
Реклама
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

Я даже времени больше не буду тратить, чтобы с этими фейками разбираться. Вы уже показали, что кроме воплей, фейков и пустых обвинений, больше ни на что не годны. Это диагноз.
Реклама
Kinder_Surprise
Открыл глаза
Сообщения: 49
Зарегистрирован: Вс июн 07, 2015 20:45:22

Re: Программирование STM8

Сообщение Kinder_Surprise »

И правильно! Займитесь разукрашками и кубиками, по своему возрасту и развитию.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

Товарищ! Ваше фейкотворчество установлено и имеет железобетонные доказательства. Можете голосить здесь сольно в сопровождении двух баянистов, либо акапелла на три голоса, принципиально это ничего не меняет. К пустым обвинениями у меня иммунитет, но так как это, по видимому, единственное, что доставляет вам радость, то можете продолжать хоть бесконечно.
Kinder_Surprise
Открыл глаза
Сообщения: 49
Зарегистрирован: Вс июн 07, 2015 20:45:22

Re: Программирование STM8

Сообщение Kinder_Surprise »

a5021 писал(а):Товарищ! Ваше фейкотворчество установлено и имеет железобетонные доказательства.
Ну да! Если STM, TIM1 и TIM1->RCR это фейк, тогда вы действительно железобетонный.
К пустым обвинениями у меня иммунитет
К вашим пустым обвинениям у вас же и иммунитет? Логично!
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

Kinder_Surprise писал(а):Ну да! Если STM, TIM1 и TIM1->RCR это фейк, тогда вы действительно железобетонный.
Поздняк метаться, фейкомет. Презерватив, былыми стараниями, на глобус натянут полностью. Ни одного миллиметра зазора.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

ну вот появилась возможность проверить, заняло больше времени ~ 20 минут - тут конечно я тугодум. Проверял на Дискавери с S003K. Код немного подправил (чтоб было аналогично с кодом для TIM2, который ранее был):
Спойлер

Код: Выделить всё

#include "stm8s.h"

/** TIM1 Output Compare and PWM modes */
typedef enum
{
  TIM1_OCMODE_TIMING     = ((uint8_t)0x00),
  TIM1_OCMODE_ACTIVE     = ((uint8_t)0x10),
  TIM1_OCMODE_INACTIVE   = ((uint8_t)0x20),
  TIM1_OCMODE_TOGGLE     = ((uint8_t)0x30),
  TIM1_OCMODE_PWM1       = ((uint8_t)0x60),
  TIM1_OCMODE_PWM2       = ((uint8_t)0x70)
}TIM1_OCMode_TypeDef;

/** TIM1 Output Compare Polarity */
typedef enum
{
  TIM1_OCPOLARITY_HIGH               = ((uint8_t)0x00),
  TIM1_OCPOLARITY_LOW                = ((uint8_t)0x22)
}TIM1_OCPolarity_TypeDef;

/** TIM1 Output Compare states */
typedef enum
{
  TIM1_OUTPUTSTATE_DISABLE           = ((uint8_t)0x00),
  TIM1_OUTPUTSTATE_ENABLE            = ((uint8_t)0x11)
}TIM1_OutputState_TypeDef;


uint8_t data_TIM_ARR[] = {0, 127, 255};
uint8_t data_ADC[3];


INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)
{
    static uint8_t count = 0;

    TIM1->CCR1L = data_TIM_ARR[count];

    data_ADC[count] = ADC1->DRL;

    ADC1->CR1 |= ADC1_CR1_ADON;

    if(++count > 2) count = 0;

    TIM1->SR1 = 0;         
}

void TIM1_init(void) 
{
    TIM1->ARRH  = 0;                     //Частота переполнений
    TIM1->ARRL  = 255;

    TIM1->CCR1H = 0;                    // Pulse_Output = ARR - CCR1
    TIM1->CCR1L = (uint8_t) 127;

    TIM1->RCR = (uint8_t) 7;

    /* Disable the Channel 1: Reset the CCE Bit, Set the Output State , the Output Polarity */
    TIM1->CCER1 &= (uint8_t)(~( TIM1_CCER1_CC1E | TIM1_CCER1_CC1P));
    /* Reset the Output Compare Bits  & Set the Ouput Compare Mode */
    TIM1->CCMR1 = (uint8_t)((uint8_t)(TIM1->CCMR1 & (uint8_t)(~TIM1_CCMR_OCM)) |
                            (uint8_t)TIM1_OCMODE_PWM1);

    /* Set the OC1PE Bit */
    TIM1->CCMR1 |= (uint8_t)TIM1_CCMR_OCxPE;


    TIM1->CR1 |= (uint8_t)TIM1_CR1_URS;             

    TIM1->EGR |= (uint8_t)TIM1_EGR_UG;               // Update Generation
    nop();
    nop();

    TIM1->SR1 = 0;                         

    TIM1->IER |= (uint8_t)TIM1_IER_UIE;           

    TIM1->CCER1 |= (uint8_t)TIM1_CCER1_CC1E;     // Compare Mode enable
    TIM1->BKR   |= (uint8_t)TIM1_BKR_MOE; 

    TIM1->CR1 |= (uint8_t)(TIM1_CR1_CEN | TIM1_CR1_ARPE);
}

void main( void )
{
    CLK->CKDIVR = 0; 
    TIM1_init(); 
    __enable_interrupt(); 
    while(1) {};
}
лень было доставать л.а. смотрел осцилографом на ноге PC1(TIM1_CH1) - все очень похоже на предоставленную ранее картинку.
Если закомментировать строку TIM1->CCR1L = data_TIM_ARR[count]; можно наблюдать меандр с частотой около 63кГц - значит TIM1->RCR работает.

update: значения data_TIM_ARR[], имхо, подобраны весьма удачно - для обычного осцилографа наглядно - меандр, лог. "1", лог. "0", меандр и т.д по кругу.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

oleg110592 писал(а):update: значения data_TIM_ARR[], имхо, подобраны весьма удачно - для обычного осцилографа наглядно - меандр, лог. "1", лог. "0", меандр и т.д по кругу.
Не сомневаюсь, что набор "127, 217, 254, 217, 127, 37, 0, 37" будет куда, как менее удачен на ваш взгляд. Если повесить на выход канала сопротивление 470ом и кондер 0.1мкф, то на осцилле можно сразу видеть:

Изображение
Синус 1кгц в восьмибитном представлении.

Правда совсем неудачный способ визуализации? Ни тебе про "л.а." с пафосом поговорить, ни какую другую фигню задвинуть.

Объясните мне, зачем вам потребовалось тянуть ту жуткую горбуху киндера, без малейшей попытки вникнуть, что там и как делается? Там же половина написанного -- ахинея вперемешку с ошибками. Он-то отоврется, что это был "набросок", а вот вы его облекли в конечную форму и выложили в годном для употребления виде.

Я совершенно не собирался развивать эту тему, но теперь просто обязан попытаться дезавуировать эту галиматью:
Спойлер

Код: Выделить всё

#include "stm8s.h"

#define GENERATE_1KHZ_SINE
//#define GENERATE_2KHZ_SINE
//#define GENERATE_3KHZ_SINE

#ifdef GENERATE_1KHZ_SINE
  #define SAMPLE_COUNT    8
  const uint8_t pulseWidth[] = {127, 217, 254, 217, 127, 37, 0, 37}; // 1000hz
#elif defined GENERATE_2KHZ_SINE
  #define SAMPLE_COUNT    4
  const uint8_t pulseWidth[] = {127, 254, 127, 0};                   // 2000hz
#elif defined GENERATE_3KHZ_SINE
  #define SAMPLE_COUNT    12
  const uint8_t pulseWidth[] = {127, 191, 17, 254, 17, 191, 127, 64, 237, 0, 237, 63}; // 3333.33hz
#else 
  #error "No output signal specified. See GENERATE_xKHZ_SINE defs. above"
#endif

volatile uint8_t adcBuf[SAMPLE_COUNT], idx = 0;  // buffer and index

#define TIM1_CCMR_PWM_MODE_1  ((1 << 5) | (1 << 6)) // see RM0016 page 195

int main( void ) {
  
  CLK->CKDIVR = 0;                      // Reset HSI divider
  
  TIM1->ARRH  = 0;  
  TIM1->ARRL  = 255;                    // 16mhz / 256 = 62.5khz
 
  TIM1->RCR = 7;                        // Decrease update interrupt generation rate
     
  TIM1->CCMR1 |= TIM1_CCMR_PWM_MODE_1;  // Select PWM mode 1
  
  TIM1->IER |= TIM1_IER_UIE;            // Enable update interrupt

  TIM1->CCER1 |= TIM1_CCER1_CC1E;       // Enable ch.1 output
  TIM1->BKR   |= TIM1_BKR_MOE;          // Enable main output
 
  TIM1->CR1 |= TIM1_CR1_CEN;            // Start timer
 
__enable_interrupt(); 

  while(1);
}

INTERRUPT_HANDLER(TIM1_UPDATE_ISR, 11) {

  TIM1->CCR1L = pulseWidth[idx];        // set new pulse width 
  
  adcBuf[idx] = ADC1->DRL;              // store ADC result

  ADC1->CR1 |= ADC1_CR1_ADON;           // start next conversion

  if(++idx == SAMPLE_COUNT) idx = 0;    // update index
 
  TIM1->SR1 &= ~TIM1_SR1_UIF;           // reset Update Interrupt Flag
}
Не претендую, что это какой-то замечательный код, но оно хотя бы так должно было выглядеть. Хотя бы без грубых ошибок и графомании.
Вложения
IMG_4363.JPG
(123.27 КБ) 706 скачиваний
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

будет куда, как менее удачен
точно - синусоиду сложно назвать синусоидой, я б табличку побольше сделал и TIM1->RCR тут не особо видно как работает. В первоисточнике видно что прерывания следуют с периодом большим, чем период меандра.
зачем вам потребовалось тянуть
потому что, глянув RM, понял что это вполне возможно. Можно было бы сразу проверить в железе, а зачем - если человек уже проверил. Людям верить надо. Тем более я понял, что Kinder_Surprise был ранее с другим ником - его наработки по стмам мне ранее очень помогли - теперь в каждом втором моем устройстве работает его код. Например этот http://radiokot.ru/forum/viewtopic.php? ... 5#p2059325
ахинея вперемешку с ошибками
Не заметил. Где ахинея и где ошибки укажите пожалуйста (голословно?). У меня получился нормальный копипаст из наброска.
В итоге, все ж таки, согласитесь, доказано, что можно на стм8 сделать нашу задачу на одном таймере, без накладных расходов. Спасибо товарищу Kinder_Surprise - я бы сам до этого не допер (avr привычки сказываются).
Не претендую, что это какой-то замечательный код
а чего код не на любимых иаровских хидерах?
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

oleg110592 писал(а):точно - синусоиду сложно назвать синусоидой, я б табличку побольше сделал
Глупость сказали. Больше табличку делать нет никакого смысла. Это значения дискретизации ~8кгц, которые далее просто повторяются.
TIM1->RCR тут не особо видно как работает.
Работать оно может только одним образом. В табличке значения синуса для одного полного периода через каждые 45 градусов. Если эти значения будут подаваться в регистр сравнения с частотой отличной от 8кгц, то килогерца на выходе не получится.
Где ахинея и где ошибки укажите пожалуйста (голословно?).
Вы помните, что мне ответили в последний раз, когда я к вам обратился за разъяснениями?

Код в обоих случаях не очень большой. Посмотрите и сравните. Он отличается во многих местах. И тут либо я не прав, либо вы. Попробуйте выяснить, кто. Не сомневаюсь, что еще и помощники не замедлят явиться.
В итоге, все ж таки, согласитесь, доказано, что можно на стм8 сделать нашу задачу на одном таймере
Не нужно было ничего доказывать. Надо было без всех этих понтов просто описать в двух словах способ. Я просил только об этом. Нет, устроили срач и балаган. По другому не умеете видно.
а чего код не на любимых иаровских хидерах?
Если бы я его писал с нуля, я бы взял иаровские. Чтобы не устраивать путаницу, просто продолжил в том стиле, какой был до этого. Я уже говорил, что затруднений с тем, с помощью чьих заголовков обращаться к железу, не испытываю.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

a5021 писал(а):Вы помните, что мне ответили в последний раз
а вы помните как хидерчик не дали? Детские забавы.
a5021 писал(а):Посмотрите и сравните
а что сравнивать? Код то не с нуля написан. Вижу добавлены комментарии, а так все то же самое (имхо). Зачем в задаче вывода звука через шим на динамик таблицы синусоид вообще непонятно.
a5021 писал(а):...
по остальному спорить - засорять тему. На вкус и цвет все фломастеры разные.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

oleg110592 писал(а):а что сравнивать? Код то не с нуля написан. Вижу добавлены комментарии, а так все то же самое (имхо).
Ну подождем киндера. Возможно, он захочет объясниться по поводу "то же самое" или не то же. Для вас он больший авторитет.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

а смысл? Все равно ж откажетесь указывать какие именно строки кода по вашему мнению блистают. И вообще набросок дан был, чтоб облегчить нам жизнь, чисто для проверки по моей к стати просьбе, вам то на поклон не захотелось идти. Свою задачу, считаю, набросок выполнил на все 100%. А добавление комментариев и синусных таблиц никоим образом на результат проверки не влияют (имхо).

update
на всякий из рекомендаций по стилю написания программ на C:
Переменные, имеющие большую область видимости, следует называть длинными именами, имеющие небольшую область видимости — короткими.
Имена временных переменных, использующихся для хранения временных значений или индексов, лучше всего делать короткими. Программист, читающий такие переменные, должен иметь возможность предположить, что их значения не используются за пределами нескольких строк кода. Обычно это переменные i, j, k, l, m, n (для целых), а также c и d (для символов).
adcBuf->adcBuffer
idx->index, а если объявить внутри функции (он не нужен глобальным), то можно просто "i"
ну и тут имхо комментарии излишни, это ж си а не ассемблер:
if(++idx == SAMPLE_COUNT) idx = 0; // update index
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

oleg110592 писал(а):И вообще набросок дан был, чтоб облегчить нам жить
Я не просил облегчать мне жизнь. Пока киндер мутил со своими скринами, которые на поверку оказались голимейшим фейком, я просил его объяснить, каким образом он собирается обеспечивать разные частоты для шима и прерываний. Вместо нормального ответа он разразился тоннами словесного поноса и оскорблений. Очевидно, в планы киндера не входило просто поделиться своей информацией, он собирался устроить шоу и попиарится на полную катушку. Когда я это понял, стало ясно, что ответ действительно есть. Ну а когда известно, что решение существует, то найти его намного легче. В общем, я его нашел. И началась игра в кошки-мышки, последствия которой все видели. Киндеру хотелось обставить все, как можно более эффектно, на чем он, собственно и погорел.

"Набросок, чтобы облегчить вам жизнь" оказался куском шита. Если киндер захочет обсудить это, я готов объяснить, почему я так считаю. Я не позерствую и не набиваю себе цену. Просто хочу, чтобы кое-кто ответил за свои слова.
Свою задачу, считаю, набросок выполнил на все 100%.
Добавляйте только, что именно для вас.
А добавление комментариев и синусных таблиц никоим образом на результат проверки не влияют (имхо).
В этой фразе я наблюдаю недалекий блеф. Мне кажется или вы действительно считаете, что вас здесь окружают исключительно дураки?
adcBuf->adcBuffer
idx->index, а если объявить внутри функции (он не нужен глобальным), то можно просто "i"
Это и все, что вы нарыли? Не густо. Наверное есть еще смысл поискать пропущенные запятые в моих текстах. Это вторая по значимости серьезнейшая проблема в обсуждении stm8.

Вот вы бы за себя лучше ответили, великий учитель си:

Код: Выделить всё

    TIM1->ARRH  = 0;                     //Частота переполнений
    TIM1->ARRL  = 255;

    TIM1->CCR1H = 0;                    // Pulse_Output = ARR - CCR1
    TIM1->CCR1L = (uint8_t) 127;

    TIM1->RCR = (uint8_t) 7;
Какая фундаментальная разница между восьмибитным регистром ARRL и таким же регистром CCRL, что в одном случае требуется приведение типа, а в другом случае такое приведение не требуется? Да и само приведение у неопытных вызывает множество волнительных сомнений. В чем он, тот таинственный смысл преобразования типов, когда значение укладывающееся в восемь бит приводится к типу восьмибитное целое без знака, а потом результат приведения присваивается восьмибитному же регистру? Неужели где-то в сложнейших процедуре вышеприведенных присваиваний могут возникнуть нежелательные скрытые приведения к типу long, а то и float, что грозит самыми ужасными бедами несчастному программисту?
Последний раз редактировалось a5021 Сб июн 13, 2015 08:55:41, всего редактировалось 1 раз.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

вы близко к сердцу принимаете интернет (повторяюсь). Мы ж тут не в карты корову проигрываем. Какой такой блеф - написал просто то что думаю, целью было вовсе не унизить и показать кого то дураком. И пишу все сообщения тоже от своего имени - написано: "считаю", а вы на все свой счет воспринимаете.
извиняюсь за 0xFF
В общем, я его нашел.
хм, то есть нашли подтверждение ранее самостоятельно, без помощи наброска, "не верю"(с). Зачем был весь этот шум, зачем я тратил 20 минут своей жизни на ненужную проверку. И про 62.5кГц шима зачем были вопросы (ранее было) , если все знали с самого начала - издеваетесь или троллите?
Это и все
не все, написал по дружески - может пригодится
Последний раз редактировалось oleg110592 Сб июн 13, 2015 08:50:40, всего редактировалось 1 раз.
Kinder_Surprise
Открыл глаза
Сообщения: 49
Зарегистрирован: Вс июн 07, 2015 20:45:22

Re: Программирование STM8

Сообщение Kinder_Surprise »

a5021
Вы с головой хоть иногда дружите? То у вас фейк, то способ подтвердился, то вы не погли понять, то вам все плохо объясняют. За свои слова вы не можете ответить, априори, у вас слишком дофига.
Ответить

Вернуться в «Разные вопросы по МК»