реклама на сайте
подробности

 
 
9 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Проблемы с STM8
_Bill
сообщение May 19 2010, 17:58
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Проблема состоит в конфигурации портов В/В.
Имею контроллер STM8S103K. Для начала решил попробовать использовать порт как обычный счетчик и посмотреть на нем сигналы. Для этого выбрал PORTB. Сконфигуриловал его как порт вывода. В бесконечном цикле наращиваю счетчик на 1
Код
1$: inc      PB_ODR
    jra      1$

Смотрю сигналы на выводах порта. А сигналов там вовсе и нет. На паре выводов низкий уровень (true open drain), на остальных - высокий. Попробовал использовать другой порт - PORTC. Абсолютно все то же самое. Взял третий - PORTD. Вроде и работает, но не совсем. На разрядах 0, 7 высокий уровень, на остальных как и положено - меандр. Попробовал чуть усложнить код
Код
1$:  inc    PB_ODR
     mov    PD_ODR, PB_ODR
     jra    1$

Абсолютно ничего не изменилось. На разрядах порта B постоянные уровни, на разрядах 1-6 порта D - меандр.
Вот и ломаю голову - что я сделал не так? Смотрел фирменные библиотеки, каких-то особых хитростей по конфигурации портов не увидел. Можно предположить, что я при пайке спалил выходы портов. Но это маловероятно. На всякий случай решил собрать еще одну платку с контроллером и посмотреть что будет.
PS: А контроллер мне нравится все больше и больше. Вот только бы заставить его работать нормально. rolleyes.gif

Сообщение отредактировал _Bill - May 19 2010, 18:07
Go to the top of the page
 
+Quote Post
scifi
сообщение May 19 2010, 18:31
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



А что если новое значение, записываемое в порт, не успевает передёрнуть уровни, и чтение из порта возвращает старое значение (или, хуже, комбинацию старого и нового)?
IMHO, нужно, чтобы счётчик крутился во внутренней памяти, а наружу выводить копию счётчика.
Go to the top of the page
 
+Quote Post
_Bill
сообщение May 19 2010, 18:37
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(scifi @ May 19 2010, 22:31) *
IMHO, нужно, чтобы счётчик крутился во внутренней памяти, а наружу выводить копию счётчика.

И так тоже делал, разницы нет.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение May 20 2010, 06:37
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(_Bill @ May 19 2010, 20:58) *
Проблема состоит в конфигурации портов В/В.

Так выложите, как Вы конфигурируете, сравню с библиотечными.
Светодиод то моргает. rolleyes.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Stanislav_S
сообщение May 20 2010, 08:51
Сообщение #5


извечный пессимист
*****

Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125



Кстати каая у вас там ожидаемая частота должна быть на выходе?, потому как там есть еще регистры CR1 и CR2, там максимальная частота ногодрыганья задается, да и выводы в порту имеют разную допустимую частоту ногодрыганья.


--------------------
Slaves are those of this world
Given freedom to lay chains upon The Master
The wolf is no longer free
Release the chains and come for me
Go to the top of the page
 
+Quote Post
_Bill
сообщение May 20 2010, 09:14
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(Dog Pawlowa @ May 20 2010, 10:37) *
Так выложите, как Вы конфигурируете, сравню с библиотечными.
Светодиод то моргает. rolleyes.gif

Нет светодиод не мигает. Я пока все осциллографом смотрю. А код... вот он
Код
;
; ** 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$;;;
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение May 20 2010, 10:04
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(_Bill @ May 20 2010, 12:14) *
Нет светодиод не мигает.

У меня диод мигает при использовании функции из библиотеки, содержащей
GPIOx->ODR ^=(u8) mask;

А порт конфигурируется в режим GPIO_MODE_OUT_PP_LOW_FAST, т.е. вроде вижу по тексту - и в CR2 записывается 1.
После обеда гляну с отладчиком.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
_Bill
сообщение May 20 2010, 10:10
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(Dog Pawlowa @ May 20 2010, 14:04) *
У меня диод мигает при использовании функции из библиотеки, содержащей
GPIOx->ODR ^=(u8) mask;

А порт конфигурируется в режим GPIO_MODE_OUT_PP_LOW_FAST, т.е. вроде вижу по тексту - и в CR2 записывается 1.
После обеда гляну с отладчиком.

Это все в "железе" работает?
Go to the top of the page
 
+Quote Post
topkin
сообщение May 20 2010, 10:42
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 152
Регистрация: 21-12-05
Из: Москва
Пользователь №: 12 476



Взял STM8S - Discovery, подаренный на компэловском семинаре, написал простецкую программу, как раз по вашему случаю. По - поводу написания и всего остального прошу не пинать, в связи с отсутствием времени получилось вот так и все работает

/* MAIN.C file
*
* Copyright © 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;
}
}

А почему вы тут сразу 2 порта настраиваете, порт B и D:
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 ;

Сообщение отредактировал topkin - May 20 2010, 10:44
Go to the top of the page
 
+Quote Post
_Bill
сообщение May 20 2010, 11:11
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Ну, так оба порта хотел попробовать. Один не получился, сконфигурировал второй. Правда, контроллер у меня другой - STM8S103K.
Причина редактирования: Обширное, Ненужное, Бездумное цитирование
Go to the top of the page
 
+Quote Post
topkin
сообщение May 20 2010, 11:37
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 152
Регистрация: 21-12-05
Из: Москва
Пользователь №: 12 476



При беглом просмотре вашего кода ошибок не видно, может быть Stanislav_S прав про частоту? Попробуйте сделать совсем просто, к примеру как в моем коде или скомпилируйте и прошейте его, поменяв только заголовочник и порт. Плюс ватч дог у вас отключен? Может дело в нем. По умолчанию он должен быть отключен, но, если я не ошибаюсь, конфигурация периферии и ватч дога в частности, задается в options bytes и далее работа контроллера при включении питания будет зависеть от настроект в этих байтах.

Сообщение отредактировал topkin - May 20 2010, 11:38
Go to the top of the page
 
+Quote Post
_Bill
сообщение May 20 2010, 12:58
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(topkin @ May 20 2010, 15:37) *
При беглом просмотре вашего кода ошибок не видно, может быть Stanislav_S прав про частоту? Попробуйте сделать совсем просто, к примеру как в моем коде или скомпилируйте и прошейте его, поменяв только заголовочник и порт. Плюс ватч дог у вас отключен? Может дело в нем. По умолчанию он должен быть отключен, но, если я не ошибаюсь, конфигурация периферии и ватч дога в частности, задается в options bytes и далее работа контроллера при включении питания будет зависеть от настроект в этих байтах.

Я проверял программу с использованием фабричных установок (частота внутреннего генератора / 8 = 2МГц). Разницы абсолютно никакой. И потом, у порта D не работает самый старший разряд, а все остальные, за исключением самого младшего, работают. Пробовал управлять скоростью нарастания на выходе порта при помощи регистра CR2, разница в длительности фронтов заметна, но работоспособности никак не сказывается.
Что касается Watchdog таймера, то он у меня отключен. Даже если бы он был включен, то при правильной работе сигналы на выходах портов все равно были бы видны, разница между периодом Watchdog таймера и цикла программы составляет несколько порядков.
Go to the top of the page
 
+Quote Post
topkin
сообщение May 20 2010, 13:06
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 152
Регистрация: 21-12-05
Из: Москва
Пользователь №: 12 476



Уже лучше, ну если эти пины внешне не притянуты к земле или питанию, тогда мистика или что то не так с контроллером
Вообще, на этот раз, я отошел от своих принципов и использую предлагаемые библиотеки ST, в общем, солидарен с "Dog Pawlowa".

Сообщение отредактировал topkin - May 20 2010, 13:09
Go to the top of the page
 
+Quote Post
_Bill
сообщение May 20 2010, 13:23
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(topkin @ May 20 2010, 17:06) *
Уже лучше, ну если эти пины внешне не притянуты к земле или питанию, тогда мистика или что то не так с контроллером
Вообще, на этот раз, я отошел от своих принципов и использую предлагаемые библиотеки ST, в общем, солидарен с "Dog Pawlowa".

Только что попробовал другой контроллер, результат тот же самый. sad.gif
Go to the top of the page
 
+Quote Post
topkin
сообщение May 21 2010, 05:00
Сообщение #15


Частый гость
**

Группа: Свой
Сообщений: 152
Регистрация: 21-12-05
Из: Москва
Пользователь №: 12 476



Очень странно, где то трабл, чудес не бывает. Можете выложить полный код еще раз?
Go to the top of the page
 
+Quote Post

9 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 2nd August 2025 - 23:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01496 секунд с 7
ELECTRONIX ©2004-2016