Страница 375 из 628

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вт окт 30, 2012 08:40:09
nikityan
Спасибо, попробую)

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вт окт 30, 2012 08:49:07
Kavka
Alexeyslav писал(а):Нельзя. По той простой причине, что как правило FAT-таблица отъедает приличный кусок. У вас есть микросхема FRAM на 4Мб чтобы под файлы реально использовать только два?
На 4Мб использовать FAT32 ??? Вы наверное забыли, что такое дискета 5.25" на 1.2Мб. :) Сколько там занимал FAT ? Никак не половину дискеты! Пусть и FAT12.
Человек спрашивал о возможности как таковой, а не о рациональности этого действа.

На счёт эмуляции FAT - повеселили. :)

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вт окт 30, 2012 08:55:25
kocmoc
Привет котоводы!
Решил написать в этой теме дабы не плодить топики, я новичёк на этом форуме (хотя странно форум уже давно знаю и даже регался по моему) и у мня вопрос по поводу книг (поиск юзал хотя признаюсь через строку т.к. времени в обрез), есть ли книги по мк51 под си/с++?
В частности меня интересует не столько книга, сколько система комманд С/С++ (общение с МК), если есть у вас выложите сюда плз.
Спс!

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вт окт 30, 2012 09:17:10
Gudd-Head
kocmoc писал(а):система комманд С/С++ (общение с МК)
Таки вроде команды-то у всех общие. Это уже от конкретного компилятора будут зависеть нюансы.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вт окт 30, 2012 11:55:28
kocmoc
Спойлер
  • Код: Выделить всё

    #include "stm32f10x.h"
    #include "STM32_Init.h"
    #include "rtl.h"
    
    #define Set_PortC_Pin_8_output ((GPIOC->CRH |= 0x2)|(GPIOC->CRH &= ~0xC))
    #define Set_PortC_Pin_9_output ((GPIOC->CRH |= 0x20)|(GPIOC->CRH &= ~0xC0))
    
    const unsigned long led_mask[] = { 1UL<<8, 1UL<<9 };
    
    OS_TID t_LED1;
    OS_TID t_LED2;
    
    void DevsInit(void)
    {
       RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
    
       Set_PortC_Pin_8_output;
       Set_PortC_Pin_9_output;
    
    }
    
    void LEDOn (uint32_t num)
    {
       GPIOC->BSRR = led_mask[num];
    }
    
    void LEDOff (uint32_t num)
    {
       GPIOC->BRR = led_mask[num];
    }
    
    __task void f_LED1 (void)
    {
       while (1)
       {
          LEDOn (0);
          os_dly_wait (200);
          LEDOff (0);
          os_dly_wait (200);
       }
    }
    
    __task void f_LED2 (void)
    {
       while (1)
       {
          LEDOn (1);
          os_dly_wait (400);
          LEDOff (1);
          os_dly_wait (400);
       }
    }
    
    __task void init (void)
    {
       os_tsk_prio_self (100);
    
       t_LED1 = os_tsk_create (f_LED1, 20);
       t_LED2 = os_tsk_create (f_LED2, 20);
    
       os_tsk_delete_self ();
    }
    
    int main (void)
    {
       SystemInit ();
       stm32_Init();
       DevsInit();
       os_sys_init(init);
       return 0;
    }
    
    Если нужен UART, можно использовать STM32_Init.c. Использовать его можно и как визард, наставить нужных галочек, а можно прямо из него выдрать готовый код инициализации uart-а. Типа такого:
    Код
    RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;                                    // enable clock for Alternate Function
    AFIO->MAPR   &= ~(1 << 2);                                            // clear USART1 remap
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;                                   // enable clock for GPIOA
    GPIOA->CRH   &= ~(0xFFUL  << 4);                                      // Clear PA9, PA10
    GPIOA->CRH   |=  (0x0BUL  << 4);                                      // USART1 Tx (PA9)  alternate output push-pull
    GPIOA->CRH   |=  (0x04UL  << 8);                                      // USART1 Rx (PA10) input floating
    RCC->APB2ENR |= RCC_APB2ENR_USART1EN;                               // enable clock for USART1
    USART1->BRR  = (0x9C << 4);
    USART1->BRR  = 0x4;
    USART1->CR1 |= (USART_CR1_RE | USART_CR1_TE);                       // RX, TX enable
    USART1->CR1 |= USART_CR1_UE;                                        // USART enable
    
    А чтобы потом вывести что нить, достаточно дописать две короткие функции:
    
    Код
    void UartSendChar (char ch)
    {
        while (!(USART1->SR & USART_SR_TXE)) {} 
        USART1->DR=ch;
    }
    
    void UartSendStr (char *str)
    {
        while (*str != 0) 
        {
            UartSendChar (*str++);
        }
    }
    
Это вырезка с форума, нашёл первый попавшийся код, это что за дефы? - #define Set_PortC_Pin_8_output ((GPIOC->CRH |= 0x2)|(GPIOC->CRH &= ~0xC))
#define Set_PortC_Pin_9_output ((GPIOC->CRH |= 0x20)|(GPIOC->CRH &= ~0xC0)) - т.е. извиняюсь за выражение что, какие то люди хрен знает что понаписали в хидерах и я должен знать что GPIOC->CRH |=0х20 - установка битов какого то именованного порта (имя которого они придумали и зыбили это в хидеры, а я должен эти имена выучить?)? Какая то бессмыслица получается .... поправьте если не так.
ЗЫ а спойлер реально сделать тут?

Реально. Gudd-Head

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Ср окт 31, 2012 20:01:42
DX168B
Господа коты, есть маленькая проблема.
Имеем ATMEGA8 с драйвером RS485 на ногах USARTа.
Функция передачи следующая:

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

void usart_send(char *s, unsigned char Ln)
{
        PORTC |= (1<<PC3);             // RS485 на передачу

        for(uchar r = 0;r<Ln;r++)
        {
          while(!(UCSRA & (1<<UDRE))){_wdr();} //Тупим, пока не освободится регистр UDR
          UDR = s[r];
        }

        PORTC &= ~(1<<PC3);             // RS485 на прием
}
 
Все вроде нормально, пока шлю подряд массив за массивом. Но как только заканчиваю с передачей, то в конце теряются два байта.
Как я понял, это связано с FIFO буфером передачи USARTа, который как раз имеет размер в два байта.
Мне приходится пихать в конце передачи еще два нуля, чтобы решить эту проблему. Можно-ли как-то без этого?


UPD:
Вот я дурынь!!! :oops: Я отрубаю передатчик RS485 раньше времени. Все, проблема понятна.
Правильнее так:

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

void usart_send(char *s, unsigned char Ln)
{
        PORTC |= (1<<PC3);             // RS485 на передачу

        for(uchar r = 0;r<Ln;r++)
        {
          while(!(UCSRA & (1<<UDRE))){_wdr();} //Тупим, пока не освободится регистр UDR
          UDR = s[r];
        }
}
///////////////////////////////////////////////////////////////////////////////
void USART_TXC_vect() //Прерывание по окончанию передачи
{
        PORTC &= ~(1<<PC3);             // RS485 на прием
}

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт ноя 01, 2012 04:11:28
shinji2009
привет. скажите пожалуйста... вот есть контроллер с включенным ср, и он не отдает программу... а что, нельзя прошить отдельно фьюзы, сбросив ср, и считать программу?

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт ноя 01, 2012 06:09:11
akl
Низзя. :dont_know:

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт ноя 01, 2012 09:23:21
shinji2009
akl
а почему? в программе к программатору можно же убрать все галочки кроме «шить фьюзы»... что произойдет при попытке? ошибку выдаст?

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт ноя 01, 2012 09:53:10
ploop
На то она и защита. Можно стереть всё, и использовать контроллер как новый. А считать нельзя.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт ноя 01, 2012 10:29:28
rus084
возможно ли написать прошивку мк , чтобы вместо карбюратора поставить инжектор

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт ноя 01, 2012 10:32:42
ploop
Вообще-то МК от кварца тактируется. Иногда от внутреннего или внешнего генератора. Но чтобы от карбюратора или инжектора :shock:
Не, не слышал.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт ноя 01, 2012 11:15:14
pyzhman
"О сколько нам открытий чудных..." :)

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт ноя 01, 2012 11:52:31
rus084
ну чтобы карбюраторный мотор переделать на моновпрыск ?

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт ноя 01, 2012 12:00:35
pyzhman
(Устало): можно.
(Я уже слышу, как вопрошавший рассказывает чётким пацанам, что читал на форуме, что "можно". Эти пацаны потом докапываются до местного кулибина. Кулибин им отвечает, мол вы чё, рехнулись? Пацаны ему - в интернете все это делают. Кулибин ныряет и пишет (мне) сделай! ps. А я-то думаю, откуда ноги растут у этой бредятины...)

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт ноя 01, 2012 15:13:10
rus084
програмно нужно только высчитывать момент и длительность открытия форсунки и момент искроообразования .
больше ничего ведь ненадо?
з.ы. спрашиваю только теоретически

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт ноя 01, 2012 16:41:05
Chettuser
Где то в старых журналах "За рулём" описывалась система зажигания чуть ли не на транзисторах с похожей функциональностью. Возможно имеет смысл переделать под МК. Но делать Вы скорее всего будете на AVR - я тут не помощник, увы!

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт ноя 01, 2012 17:48:29
rus084
а что насчет ATtiny13 ?

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт ноя 01, 2012 20:11:48
vitalik_1984
Вот блин зажатый народ какой, может на паре транзисторов тогда слепить?Зачем себя ограничивать одним килобайтом, когда есть Мк на 20 рублей дороже и 8 килобайт памяти на борту
Вообще-то МК от кварца тактируется. Иногда от внутреннего или внешнего генератора. Но чтобы от карбюратора или инжектора
это больше похоже на стеб какой то, вопрос был не о том откуда тактировать Мк, а о том, как написать прошивку для Мк, чтобы его использовать вместо блока управления двигателем.
Кстати я где то висел в похожей теме, но там хотели всего лишь угол опережения регулировать.
Там как то тема заглохла, наверно терпения не хватило доделать.

И вообще есть ветка специально для авто-вело-мото.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт ноя 01, 2012 20:19:47
Alexeyslav
убрать все галочки кроме «шить фьюзы»... что произойдет при попытке?
Ничего не произойдет. Биты защиты можно установить только один раз и сбрасываются только после окончания процесса полной очистки. В первых контроллерах были баги позволяющие разлочить контроллер без стирания программы - играться с напряжением питания и временем прерывания процесса стирания так что биты защиты стирались а программа нет - но этот процесс требует тонкой настройки на сотне подопытных из одной партии. Сейчас эта проблема решена и просто так не разлочишь. Остается только один выход - при помощи напильникаазотной кислоты снимать кристалл послойно и электронным микроскопом считывать состояния ячеек, потом по известной топологии кристалла восстановить содержимое FLASH-памяти побитно. Но сам представь сколько для этого потребуется ресурсов. Стоит ли того содержимое памяти контроллера?