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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Chettuser

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

Сообщение Chettuser »

Поскольку параллельная тема посвящённая программированию PIC на C заглохла погажу своими вопросами здесь:
Приспичило перейти с MCC18 на HT-PICC, вот сижу, разбираюсь. Возник вопрос, ответ на который пока нигде не нашёл:
Как в конструкции:

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

{
   lcd_init();
   lcd_goto(0);   // select first line
//   sprintf(A,"12345");
   lcd_puts(A);
   }
вывести символ на 1602 (HD44780) с помощью lcd.h (lcd.c)?
Неужели без

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

sprintf(A,"12345");
не обойтись? Я как посмотрел сколько она памяти себе отхапала... пришёл в дикий "восторг"... :evil:
Другого способа превратить значение переменной в строку нет?
Спасибо.
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

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

Сообщение Chip115 »

всем привет!
пишу прошивку для silab С8051F410.
не могу укротить таймер 3.
Смысл таков. Надо что бы таймер 3 генерировал прерывание каждую 1мс. переходил в подпрограмму обработки прерывания и там посылал данные через UART,который кстати тож сидит на свое прерывании. Я установил высоки приоритет прерывания по УАПП.
Сейчас имею то, что прерывание от таймера срабатывает и обрабатывается. Данные уходят , но дальше прога не работает. такое чувство что она застревает после того как отправит данные. Сброс влага есть. не пойму в чем дело?

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

//----------
// UART0_Init
//----------
//
// Return Value : None
// Parameters   : None
//
// Configure the UART0 using Timer1, for <BAUDRATE> and 8-N-1.
//----------

void UART0_Init (void)
{
   SCON0 = 0x10;                       // SCON0: 8-bit variable bit rate
                                       //        level of STOP bit is ignored
                                       //        RX enabled
                                       //        ninth bits are zeros
                                       //        clear RI0 and TI0 bits
   if (SYSCLK/BAUDRATE/2/256 < 1) {
      TH1 = -(SYSCLK/BAUDRATE/2);
      CKCON |=  0x08;                  // T1M = 1; SCA1:0 = xx
   } else if (SYSCLK/BAUDRATE/2/256 < 4) {
      TH1 = -(SYSCLK/BAUDRATE/2/4);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 01
      CKCON |=  0x01;
   } else if (SYSCLK/BAUDRATE/2/256 < 12) {
      TH1 = -(SYSCLK/BAUDRATE/2/12);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 00
   } else if (SYSCLK/BAUDRATE/2/256 < 48) {
      TH1 = -(SYSCLK/BAUDRATE/2/48);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 10
      CKCON |=  0x02;
   } else {
      while (1);                       // Error.  Unsupported baud rate
   }

   TL1 = TH1;                          // init Timer1
   TMOD &= ~0xf0;                      // TMOD: timer 1 in 8-bit autoreload
   TMOD |=  0x20;
   TR1 = 1;                            // START Timer1
   TX_Ready = 1;                       // Flag showing that UART can transmit
   IP |= 0x10;                         // Make UART high priority
   ES0 = 1;                            // Enable UART0 interrupts
}

void Timer3_Init(void)
{
  TMR3CN    = 0x04;               // òàéìåð3 â 16 áèò. ðåæèìå âêëþ÷åí. ïðåääåëèòåëü ÷àñòîòû 1:12
  EIE1      = 0x80;               // Âêëþ÷èòü ïðåðûâàíèå îò òàéìåðà3
  TMR3L     = 0x3F;            // 06         10 ms
  TMR3H     = 0xB0;            // f8 1 ìñ

}
void main (void)
{

   
   PORT_Init ();                       // Initialize crossbar and GPIO
   OSCILLATOR_Init ();                 // Initialize oscillator
   
   UART0_Init();
   Timer3_Init();

   
   EA = 1;                             // Enable global interrupts
   PS0 = 1;            // высокий приоритет уапп
   CS1=0;
   
   
   MC3PHAC_IndefSend();                                          // Эта и последующие ф-ции отправляют данные по уапп. до сюда прога не доходит
   MC3PHAC_Send(cmd_FORW,sizeof(cmd_FORW));
   delay_ms(3000);
   MC3PHAC_Send(cmd_STOP,sizeof(cmd_STOP));
   delay_ms(3000);
   MC3PHAC_Send(cmd_REW,sizeof(cmd_REW));
   while (1)
   {   
      
   }; 

}
//----------
// Timer3_ISR
//----------

void Timer3_ISR (void) interrupt 14
{
TMR3CN=TMR3CN^0x80;                 //сбрасываем флаг  TF3H   10000100 xor 10000000

    MC3PHAC_Identification();      // посылка данных 9 байт
   
       
}

вот наиболее критичные,на мой взгляд , куски кода.
Помогите, пожалуйста, разобраться... .
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
К@Т
Говорящий с текстолитом
Сообщения: 1573
Зарегистрирован: Сб окт 09, 2010 12:33:48
Откуда: Незалежная

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

Сообщение К@Т »

*Trigger* писал(а):Картинки побольше нет??? :kill: :kill: :kill:

Есть;)).Нажимаеш цитатату,копируеш адрес картинки и переходиш по нему.))!
У кошки 4 ноги и хвост-плюс,минус,вход,выход,а хвост-земля.....Надо переходить с китайской бурды на канифоль.......[url=http://infobar.hsdn.org/][img]http://static.hsdn.org/infobar/350x60.gif[/img][/url]
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

aam писал(а):Обязательно ли соединять на плате все 3 ноги цифрового питания или достаточно подключить одну-две?

Вы тестером прозвоните ноги — какое между ними сопротивление? Скорее всего, они все соединяются в кристалле.
Chip115 писал(а):не могу укротить таймер 3.

Что это за процедура такая — MC3PHAC_IndefSend(); ???
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

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

Сообщение Chip115 »

Gudd-Head писал(а):
Chip115 писал(а):не могу укротить таймер 3.

Что это за процедура такая — MC3PHAC_IndefSend(); ???

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

void MC3PHAC_IndefSend(void)
{
   MC3PHAC_Send(cmd_RESET,sizeof(cmd_RESET));
   MC3PHAC_Send(cmd_PPWM,sizeof(cmd_PPWM));
   MC3PHAC_Send(cmd_DEADT,sizeof(cmd_DEADT));
   MC3PHAC_Send(cmd_ACB,sizeof(cmd_ACB));
   MC3PHAC_Send(cmd_ACC,sizeof(cmd_ACC));
   MC3PHAC_Send(cmd_F,sizeof(cmd_F));
   MC3PHAC_Send(cmd_FPWM,sizeof(cmd_FPWM));
   MC3PHAC_Send(cmd_VBOOST,sizeof(cmd_VBOOST));
   MC3PHAC_Send(cmd_MODIN,sizeof(cmd_MODIN));
   MC3PHAC_Send(cmd_FTOUT,sizeof(cmd_FTOUT));
   MC3PHAC_Send(cmd_VBDEC,sizeof(cmd_VBDEC));
   MC3PHAC_Send(cmd_VBRAKE,sizeof(cmd_VBRAKE));
   MC3PHAC_Send(cmd_VBROWN,sizeof(cmd_VBROWN));
   MC3PHAC_Send(cmd_VBOVR,sizeof(cmd_VBOVR));
}

по очереди посылаю данные в контроллер MC3PHAC по уапп, тем самым провожу настройку разного рода.
Вот эти данные посылаюся

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

xdata unsigned char const cmd_RESET[5] =   {0xE3, 0x10, 0x00, 0x30, 0x00};   
xdata unsigned char const cmd_PPWM[5] =    {0xE3, 0x10, 0x00, 0x50, 0x00};
xdata unsigned char const cmd_DEADT[5] =   {0xE3, 0x00, 0x36, 0x30, 0x00}; // 6 ìêñ  ìåðòâîå âðåìÿ  48*125ns=6 us
xdata unsigned char const cmd_ACB[5] =     {0xE3, 0x10, 0x00, 0x61, 0x00}; //  50 Ãö   áàçîâàÿ ÷àñòîòà
xdata unsigned char const cmd_ACC[5] =     {0xE4, 0x00, 0x60, 0xFF, 0xFF}; //    óñêîðåíèå
xdata unsigned char const cmd_F[5] =       {0xE4, 0x00, 0x62, 0x3C, 0x99}; //  çàäàíèå ñèíóñîèäàëüíîé ÷àñòîòû
xdata unsigned char const cmd_FPWM[5] =    {0xE3, 0x10, 0x00, 0x42, 0x00}; //10.6 êÃö  ÷àñòîòà ØÈÌ
xdata unsigned char const cmd_VBOOST[5] =  {0xE3, 0x00, 0x6C, 0x00, 0x00}; //   0 %    àìïëèòóäà ñèíóñà ïðè íóëåâîé ñèíóñîèäàëüíîé ÷àñòîòå
xdata unsigned char const cmd_MODIN[5] =   {0xE3, 0x00, 0x75, 0xFE, 0x00}; //  99 %    èíäåêñ ìîäóëÿöèè ñèíóñà (àìïëèòóäà)
xdata unsigned char const cmd_FTOUT[5] =   {0xE4, 0x00, 0x6A, 0x00, 0x08}; // òàéìàóò ïîñëå àâàðèè
xdata unsigned char const cmd_VBDEC[5] =   {0xE4, 0x00, 0xC9, 0x03, 0x55}; // 119 %    çíà÷åíèå Vbus ïðè êîòîðîì íà÷èíàåòñÿ ñíèæåíèå ñêîðîñòè òîðìîæåíèÿ
xdata unsigned char const cmd_VBRAKE[5] =  {0xE4, 0x00, 0x64, 0x03, 0x55}; // 119 %    çíà÷åíèå Vbus ïðè êîòîðîì ïîÿâëÿåòñÿ ñèãíàë âêë. òîðìîçíîãî  VT
xdata unsigned char const cmd_VBROWN[5] =  {0xE4, 0x00, 0x66, 0x80, 0x00}; //  50 %    íèæíåå çíà÷åíèå Vbus ïðè îòêë. ØÈÌ è ïîÿâëÿåòñÿ ñèãíàë àâàðèè   
xdata unsigned char const cmd_VBOVR[5] =   {0xE4, 0x00, 0x68, 0x03, 0x71}; // 123 %    âåðõíåå çíà÷åíèå Vbus ïðè îòêë. ØÈÌ è ïîÿâëÿåòñÿ ñèãíàë àâàðèè
xdata unsigned char const cmd_FORW[5] =    {0xE3, 0x10, 0x00, 0x10, 0x00}; // "âïåðåä"
xdata unsigned char const cmd_REW[5] =     {0xE3, 0x10, 0x00, 0x11, 0x00}; // "íàçàä"
xdata unsigned char const cmd_STOP[5] =    {0xE3, 0x10, 0x00, 0x20, 0x00}; // "ñòîï"
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Chip115 писал(а):Надо что бы таймер 3 генерировал прерывание каждую 1мс. переходил в подпрограмму обработки прерывания и там посылал данные через UART,который кстати тож сидит на свое прерывании. Я установил высоки приоритет прерывания по УАПП.
Сейчас имею то, что прерывание от таймера срабатывает и обрабатывается. Данные уходят , но дальше прога не работает. такое чувство что она застревает после того как отправит данные. Сброс влага есть. не пойму в чем дело?

Возможен ли вариант, что MC3PHAC посылает что-то в ответ, и генерится прерывание по приёму УАППа (у них ведь с передатчиком один вектор прерывания)?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

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

Сообщение Chip115 »

кстати да.... на каждую посланную команду приходит ответ. голова не соображает уже не чего (( а как поступать в этом случае?
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Chip115 писал(а):кстати да.... на каждую посланную команду приходит ответ. голова не соображает уже не чего (( а как поступать в этом случае?

Либо сбрасывать флаг передатчика и приёмника при каждом вхождении в прерывание, либо сделать отправку по УАППу не через прерывание, а через ожидание флага готовности (прерывания).
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Wereww
Встал на лапы
Сообщения: 129
Зарегистрирован: Пн окт 04, 2010 17:58:31

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

Сообщение Wereww »

К@Т писал(а):
Wereww писал(а):Ребята подскажите схему управления нагрузкой 220V (планируется использовать симистор BTA 08-600B), более-менее безопасную и без оптопары :)


Какой вопрос-такой ответ!
[img...]http://www.bezkz.su/_pu/3/87393504.jpg[/img...]

Спасибо, но не совсем то :)

Chettuser писал(а):А чем оптосимистор не устраивает? Гальваническая развязка.

Устраивает, но если его использовать как можно добиться "плавного" управления, переходя при этом в нужные фазы (или он сам это делает - и в каких фазах работает - например moc3023) ? И сможет ли подойти аппаратный ШИМ AVR ? Или опять городить..?

Av4arik писал(а):Если не хотите оптопары, возьмите реле, транзисторные ключи и питайте другим источником питания, от схемы

Отчасти с вами соглашусь - так как помимо управления нагрузкой от сети - требуется управлять и RGB темнодиодами, +транс на 12 вольт + 7805, но всеже - так как сетевой нагрузкой будут лампочки накаливания - хотелось бы регулировать яркость их свечения :)

Как быть ?..
Chettuser

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

Сообщение Chettuser »

Народ, как в HT-PICC можно переменную отправить в LCD 1602?
(Код в предыдущем моём посте).
Неужели без sprintf не обойтись?
На itoa ругается... :(
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

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

Сообщение *Trigger* »

К@Т писал(а):
*Trigger* писал(а):Картинки побольше нет??? :kill: :kill: :kill:

Есть;)).Нажимаеш цитатату,копируеш адрес картинки и переходиш по нему.))!

Я в том смысле, что надо её обрезать, а потом только вставлять!!!
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Аватара пользователя
К@Т
Говорящий с текстолитом
Сообщения: 1573
Зарегистрирован: Сб окт 09, 2010 12:33:48
Откуда: Незалежная

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

Сообщение К@Т »

*Trigger* писал(а):Я в том смысле, что надо её обрезать, а потом только вставлять!!!

Хорош умничать!!!Когда будеш модератором,тогда и будеш указывать что мне надо делать!!!Ты бы для начала хоть спросилбы-есть у меня в мобиле фотошоп или нет!(ключевое слово в МОБИЛЬНОМ ТЕЛЕФОНЕ)!!!
У кошки 4 ноги и хвост-плюс,минус,вход,выход,а хвост-земля.....Надо переходить с китайской бурды на канифоль.......[url=http://infobar.hsdn.org/][img]http://static.hsdn.org/infobar/350x60.gif[/img][/url]
Chettuser

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

Сообщение Chettuser »

КОТ с мобильником! :shock:
Аватара пользователя
Wereww
Встал на лапы
Сообщения: 129
Зарегистрирован: Пн окт 04, 2010 17:58:31

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

Сообщение Wereww »

Ужас какой...вобщем посмотрел интернет, как управлять переменным током через симистр...подскажите как лучше организовать обратную связь от понижающего трансформатора (12в) и что делать с полученной синусоидой...первый раз сталкиваюсь с таким...ну и как это должно выглядеть на С примерно...не хочется жечь силовой блок и убиваться от тока... )
Chettuser

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

Сообщение Chettuser »

Застрял с кодом:

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

#include <pic.h>
#include "lcd.h"
#include "htc.h"
#include "delay.h"
#include <stdlib.h>
#include <stdio.h>

__CONFIG (0x3F18);

void main(void)
{
   unsigned char A[16];
   int temp = 0x10;
   CMCON = 0x07;
   CM0 = 1;
   CM1 = 1;   
   CM2 = 1;
   TRISA = 0x00;
   TRISB = 0x00;
   PORTA = 0x00;
   PORTB = 0x00;
   temp = 123;
   
while (1)
   {
   lcd_init();
   lcd_goto(0);   // выбор первой строки дисплея
   sprintf(A,temp);
   lcd_puts(A);
   }
}
Как выполнить вывод значения хранящегося в temp на LCD? Выводится пустое место (курсор мигает в первой позиции).
Soir
Друг Кота
Сообщения: 3956
Зарегистрирован: Ср окт 14, 2009 10:37:49
Откуда: Украина

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

Сообщение Soir »

Wereww писал(а):Ужас какой...вобщем посмотрел интернет, как управлять переменным током через симистр...подскажите как лучше организовать обратную связь от понижающего трансформатора (12в) и что делать с полученной синусоидой...первый раз сталкиваюсь с таким...ну и как это должно выглядеть на С примерно...не хочется жечь силовой блок и убиваться от тока... )

А что собственно регулировать? Если освещение - это одно, температуру паяльника - другое, инкубатор - третье, электродвигатель - тоже смотря какой...
Самый распространный принцип регулирования: фазоимпульсный, в Интернете куча описаний. Например здесь.
В Интернете валом регуляторов, задайте в поиск "Микроконтроллерный регулятор мощности", или диммер...
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

Chettuser писал(а):Как выполнить вывод значения хранящегося в temp на LCD?
... почитайте про спецификаторы sprintf
Аватара пользователя
liv6125
Встал на лапы
Сообщения: 115
Зарегистрирован: Сб май 02, 2009 22:25:22
Откуда: Орловская область г. Ливны
Контактная информация:

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

Сообщение liv6125 »

подскажите что делать. выставил фьюзы так: CKSEL0,1,2,3 = 1, CKOPT = 0, SPIEN = 0, SUT1 = 0, SUT0 = 1
atmega 16 не выходит на связь с компом через параллельный программатор 5 проводков
можно ли как то вернуть связь?
в схеме стоит кварцевый резонатор 16 МГц
Chettuser

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

Сообщение Chettuser »

ChipKiller писал(а): ... почитайте про спецификаторы sprintf

Спасибо, а взамен sprintf ничего нельзя использовать? (кушает много памяти).
Аватара пользователя
К@Т
Говорящий с текстолитом
Сообщения: 1573
Зарегистрирован: Сб окт 09, 2010 12:33:48
Откуда: Незалежная

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

Сообщение К@Т »

liv6125 писал(а):подскажите что делать. выставил фьюзы так: CKSEL0,1,2,3 = 1, CKOPT = 0, SPIEN = 0, SUT1 = 0, SUT0 = 1
atmega 16 не выходит на связь с компом через параллельный программатор 5 проводков
можно ли как то вернуть связь?
в схеме стоит кварцевый резонатор 16 МГц

Вообще паралельный програматор и 5 проводков это разные вещи!Вот что вам нужноhttp://www.getchip.net/posts/059-ispravlyaem-avr-fyuzy-pri-pomoshhi-atmega-fusebit-doctor/
У кошки 4 ноги и хвост-плюс,минус,вход,выход,а хвост-земля.....Надо переходить с китайской бурды на канифоль.......[url=http://infobar.hsdn.org/][img]http://static.hsdn.org/infobar/350x60.gif[/img][/url]
Ответить

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