Перейти к содержанию
    

В общем, пришел к выводу, что дело скорее всего не в программе, а именно в "железе". Правда, единственное в чем я отошел от рекомендаций фирмы, это величина емкости внешнего конденсатора. Фирма рекомендует значения 0.47 - 1.0 мкф. У меня стоит конденсатор номиналом 2.2 мкф. Есть призрачная надежда, что с заменой конденсатора все встанет на свои места. Но ...

 

2.2 мкф керамика 0805 y5v?

Если да то надо заменить на электролит аналогичной ёмкости + керамику на 0.1. Звенят эти чЮдоконденсаторы(0805) на мегагерце, ничуть не хуже кварцев :cranky:.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2.2 мкф керамика 0805 y5v?

Если да то надо заменить на электролит аналогичной ёмкости + керамику на 0.1. Звенят эти чЮдоконденсаторы(0805) на мегагерце, ничуть не хуже кварцев :cranky:.

У меня стоят танталовые чип. Емкость пробовал ставить и 2.2, и 1.0. Разницы никакой нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем, дело такое. Прошил свою программу в STM8S Discovery. Все работает нормально. Так что, похоже, все упирается в STM8S103K6 (в Discovery стоит STM8S105C6). Или нет?

Да, в моих двух экземплярах STM8S - DISCOVERY стоит именно STM8S105C6, думаю и у вас тоже, чай на одной китайской фабрике сделаны. Судя по всему дело было в контроллере, хотя очень странно это все, мне как то слабо верится)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мельком просматривая Ваш код (в ассемблере ST8S не силен) обратил внимание, что Вы используете таймер 5, которого в микроконтроллере STM8S103K просто нету (смотрел даташит).

Может быть это как то влияет на работоспособность вашей программы.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мельком просматривая Ваш код (в ассемблере ST8S не силен) обратил внимание, что Вы используете таймер 5, которого в микроконтроллере STM8S103K просто нету (смотрел даташит).

Может быть это как то влияет на работоспособность вашей программы.

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

Кому вопрос? Если - мне, то я таймер вообще не использую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем привет. Решил прицепить часы реального времени ds1338 к stm8s105c4. Платка самодельная, на ней успешно работает SPI и шим. С I2C получилась проблема. Кое как контроллер все таки начал писать в дску данные. При считывании контроллер висит. При отладке посмотрел что ждет event события. Осцил показывает что sda в нуле. I2C использую аппаратный, причем в "фузах" прошил ремап на другие ноги порта. Всю голову изломал, уже готов сделать все на программном i2c, но движет какой то спортивный интерес.

Прилагаю кусок кода....

void Init_I2C(void)
{


    I2C_Init(400000, 0xD0, I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, (u8)16 );

}


//=============Читаем И2ц Часы =========================
unsigned char ds_read(unsigned char address) 
{
unsigned char data;
/* генерируем start & ожидаем event detection */
        I2C_GenerateSTART(ENABLE); // i2c_start();
        while (!I2C_CheckEvent(I2C_EVENT_MASTER_START_SENT));   // тут уже висим.......
    
        I2C_Send7bitAddress(0xD0, I2C_DIRECTION_TX);
        while (!I2C_CheckEvent(I2C_EVENT_MASTER_ADDRESS_ACKED));
        I2C_ClearFlag(I2C_FLAG_ADDRESSSENTMATCHED); // i2c_write(0xD0); 
        
         I2C_SendData(address); 
         while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED)); // i2c_write(address);

         I2C_GenerateSTART(ENABLE);
         while (!I2C_CheckEvent(I2C_EVENT_MASTER_START_SENT));      // i2c_start(); (повторный старт)
         
         
         I2C_Send7bitAddress(0xD0, I2C_DIRECTION_RX);
         while (!I2C_CheckEvent(I2C_EVENT_MASTER_ADDRESS_ACKED));
         I2C_ClearFlag(I2C_FLAG_ADDRESSSENTMATCHED);  //       i2c_write(0xD1); (читаем)

          while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_RECEIVED));
         data = I2C_ReceiveData(); //data=i2c_read(0);
        
        I2C_GenerateSTOP(ENABLE); // i2c_stop();
        return data;
}

//======================Пишем в И2ц Часы ================ (вроде как работает)
void ds_write(unsigned char address, unsigned char data)
{
        I2C_GenerateSTART(ENABLE); // i2c_start();
        while (!I2C_CheckEvent(I2C_EVENT_MASTER_START_SENT)); // 
        // I2C_SendData(0xd0);
        // while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED)); // i2c_write(address); 
        
        I2C_Send7bitAddress(0xD0, I2C_DIRECTION_TX);
        while (!I2C_CheckEvent(I2C_EVENT_MASTER_ADDRESS_ACKED));
        I2C_ClearFlag(I2C_FLAG_ADDRESSSENTMATCHED); // i2c_write(0xD0); 
        
        I2C_SendData(address); 
        while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED)); // i2c_write(address); 
         
        I2C_SendData(data); 
        while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED)); // i2c_write(data);
         
        I2C_GenerateSTOP(ENABLE); // i2c_stop();

}

void write_time_ds (void)
{
  ds_write(0x00, s);   
  ds_write(0x01, m);
  ds_write(0x02, h);
}


void  get_time_ds(void)
{
  //  
  //
  s = ds_read(0x00);
  m = ds_read(0x01);
  h = ds_read(0x02); 
}
проверяю так, сперва вызываю write_time_ds(); потом пытаюсь читать get_time_ds();
вобщем ваши мнения господа

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем спасибо за ответы....Разобрался сам. Надо перед стоп было ставить NACK

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Начал мучать потихоньку DISCОVERY, работаю с IAR, создал два проекта - один с использованием стандартной библиотеки периферии, другой без нее - так сказать все руками :) Решил запустить таймер номер 4 и поморгать светодиодиком, однако что то нифига не получается ни руками ни с использованием библиотеки, нет ли у кого примера работы с таймером 4? А то весь моск сломал, но чего то не идет :smile3046:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Начал мучать потихоньку DISCОVERY, работаю с IAR, создал два проекта - один с использованием стандартной библиотеки периферии, другой без нее - так сказать все руками :) Решил запустить таймер номер 4 и поморгать светодиодиком, однако что то нифига не получается ни руками ни с использованием библиотеки, нет ли у кого примера работы с таймером 4? А то весь моск сломал, но чего то не идет :smile3046:

для второго таймера не пойдет?

Probe.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Начал мучать потихоньку DISCОVERY, работаю с IAR, создал два проекта - один с использованием стандартной библиотеки периферии, другой без нее - так сказать все руками :) Решил запустить таймер номер 4 и поморгать светодиодиком, однако что то нифига не получается ни руками ни с использованием библиотеки, нет ли у кого примера работы с таймером 4? А то весь моск сломал, но чего то не идет :smile3046:

 

Один из первых проектов под дискавери, используется таймер 2, зажигает светодиод с частотой 1Гц по прерыванию с использованием библиотек ST. Правда использовался STVD + компилятор от raisonance. С cosmic тоже где то есть, разницы там почти нет, но искать лень. Подогнать под IAR проблем не составит.

TIM2.ZIP

Изменено пользователем topkin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ок спасибо, помучаю таймер номер 2, хотя все таки хотелось 4, поскольку из доки нифига не ясно как оно работает, дока пока только удручает своей лаконичностью :07: , а за примеры спасибо, буду ломать моск дальше :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ок спасибо, помучаю таймер номер 2, хотя все таки хотелось 4, поскольку из доки нифига не ясно как оно работает, дока пока только удручает своей лаконичностью :07: , а за примеры спасибо, буду ломать моск дальше :)

Так с TIM4 должно быть еще проще, ибо он 8-ми разрядный. Что касаемо док от ST то это да, особенно после атмела было тяжко). Но я сейчас привык и кажется что удобно и понятно) Что касаемо микроконтроллеров, то вам нужно 2 доки, одна - по сути саммари конкретно на чип с его характеристиками, а вторая более подробная - reference manual, где подробно расписана вся периферия и прочее.... Удачного освоения

 

Вот код мерцания светодиодом по прерыванию TIM4, за 5 минут написал, так что не пинайте сильно. Сам проект под STVD + raisonance в прикрепленных файлах. Частота мерцания правда чуть больше герца, с делителями баловаться не стал)

Функция main:

/* MAIN.C file
* 
* Copyright (c) 2010, topkin
*/
#include "stm8s.h"

#define LED1             GPIO_PIN_0
#define _1Hz_LSI         0xFE


//*******************************************************************************
//                                                                     Main function
//*******************************************************************************
main()
{
    
    // 1. Initialize HSI CLK
    CLK_DeInit();                                                                                                                                        // after reset Fclk = HSI / 8 = 2MHz 
        //CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);    //set prescaler 
    CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_LSI, DISABLE, DISABLE);        // set to LSI

    // 3. GPIO config
    GPIO_DeInit(GPIOD);
        // Configure PD0 (LED1) as output push-pull low (led switched on)
    GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_FAST);
    
    // 4. TIM4 initialization
    TIM4_DeInit();
    CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4, ENABLE);
    TIM4_TimeBaseInit(TIM4_PRESCALER_128,_1Hz_LSI);
    TIM4_SetAutoreload(_1Hz_LSI);
    TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
    TIM4_Cmd(ENABLE);
    
    enableInterrupts();
    
    // Main loop
    while (1){
        
    };
    
}

 

И прерывание:

 

void IRQ23Handler (void) interrupt 23
{
    GPIO_WriteReverse(GPIOD, GPIO_PIN_0);                // Blink LED1
    TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
}

BlinkLED.zip

Изменено пользователем topkin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ага спасибо заработало, все оказалось просто :) Буду мучать дальше, а вот библиотека их ненравится, больно код пухлый получается, поэтому лучше руками делать ИМХО.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ага спасибо заработало, все оказалось просто :) Буду мучать дальше, а вот библиотека их ненравится, больно код пухлый получается, поэтому лучше руками делать ИМХО.

Не за что. Библиотека - согласен, мне тоже не нравится, как более плотно сяду на STM8, так я ее под себя перепишу

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...