Например TDA7294

Форум РадиоКот • Просмотр темы - Програмирование pic на СИ.
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн авг 11, 2025 01:03:24

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 1364 ]     ... , , , 36, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 11, 2015 04:28:32 
Потрогал лапой паяльник
Аватар пользователя

Карма: 1
Рейтинг сообщений: 14
Зарегистрирован: Сб сен 19, 2009 07:02:19
Сообщений: 378
Рейтинг сообщения: 0
Приведите весь код и текст сообщений компилятора.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 11, 2015 09:46:59 
Сверлит текстолит когтями
Аватар пользователя

Зарегистрирован: Сб июл 11, 2009 18:42:21
Сообщений: 1135
Откуда: Украина, г.Николаев
Рейтинг сообщения: 0
Усё работает корретно, однако предупреждения засоряют окно отладчика, что напрягает. PIC24, XC16.

Код:
char str[]="Temperature=";
char ii;
char data_length;
data_length=strlen(str);
for (ii=0;ii<data_length;ii++)
{
   WriteData(str[ii]);//warning: array subscript has type 'char' Пробовал int - тоже самое
}

itoa(&str,T,10);warning: passing argument 1 of 'itoa' from incompatible pointer type.

_________________
Успех - императив!


Последний раз редактировалось Roman Venom Пт дек 11, 2015 09:49:51, всего редактировалось 4 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 11, 2015 09:47:13 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 1
vinni_puh писал(а):
void function(char *DI_GIT){...}
char digi[4]="10";
function(digi); - не компилится - не нравится указатель (char *DI_GIT).

функция принимает char* а вы ей передаёте char[]. Явно приведите к (char*) - скушает.
PS: Кстати, общепринято, что капслоком объявляются макроопределения препроцессора - и в данном конкретном случае DI_GIT режет глаз и не даёт расслабиться подсознанию. ;)
PS2: Да и функцию объявить лучше как void function(const char *DI_GIT){...}

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 11, 2015 09:56:19 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 1
Roman Venom писал(а):

Код:
char str[]="Temperature=";
char ii;
[...]
   WriteData(str[ii]);// warning: array subscript has type 'char'
[...]
itoa(&str,T,10); //warning: passing argument 1 of 'itoa' from incompatible pointer type

По странной прихоти хочет чтобы индекс массива был беззнаковым, хотя классическое знаковое int в этом качестве возражений не вызывает. [риторически в пространство] Где логика, где разум ?
В itoa принимается ЕМНИП char* а вы передаёте туда указатель на char[] - т.е. фактически char**. Амперсанд не нужен ©. Когда начнётся ругань про несоответствие типа - явно приведите к char* - см. моё сообщение в этой теме 5 минутами ранее. ;)

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 11, 2015 22:14:16 
Встал на лапы

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Ср мар 25, 2015 09:12:45
Сообщений: 99
Рейтинг сообщения: 0
>>void function(const char *DI_GIT){...}

Уже победил! Именно как раз это и требовалось.)

И strlen() победил... А вот itoa() пока мозг парит(
Тут ведь все на уровень ниже, чем под ОСЬ писать... Внимательность х10 требуется!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 11, 2015 22:30:20 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4568
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
vinni_puh писал(а):
А вот itoa() пока мозг парит
Код:
itoa(str,T,10);

itoa принимает указатель на char, т.е. char*. Имя массива - это и есть указатель на char, указывающий на первый элемент массива.
А Вы пытаетесь передать адрес указателя. Вот он Вас и материт :)
Если амперсанд Вам покоя не даёт, и Вы хотите с ним :
Код:
itoa(&str[0],T,10);   // Укладываем строку, начиная с 1-ого элемента массива
itoa(&str[5],T,10);   // Укладываем строку, начиная с 6-ого элемента массива


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пт дек 11, 2015 22:55:31 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4568
Откуда: Планета Земля
Рейтинг сообщения: 1
Медали: 1
Получил миской по аватаре (1)
Roman Venom писал(а):
Код:
   WriteData(str[ii]);//warning: array subscript has type 'char' Пробовал int - тоже самое
Где нужен амперсанд - не пишите, где не нужен - пишите. Странно как то... :)
Судя по вызову, WriteData у Вас обрабатывает 1 символ. Зачем Вы тогда в ней принимаете указатель (char*) ? Так бы и принимали просто символ (char) и обрабатывали его.
И ещё, вот это :
Код:
data_length=strlen(str);
for (ii=0;ii<data_length;ii++)
{
   WriteData(str[ii]);//warning: array subscript has type 'char' Пробовал int - тоже самое
}
можно заменить на :
Код:
char* p;
......
......
p=str;
while(*p)  WriteData(*p++);
тем самым избавляясь от strlen. Зачем лишний раз перебирать всю строку (strlen это делает), если перебор итак будет выполняться ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Сб дек 12, 2015 08:31:46 
Встал на лапы

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Ср мар 25, 2015 09:12:45
Сообщений: 99
Рейтинг сообщения: 0
Спасибо котейники!)

По itoa получилось, и так и так. Как в анекдоте про врачей - вторая заповедь врача - внимательность!)

Извиняюсь)
Только тему начал постигать, вот вопрос:
Написал:

while(num<(int)(delay/2))

Тут я понял, что во-первых если в условии получается float работать не будет, надо к целому приводить, и все равно - такое приведение в условии не проканало.
Сделал:
int del3=delay/3;
while(num<del3)

Это работает. Вопрос - вначале хотел на переменных сэкономить, но насколько я понимаю - если операция все равно выполняется, хоть явно хоть неявно - экономии все равно не будет? 2-й работающий вариант вероятно, не особенно отягощен данными в сравнении с 1-м?

Явно не проверял как ведет себя GCC на таких делениях, но пока такую особенность встретил только сейчас.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Сб дек 12, 2015 11:48:30 
Вымогатель припоя

Карма: -3
Рейтинг сообщений: 77
Зарегистрирован: Сб мар 19, 2011 15:19:47
Сообщений: 546
Откуда: Владивосток
Рейтинг сообщения: 0
Помогите специалисту, учившему программирование на фортране с перфокартами.......))))
Задача. Вывожу на порт одновременно некое состояние портов PORTB = 0b00001111,
Если меняю назначение портов, согласно лучшей разводке платы.или замена МК, к примеру, то необходимо выводить
другое значение, пусть PORTB = 0b0101010101.
Вопрос - если при чтении я могу через дефайн назначить IN RA5, к примеру, то как это сделать для выхода?
То есть назначаю out1 RB4, out5 RB6. И при этом единичное значение ставиться в нужный бит?
То есть в дефйне нужно назначить номер бита?


Вернуться наверх
 
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Сб дек 12, 2015 15:03:40 
Я уже давно с PIC переехал, так что не помню, но...
Вроде LATB - отвечает за выход, PORTB - за вход. TRISB - направление: вход/выход.
Поэтому наверное надо так:
Код:
#define out1 LATB4;
#define out2 LATB6;

(Синтаксис зависит от Вашего компилятора)
При этом настроить нужные пины PORTB на выход (приравнять их TRISB к "0")

Кстати, состояние TRIS запомнить легко мнемонически:
"1" - это Input
"0" - это Output


Вернуться наверх
   
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Сб дек 12, 2015 15:52:32 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1395
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7306
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Зависит от того, что вы хотите с этими битами делать. Если только по одному менять, то объявляйте LATBx, но если для заполнения маски, то просто число. Но в обоих случаях можно безболезненно переопределяться только в пределах одного порта. Или если подразумевается доступ только одного типа, то можно писать полную подстановку типа LATBbits.LATB6

DISCLAIMER: это точно относится к компилятору picc18, как порты определены в XC8 я пока не в курсе.
Вот пример, как у меня было сделано определение. используются все 3 варианта.

Код:
#define DISP_RS   0
#define RDISP_RS   LATE0
#define DISP_RW   1
#define RDISP_RW   LATE1
#define DISP_E      2
#define RDISP_E   LATE2
#define LED_RED   LATB5
#define INPUT      PORTBbits.RB0

LATBbits.LED_RED = 1;
....
   LATE = (1<<DISP_RS) | (0<<DISP_RW) | (0<<DISP_E) ;
   LATD = data;
   TRISD = 0x00;   // выводим данные на шину
   LATEbits.RDISP_E = 1;
   Delay10TCYx(2);
   LATEbits.RDISP_E = 0;
   Delay10TCYx(2);
   TRISD = 0xff;
....


Еще, регистр LATx отсутствует у старых PIC-ов. Тогда все операции ведутся с регистром PORTx и вместо LATBx, надо писать RBx.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Вс дек 13, 2015 07:09:36 
Вымогатель припоя

Карма: -3
Рейтинг сообщений: 77
Зарегистрирован: Сб мар 19, 2011 15:19:47
Сообщений: 546
Откуда: Владивосток
Рейтинг сообщения: 0
Огромное спасибо! Повернули мысли в нужном направлении.)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Вс дек 13, 2015 18:25:37 
Встал на лапы

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Ср мар 25, 2015 09:12:45
Сообщений: 99
Рейтинг сообщения: 0
Доброй ночи!

Буду ковырять 1-wire... Вопрос - можно ли использовать требуемый delay на базе простейшего delay-а сделанного из пустого декрементирующегося for-а? Посчитаю на реальном кристалле сколько витков такого for-a производится за секунду, и на базе этого тайм-слоты сформирую.


Вернуться наверх
 
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Вс дек 13, 2015 20:29:30 
А таймер не проще?
Для особо ленивых полосатых - где то программка пробегала PIC Timer Calculator.


Вернуться наверх
   
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пн дек 14, 2015 03:56:11 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23964
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
vinni_puh писал(а):
Доброй ночи!

Буду ковырять 1-wire... Вопрос - можно ли использовать требуемый delay на базе

Ковырять delay конечно можно, но тогда это будет ЕДИНСТВЕННОЙ функцией в main, которую МК будет способен выполнять во время передачи. Кроме того, прием придется организовывать уже с помощью таймера.
Может все таки логичней все делать на таймере?
Делать медленный интерфейс на задержках годится только для учебных задач для нестрогого препода...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пн дек 14, 2015 09:56:26 
Сверлит текстолит когтями
Аватар пользователя

Зарегистрирован: Сб июл 11, 2009 18:42:21
Сообщений: 1135
Откуда: Украина, г.Николаев
Рейтинг сообщения: 0
Аlex писал(а):
Roman Venom писал(а):
Код:
   WriteData(str[ii]);//warning: array subscript has type 'char' Пробовал int - тоже самое
Где нужен амперсанд - не пишите, где не нужен - пишите. Странно как то... :)
Судя по вызову, WriteData у Вас обрабатывает 1 символ. Зачем Вы тогда в ней принимаете указатель (char*) ? Так бы и принимали просто символ (char) и обрабатывали его.
И ещё, вот это :
Код:
data_length=strlen(str);
for (ii=0;ii<data_length;ii++)
{
   WriteData(str[ii]);//warning: array subscript has type 'char' Пробовал int - тоже самое
}
можно заменить на :
Код:
char* p;
......
......
p=str;
while(*p)  WriteData(*p++);
тем самым избавляясь от strlen. Зачем лишний раз перебирать всю строку (strlen это делает), если перебор итак будет выполняться ?


Да, и правда. Можно ведь просто перебирать адрес... Указатели - моё больное место. Нужно всё же выделить время и нормально с ними разобраться. :beer:

_________________
Успех - императив!


Вернуться наверх
 
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Пн дек 14, 2015 21:02:18 
Моё тоже! :beer:


Вернуться наверх
   
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Вт дек 15, 2015 14:32:39 
Встал на лапы

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Ср мар 25, 2015 09:12:45
Сообщений: 99
Рейтинг сообщения: 0
Доброо времени!

Экспериментирую с протеусом и кристаллом... Кристалл - 16F628A коего ящики валяются). В целом со скрипом работается, разобраться не могу со следующим. В протеусе 20000 оборотов цикла с 1 декрементом происходит за менее 1 сек, на кристалле - более 10 сек . Понять не могу - где я с тактированием напартачил? Управляю так:

#pragma target clock 4_000_000
#pragma config FOSC = INTOSCIO
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = OFF

Что надо подтягивать MCLRE уже понял, для проверки отключил это.

Понимаю, такими циклами время считать не надо, клятвенно заверяю что для 1wire буду юзать TMR))))) но все-же непонятно - что с тактированием?

И второе. Щас слепил код, для отправки по UART. Выходы RX & TX PICa совместимы напрямую с RX & TX микрухи FT232?
Я в отладочных целях данные в UART выбрасывать буду, а всякие там таблошки - LCDшки - потом...
Есть переходники на такой микрухе. Как водится, в proteus-е передача на TX работает... Осталось посмотреть в железе.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Вт дек 15, 2015 17:15:32 
Сверлит текстолит когтями
Аватар пользователя

Зарегистрирован: Сб июл 11, 2009 18:42:21
Сообщений: 1135
Откуда: Украина, г.Николаев
Рейтинг сообщения: 0
vinni_puh
в протезе частота задаётся ещё в свойствах, MCLR в протезе тоже надо подтягивать. Ну и маш цикл это Fosc/4 для PIC16.

_________________
Успех - императив!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Програмирование pic на СИ.
СообщениеДобавлено: Вт дек 15, 2015 17:36:35 
Встал на лапы

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Ср мар 25, 2015 09:12:45
Сообщений: 99
Рейтинг сообщения: 0
Эту хрень разобрал уже. Надо было в PCON задать 4-й бит 1 а не 0. Вот и шпарило 37кГц... Неутешительно для новичка - без подробного ковыряния в даташитах не обойтись... И вариантов глюков столько - угадать на пальцах никто не сможет.

Ладно, завелось вроде 4МГц, по крайней мере на линии TX от наушников потрескивание в точности такое, как осциллограмма в протеусе, и временные интервалы в серии.

Лиха беда начало... Отправляю в ТХ ANSI - байты А, В,С 6 штук за серию. Пока переходник 232 их не видит в гипертерминале... Дальше ковыряемся)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 1364 ]     ... , , , 36, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 78


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y