Страница 175 из 628
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб апр 09, 2011 22:48:13
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)?
Неужели без
не обойтись? Я как посмотрел сколько она памяти себе отхапала... пришёл в дикий "восторг"...
Другого способа превратить значение переменной в строку нет?
Спасибо.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 10, 2011 06:49:06
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 байт
}
вот наиболее критичные,на мой взгляд , куски кода.
Помогите, пожалуйста, разобраться... .
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 10, 2011 07:52:40
К@Т
Есть;)).Нажимаеш цитатату,копируеш адрес картинки и переходиш по нему.))!
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 10, 2011 08:15:19
Gudd-Head
aam писал(а):Обязательно ли соединять на плате все 3 ноги цифрового питания или достаточно подключить одну-две?
Вы тестером прозвоните ноги — какое между ними сопротивление? Скорее всего, они все соединяются в кристалле.
Chip115 писал(а):не могу укротить таймер 3.
Что это за процедура такая — MC3PHAC_IndefSend(); ???
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 10, 2011 08:21:41
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}; // "ñòîï"
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 10, 2011 08:35:26
Gudd-Head
Chip115 писал(а):Надо что бы таймер 3 генерировал прерывание каждую 1мс. переходил в подпрограмму обработки прерывания и там посылал данные через UART,который кстати тож сидит на свое прерывании. Я установил высоки приоритет прерывания по УАПП.
Сейчас имею то, что прерывание от таймера срабатывает и обрабатывается. Данные уходят , но дальше прога не работает. такое чувство что она застревает после того как отправит данные. Сброс влага есть. не пойму в чем дело?
Возможен ли вариант, что MC3PHAC посылает что-то в ответ, и генерится прерывание по приёму УАППа (у них ведь с передатчиком один вектор прерывания)?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 10, 2011 09:01:38
Chip115
кстати да.... на каждую посланную команду приходит ответ. голова не соображает уже не чего (( а как поступать в этом случае?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 10, 2011 09:11:36
Gudd-Head
Chip115 писал(а):кстати да.... на каждую посланную команду приходит ответ. голова не соображает уже не чего (( а как поступать в этом случае?
Либо сбрасывать флаг передатчика и приёмника при каждом вхождении в прерывание, либо сделать отправку по УАППу не через прерывание, а через ожидание флага готовности (прерывания).
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 10, 2011 09:20:44
Wereww
К@Т писал(а):Wereww писал(а):Ребята подскажите схему управления нагрузкой 220V (планируется использовать симистор BTA 08-600B), более-менее безопасную и без оптопары

Какой вопрос-такой ответ!
[img...]http://www.bezkz.su/_pu/3/87393504.jpg[/img...]
Спасибо, но не совсем то
Chettuser писал(а):А чем
оптосимистор не устраивает? Гальваническая развязка.
Устраивает, но если его использовать как можно добиться "плавного" управления, переходя при этом в нужные фазы (или он сам это делает - и в каких фазах работает - например moc3023) ? И сможет ли подойти аппаратный ШИМ AVR ? Или опять городить..?
Av4arik писал(а):Если не хотите оптопары, возьмите реле, транзисторные ключи и питайте другим источником питания, от схемы
Отчасти с вами соглашусь - так как помимо управления нагрузкой от сети - требуется управлять и RGB темнодиодами, +транс на 12 вольт + 7805, но всеже - так как сетевой нагрузкой будут лампочки накаливания - хотелось бы регулировать яркость их свечения
Как быть ?..
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 10, 2011 09:54:15
Chettuser
Народ, как в HT-PICC можно переменную отправить в LCD 1602?
(Код в предыдущем моём посте).
Неужели без
sprintf не обойтись?
На
itoa ругается...

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 10, 2011 10:03:08
*Trigger*
К@Т писал(а):
Есть;)).Нажимаеш цитатату,копируеш адрес картинки и переходиш по нему.))!
Я в том смысле, что надо её обрезать, а потом только вставлять!!!
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 10, 2011 10:19:28
К@Т
*Trigger* писал(а):Я в том смысле, что надо её обрезать, а потом только вставлять!!!
Хорош умничать!!!Когда будеш модератором,тогда и будеш указывать что мне надо делать!!!Ты бы для начала хоть спросилбы-есть у меня в мобиле фотошоп или нет!(ключевое слово в МОБИЛЬНОМ ТЕЛЕФОНЕ)!!!
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 10, 2011 12:17:44
Chettuser
КОТ с мобильником!
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 10, 2011 14:15:53
Wereww
Ужас какой...вобщем посмотрел интернет, как управлять переменным током через симистр...подскажите как лучше организовать обратную связь от понижающего трансформатора (12в) и что делать с полученной синусоидой...первый раз сталкиваюсь с таким...ну и как это должно выглядеть на С примерно...не хочется жечь силовой блок и убиваться от тока... )
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 10, 2011 15:35:23
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? Выводится пустое место (курсор мигает в первой позиции).
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 10, 2011 16:00:08
Soir
Wereww писал(а):Ужас какой...вобщем посмотрел интернет, как управлять переменным током через симистр...подскажите как лучше организовать обратную связь от понижающего трансформатора (12в) и что делать с полученной синусоидой...первый раз сталкиваюсь с таким...ну и как это должно выглядеть на С примерно...не хочется жечь силовой блок и убиваться от тока... )
А что собственно регулировать? Если освещение - это одно, температуру паяльника - другое, инкубатор - третье, электродвигатель - тоже смотря какой...
Самый распространный принцип регулирования: фазоимпульсный, в Интернете куча описаний. Например
здесь.
В Интернете валом регуляторов, задайте в поиск "Микроконтроллерный регулятор мощности", или диммер...
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 10, 2011 16:33:22
ChipKiller
Chettuser писал(а):Как выполнить вывод значения хранящегося в temp на LCD?
... почитайте про спецификаторы
sprintf
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 10, 2011 16:40:57
liv6125
подскажите что делать. выставил фьюзы так: CKSEL0,1,2,3 = 1, CKOPT = 0, SPIEN = 0, SUT1 = 0, SUT0 = 1
atmega 16 не выходит на связь с компом через параллельный программатор 5 проводков
можно ли как то вернуть связь?
в схеме стоит кварцевый резонатор 16 МГц
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 10, 2011 16:52:48
Chettuser
ChipKiller писал(а): ... почитайте про спецификаторы sprintf
Спасибо, а взамен
sprintf ничего нельзя использовать? (кушает много памяти).
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс апр 10, 2011 16:56:38
К@Т
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-isprav ... it-doctor/