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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
alexvas2004
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн фев 15, 2010 05:28:51

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

Сообщение alexvas2004 »

[uquote="Martian",url="/forum/viewtopic.php?p=4640029#p4640029"]если наименования портов совпали, то ничего менять не требуется.[/uquote]
Требуется. Неправильно написал. Понятней будет так: Было-надо: PA3-PC7, PD4-PC5, PD5-PD4, PC3-PD1, PB5-PD2, PD1-PC4, PC5-PA3, PC4-PA2, PB4-PD3, PC7-PC6, PC6-PC3, PD3-PD6.
Реклама
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

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

Сообщение JackSmith »

на той странице нашел файл stm8l.h с другим размером
они одинаковые.
В onewire.c вставил

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

#define TIM_EGR_UG (1 << 0)
который был в stm8s.h
собрал c помощью sdcc 4.2

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

$ make
sdcc -DSTM8S003 -I../ -I../../ -I/usr/share/sdcc/include -mstm8 --out-fmt-ihx -c interrupts.c
sdcc -DSTM8S003 -I../ -I../../ -I/usr/share/sdcc/include -mstm8 --out-fmt-ihx -c led.c
led.c:205: warning 94: comparison is always true due to limited range of data type
led.c:246: warning 94: comparison is always true due to limited range of data type
led.c:247: warning 94: comparison is always true due to limited range of data type
sdcc -DSTM8S003 -I../ -I../../ -I/usr/share/sdcc/include -mstm8 --out-fmt-ihx -c main.c
main.c:137: warning 94: comparison is always true due to limited range of data type
main.c:139: warning 126: unreachable code
main.c:140: warning 126: unreachable code
main.c:141: warning 126: unreachable code
main.c:142: warning 126: unreachable code
main.c:143: warning 126: unreachable code
main.c:145: warning 126: unreachable code
main.c:147: warning 126: unreachable code
main.c:174: warning 158: overflow in implicit constant conversion
sdcc -DSTM8S003 -I../ -I../../ -I/usr/share/sdcc/include -mstm8 --out-fmt-ihx -c onewire.c
onewire.c:106: warning 158: overflow in implicit constant conversion
sdcc -mstm8 --out-fmt-ihx -lstm8 interrupts.rel led.rel main.rel onewire.rel -o testproj.ihx

$ stm8-size ./testproj.ihx
   text    data     bss     dec     hex filename
      0    3114       0    3114     c2a ./testproj.ihx
все-равно код грязный.
Реклама
OKF
Это не хвост, это антенна
Сообщения: 1393
Зарегистрирован: Вт июн 07, 2011 08:03:18

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

Сообщение OKF »

[uquote="Сирожа",url="/forum/viewtopic.php?p=4637168#p4637168"]Может я конечно чего-то не понимаю, но мне кажется что 600р. за один индикатор это многовато.[/uquote]
Жлоб ты Сирожа. Потрудись сам, что бы оценить затраты.
Я имею ввиду декодировку для исправления общий анод - общий катод.
Последний раз редактировалось OKF Чт окт 24, 2024 12:24:33, всего редактировалось 1 раз.
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

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

Сообщение Martian »

JackSmith писал(а):все-равно код грязный.
И это практически весь led.c менять. Не, у меня - лапки.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
alexvas2004
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн фев 15, 2010 05:28:51

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

Сообщение alexvas2004 »

Интересно как у автора то работало?
https://eddy-em.livejournal.com/80558.html
Реклама
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

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

Сообщение JackSmith »

[uquote="OKF",url="/forum/viewtopic.php?p=4640038#p4640038"]Я имею ввиду декодировку для исправления общий анод - общий катод.[/uquote]
да декодирование, это что. я посмотрел код, bres и bset можно поменять местами, но там в ODR регистр перекидывается значение из аккумулятора. и его надо инвертировать. т.е. вставлять лишнюю инструкцию. это значит что все метки полетят.
Реклама
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

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

Сообщение Martian »

[uquote="alexvas2004",url="/forum/viewtopic.php?p=4640046#p4640046"]Интересно как у автора то работало?[/uquote] Почему бы не спросить у автора? Здесь его нет, но на других форумах он есть, да и в том же ЖЖ. Надо только сказать волшебную фразу: "Винда - отстой, линукс должны все использовать в принудительном порядке".
Аватара пользователя
alexvas2004
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн фев 15, 2010 05:28:51

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

Сообщение alexvas2004 »

А есть какой нибудь алгоритм в замене? Для человека, не понимающего в языках программирования нет шансов?
Спрашивал. Ответил "А я с STM8 уже много лет не связываюсь".
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

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

Сообщение JackSmith »

[uquote="alexvas2004",url="/forum/viewtopic.php?p=4640053#p4640053"]А есть какой нибудь алгоритм в замене? Для человека, не понимающего в языках программирования нет шансов?[/uquote]
прошивка для вольтметра с али на stm8. вольтметров на этих чипах китайцы уже сто лет не продают, где вы их нашли?
Аватара пользователя
alexvas2004
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн фев 15, 2010 05:28:51

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

Сообщение alexvas2004 »

[uquote="JackSmith",url="/forum/viewtopic.php?p=4640059#p4640059"][uquote="alexvas2004",url="/forum/viewtopic.php?p=4640053#p4640053"]А есть какой нибудь алгоритм в замене? Для человека, не понимающего в языках программирования нет шансов?[/uquote]
прошивка для вольтметра с али на stm8. вольтметров на этих чипах китайцы уже сто лет не продают, где вы их нашли?[/uquote]
Это не вольтметр, а термометр на NTC. Был со сгоревшей STM. Заказывал на али пару штук микросхем несколько лет назад.
Позавчера попались на глаза. Заменил, прошил при помощи ардуино иде блинк. Заработало. А дальше оказалась засада(.
Попробую еще с помощью FLProg (человек создавал для W1209) сделать прошивку.
Кстати для интереса прошил без изменений прошивку автора кода. Индикатор подмигивает некоторыми символами. Видимо программа работает.
Так что если ничего не получится, выпаяю индикатор и на проводках с коммутирую как надо.
Аватара пользователя
Сирожа
Прорезались зубы
Сообщения: 200
Зарегистрирован: Пт ноя 16, 2012 20:17:41
Откуда: Беларусь

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

Сообщение Сирожа »

[uquote="OKF",url="/forum/viewtopic.php?p=4640038#p4640038"]Жлоб ты Сирожа. Потрудись сам, что бы оценить затраты.[/uquote]
Я конечно извиняюсь за уровень наглости моей просьбы. Но мне чтобы потрудится самому, нужно освоить программирование с ноля. А это не быстро. Поэтому слабо представляю этот процесс. Мне и вправду казалось, что людям не по наслышке знакомым с программированием не так сложно это сделать. Возможно есть какие-то специальные инструменты для этого. Только откуда мне это знать.
Я ж никого не принуждаю. Есть желание и возможность помочь, помогли. Нет, так нет. Я всё прекрасно понимаю, что не все хотят тратить своё время на безвозмездной основе.
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

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

Сообщение jcxz »

[uquote="alexvas2004",url="/forum/viewtopic.php?p=4640035#p4640035"][uquote="Martian",url="/forum/viewtopic.php?p=4640029#p4640029"]если наименования портов совпали, то ничего менять не требуется.[/uquote]
Требуется. Неправильно написал. Понятней будет так: Было-надо: PA3-PC7, PD4-PC5, PD5-PD4, PC3-PD1, PB5-PD2, PD1-PC4, PC5-PA3, PC4-PA2, PB4-PD3, PC7-PC6, PC6-PC3, PD3-PD6.[/uquote]В led.c редактировать (для перназначения ног) нужно только этот маленький участок:

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

/************* arrays for ports *************/
// PA, mask: 0x02, PA1
static U8 PA_bits[18] = {0,2,2,2,0,0,0,2,0,0,0,0,0,2,0,0,2,0};
#define PA_BLANK 0x02
// PB, mask: 0x30, PB4:0x10=16, PB5:0x20=32
#define PB_BLANK 0x30
static U8 PB_bits[18] = {0,32,0,0,32,16,16,0,0,0,0,48,16,32,16,16,48,48};
// PC, mask: 0xF8, PC3:0x08=8, PC4:0x10=16, PC5:0x20=32, PC6:0x40=64, PC7:0x80=128
#define PC_BLANK 0xF8
static U8 PC_bits[18] = {40,232,48,160,224,160,32,232,32,160,96,32,56,32,48,112,240,96};

/**
 * Setup for writing a letter
 * @param ltr - letter (0..17 for 0..F, - or h | 0x80 for DP, any other value for 'space')
 */
void write_letter(U8 ltr){
  U8 L = ltr & 0x7f;
  PD_ODR = 0; // turn off digits 1..3
  if(L < 18){ // letter
    PA_ODR = PA_bits[L];
    PB_ODR = PB_bits[L];
    PC_ODR = PC_bits[L];
  }else{ // space
    PA_ODR = PA_BLANK;
    PB_ODR = PB_BLANK;
    PC_ODR = PC_BLANK;
  }
  if(ltr & 0x80){ // DP
    PC_ODR ^= 0x20;
  }
}

/**
 * Turn on anode power for digit N (0..3: PA3, PD6, PD4, PD1 -- A0x08, D0x40, D0x10, D0x02)
 * @param N - number of digit (0..3), if other - no action (display off)
 * @return
 */
void light_up_digit(U8 N){
  switch(N){
    case 0:
      PA_ODR |= 0x08;
    break;
    case 1:
      PD_ODR |= 0x40;
    break;
    case 2:
      PD_ODR |= 0x10;
    break;
    case 3:
      PD_ODR |= 0x02;
    break;
  }
}
Другое дело, что данные порты/пины где-то ещё могут использоваться. Как минимум - они где-то настраиваются изначально. Это тоже нужно искать.

PS: Стиль исходника конечно говнокодерский: Порты/пины прибиты гвоздями в коде. :facepalm:
В нормально написанном исходнике они должны быть вынесены в дефайны. И тогда назначение ног меняется только в одном месте, а не по всему коду лазить-править.
Впрочем - качественно писать исходники - это же не кричать "винда - мастдай, линух - рулёз". Здесь голова нужна....
Аватара пользователя
alexvas2004
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн фев 15, 2010 05:28:51

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

Сообщение alexvas2004 »

[uquote="jcxz",url="/forum/viewtopic.php?p=4640649#p4640649"]В led.c редактировать (для перназначения ног) нужно только этот маленький участок:[/uquote]
Спасибо, но ваш пример кода из другого проекта (под названием led) и немного другой. Или при применении 3х значного индикатора они все взаимозаменяемые (led.c)из разных проектов?
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

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

Сообщение Martian »

Дак ктож знает? я тоже этот файл смотрел, по Вашей же ссылке...
Аватара пользователя
alexvas2004
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн фев 15, 2010 05:28:51

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

Сообщение alexvas2004 »

[uquote="Martian",url="/forum/viewtopic.php?p=4640785#p4640785"]Дак ктож знает? я тоже этот файл смотрел, по Вашей же ссылке...[/uquote]
По ссылке там несколько проектов. А во вложении был один, который нужен. Вот он отдельно:
Вложения
led.c
(7.55 КБ) 785 скачиваний
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

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

Сообщение Martian »

Ну, практически тоже самое.
Там в самом начале нарисована цифра сегментная и таблица ей соответствующая. Так вот в Вашем случае надо не просто изменить некоторые биты в этой таблице, а внести новые ряды, так как Вы часть новых портов внесли. А часть наоборот, вынесли, и это тоже надо учитывать.
В общем, вмешательство достаточно большое.
Аватара пользователя
alexvas2004
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн фев 15, 2010 05:28:51

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

Сообщение alexvas2004 »

[uquote="Martian",url="/forum/viewtopic.php?p=4640838#p4640838"]Там в самом начале нарисована цифра сегментная и таблица ей соответствующая. Так вот в Вашем случае надо не просто изменить некоторые биты в этой таблице, а внести новые ряды, так как Вы часть новых портов внесли. А часть наоборот, вынесли, и это тоже надо учитывать.[/uquote]
В таблице поменял. Ниже, где упоминаются номера портов в явном виде, тоже. Но что то никаких изменений не получил.
И ещё просьба: не могли бы Вы скомпилировать hex или ihx из исходных файлов, выложенных мной ранее? Чтобы сравнить с файлом автора, находящимся с теми файлами.
А то как то странно: при прошивке с помощью stvp файла ihx автора в устройстве подмигивают одни символы, а при компиляции и прошивке с помощью Microsoft VS Code исходников из той же папки, горят другие символы.
И ещё вопрос: в Microsoft VS Code во вкладке "выходные данные" сообщение "Не удалось разрешить конфигурацию с compilerPath: "C:/Users/Comp/.platformio/packages/toolchain-sdcc/bin/sdcc.exe"" является ошибкой или это норма?
Аватара пользователя
Сирожа
Прорезались зубы
Сообщения: 200
Зарегистрирован: Пт ноя 16, 2012 20:17:41
Откуда: Беларусь

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

Сообщение Сирожа »

Это опять я. :)
Можете помочь код для ардуино уно скомпилировать в .хекс для загрузки в атмегу 328.
Спойлер

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

/*
 Demo Code for HDSP 2111 using SN74LS595N
 Matt Joyce < matt@nycresistor.com >
 Mark Tabry
 */
 
//Pin connected to latch pin (ST_CP) of 74HC595
const int latchPin = 8;
//Pin connected to clock pin (SH_CP) of 74HC595
const int clockPin = 12;
////Pin connected to Data in (DS) of 74HC595
const int dataPin = 11;
const int ce = 5;
const int wr = 6;
const int a2 = 4;
const int a1 = 3;
const int a0 = 2;
const int rst = 10;
const int a3 = 9;
int incomingByte = 0;
 
void setup() {
  //set pins to output because they are addressed in the main loop
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
  pinMode(a0, OUTPUT);
  pinMode(a1, OUTPUT);
  pinMode(a2, OUTPUT);
  pinMode(a3, OUTPUT);
  pinMode(rst, OUTPUT);
  pinMode(ce, OUTPUT);
  pinMode(wr, OUTPUT);
  digitalWrite(ce, HIGH);
  digitalWrite(wr, HIGH);
 
  resetDisplay();
}
 
void resetDisplay() {
  digitalWrite(rst, LOW);
  delayMicroseconds(1);
  digitalWrite(rst,HIGH);
  delayMicroseconds(150);
  digitalWrite(a3, HIGH);
}  
 
void writeDisplay(char *input) {
//  Serial.println(input);
  for (int i=0; i<8; i++) {    
    digitalWrite(a0, (1&i)!=0?HIGH:LOW);
    digitalWrite(a1, (2&i)!=0?HIGH:LOW);
    digitalWrite(a2, (4&i)!=0?HIGH:LOW);
       
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, input[i] );
    digitalWrite(latchPin, HIGH);
    delay(1);    
    digitalWrite(ce, LOW);
    delay(1);
    digitalWrite(wr, LOW);
    delay(1);
    digitalWrite(wr, HIGH);
    delay(1);
    digitalWrite(ce, HIGH);
    delay(1);
  }
}
 
void scrollDisplay(char *words) {
  char buffer[9];
  int i = 0;
  while(words[i] != 0){
    boolean blank = false;
    for (int j = 0; j<8; j++) {
      if ( !blank && words[i+j] == 0 ) {
        blank = true;
      }
     
      if ( blank ) {
        buffer[j] = ' ';
      }
      else {
        buffer[j] = words[i+j];
      }
    }
    buffer[8]=0;
    writeDisplay(buffer);
    delay(200);
    i++;
 }
 
}
 
void loop() {
    char intro[] = "        Test ";
    scrollDisplay(intro);
    delay(2000);
}
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

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

Сообщение Martian »

Раздел называется "Программирование STM8". Подумайте, попадает ли под это "код для ардуино уно скомпилировать в .хекс для загрузки в атмегу 328.".
Аватара пользователя
Сирожа
Прорезались зубы
Сообщения: 200
Зарегистрирован: Пт ноя 16, 2012 20:17:41
Откуда: Беларусь

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

Сообщение Сирожа »

Извиняюсь. Не доглядел. Как раз таки на название раздела и посмотрел. А как эта тема называется забыл.
Ответить

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