|
|
  |
Проблемы с STM8 |
|
|
|
May 21 2010, 05:13
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(topkin @ May 21 2010, 09:00)  Очень странно, где то трабл, чудес не бывает. Можете выложить полный код еще раз? Нет проблем Код switch .text ; ; ** InitPorts -- функция инициализайии портов В/В ; InitPorts: ld a, #0FFh ; Initiate ports ld PB_DDR, a ; ld PB_CR1, a ; ld PD_DDR, a ; ld PD_CR1, a ; ld PD_CR2, a ; ; ld a, #LED_MASK ; Установить порт управления LED драйвером на вывод ; ld LED_DDR, a ; ; ld LED_CR1, a ; включить push-pull режим ; clr LED_PORT ; Сбросить порт ret ; ; ***** main - головная функция ***** ; _main: ldw x, #RAM_END ; Инициализировать стек ldw sp, x ; bset SWEN ; Switch clock to HSE mov CLK_SWR, #0xB4 ; callr InitPorts ; Инициализировать порты
1$: ;;; Бесконечный цикл ; btjf TIM_05, 2$ ; Проверить флаг события и переход, если не установлен ; bres TIM_05 ; Сбросить флаг ; callr Bin2BCD ; Преобразовать новое значение счетчикак для вывода ;2$: ; callr LEDout ; Вывод значения счетчика на индикатор inc PB_ODR ; Use ports a a binary counter inc PD_ODR ; ; bcpl PB_ODR, #1 ; bcpl PD_ODR, #1 ; bcpl PD_ODR, #6 ; bres PD_ODR, #0 jra 1$;;;
|
|
|
|
|
May 25 2010, 10:05
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(topkin @ May 25 2010, 13:22)  Приболел, засем долго не появлялся. Вы свою проблему так и не победили? Могу только высказать предположение. Максимальная частота изменения пина 10МГц. У вас другом за другомЭ, в общем цикле, идет инкрементирование счетчика(порта), может тут собака зарыта? Попробуйте "подергать" именно проблемными пинами через задежку. Если и это не поможет, то я не знаю даже.... Нет, проблема до сих пор не решена. Собрал вторую плату - ведет себя аналогично первой. Если говорить насчет частоты, то6 во-первых PORTD все-таки работает; во-вторых, изначально я пробовал запускать программу с внутренним генератором (16МГц / 8) и результат был тот же самый. Инкрементирование порта ни чем не отличается от инкрементирования любой другой ячейки памяти (в PIC, кстати сказать, сделано аналогично). Я пробовал по-разному изменять программу. Например, инкрементировал аккумулятор и результат пересылал в порт, инкрементировал один порт (неработающий) и результат пересылал в другой (работающий) порт. Абсолютно нет никакой разницы. Ни один порт толком не заработал. В общем, пришел к выводу, что дело скорее всего не в программе, а именно в "железе". Правда, единственное в чем я отошел от рекомендаций фирмы, это величина емкости внешнего конденсатора. Фирма рекомендует значения 0.47 - 1.0 мкф. У меня стоит конденсатор номиналом 2.2 мкф. Есть призрачная надежда, что с заменой конденсатора все встанет на свои места. Но ...
|
|
|
|
|
May 25 2010, 11:45
|
Частый гость
 
Группа: Свой
Сообщений: 152
Регистрация: 21-12-05
Из: Москва
Пользователь №: 12 476

|
Цитата(_Bill @ May 25 2010, 14:05)  Нет, проблема до сих пор не решена. Собрал вторую плату - ведет себя аналогично первой. Если говорить насчет частоты, то6 во-первых PORTD все-таки работает; во-вторых, изначально я пробовал запускать программу с внутренним генератором (16МГц / 8) и результат был тот же самый. Инкрементирование порта ни чем не отличается от инкрементирования любой другой ячейки памяти (в PIC, кстати сказать, сделано аналогично). Я пробовал по-разному изменять программу. Например, инкрементировал аккумулятор и результат пересылал в порт, инкрементировал один порт (неработающий) и результат пересылал в другой (работающий) порт. Абсолютно нет никакой разницы. Ни один порт толком не заработал. В общем, пришел к выводу, что дело скорее всего не в программе, а именно в "железе". Правда, единственное в чем я отошел от рекомендаций фирмы, это величина емкости внешнего конденсатора. Фирма рекомендует значения 0.47 - 1.0 мкф. У меня стоит конденсатор номиналом 2.2 мкф. Есть призрачная надежда, что с заменой конденсатора все встанет на свои места. Но ... Дам-с, выходит какие то проблемы с железом, поставка такая что ли, я с таким не сталкивался...
|
|
|
|
|
May 25 2010, 20:23
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 10-10-05
Пользователь №: 9 463

|
Цитата(_Bill @ May 25 2010, 16:05)  Нет, проблема до сих пор не решена. Собрал вторую плату - ведет себя аналогично первой. 2 _Bill может попробовать проверить железо на Си, а потом перейти к ассемблеру (можно и листинг подсмотреть). Аналогично Dog Pawlowa в IAR сделал пробный проектик моргания штатным светодиодом Discovery с использованием библиотек из примера - по прерыванию 2 таймера светодиодик исправно мигает. Ассемблер STM8 хорош, но на Си хороши и готовые библиотеки - не пришлось сильно копаться в даташите.
|
|
|
|
|
May 26 2010, 16:53
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(oll @ May 26 2010, 00:23)  2 _Bill может попробовать проверить железо на Си, а потом перейти к ассемблеру (можно и листинг подсмотреть). Аналогично Dog Pawlowa в IAR сделал пробный проектик моргания штатным светодиодом Discovery с использованием библиотек из примера - по прерыванию 2 таймера светодиодик исправно мигает. Ассемблер STM8 хорош, но на Си хороши и готовые библиотеки - не пришлось сильно копаться в даташите. Делал я на Си. Попробовал IAR. Разницы абсолютно никакой нет.
|
|
|
|
|
May 27 2010, 18:35
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(topkin @ May 27 2010, 11:09)  Проверил все пины D - порта, на своем ките, все работает. Что то у вас не то с партией наверное.... В партии еще осталось 8 штук. Что-то не хочется их все запаивать. А какой контроллер у вас? Может свой код выложите?
|
|
|
|
|
May 28 2010, 04:52
|
Частый гость
 
Группа: Свой
Сообщений: 152
Регистрация: 21-12-05
Из: Москва
Пользователь №: 12 476

|
Контроллер у меня STM8S105C6T6. Я предпочитаю использовать готовые библиотеки, но для вашего случая написал на прямую с регистрами, для более понятного восприятия. Код до безобразия прост, все в одном файле) Код /* MAIN.C file * * Copyright (c) 2002-2005 STMicroelectronics */
#include "STM8S105C6.h"
void GPIO_Conf(void) { PD_DDR = 0xFF; // all PD pins as output PD_CR1 = 0xFF; // all PD pins output push pull PD_CR2 = 0; // all PD pins speed 2MHz PD_ODR = 0; // all set to 0 }
void main() { unsigned long int i; GPIO_Conf(); while (1) { for(i = 0; i < 10000; i++); PD_ODR = PD_ODR ^ 0xFF; } }
|
|
|
|
|
May 28 2010, 05:31
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(topkin @ May 28 2010, 08:52)  Код до безобразия прост, все в одном файле) Попробовал как у вас. Никаких изменений. Уже не знаю что и делать.
Сообщение отредактировал rezident - May 28 2010, 23:53
Причина редактирования: Нарушение п.3.4 Правил форума.
|
|
|
|
|
May 28 2010, 13:08
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(topkin @ May 28 2010, 09:49)  Даааа, причина должна быть, чудес не бывает. А больше вариантов никаких нет? Проблема только с этим железом или другие мк от STM8 вы не пробывали? Прям мистика какае то. жаль что вы из другого города, я бы вам дал свой кит для теста, или подарил) второй такой же подаренный лежит без толку) Нет, других МК пока нет. Жду когда появится STM8S Discovery в "Промэлектроника".
|
|
|
|
|
Jun 23 2010, 09:27
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(_Bill @ May 28 2010, 17:08)  Нет, других МК пока нет. Жду когда появится STM8S Discovery в "Промэлектроника". В общем, дело такое. Прошил свою программу в STM8S Discovery. Все работает нормально. Так что, похоже, все упирается в STM8S103K6 (в Discovery стоит STM8S105C6). Или нет?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|